Questions tagged «sql-server-2008»

SQL Server 2008(主要版本10.00.xxxx)。请同时用sql-server标记。

3
SQL Server 2008 / R2恢复模型
我们某些服务器上的几乎所有数据库都不需要完全恢复模型(我们不执行事务日志备份),默认应始终是创建数据库并指定简单恢复模型。 出于某些实际原因,经常使用SSMS创建许多数据库。但是,可能会出错,并且操作员会忘记指定简单恢复模型。几天后,由于三个或四个从未被截断的60GB日志文件而导致磁盘空间不足时,这会导致“意外”。 通过在model数据库上配置恢复模型,可以使简单恢复模型成为新数据库的默认设置。但是,是否建议这样做,如果我这样做,将来它会以任何方式咬我吗?

2
非DBA询问:如何通过备份/还原将SQL Server实例无痛地复制/移动到另一台服务器?
我们只有一台新服务器,因此我需要从旧数据库框中复制现有SQL Server 2008实例。 我通常通过复制.mdf和日志文件并附加它们来执行此操作,但是由于它们使用24/7,因此无法脱机,因此我已经备份了数据库并将其还原到新数据库上机。但是,我最终遇到了一些问题,其中一个与孤立用户有关。因此,我要寻找的是一种故障转移过程,以最小的麻烦/痛苦/头痛使一切顺利进行。我是一个.Net开发人员,我掌握了大量SQL,但是SQL Server的内部工作方式在很大程度上对我还是个谜,我发现拖累MS文档很麻烦。 请帮忙。

1
如何在SQL Server 2008中查找损坏的页面
我知道我可以执行DBCC CHECKDB并获取数据库状态。 问题 如何查找数据库中是否存在一些损坏的数据页? 如果错误归因于页面损坏,我在哪里可以找到哪些页面损坏了? 如何找到每个损坏页面的页码。 谁能告诉我在哪里可以找到这些页面ID?

2
为什么此查询会导致死锁?
为什么此查询会导致死锁? UPDATE TOP(1) system_Queue SET [StatusID] = 2, @ID = InternalID WHERE InternalID IN ( SELECT TOP 1 InternalID FROM system_Queue WHERE IsOutGoing = @IsOutGoing AND StatusID = 1 ORDER BY MessageID ASC, InternalID ASC) 添加了死锁图: <keylock hobtid="72057594236436480" dbid="9" objectname="Z.dbo.system_Queue" indexname="PK_system_Queue" id="lock5b25cc80" mode="X" associatedObjectId="72057594236436480"> <owner-list> <owner id="processc6fe40" mode="X"/> </owner-list> <waiter-list> …

1
SQL Server 2008 R2脏读-如何非原子性?
我想知道在未提交未提交的隔离级别下,“脏”读取会“多么脏” 。我知道已经更新但尚未提交的行是可见的,但是: 行是否可以显示为部分更新-即某些列已更新而另一些未更新? 单个列是否可以显示为部分更新。例如,如果您有一个varchar(4000)列正在完全更新并且假设它实际上包含4000个字符。您能读说以前状态的2k字符和新状态的2k字符吗?长度大于8k的varchar(max)呢? 更新:经过一番辩论,最小的共识是,如果列大小> 8KB,则即使在列本身内也可能进行脏读。

5
在SQL Server中找出多少记录没有正确电话号码的最佳方法是什么?
我有一个领域,人们在历史上可以用来自由提供价值。我需要确定没有适当值的记录,以便清理它们。 我一直在SSIS中四处寻找。我的倾向是在某些C#代码中使用带有正则表达式的脚本组件,然后进行重定向。仍然,我想知道SSIS中是否有一种方法可以不使用C#来执行此操作。 我没有很多运气找到一种方法来找出多少记录没有适当的电话号码。

5
SQL Server命令行用法?可能吗?
我一直在尝试使用SQL Server Management Studio 2008内置的“解决方案资源管理器”来管理一个项目,经过2周的苦苦挣扎,我决定我真的不在乎它。它的“便利”功能实际上是一个障碍。 不幸的是,我工作的地方是一家MS商店,而且完全束手无策。我想回到命令行(我渴望Vim!)。我已经安装了一个带有TortiseSVN前端的本地Subversion存储库,以替换上面提到的“ Solution Explorer”并使其运行良好。我还安装了Vim,并且仍在进行自定义时,让它嗡嗡作响。 但是,我尚未找到解决方案的一件事是如何通过命令行对SQL Server运行命令。我习惯了MySQL / Postgres命令行提示符,因为那是我过去使用过的,并且在我上课时一直在使用。但是,我似乎找不到在Windows中通过命令行执行脚本的方法。我目前在Vim中编辑它们,在SSMS中刷新页面,然后执行。除非需要,否则我什至不愿触摸SMSS。 我看到过一些建议使用sqlsharp的帖子,但是当我转到该页面时,我感觉不完全是我想要的。 - 编辑 我真的希望可以有2个复选标记。P. Campbell提供了正确的技术答案,并且我已经尝试了几次(尝试sqlcmd时我总是遇到错误……正在研究命名管道的运行方式……即使我已经设置了它)并启用它,似乎无效。) 尝试过但没有成功之后,我尝试了将其复制并粘贴到Management Studio方法中的方法,但这太荒谬了。因此,我认为HardCode也是正确的。

2
对于SQL 2008 Web Edition,“太大”是多少?
对于我们即将托管的应用程序,我需要在SQL Server 2008 Web版本和SQL Server 2008 Enterprise版本之间进行选择。没有任何“必备”功能:该应用程序当前在SQL Express上运行,但将超过SQL Express施加的10GB最大大小。 我正在查看此比较表,以及本页“可伸缩性和性能”中最重要的表格。随着表越来越大,诸如“表和索引分区”之类的功能对于保证性能速度至关重要。但是,这将需要多少表大小? 我应该使用什么策略来确定数据库的大小和使用是否需要Enterprise Edition可伸缩性和性能功能?

