Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。

3
限制用户仅复制备份
我希望在我的生产环境中部署日志传送。这意味着我将不得不管理备份链,而备份链可能会因人们进行备份以刷新开发环境而中断。如果发生故障,并且想使用日志备份还原到某个时间点,则还需要开发人员进行备份。 如果开发人员仅使用“仅复制”备份,则不会发生这种情况。所以我的问题是:是否有一种方法可以限制用户只能执行“仅复制”备份?

5
检测SQL Server表中的更改
在我的应用程序中,有了在SQL Server 2012上运行的数据库,我得到了一个作业(计划任务),该作业会定期执行昂贵的查询并将结果写入表中,以供应用程序以后查询。 理想情况下,仅当自上次执行查询以来发生某些更改时,我才想运行该昂贵的查询。由于源表非常大,因此我不能只选择所有候选列之类的校验和。 我有以下想法: 每当我更改源表中的内容时,都应将最后更改的时间戳,“必须查询”标志或类似的内容显式地写入跟踪表。 使用触发器执行相同的操作。 但是,我真的很想知道是否存在一种轻量级的方法来检测表上的更改,而无需我明确跟踪写入。例如,我可以获取表的“当前” ROWVERSION值或诸如此类的东西吗?

3
高CXPACKET和LATCH_EX等待
我正在使用的数据处理系统存在一些性能问题。我从一个小时的周期中收集了等待统计信息,其中显示了大量CXPACKET和LATCH_EX等待事件。 该系统由3个处理SQL Server组成,这些SQL Server进行了大量的数字运算和计算,然后将数据馈送到中央群集服务器中。处理服务器可以一次最多运行6个作业。这些等待统计数据是针对我认为正在引起瓶颈的中央集群的。中央群集服务器具有16个核心和64GB RAM。MAXDOP设置为0。 我猜CXPACKET来自正在运行的多个并行查询,但是我不确定LATCH_EX等待事件指示什么。从我读到的内容来看,这可能是非缓冲等待? 谁能说出这种等待统计的原因是什么,我应该采取什么行动来调查这个性能问题的根本原因? 顶部查询结果是等待的总计统计信息,底部查询结果是1小时内的统计信息

3
SQL Server自动修剪varchar值,相等比较但不喜欢比较
今天,我在SQL Server上遇到了一些有趣的行为(在2005年和2012年观察到),希望有人能解释一下。 使用=NVARCHAR字段进行比较的查询会忽略字符串中的尾随空格(或在比较之前自动修剪值),但是使用like运算符的同一查询不会忽略该空格。2012年使用的归类为Latin1_General_CI_AS。 考虑以下SQL Fiddle:http://sqlfiddle.com/#!6/72262/4 请注意,like运算符不会返回结尾空格字符串的结果,但=运算符会返回结果。为什么是这样? 优点:我无法在VARCHAR字段上复制它,我会认为在两种数据类型中都将以相同的方式处理空间-这是真的吗?

1
sys.partition.rows列的准确性如何?
系统视图sys.partitions具有“行”列,该列是给定分区中的总行数。对于未分区的表(或者只有一个分区,这取决于您的外观),此列给出了表中的行数。 我很好奇此列的准确性,以及是否可以使用它代替SELECT COUNT(1) FROM TableName。我做过一些实验,创建一个表并添加几千行,删除几百行,再添加几千个,等等,而且这种情况一直没有解决。但是,我有一张表,约有7亿行和几个索引。sys.partitions聚簇索引的行再次停滞不前,但是其他索引显示出一些细微的变化(+ -20k)。 有谁知道该行的计算方式以及它的准确性是否与所显示的相同?

1
将SQL Server 2012 Standard与Bitlocker一起使用
我们正在尝试使用Bitlocker保护SQL Server 2012数据库。使bitlocker正常工作没有任何问题...我们遇到的问题是,一旦驱动器被锁定,SQL Server就无法再读取数据。 显然,我们很想使用TDE,但是由于它仅限于企业版,所以这是不行的。我们在服务器上激活了TPM。这是在Windows域中,我们使用Windows身份验证...,但是驱动器加密后,我们将无法访问任何内容。 我在这里想念什么?

