我们的其中一台 SQL Server 最近报告了以下错误:
DATE/TIME: 2/25/2013 9:15:14 PM
DESCRIPTION: No catalog entry found for partition ID 9079262474267394048
in database 2. The metadata is inconsistent. Run DBCC CHECKDB to check for
a metadata corruption.
Run Code Online (Sandbox Code Playgroud)
不到 15 分钟后,我连接到服务器并运行:
SELECT name
FROM sys.databases
WHERE database_id = 2;
Run Code Online (Sandbox Code Playgroud)
返回'tempdb'。然后我跑了:
DBCC CHECKDB ('tempdb') WITH NO_INFOMSGS, TABLERESULTS;
Run Code Online (Sandbox Code Playgroud)
没有返回任何结果,表明受影响的数据库没有问题。
数据库中的损坏如何导致上述错误消息DBCC CHECKDB但未报告问题?我假设如果页面校验和计算失败,导致页面被标记为怀疑引用该页面的任何对象将无法删除,但我一定是错的。
一旦页面被标记为“可疑”,如何将其标记为“不可疑”、“已修复”或“重用”,或者DBCC CHECKDB不报告相关页面有任何问题的任何内容?
编辑:2013-02-27 13:24
只是为了好玩,我试图在 TempDB 中重新创建损坏,假设 #temp 表是罪魁祸首。
但是,由于我无法SINGLE_USER在 TempDB 中设置该选项,因此无法用于DBCC WRITEPAGE损坏页面,因此我无法在 TempDB 中强制损坏。
而不是使用DBCC WRITEPAGE …
我已经用尽了我的资源,但找不到将 ssisdb.catalog 表加入到运行它们的作业的万无一失的方法。尝试编写一些自定义 sproc 来监视我的执行时间和从目录表中写入的行,并且能够将它们与调用作业联系在一起将非常有益。
我试图找出是否有任何表可用于将 catalog.executions 表连接到 msdb.sysjobhistory。我需要关联哪个作业称为 SSIS 包,然后使用执行中的数据进行分析。
我们有一个包含 1000 多个表的数据库。我需要创建一个角色,该角色允许对所有表进行只读访问,以及对两个特定表的写访问权限。
我一直在处理数据库角色,但是每当我添加表时,我都必须手动选择所有 1000 个……有没有更好的方法来做到这一点?
我已经搜索了很长时间,仍然没有找到我的问题的答案。
我们的 Dynamics AX 使用查询提示 OPTION (FAST x) 生成查询,这有时会强制使用错误的执行计划。开发人员说它是默认的并且很难改变(必须在所有形式上潜在地修复)。
所以我想找到一种使用跟踪标志覆盖这些提示的方法。我发现了可爱的跟踪标志 8722,它声称可以让 SQL Server 忽略一些查询提示,尤其是 OPTION 子句中的提示。
但是,这在我的情况下不起作用。我也尝试启用跟踪标志 8602(禁用索引提示),但我的查询仍在使用 FAST x 提示运行(它比我实际删除 OPTION 子句时慢得多)。
我也尝试清除计划缓存,但无济于事。
有任何想法吗?我错过了什么吗?
PS 我启用了全局跟踪标志,这是 SQL Server 2012 开发人员版
今天早上我们的 SQL Server 服务宕机,导致我们的一些网站宕机。当我去检查 Windows 事件查看器时,我看到以下错误:
数据库“master”的脚本级别升级失败,因为升级步骤“SSIS_hotfix_install.sql”遇到错误 942,状态 4,严重性 25
无法恢复主数据库。SQL Server 无法运行。从完整备份恢复主文件、修复它或重建它。有关如何重建 master 数据库的详细信息,请参阅 SQL Server 联机丛书。
我做的第一件事就是在谷歌上搜索错误。我最终找到了一个包含确切问题和修复方法的论坛条目(也在我正在寻求解决方案的博客条目上)。该问题与 AlwaysOn 可用性组有关,修复要求您:
使用 Trace Flag 902 启动 SQL Server 服务:
网络启动 MSSQL$InstanceName /T902
打开 SQL Server Management Studio,转到可用性组并从可用性数据库中删除 SSISDB
打开新查询,执行 SSIS_hotfix_install.sql 脚本,该脚本可以在 \Program Files\Microsoft SQL Server\MSSQL11.MSSQL$InstanceName\MSSQL 下的安装文件夹中找到
停止 SQL Server 服务:
网络停止 MSSQL$InstanceName
从 SQL Server 配置管理器启动 SQL Server 服务
将 SSISDB 添加回可用性组
但是,我无法通过第 2 步,因为当我尝试展开“AlwaysOn High Availability”文件夹时出现以下错误:
在您可以在此实例上创建可用性组之前,必须为服务器实例 'InstanceName' 启用“AlwaysOn 功能”。
然后我按照说明转到“SQL Server 配置管理器”和“AlwaysOn High Availability”选项卡以打开该功能。这次该功能变灰了,并且有一条消息说该计算机节点不在故障转移集群中。 …
我有一个存储过程:
create proc sp_MyProc(@calcType tinyint) as
begin
-- some stuff collating data into #MyTempTable
if (@calcType = 1) -- sum
select A, B, C, CalcField = sum(Amount)
from #MyTempTable t
join AnotherTable a on t.Field1 = a.Field1;
group by A, B, C
else if (@calcType = 2) -- average
select A, B, C, CalcField = avg(Amount)
from #MyTempTable t
join AnotherTable a on t.Field1 = a.Field1;
group by A, B, C
else if (@calcType = 3) -- some other fancy …Run Code Online (Sandbox Code Playgroud) 我已经在环境中的几个 SQL Server 实例上安装了监控软件。我试图找到瓶颈并解决一些性能问题。我想知道某些服务器是否需要更多内存。
我对一个计数器感兴趣:页面预期寿命。在每台机器上看起来都不一样。为什么在某些情况下它会经常更改,这意味着什么?
请查看上周在几台不同机器上收集的数据。你能对每个实例说些什么?
大量使用的生产实例(1):

