小编Bra*_*adC的帖子

将 DBCC CHECKDB 划分为多天

我正在为非常大的数据库实施 Paul Randal 的手动传播 DBCC CHECKDB方法,该方法基本上包括:

  • 将数据库中的表大致平均地划分为 7 个桶
  • 每周运行两次 DBCC CHECKALLOC
  • 每周运行一次 DBCC CHECKCATALOG
  • 一周中的每一天在一个存储桶上运行 DBCC CHECKTABLE

有人用过这个技术吗?有没有现有的脚本?

我担心这实际上可能无法涵盖 CHECKDB 所做的一切;CHECKDB 的联机丛书文档说,除了 CHECKALLOC、CHECKCATALOG 和 CHECKTABLE,它还:

  • 验证数据库中每个索引视图的内容。
  • 使用 FILESTREAM 在文件系统中存储 varbinary(max) 数据时,验证表元数据与文件系统目录和文件之间的链接级一致性。(仅限 SQL 2008)
  • 验证数据库中的 Service Broker 数据。

所以这里是我的问题:

  1. 这些额外的检查是否必要/重要?(我可能更关心索引视图,我认为我们还没有使用 Service Broker 或 FILESTREAM。)

  2. 如果是这样,是否有单独执行这些额外检查的方法?

  3. CHECKALLOC 和 CHECKCATALOG 似乎运行得非常快,即使在大型数据库上也是如此。有什么理由不每天运行这些?

(注意:这将是数百台服务器上数千个现有数据库的标准例程,或者至少是特定大小的每个数据库的标准例程。这意味着像重组所有数据库以使用 CHECKFILEGROUP 这样的选项对我们来说并不实用。)

sql-server dbcc-checkdb vldb

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

我可以通过恢复 MASTER 数据库来恢复 TDE 证书吗?

(幸运的是,我们目前并未处于这种情况,只是提前计划,看看如果发生这种情况,我们的选择是什么。)

对于使用透明日期加密 (TDE) 加密的数据库,除非您有用于加密它的证书的备份,否则数据库备份的副本是不可恢复的。

如果你没有那个怎么办?还有其他选择吗?

如果整个服务器发生故障,在新硬件上恢复 MASTER 数据库的备份是否也会恢复证书?

sql-server encryption transparent-data-encryption disaster-recovery

10
推荐指数
2
解决办法
6520
查看次数

对于每个 SQL 实例,我的 SPN 条目应该是什么样的?

我发现有关如何准确格式化 SPN(服务原则名称)以获得正确的 Kerberos 连接以及每个 SQL 实例需要多少个的矛盾信息。

此 2017 年 MS 文档包含以下内容:

从 SQL Server 2008 开始,SPN 格式已更改,以支持 TCP/IP、命名管道和共享内存上的 Kerberos 身份验证。命名实例和默认实例支持的 SPN 格式如下。

  • 命名实例: MSSQLSvc/FQDN:[port|instancename]
  • 默认实例: MSSQLSvc/FQDN:port|MSSQLSvc/FQDN

新的 SPN 格式不需要端口号。这意味着多端口服务器或不使用端口号的协议可以使用 Kerberos 身份验证。

我认为最后一段的意思是我只需要一个条目,以下之一:

  • 命名实例: MSSQLSvc/sqlbox1.mydomain.org/instance2
  • 默认实例: MSSQLSvc/sqlbox1.mydomain.org

这似乎与这个较旧的 (2011) MS 文档相矛盾,不仅是关于端口号,还关于使用什么名称:

要创建 SPN,您可以使用 SQL Server 的 NetBIOS 名称或完全限定域名 (FQDN)。但是,您必须为 NetBIOS 名称和 FQDN 创建一个 SPN

当我查看环境中已经存在的 SPN 时,我看到了各种各样的组合,有些服务器最多有 4 个条目:

  • MSSQLSvc/sqlbox1
  • MSSQLSvc/sqlbox1:1433
  • MSSQLSvc/sqlbox1.mydomain.org
  • MSSQLSvc/sqlbox1.mydomain.org:1433

甚至MS 自己的 Kerberos 配置管理器似乎也想生成最后两个版本(使用适当的混淆处理):

在此处输入图片说明