1
有没有可靠的方法来确定何时应运行DBCC CLEANTABLE来回收空间?
最近,我不再只是在文件利用率接近80%时才增长文件,而是通过碎片整理,添加和删除聚簇索引,实现行或页面压缩等常用技巧更主动地回收空间。 但是,在某些情况下,我可以通过执行DBCC CLEANTABLE回收更多的空间。在我的环境中有成百上千个数据库,因此不可能知道用户在每个数据库中做什么,并且完全可以接受涉及删除固定长度列的更改。通常,通过查看我编写的某些对象空间利用脚本中的行数与页数,可以发现这些机会。我想通过尝试自动检测这种情况来使这一步骤更进一步。 我想知道的是,是否有人在积极监视这些机会,如果是,您在寻找什么? 我的想法是写一些东西来收集行的最大和最小大小,表中的行数,分配的页数和使用的页数,然后做一些基本的数学运算来记录结果远远超出了“预期”范围。


1
如何允许执行存储过程但不能执行写操作?
我想在我的SQL Server 2012实例上设置一个“读取”用户。我想让他有权执行任何存储过程,函数或直接SQL语句,该语句从所有表和视图中检索数据,但不进行更新或插入(即,读取任何内容而不写入任何内容)。 我是否可以在不按名称专门授予每个函数或存储过程权限的情况下进行设置,而是授予他对任何函数或存储过程的执行权限,而只是取消修改表的权限? 如果我改为运行SQL Server 2008,会发生什么变化吗? 澄清和补充: 如果存储过程更改了数据,则用户应收到错误消息(拒绝修改或完全拒绝访问存储过程)。 如果潜在的解决方案涉及拒绝权限,我是否可以不授予某些权限而不是拒绝? 是否可以在一条语句中将拒绝应用于数据库中的所有表,视图等(现在和将来存在)?

3
新服务器上的性能更差
我们一直在使用专用服务器(单四核,6 GB RAM),并且正在迁移到新的专用服务器(2x六核,32 GB RAM)。两者都是Windows Server 2008,SQL Server2008。新服务器的性能比旧的慢服务器稍差。 在测试中,我们的ASP.NET应用程序的运行速度降低了10%-20%。使用STATISTICS IO和STATISTICS TIME运行单个昂贵的查询将显示在新服务器上的运行时间增加了10-20%。SQL查询配置文件在昂贵的查询中显示较高的CPU使用率。 新服务器上的任务管理器显示sqlserver.exe正在消耗22 GB的RAM,但CPU值始终保持很低。 我已经更新了所有统计信息,重建或重新组织了索引等。鉴于我已完成的测试量,执行计划此时应存储在新服务器上。如果有任何缺失的索引(我认为没有),它们会同等地影响新旧服务器。新的具有与旧的相同数据的还原备份。 我曾希望新服务器上的性能会更好,但是负载更值得关注。如果旧服务器即使在负载下也表现更好,那么当新的,性能稍差的服务器必须承担该负载时会发生什么? 我还能在这里错过什么? 编辑:MAXDOP设置为6。 旧服务器在相同的物理驱动器(RAID 10)上具有操作系统,数据库和tempdb。总共4个15k 3 Gb / s 3.5英寸SAS。新服务器具有三个驱动器集:RAID 1上的OS,RAID 10上的数据库,RAID 5上的tempdb。总共9个15K 6 Gb / s 2.5英寸SAS。 旧服务器具有1 x Intel Xeon E5620 2.40 GHz四核8线程(w H / T)。新服务器具有2个Intel Xeon E5-2640 2.5 GHz六核12线程(w H / T)。 编辑2:这是最终分析: …

5
更改架构后如何检测损坏的存储过程?
我已经在数据库中修改了一个中央表,并且sp_depends确实返回了数百个结果,而且我担心其中的一些存储过程在更改后可能无法再编译。 检查一个存储过程很容易(我只是重新运行alter脚本,然后查看操作是否成功),但是在100多个过程中执行此操作比较麻烦。 我知道我可以使用像这样的脚本来重新编译数据库中的所有对象,但是实际操作将在下一次执行存储过程时发生,而不是立即执行,因此对于我来说似乎不合适。 我还以为我可以完全删除所有存储过程,并使用源代码控制系统重新同步数据库,但是该选项虽然可行,但却不是一个很好的选择。有更好的方法吗? 我正在使用SQLServer 2008 R2,我的数据库脚本存储在VS 2008数据库项目中。 需要澄清的是,我并不是在主张应该完全依靠这种方法来测试代码。就像在C#中一样,您在编写代码时会立即检测其他依赖文件中的语法错误(然后使用其他策略进行测试,例如单元测试,通常速度要慢几个数量级),我认为检测SQL依赖关系很有意义错误只需几秒钟即可完成,而不必运行通常需要几个小时才能完成的完整功能测试。

3
将日期存储为整数(数字)有什么好处
问题1 我正在使用将日期存储为整数(实际数字(8,0))的系统,并且我注意到其他系统也在此线程中将日期存储为int,例如cisco。例 20120101 -- 01 Jan 2012 保留数字日期系统而不使用SQL Datetime有什么好处? 问题2 现在,我试图遍历数字日期以在两个日期之间找到客户。如果start和enddate包含两个月,我将获得数千条记录,而不仅仅是60条。示例: create table #temp1(day int,capacity int) /* just a temp table */ declare @start int declare @end int set @start=20111201 set @end = 20120131 while (@start <= @end) Begin insert into #temp1 /* I am storing things in #temp table …


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.