3
我可以创建用户定义的表类型并在同一事务中使用它吗?
当我执行以下命令时(在Management Studio中,GO会将命令分成批处理) use tempdb begin tran go CREATE TYPE dbo.IntIntSet AS TABLE( Value0 Int NOT NULL, Value1 Int NOT NULL ) go declare @myPK dbo.IntIntSet; go rollback 我收到死锁错误消息。我的过程已经陷入僵局。我已经在2008、2008R2和2012中看到了这种行为。 有没有办法在创建的同一笔交易中使用我新创建的类型?

2
sp_executesql何时刷新查询计划?
您必须原谅我的天真,因为我不是DBA,但我的理解是,随着时间的推移,必须重新编译数据库更改和存储过程的统计信息,以使查询计划与最新的统计信息保持最新。 假设我的数据库中有一个存储过程,可以按一定的时间间隔对最新的统计信息进行重新编译,那么将存储过程内联到代码中并将其包装在sp_executesql语句中的含义是什么?在重新编译过程的过程中,是否会丢失对查询计划的刷新? 如果在进行此更改之前我还有其他需要考虑的事项(权限除外),那么感谢您的见解。 我在MSDN上阅读过: SQL Server查询优化器将新的Transact-SQL字符串与现有执行计划进行匹配的能力受到字符串文本中参数值不断变化的影响,特别是在复杂的Transact-SQL语句中。 因此,假设我尝试进行内联和包装的存储过程sp_executesql确实包含一些参数,这是否表示尽管我的执行计划已被缓存,但使SQL Server很难找到并重用它?

4
由于磁盘空间不足,无法为数据库分配新页面
使用SQL Server导入和导出向导,出现以下错误: 错误0xc0202009:数据流任务1:SSIS错误代码DTS_E_OLEDBERROR。 发生OLE DB错误。错误代码:0x80004005。 由于文件组“ PRIMARY”中的磁盘空间不足,无法为数据库“数据库”分配新页面。通过在文件组中放置对象,将其他文件添加到文件组或为文件组中的现有文件设置自动增长来创建必要的空间。 我正在尝试上传一系列2GB的文件,并且在加载第4个文件时,即使我转到“数据库属性”>“文件”,并将“文件组”的自动增长更改为2500 MB,并且最大容量不受限制,我仍然收到上述错误消息。 最好的解决方法是什么?这些数据最终将占用大约60-80GB。
13 sql-server 

4
通过网络批量插入
有人可以帮我这些吗? BULK INSERT DATABESE01.dbo.TABLE01 FROM '\\COMPUTER01\FOLDER01\TextFile.txt' WITH ( FIELDTERMINATOR = ' ', rowterminator = '\n', tablock ) 错误显示,无法打开: 无法批量插入,因为无法打开文件“ \ SERVERNAME \ FOLDERNAME \ textFile.txt”。操作系统错误代码5(访问被拒绝。) 该路径在网络上的另一台计算机上。

1
在SQLCMD模式下设置变量
使用SQL Server 2008 R2企业版 考虑以下语句: :setvar source_server_name "SERVERNAME\INSTANCENAME" 是否可以在SQLCMD模式下使用TSQL获得该值 就像是: :setvar source_server_name = SELECT @@servername 谢谢 更新7/15/2013 下面提供的两个答案并没有给出理想的结果,因此我添加了一个更相关的示例。 :setvar source_server_name [myserver] 变量source_server_name设置为文本字符串[myserver_1] 我希望能够做到这一点: create table #tmp( id int identity(1,1), server sysname ) insert into #tmp values('myserver_1'),('myserver_2'); :setvar source_server_name = SELECT server FROM #tmp WHERE id = 1 select '$(source_server_name)' (No …

