Questions tagged «sql-server»

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

2
在SQL Server 2014上崩溃CLR(Windows 2012R2)
我有这个小的CLR,它对列中的字符串执行RegEX功能。 在Windows Server 2012R2的SQL Server 2014(12.0.2000)上运行时,该进程崩溃 消息0,级别11,状态0,行0当前命令发生严重错误。结果(如有)应丢弃。 并给我一个堆栈转储 select count (*) from table where (CLRREGEX,'Regex') 但是当我这样做 select * from table where (CLRREGEX,'Regex') 它返回行。 可以在Windows 8.1上运行的同一SQL Server版本上完美运行。 有任何想法吗? -编辑尽可能简单 using System; using System.Collections.Generic; using System.Text; using System.Data.SqlTypes; //SqlString, SqlInt32, SqlBoolean using System.Text.RegularExpressions; //Match, Regex using Microsoft.SqlServer.Server; //SqlFunctionAttribute public partial class UserDefinedFunctions …

1
统计信息是最新的,但估计不正确
当我这样做时dbcc show_statistics ('Reports_Documents', PK_Reports_Documents),报告ID 18698会得到以下结果: 对于此查询: SELECT * FROM Reports_Documents WHERE ReportID = 18698 option (recompile) 我得到一个查询计划,该计划使聚簇索引PK_Reports_Documents按预期进行。 但是令我感到困惑的是估计行数的错误值: 根据此: 当示例查询WHERE子句值等于直方图RANGE_HI_KEY值时,SQL Server将使用直方图中的EQ_ROWS列来确定等于的行数。 这也是我期望的样子,但是在现实生活中情况并非如此。我还尝试RANGE_HI_KEY了由提供的直方图中存在的其他一些值,show_statistics并经历了相同的情况。就我而言,此问题似乎导致某些查询使用非常不理想的执行计划,导致执行时间为几分钟,而我可以通过查询提示使其在1秒内运行。 总而言之:有人可以解释一下为什么EQ_ROWS直方图中的行数不用于估计行数以及不正确的估计值来自何处吗? 更多(可能有帮助)的信息: 自动创建统计信息已打开,并且所有统计信息都是最新的。 正在查询的表大约有8000万行。 PK_Reports_Documents是由ReportID INT和组成的组合PKDocumentID CHAR(8) 该查询似乎总共加载了5个不同的统计对象,所有这些对象都包含ReportID+表中的其他一些列。它们都已全新更新。RANGE_HI_KEY下表中的是直方图中最高的上限列值。 +-------------------------------------------------------------------------+----------+--------------+--------------+---------------------+--------------+------------+----------+---------------------+----------------+ | name | stats_id | auto_created | user_created | Leading column Type | RANGE_HI_KEY | RANGE_ROWS | EQ_ROWS | …

1
SQL Server服务帐户Windows特权和权限
我的问题是,如果您为每个SQL Server进程创建一个新的域用户帐户,则应为每个帐户设置什么权限?还是SQL配置管理器实际上会解决这个问题,而我只是遇到了无法预料的问题? 我经常不得不设置Microsoft SQL Server,并且想知道是否有人可以提供有关配置服务应以其身份运行的帐户的建议。IMO已被Microsoft模糊地记录在案,尽管他们指出了正确的方向,但我从未找到任何具体的例子。 总结到目前为止我所看到的: 对于简单的部署\开发环境,可以使用安装程序使用的默认虚拟帐户: NT SERVICE\MSSQLSERVER 避免使用该SYSTEM帐户,这是不安全的。 对于生产环境和域环境,建议为每个服务使用托管服务帐户或创建域用户帐户(而非管理员)。据称,如果您在安装时使用域帐户,则安装程序将为您设置任何必需的权限。 如果将现有安装上的服务帐户从虚拟帐户更改为域帐户,建议使用SQL Server配置管理器设置新的服务帐户。据说这将为您设置任何必需的权限。 我只是尝试将现有安装中的服务帐户更改为域帐户,这会导致登录失败,直到我授予该帐户log on as service权限为止,这与SQL Server配置管理器将设置任何必需权限的部分相矛盾。(尽管我不确定GPO是否会干扰设置此本地安全策略) Microsoft确实在此页面上提供了SQL Server安装程序授予的权限列表。 但是我不清楚这是否是我应该为创建该用户以运行该服务的用户手动执行的操作,还是使用SQL配置管理器是否应自动设置这些权限。 SQL Server 2014域控制器位于Windows Server 2008 R2上。

