我有一个序列,可以为系统中的对象生成跟踪编号。它已经运行良好有一段时间了。
上周我们注意到它开始重用值。
似乎发生的是,在晚上的不同时间点,它会回滚到前一天的值。然后它将继续从该点生成值。
所以例如我可以得到这样的东西:
10112
10113
10114
10115
10116
10117
10118
10113
10114
10115
10116
...
在它发生的时间、第一次使用和第二次使用之间的持续时间(少则 10 分钟或几个小时)或回滚的次数(少至 1 次,多至数百次)方面似乎没有任何模式。
我考虑过运行跟踪(并且仍然可能),但我认为序列对象没有被直接修改。我相信这是因为修改日期是几天前的,并且指向我们手动提高值以尝试消除重复项的时间。(从那以后这个问题已经发生了好几次。)
有没有人知道什么可能导致序列回滚和每晚重用值?
更新:回答评论中的几个问题:
@@Version:
Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 2012 年 10 月 19 日 13:38:57
创建脚本:
CREATE SEQUENCE [schemaName].[SequenceName]
AS [bigint]
START WITH 410014104
INCREMENT BY 1
MINVALUE 410000000
MAXVALUE 419999999
CYCLE
CACHE
GO
Run Code Online (Sandbox Code Playgroud)我没有唯一约束(但我打算放一个)。然而,这只会帮助我知道我何时重用了一个值。不是什么导致值重置。我做了一项工作,每 5 分钟就会获得一个新值,然后将其保存。时间和价值跳跃不遵循模式。
我试图了解SQL Server Cumulative Updates推荐的最佳实践是什么。
目前,我们遵循“除非 CU 解决的问题是我们遇到的问题,否则什么都不做”的想法。这是从“如果它没有坏掉,就不要修复它”的方法起作用的,但我想知道这是否真的是一个好主意,因为许多 CU 都有性能增强。我们正在考虑将 CU 添加到在 CU 发布后一两个月的定期维护周期中应用的补丁中。
其他人做什么,为什么?
作为对影响以下答案的问题的更新,2016 年 3 月 24 日,Microsoft 的 SQL Server 团队宣布他们正在更新他们的服务模型。Microsoft 建议所有用户安装 2016 年 1 月之后发布的所有 CU:
从 1 月 CU 版本开始,这些警告消息已更新,我们现在建议在 CU 可用时进行持续、主动的安装。您计划安装 CU 时应具有与计划安装 SP(服务包)发布时相同的信心水平。这是因为 CU 的认证和测试达到 SP 的水平。此外,Microsoft CSS 数据表明,很大一部分客户问题通常以前在已发布的 CU 中得到解决,但并未主动应用。更重要的是,CU 包含除修补程序之外的附加值。这些还可能包含增强整体体验的可支持性、日志记录和可靠性更新。
除了消息和指南更新之外,我们还对 CU 收购模型进行了更新。
收购变更:
- 当然,CU 传统上是在“Hotfix”服务器上提供的(伴随着与“QFE”或“Hotfix”相关联的“警告语”)。这里的不一致之处在于 CU 不再是真正简单的快速修补程序。所包含的更新在今天的个人和完整系统集成级别上都经过了很好的测试。
- 因此,我们现在在 microsoft.com/downloads 上放置每个主流支持基线(今天的 2012 SP2/SP3 和 2014 RTM/SP1)的最新 CU,就像今天对 Service Pack 所做的一样
- 此外,我们将很快将所有 CU 发布和维护到 Windows 更新目录中,以促进获取和分发
- 只有临时 CU …
我已经安装了带有高级服务的 SQL Server 2014 Express 版。我希望尝试使用全文搜索功能。我在这里读到2014 速成版支持全文搜索。但是,在安装并尝试创建全文索引后,我收到一条错误消息,指出此版本的 sql server 不支持全文索引。
是否实际支持全文索引?有没有可能我安装了错误的版本(不是高级服务)?为了确定,我已经卸载并重新安装了两次,但两次都是相同的问题。我很确定我正在使用高级服务安装程序进行安装。
我使用的是 64 位 Windows 7。
我正在 SQL Server 2014 中创建聚集列存储索引。 
我收到错误
“超时已过期。在操作完成之前超时时间已过,或者服务器没有响应。(Microsoft SQL Server)”。
我设置
EXEC sp_configure 'remote query timeout', 60000;
reconfigure
EXEC sp_configure
行数 = 304969603 数据空间 = 88,812.266 MB
我正在从没有文档的旧系统中归档数据。幸运的我...
我想知道表的创建时间、上次访问时间等。我可以相信这个查询会给我正确的答案还是我首先需要检查一些参数?SQL Server 2008 R2:
SELECT t.Name AS Tabelname, p.rows AS NoOfRows, MAX(us.last_user_lookup) AS LastUsed, t.create_date AS CreatedDate
FROM sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
LEFT JOIN --A lot of the tables did not have any records in this table
sys.dm_db_index_usage_stats as us ON t.OBJECT_ID = us.OBJECT_ID
GROUP BY t.Name, p.rows, create_date
ORDER BY MAX(us.last_user_lookup) DESC
Run Code Online (Sandbox Code Playgroud) 我们最近将生产实例从 SQL 2008 R2 迁移到全新的 SQL 2014 服务器。这是我们在使用 Service Broker 时发现的一个有趣场景。考虑一个Broker Enabled = true带有MyService和的数据库MyQueue。此队列上禁用了毒物消息处理。队列中至少有 2 个与消息的活动对话。
在一个进程 (SPID 100) 中执行:
BEGIN TRANSACTION;
DECLARE @conversation_group_id UNIQUEIDENTIFIER;
RECEIVE TOP (1) @conversation_group_id = conversation_handle FROM MyQueue;
Run Code Online (Sandbox Code Playgroud)
请注意,我们将事务保持打开状态。假设它是一个 .NET 程序,它在某些外部资源上等待了很长时间。通过sys.dm_tran_locks我们看到该 SPID 已被授予对队列的 IX 锁。
| type | resource_id | mode | status | spid |
| OBJECT | 277576027 | IX | GRANT | 100 |
Run Code Online (Sandbox Code Playgroud)
在单独的进程 (SPID 101) 中执行五次:
BEGIN TRANSACTION;
DECLARE @conversation_group_id …Run Code Online (Sandbox Code Playgroud) 我们正在将 IIS/SQL Server 站点从 2008 年迁移到 2012 年,但我遇到了身份验证问题。我们使用 Windows 身份验证作为 进行身份验证DOMAIN\COMPUTER$,但这不起作用,并给出错误消息:
用户 'DOMAIN\COMPUTER$' 登录失败。原因:找不到与提供的名称匹配的登录名。[客户端:<本地机器>]
我已经验证该帐户存在,甚至删除并重新创建它
create login "DOMAIN\COMPUTER$" from windows
Run Code Online (Sandbox Code Playgroud)
如果我再做一次,我得到的回应是:
消息 15025,级别 16,状态 2,第 1 行
服务器主体 'DOMAIN\COMPUTER$' 已经存在。
(DOMAIN\COMPUTER替换为真实的域和计算机名)
所以看起来该站点正在查询 SQL Server,但 SQL Server 并没有非常努力地查看其登录信息。
我错过了什么?
有一个在 Windows 2012 R2 上运行的 SQL Server 2014 实例,每周运行 Ola Hallengren 的数据库完整性脚本,最近两周开始出现此错误:
DESCRIPTION: The operating system returned error 665(The requested operation could
not be completed due to a file system limitation) to SQL Server during a write at
offset 0x000036ec240000 in file 'E:\DBFiles\XXXXX.mdf_MSSQL_DBCC42'. Additional
messages in the SQL Server error log and system event log may provide more detail. This
is a severe system-level error condition that threatens database integrity and must be
corrected immediately. Complete a full database consistency …Run Code Online (Sandbox Code Playgroud) 我应该如何转义%参数中的字符,以便我重新调整RAISERROR我的消息
declare @msg varchar(max) = (SELECT ' Message with % ' AS MSG)
if @msg is not null
begin
RAISERROR (@msg ,16,1);
end
Run Code Online (Sandbox Code Playgroud)
这将引发错误消息
消息 2787,级别 16,状态 1,第 4 行
无效的格式规范:“%”。
对于最终用户,此消息是不可读的。
我的消息是从数据库生成并设置此消息。
我避免收到错误消息的方法是替换
set @msg = REPLACE(@msg,'%','P')
Run Code Online (Sandbox Code Playgroud)
但是我还是不知道怎么加%符号
我试图了解不同的设置如何影响我的服务器 - 客户端通信的行为。在服务器上,我安装了一个自签名 CA,并带有已发布的交换证书,该证书也已配置为供我的 SQL 服务使用。
起初,当客户端上尚未安装根 CA 时,我希望看到此连接失败。但无论我做什么,它似乎都有效。
为了更好地理解原因,我试图列出所有选项以及它们应该产生的效果。但我不确定我是否理解正确......
任何人都可以帮我更正并填写这里缺少的部分吗?
在SQL Server 上启用“强制加密”设置时:
Encrypt=True;TrustServerCertificate=True;我的连接字符串中的设置相同。客户端对是否应该使用加密以及是否应该信任服务器没有发言权。在SQL Server 上启用“强制协议加密”设置时:
在客户端上使用“强制协议加密”设置时:
在服务器和客户端上启用“强制协议加密”设置时:
在服务器上同时启用“强制加密”和“强制协议加密”时:
sql-server ×10
columnstore ×1
dbcc-checkdb ×1
encryption ×1
locking ×1
metadata ×1
raiserror ×1
sequence ×1
ssl ×1
t-sql ×1