标签: sql-server

序列正在重用

我有一个序列,可以为系统中的对象生成跟踪编号。它已经运行良好有一段时间了。

上周我们注意到它开始重用值。

似乎发生的是,在晚上的不同时间点,它会回滚到前一天的值。然后它将继续从该点生成值。

所以例如我可以得到这样的东西:

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 分钟就会获得一个新值,然后将其保存。时间和价值跳跃不遵循模式。

  • 我检查了事件日志以查看是否有错误。唯一认为正在发生的是:http : //support.microsoft.com/kb/2793634 我们今天正在应用此修复程序。我不认为这些是相关的,但它可能是。

sql-server sequence sql-server-2012

11
推荐指数
1
解决办法
4581
查看次数

MS SQL Server 累积更新 - 最佳实践

我试图了解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

11
推荐指数
2
解决办法
4741
查看次数

带有高级服务的 SQL Server 2014 Express 是否真的支持全文搜索?

我已经安装了带有高级服务的 SQL Server 2014 Express 版。我希望尝试使用全文搜索功能。我在这里读到2014 速成版支持全文搜索。但是,在安装并尝试创建全文索引后,我收到一条错误消息,指出此版本的 sql server 不支持全文索引。

是否实际支持全文索引?有没有可能我安装了错误的版本(不是高级服务)?为了确定,我已经卸载并重新安装了两次,但两次都是相同的问题。我很确定我正在使用高级服务安装程序进行安装。

我使用的是 64 位 Windows 7。

sql-server full-text-search sql-server-agent

11
推荐指数
1
解决办法
2万
查看次数

为索引“ClusteredColumnStoreIndex”创建失败。超时已过期

我正在 SQL Server 2014 中创建聚集列存储索引。 在此处输入图片说明

我收到错误

“超时已过期。在操作完成之前超时时间已过,或者服务器没有响应。(Microsoft SQL Server)”。

我设置

EXEC sp_configure 'remote query timeout', 60000; reconfigure EXEC sp_configure

行数 = 304969603 数据空间 = 88,812.266 MB

sql-server columnstore sql-server-2014

11
推荐指数
3
解决办法
3万
查看次数

sys.dm_db_index_usage_stats 中的信息是否可靠

我正在从没有文档的旧系统中归档数据。幸运的我...

我想知道表的创建时间、上次访问时间等。我可以相信这个查询会给我正确的答案还是我首先需要检查一些参数?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-server metadata sql-server-2008-r2

11
推荐指数
1
解决办法
6141
查看次数

Sch-M WAIT 阻止 SQL Server 2014 中的 Sch-S 而不是 SQL Server 2008 R2?

我们最近将生产实例从 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)

sql-server service-broker locking

11
推荐指数
1
解决办法
2810
查看次数

SQL Server 2012 无法使用机器帐户登录

我们正在将 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 并没有非常努力地查看其登录信息。

我错过了什么?

authentication sql-server sql-server-2012

11
推荐指数
4
解决办法
4万
查看次数

操作系统返回错误665(由于文件系统限制,请求的操作无法完成)

有一个在 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)

sql-server dbcc-checkdb sql-server-2014

11
推荐指数
1
解决办法
3万
查看次数

如何在 SQL Server 2012 中为 RAISERROR 函数在 varchar @params 中转义“%”

我应该如何转义%参数中的字符,以便我重新调整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)

但是我还是不知道怎么加%符号

sql-server t-sql raiserror

11
推荐指数
2
解决办法
9771
查看次数

SQL Server 中的“强制加密”与“强制协议加密”

我试图了解不同的设置如何影响我的服务器 - 客户端通信的行为。在服务器上,我安装了一个自签名 CA,并带有已发布的交换证书,该证书也已配置为供我的 SQL 服务使用。

起初,当客户端上尚未安装根 CA 时,我希望看到此连接失败。但无论我做什么,它似乎都有效。

为了更好地理解原因,我试图列出所有选项以及它们应该产生的效果。但我不确定我是否理解正确......

任何人都可以帮我更正并填写这里缺少的部分吗?


在SQL Server 上启用“强制加密”设置时:

  • 实际上,这与Encrypt=True;TrustServerCertificate=True;我的连接字符串中的设置相同。客户端对是否应该使用加密以及是否应该信任服务器没有发言权。
  • 此选项可用于加密单个服务实例。
  • 支持没有 CA 的自签名交换证书。

在SQL Server 上启用“强制协议加密”设置时:

  • 与服务器上所有服务的所有客户端连接都经过加密。
  • 需要由客户端和服务器上都可用的受信任 CA 颁发的交换证书。

在客户端上使用“强制协议加密”设置时:

  • 此单个客户端将强制使用 SSL,并需要由该机器上可用的受信任 CA 颁发的交换证书。没有它,此连接将失败。

在服务器和客户端上启用“强制协议加密”设置时:

  • 不建议这样做。但为什么?会发生什么,什么会失败?

在服务器上同时启用“强制加密”和“强制协议加密”时:

  • 这会产生什么?启用强制协议加密时,强制加密设置为什么重要吗?

sql-server encryption ssl

11
推荐指数
1
解决办法
2万
查看次数