2
9990的“缓冲区高速缓存命中率”是什么意思?
我从博客文章中得到了这个查询: SELECT object_name, counter_name, cntr_value FROM sys.dm_os_performance_counters WHERE [object_name] LIKE '%Buffer Manager%' AND [counter_name] = 'Buffer cache hit ratio' 该帖子说,这将使我对缓存的命中率有所提高。似乎表明它将是0-100的值(结果显示为87)。 但是当我运行它时,我得到的数字很高。这是一个例子: object_name counter_name cntr_value SQLServer:Buffer Manager Buffer cache hit ratio 9990 这是否意味着99.90%? 如果没有,那是什么意思?我如何获得真正的价值? 注意:我得到的值低至257和高至352363 如果相关,则还有其他一些服务器统计信息: 网页预期寿命:145 页面每秒读取数:1,380,009,009

1
CONVERT()导致此问题的原因是什么?
考虑以下两个语句: PRINT CONVERT(NUMERIC(38, 0), 0x0100000001, 0); PRINT CONVERT(NUMERIC(38, 0), 0x0100010001, 0); 两条语句都返回-1; 那不是很错误,因为第二个二进制值比第一个值高十进制65,536,不是吗? 当然这不能归因于沉默的截断吗? 如果我运行以下语句: PRINT CONVERT(NUMERIC(38, 0), 0x00000001, 0); PRINT CONVERT(NUMERIC(38, 0), 0x00010001, 0); 出现以下错误: Msg 8114, Level 16, State 5, Line 1 Error converting data type varbinary to numeric. 我如何诊断这里发生了什么? 我正在SQL Server 2012 v11.0.5058上运行它。在SQL Server 2008 R2 SP2,SQL …

3
如何可靠地确定给定的SQL Server实例是否具有“内存中的锁定页”权限?
可以将“锁定页面在内存中”权限授予SQL Server使用的服务帐户。这使SQL Server可以防止将内存分页到磁盘。 我注意到我们的几台SQL Server计算机没有配置本地策略以允许对SQL Server使用的服务帐户拥有此权利。由于我们有大量的服务器,因此最好使用“本地系统策略”管理控制台手动检查每台服务器。 是否可以使用T-SQL查询,扩展存储过程或其他一些方法来确定所讨论的服务器是否正确? 我不想使用EXEC xp_readerrorlog 0, 1, 'lock memory privilege was not granted';它,因为它依赖于检查当前的SQL Server错误日志。并且该错误日志可能不包含相关条目,前提是自从上次重新启动服务器以来,该日志已被翻转。我知道我可以检查通过修改第一个参数旧日志0来1等,但我们只保留10个错误日志,这可能是不够的。我想要确认设置的故障保护方法。


3
CHECKPOINT或COMMIT写入磁盘?
假设对于具有完整恢复模式数据库的SQLServer2008R2及更高版本。 我一直以为: 提交事务(COMMIT)后,该事务将写入RAM中的事务日志中。 当发生CHECKPOINT时(经过一些时间和/或某些事务和其他条件之后),最后一个CHECKPOINT和当前事务之间的事务将写入磁盘。 发生备份日志时,数据将写入MDF文件。 我对么?我的一些同事说我错了,即使有了BOL,也很难找到正确的答案。 谢谢!
12 sql-server 

2
编写维护计划
我使用SQL Server Management Studio(SSMS)为SQL Server 2008 R2创建了维护计划。 但是,如果需要在另一台服务器上重做,则无法将其导出/转换为脚本。 有办法吗? 如果不是,是否可以使用更新版本的SQL Server?