2
更多的CPU核心与更快的磁盘
我是一家小公司的一员,因此像往常一样担任许多不同的职务。最新的一项是为.NET Web应用程序购买专用的SQL Server盒。我们已经引用了双Xeon E5-2620(六核)2.00 GHz CPU配置(总共12核),32 GB的RAM。这使我们在磁盘阵列上的预算有限,它实际上由RAID 1配置中的两个2​​.5英寸SAS 300 GB驱动器(15k RPM)组成。 我知道磁盘设置对于SQL Server来说不是最佳选择,我真的很想推动RAID 10,因此我们可以将数据库,日志文件和tempdb放在自己的驱动器上。为了使它与我们的预算兼容,我应该考虑减少CPU内核数吗?还是我会为保留内核并使用更少的驱动器而付出更多的钱,也许在双RAID 1设置中可以使用4个? 以下是一些其他统计信息 SQL Server数据库倾向于大量读写操作,分别可能是80%和20%。当前的DB大​​小目前约为10 GB 26 GB,并且以每月250 MB的速度增长。 当前运行在与Web服务器共享的单个四核Xeon盒上的SQL Server 2008 R2 Standard(12 GB Ram,RAID 1中的2 x 10k 300GB SAS驱动器)上,希望迁移到SQL Server 2012 Standard。 数据库可以为大约100-150个并发用户提供一些后台调度任务。阅读这篇文章,我认为12个内核严重过头了! 我将整个应用程序部署到链接到SQL Azure DB的Azure云服务(2个小实例)。尽管在测试时性能是合理的(几乎为零负载),但由于我已经读了太多的不可预测性,所以我失去了在生产中使用的勇气。使用横向扩展方法可能会更好,但是只有10 GB的数据库,我现在可以避免扩展并节省一些现金。 我最初忽略了许可成本,却没有意识到SQL Server 2012许可是基于内核数量的。我有一个带有SQL Server 2012 Standard许可证的BizSpark MSDN订阅,因此我需要了解开箱即用的几个内核。

2
为什么非数字喜欢[0-9]?
我的服务器的默认排序规则是Latin1_General_CI_AS,由以下查询确定: SELECT SERVERPROPERTY('Collation') AS Collation; 我很惊讶地发现,通过这种归类,我可以使用谓词匹配字符串中的非数字字符LIKE '[0-9]'。 为什么在默认排序规则中会发生这种情况?我想不出一个有用的例子。我知道我可以使用二进制排序规则来解决此问题,但这似乎是实现默认排序规则的一种奇怪方法。 过滤数字会产生非数字字符 我可以通过创建包含所有可能的单字节字符值的列并使用数字匹配谓词过滤值来演示此行为。 以下语句创建一个临时表,该表具有256行,在当前代码页中的每个代码点对应一个: WITH P0(_) AS (SELECT 0 UNION ALL SELECT 0), P1(_) AS (SELECT 0 FROM P0 AS L CROSS JOIN P0 AS R), P2(_) AS (SELECT 0 FROM P1 AS L CROSS JOIN P1 AS R), P3(_) AS (SELECT 0 …

3
有没有一种方法可以确定SQL Server查询是在内存中运行还是在磁盘上运行?
今天,我在一个应用程序中遇到了一组存储过程,这些存储过程在长时间运行的过程中被重复调用。在每个过程中,我发现了多个不同的select语句,其中一些在循环内。毫不奇怪,当前使用的这些例程需要几分钟才能运行,而直觉会期望它们在几秒钟内完成。 似乎很明显,编写这些过程时并未考虑性能,因为有很多事例只是“一个不好的主意”。 导入数据时处理每一行需要花费300毫秒,因此处理相对较小的导入需要花费几分钟。 但是,过程中涉及的表大部分很小。我在想,如果所有这些表都完全驻留在内存中,那么重写任何这些表可能并没有获得太多。 我正在尝试确定....对于这个显然效率低下的代码,它有多少实际影响?值得修复吗? 所以问题是: -有没有办法确定哪些表完全固定在内存中? -是否有一种方法可以打开跟踪以监视嵌套的存储过程以查找特别昂贵的部分? 注意:这是在SQL Server 2008 R2上

4
我正在使用SQL Server代理计划甚至非数据库任务-这是一个坏主意吗?
由于我是DBA(在许多情况下,事实上是sysadmin),因此SQL Server几乎安装在我必须定期使用的每台服务器上。最近我意识到,在几乎每种情况下,我都一直在使用SQL Agent作为作业调度程序,而不是使用本机Windows Task Scheduler。 在我看来,与本地Windows Task Scheduler相比,SQL Agent具有许多优点: (从我的工作站)远程启动/停止/监视任务 共享时间表(而不是每个任务自己执行) 多个步骤和控制流程 不同类型的任务 失败/完成警报 可以配置为充当不同的用户 (适度)描述性错误消息,而不仅仅是错误代码 但是,我无法避免这种做法不好的感觉-尽管我不喜欢SQL代理的可用性,但应该仅将SQL Agent保留给与数据库相关的任务,并且应该让Windows任务计划程序中运行OS级别的任务。 以这种方式依赖SQL Agent可以吗?如果没有,我是否应该考虑使用第三方Windows任务计划程序来获得我正在寻找的某些功能?

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.