适度使用的生产环境 (2)

很少使用的测试实例(3)

大量使用的生产实例 (4)

适度使用的测试实例(5)

大量使用的数据仓库 (6)

编辑:我为所有这些服务器添加了 SELECT @@VERSION 的输出:
Instance 1: Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64)
Jun 17 2011 00:54:03 Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor)
Instance 2: Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
Oct 19 2012 13:38:57
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: …Run Code Online (Sandbox Code Playgroud) sql-server memory sql-server-2008-r2 sql-server-2012 page-life-expectancy
使用 SQL Server 2008 到 2014 年,我知道如何在启用变更数据捕获 (CDC) 的情况下备份和恢复数据库,但我正在寻找一种查询完整备份文件以确定它是否包含 CDC 数据的方法。
像RESTORE FILELISTONLY这样从数据库中获取文件列表,而是获取 CDC 状态以确定还原是否需要使用 KEEP_CDC 标志的方法会很棒吗?
有没有办法确定备份是否包含 CDC 数据?
谢谢!
sql-server-2008 sql-server sql-server-2012 change-data-capture sql-server-2014
可以在表上设置数据压缩:
CREATE TABLE dbo.SomeTable(
SomeId [bigint] NOT NULL,
OtherId [bigint] NOT NULL,
IsActive [bit] NOT NULL,
CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED
(
SomeId Desc
)
) ON SomePartitionScheme(SomeId) WITH (DATA_COMPRESSION=PAGE)
Run Code Online (Sandbox Code Playgroud)
它可以在主键上定义:
CREATE TABLE dbo.SomeTable(
SomeId [bigint] NOT NULL,
OtherId [bigint] NOT NULL,
IsActive [bit] NOT NULL,
CONSTRAINT [PK_Some] PRIMARY KEY CLUSTERED
(
SomeId Desc
) WITH (DATA_COMPRESSION=PAGE)
) ON SomePartitionScheme(SomeId)
Run Code Online (Sandbox Code Playgroud)
但是如果你把它放在两者上,你就会得到这个错误:
DATA_COMPRESSION 选项为表指定了多次,如果表已分区,则至少为其中一个分区指定。
把它放在PK上和放在桌子上有什么区别吗?
sql-server-2012 ×10
sql-server ×8
tempdb ×2
compression ×1
dbcc-checkdb ×1
errors ×1
functions ×1
memory ×1
performance ×1
role ×1
security ×1
ssis ×1
upgrade ×1