同样,对于现有的命名实例,我看到了一个奇怪的组合,其中一些几乎肯定是无效的:

  • MSSQLSvc/sqlbox1:1522
  • MSSQLSvc/sqlbox1:instance2
  • MSSQLSvc/sqlbox1.mydomain.org:1522
  • MSSQLSvc/sqlbox1.mydomain.org:instance2
  • MSSQLSvc/sqlbox1.mydomain.org/instance2 …

sql-server kerberos spn

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

我可以在没有备用文件的情况下从备用/只读状态恢复 SQL 数据库吗?

如果“备用文件”丢失,有没有办法从备用/只读模式恢复 SQL 数据库?

(我看到一些参考文献在日志传送场景中将其称为 TUF 文件,但在我的情况下,它只是手动还原,备用文件具有 BAK 扩展名。)

执行“RESTORE DATABASE foo WITH RECOVERY”会导致致命错误:

During startup of warm standby database 'foo', its standby file
('path\filename.bak') was inaccessible to the RESTORE statement.
The operating system error was '5(Access is denied.)'. Diagnose the
operating system error, correct the problem, and retry startup.
Run Code Online (Sandbox Code Playgroud)

恢复是前一段时间完成的,不幸的是备用文件在备份文件夹中,并被我们的文件夹清理程序删除了。任何其他媒体上都不存在该文件的副本。用于恢复到这一点的原始备份也早已不复存在。

幸运的是,这对我们来说没什么大不了的(这是一个临时恢复),但是除了“不要删除该文件”之外,我找不到关于这个问题的任何其他有用的参考资料。

如果归根结底,我想我可以编写整个数据库的脚本,或者使用 SSIS 将所有对象复制到新的数据库容器中,因为我面前有一个 db 的只读副本。

有什么办法可以解决这个问题?我当然不希望我能够将它翻转回“恢复”并继续进行后续的恢复或任何事情,我只想在当前状态下将其强制进入正常的在线模式,以便我可以做到诸如更改权限、更改恢复模式或进行新的完整备份之类的事情。

sql-server-2008 sql-server recovery standby

8
推荐指数
1
解决办法
4394
查看次数

SQL Server 2008 R2 SP3 的“GDR”与“QFE”修补程序是什么?

我一直认为更高的补丁编号必然是较晚的版本,但现在我不太确定。

查看 SQL Server 2008 R2 SP3的SQL Server 内部版本列表,有两种可能的方法来应用安全更新 MS15-058,一种标记为“GDR”,另一种标记为“QFE”。

这些有什么区别?

根据这篇博客文章,GDR(通用发行版)是我们都应该安装的版本,而 QFE 是“仅当您遇到此特定问题时”的发行版,或者类似的版本?

如果我不需要 TLS1.2 支持,我应该应用 10.50.6220 补丁吗?还是 10.50.6529 补丁?

sql-server sql-server-2008-r2 patching tls-1.2

8
推荐指数
1
解决办法
4292
查看次数

事务复制会立即推送 CREATE INDEX 吗?或者我需要一个快照?

我在 SQL 2008 上设置了事务复制,并且有问题的文章将“复制非聚集索引”设置为 TRUE。

如果我在发布者上添加一个非聚集索引(使用 CREATE INDEX),它会立即推送给订阅者吗?

还是我需要运行快照?

replication sql-server-2008

7
推荐指数
1
解决办法
4493
查看次数

将没有列的 ROW_NUMBER() 添加到 ORDER BY?

所以我正在研究一个代码高尔夫拼图,需要在保持当前顺序的同时向结果添加一个 INT“数字”列n

假设我的源数据是:

SELECT value
FROM STRING_SPLIT('one,two,three,four,five', ',')
Run Code Online (Sandbox Code Playgroud)

它以原始(所需)顺序返回项目:

value
-----
one
two
three
four
five
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用ROW_NUMBER()RANK()我被迫指定一个ORDER BY,这value是唯一合法的选择:

SELECT value, n = ROW_NUMBER() OVER(ORDER BY value)
FROM STRING_SPLIT('one,two,three,four,five',',')
Run Code Online (Sandbox Code Playgroud)

但这(如预期)按value字母顺序排序,而不是按所需的原始顺序排列:

value   n
------ ---
five    1
four    2
one     3
three   4
two     5
Run Code Online (Sandbox Code Playgroud)

连接到数字表不起作用,因为如果没有WHERE子句,我将获得完整的外部连接。

我能想到的最好的方法是使用带有标识字段的临时表:

CREATE TABLE #argg (n INT IDENTITY(1,1), v VARCHAR(99))

INSERT #argg 
SELECT value v
FROM STRING_SPLIT('one,two,three,four,five',',')

SELECT *
FROM #argg …
Run Code Online (Sandbox Code Playgroud)

sql-server order-by window-functions sql-server-2017

7
推荐指数
3
解决办法
5879
查看次数

SSRS 2017 报告 IE 11 有问题?

我遇到的症状与这篇 2015 MSSSQLTips 文章中描述的非常相似:

SQL Server Reporting Services (SSRS) 与 Internet Explorer 11 不兼容

您已升级到 Internet Explorer 11,现在当您预览 SQL Server Reporting Services (SSRS) 报告时,您发现打印命令在报告查看器中不可见。此外,有时当您更改参数值时,IE11 会停止响应或加载报告需要很长时间。您可能还会发现使用 IE11 查看时,显示报表控件和导出功能的工具栏出现在多行中。当您在 Chrome 或 Mozilla Firefox 中预览相同的 SSRS 报告时,它运行良好,没有任何问题,这意味着这是浏览器兼容性问题。如何使 SQL Server Reporting Services (SSRS) 与 IE11 兼容?

我能找到的关于这个问题的几乎所有讨论都参考了这篇文章(或现在不可用的 MS Connect 页面)。

问题是为 SSRS 2008 建议的服务器端修复不适用于 SSRS 2017(文件中没有<meta http-equiv="X-UA-Compatible" content="IE=5">标签ReportServer\Pages\reportviewer.aspx)。

SSRS 2017 是否有等效的服务器端修复程序?我应该将此meta标记添加到此文件还是其他 ASPX 文件?

其他帖子建议升级 SSRS,就像这个关于 SSRS 2012 的问题,但我已经在 SSRS 2017 (14.0.600.689) 的倒数第二个版本上,并且最近补丁更改日志似乎不包含任何相关的修复。 …

ssrs ssrs-2017

6
推荐指数
1
解决办法
4169
查看次数

TempDB 数据文件在 SQL 2008 上不能很好地收缩

因此,理想情况下,您希望适当地预先调整 TempDB 数据和日志文件的大小,以便这不是问题,但有时流氓开发人员会在工作时间内在生产服务器上运行疯狂的大型查询,从而导致 TempDB 数据文件爆炸巨大的。

如果 TempDB 确实是驱动器上唯一的东西,那么我可能就这样保留它,但在某些服务器上,我有几个 SQL 实例,它们都共享同一个 TempDB 驱动器。

那么如何在不重启实例的情况下缩小这些 TempDB 数据文件呢?

我通常会尝试:

DBCC SHRINKFILE (name = 'tempdev', size = 5000)
Run Code Online (Sandbox Code Playgroud)

这在 SQL 2000 和 2005 中相当一致地工作(假设实际的 tempdb 活动已经逐渐减少),但在 2008 年似乎经常工作(在我当前的服务器上,它只适用于 4 个数据文件中的 1 个,其他人继续保留大 2-3 倍)。

sql-server-2008 shrink tempdb

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

完整、差异、日志、文件、部分备份的备份截止时间

我的理解是所有备份都包含到备份操作完成的时间/点的数据。

管理 SQL 数据库基础结构 - 考试参考书 70-764说:

完整:这包含数据库的全部内容以及在备份操作期间对数据库所做的任何更改。因此,完整备份表示备份操作完成时的数据库。

(强调我的)

然而,对于差异备份,本书暗示了一些不同的东西:

差异:这仅包含上次完整数据库备份与执行差异备份操作的时间点之间的差异

这样对吗?或者这只是不精确的语言?这里的“执行”是指差异备份开始完成的时间吗?

对于其他备份类型(日志、部分、文件备份),本书并没有完全说明这一点?

sql-server backup

5
推荐指数
1
解决办法
389
查看次数