标签: sql-server-2012

TempDB 中的损坏分区如何导致 DBCC CHECKDB 报告没有问题?

我们的其中一台 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 …

sql-server sql-server-2012 tempdb dbcc-checkdb

9
推荐指数
3
解决办法
8334
查看次数

SQL Server 2012 catalog.executions to sysjobhistory - 有什么办法可以加入它们吗?

我已经用尽了我的资源,但找不到将 ssisdb.catalog 表加入到运行它们的作业的万无一失的方法。尝试编写一些自定义 sproc 来监视我的执行时间和从目录表中写入的行,并且能够将它们与调用作业联系在一起将非常有益。

我试图找出是否有任何表可用于将 catalog.executions 表连接到 msdb.sysjobhistory。我需要关联哪个作业称为 SSIS 包,然后使用执行中的数据进行分析。

sql-server ssis sql-server-2012

9
推荐指数
2
解决办法
3261
查看次数

tempdb 与 tempdb 数据或其他日志在同一驱动器上登录?

出于多种原因,我的所有数据库文件只有 3 个硬盘驱动器(RAID 和 Always-On AG):

  • D:数据
  • E:日志
  • F:临时数据库

tempdb 日志文件应该与数据文件一起放在 F: 上还是放在 E: 上?

到目前为止,我的 tempdb 数据文件的档位最高,日志文件排在 24 个中的第 4 个。

在我有限的 DBA 经验(我是一名开发人员)中,我倾向于将 tempdb.ldf 放在 E: 上,因为写入都是顺序的。

sql-server sql-server-2012 tempdb

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

创建数据库角色以允许对所有表进行读访问;写访问一些

我们有一个包含 1000 多个表的数据库。我需要创建一个角色,该角色允许对所有表进行只读访问,以及对两个特定表的写访问权限。

我一直在处理数据库角色,但是每当我添加表时,我都必须手动选择所有 1000 个……有没有更好的方法来做到这一点?

security role sql-server-2012

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

T-SQL - 选项 (FAST x) 和跟踪标志 8722

我已经搜索了很长时间,仍然没有找到我的问题的答案。

我们的 Dynamics AX 使用查询提示 OPTION (FAST x) 生成查询,这有时会强制使用错误的执行计划。开发人员说它是默认的并且很难改变(必须在所有形式上潜在地修复)。

所以我想找到一种使用跟踪标志覆盖这些提示的方法。我发现了可爱的跟踪标志 8722,它声称可以让 SQL Server 忽略一些查询提示,尤其是 OPTION 子句中的提示。

但是,这在我的情况下不起作用。我也尝试启用跟踪标志 8602(禁用索引提示),但我的查询仍在使用 FAST x 提示运行(它比我实际删除 OPTION 子句时慢得多)。

我也尝试清除计划缓存,但无济于事。

有任何想法吗?我错过了什么吗?

PS 我启用了全局跟踪标志,这是 SQL Server 2012 开发人员版

performance sql-server sql-server-2012

9
推荐指数
1
解决办法
967
查看次数

在没有故障转移群集的环境中 Windows 更新后 AlwaysOn 可用性组错误

今天早上我们的 SQL Server 服务宕机,导致我们的一些网站宕机。当我去检查 Windows 事件查看器时,我看到以下错误:

数据库“master”的脚本级别升级失败,因为升级步骤“SSIS_hotfix_install.sql”遇到错误 942,状态 4,严重性 25

无法恢复主数据库。SQL Server 无法运行。从完整备份恢复主文件、修复它或重建它。有关如何重建 master 数据库的详细信息,请参阅 SQL Server 联机丛书。

我做的第一件事就是在谷歌上搜索错误。我最终找到了一个包含确切问题和修复方法的论坛条目(也在我正在寻求解决方案的博客条目上)。该问题与 AlwaysOn 可用性组有关,修复要求您:

  1. 使用 Trace Flag 902 启动 SQL Server 服务:

    网络启动 MSSQL$InstanceName /T902

  2. 打开 SQL Server Management Studio,转到可用性组并从可用性数据库中删除 SSISDB

  3. 打开新查询,执行 SSIS_hotfix_install.sql 脚本,该脚本可以在 \Program Files\Microsoft SQL Server\MSSQL11.MSSQL$InstanceName\MSSQL 下的安装文件夹中找到

  4. 停止 SQL Server 服务:

    网络停止 MSSQL$InstanceName

  5. 从 SQL Server 配置管理器启动 SQL Server 服务

  6. 将 SSISDB 添加回可用性组

但是,我无法通过第 2 步,因为当我尝试展开“AlwaysOn High Availability”文件夹时出现以下错误:

在您可以在此实例上创建可用性组之前,必须为服务器实例 'InstanceName' 启用“AlwaysOn 功能”。

然后我按照说明转到“SQL Server 配置管理器”和“AlwaysOn High Availability”选项卡以打开该功能。这次该功能变灰了,并且有一条消息说该计算机节点不在故障转移集群中。 …

sql-server upgrade sql-server-2012 errors

9
推荐指数
1
解决办法
1555
查看次数

是否可以在存储过程中定义函数?

我有一个存储过程:

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)

stored-procedures sql-server-2012 functions

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

Page Life Expectancy 对该实例有何看法?

我已经在环境中的几个 SQL Server 实例上安装了监控软件。我试图找到瓶颈并解决一些性能问题。我想知道某些服务器是否需要更多内存。

我对一个计数器感兴趣:页面预期寿命。在每台机器上看起来都不一样。为什么在某些情况下它会经常更改,这意味着什么?

请查看上周在几台不同机器上收集的数据。你能对每个实例说些什么?

大量使用的生产实例(1): 大量使用的生产实例 (1)

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

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

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

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

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

大量使用的数据仓库 (6) 大量使用的数据仓库 (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

9
推荐指数
2
解决办法
3658
查看次数

如何判断备份文件是否包含 CDC?

使用 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

9
推荐指数
1
解决办法
1944
查看次数

PK 上的压缩与 Table 上的压缩有什么不同?

可以在表上设置数据压缩:

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 compression sql-server-2012

9
推荐指数
1
解决办法
1199
查看次数