2
在SQL中比较两个大型数据集的有效方法
目前,我正在比较两个包含唯一StoreKey/ProductKey组合的数据集。 第一个数据集具有StoreKey/ProductKey2012年1月开始至2014年5月结束之间的唯一销售组合(结果= 45万行)。第二个数据集具有独特的StoreKey/ProductKey组合,从2014年6月开始销售到今天(结果= 190K行)。 我正在寻找StoreKey/ProductKey第二组中的组合,但不在第一组中-即从6月初开始销售的新产品。 到目前为止,我已经将这两个数据集转储到了临时表中,在两个键上都为这两个表创建了索引,并使用该EXCEPT语句查找了唯一项。 比较这么大的数据集最有效的方法是什么?有没有更有效的方式进行这种大型比较?

1
大约50天后,SQL Server 2012页面预期寿命将重置为0
我注意到两台服务器HA群集上的行为异常,我希望有人可以证实我的怀疑,或者提供其他解释...这是我的设置: 2服务器SQL 2012 SP1安装 已为一些数据库启用SQL AlwaysOn HA CPU为2.4GHz,4核 RAM为34 GB(这是一个AWS实例,因此为奇数) 资源利用率相对较低-每个服务器有14 GB以上的可用内存,并且SQL没有限制要使用的内存量 磁盘访问时间很好-很少超过15ms /读或写 数据库不是很大-1 GB,1.5 GB,7.5 GB SQL Server进程正在使用16 GB专用字节,15 GB工作集 总体而言,没有发现资源问题。现在是奇怪的部分。SQL不会重新启动(进程已经运行了近6个月),但是似乎每隔50天,Page Life Expectancy计数器就会下降(几乎)为0。直到那一点为止,它稳步上升,没有下降。这是一个性能图: 当我查看计数器数据(我没有确切的数字,只是一个小时的汇总)时,似乎PLE计数器值每次(至少每次我有数据)都达到约4,295,000秒(约50天)。 我疯狂的理论是,PLE数字以毫秒为单位,以无符号长整数(上限为4,294,967,295)保存,并且在49.71天时会由于设计或错误而重置。这将解释两个服务器的行为以及它们具有的相同模式。或者可能是完全不同的东西,我只是没有任何意义。:) 有没有人看到过类似的东西,或者可以解释这种行为? PS我看到了这篇文章,但我的情况似乎略有不同。 PPS这是一个重新发布-我最初在此处发布,但被告知此处的观众更合适。 谢谢!

9
如何最大程度地减少意外修改错误数据库的风险?
我刚刚学到了一种很难的方法,即在对象资源管理器中与服务器断开连接不会阻止您随后执行已在该服务器上打开的查询窗口。 我的情况是这样的:我有一个SSMS实例,可用于连接到我们的开发/登台服务器和生产服务器。我不得不删除有关dev的大量数据,所以我认为应该关闭与生产的连接,但是我没有注意我正在使用的查询窗口。(幸运的是,我们只有几个小时的备份时间。) 我不是破坏生产数据的第一个人,我肯定不会是最后一个。因此,我正在寻找清单,最佳实践等,以帮助您最大程度地减少对错误数据库执行查询的风险。您以前是否遇到过这种情况,您如何调整工作流程来避免这种情况?
12 sql-server  ssms 

4
如何使用密码将登录从2008R2转移到2014?
我已经尝试过Tasks>,Generate Scripts...并在“高级脚本选项”中设置了“脚本登录名”,但在输出中得到了此信息: /* For security reasons the login is created disabled and with a random password. */ 有没有一种简单的方法可以用密码对这些登录进行脚本编写,或者可以通过其他方法将登录从2008R2实例传输到2014实例?

11
如何找出2个SQL表之间的内容差异并生成同步SQL
我如何找出具有精确模式的两个表之间的数据差异,以及如何生成同步SQL以获取并集结果(无重复项)? 这些是2个表: SOURCE01.dbo.Customers (31,022 rows) TARGET01.dbo.Customers (29,300 rows) 每个表的模式为: [CustomerId] : nvarchar(255) [CustomerSerializedProfile]: nvarchar(max) [CreatedDatetime] : DateTime


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.