标签: sql-server

将 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
查看次数

将列名动态传递给 UNPIVOT

我有一个包含以下数据的表格

First         Second        Third         Fourth        Fifth         Sixth
2013-08-20    2013-08-21    2013-08-22    2013-08-23    2013-08-24    2013-08-25
Run Code Online (Sandbox Code Playgroud)

并使用 UNPIVOT

SELECT Data
    ,DATENAME(DW, Data) AS DayName
FROM Cal
UNPIVOT(Data FOR D IN (
            First,
            Second,
            Third,
            Fourth,
            Fifth,
            Sixth  )) AS unpvt
Run Code Online (Sandbox Code Playgroud)

我得到以下结果

Data        DayName
2013-08-20  Tuesday
2013-08-21  Wednesday
2013-08-22  Thursday
2013-08-23  Friday
2013-08-24  Saturday
2013-08-25  Sunday
Run Code Online (Sandbox Code Playgroud)

现在我的问题是我们可以动态地将列名传递给 the ,UNPIVOT以便当表中的列增加时我们可能不必更改语句。

sql-server sql-server-2008-r2 unpivot

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

如何从连接到同一工作组的其他计算机访问 SQL Server 数据库?

我创建了一个使用 SQL Server 数据库的 C# 应用程序。我有其他计算机连接到我和工作组中的其他计算机。我已经与其他人共享了我的 C# 应用程序。当他们打开应用程序时,他们收到错误

与 SQL Server 建立连接时发生网络相关或特定于实例的错误。服务器未找到或无法访问

但是该应用程序在我的 PC 上运行良好。我使用的连接字符串是

Data Source=ASHISHPC1\SQLEXPRESS;Initial Catalog=ACW;User ID=ash159;Password=ashish159
Run Code Online (Sandbox Code Playgroud)

它存储在一个.config文件中。

该应用程序在我的 PC 上运行良好。我必须做什么?我在服务器中启用了 TCP/IP,但同样的错误仍然存​​在。连接字符串或其他一些变化?

sql-server connectivity

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

SQL Server 事务日志备份:测试尾日志是否遵循上次已知的日志备份

我们正在使用具有完全恢复模式的 SQL Server。给定完整备份和一系列日志备份,我们希望能够检查从上次完整备份到当前尾日志的日志链是否完整。(没有实际恢复这些备份;这里的目的是测试备份的一致性。)

我已经知道如何对现有备份执行此操作:使用 RESTORE HEADERONLY 我获得每个文件的 FirstLSN 和 LastLSN,可以对连续文件进行比较,以确定它们是否兼容。

但是,我不知道如何检查尾部日志是否遵循上次日志备份。

如果我有尾日志的 FirstLSN,我可以将它与上次日志备份的 LastLSN 进行比较。但是如何获取尾日志的 FirstLSN 呢?

我需要一个适用于 SQL Server 2005 以上的解决方案(最好使用 t-sql)。到目前为止,我已经搜索过谷歌无济于事。顺便提一句。我首先在 stackoverflow 上发布了这篇文章;但是将它迁移到这里,因为它在那里被标记为离题。

编辑

我在一个小例子(SQL Server 2005,9.0.5057)上尝试了两个提供的解决方案:

BACKUP DATABASE TestDb TO DISK = 'C:\temp\backup test\Full.bak' 

-- fire some update queries

BACKUP LOG TestDb TO DISK =  'C:\temp\backup test\Log1.bak' 

-- fire both queries from the provided answers: 
-- Martin Smith's answer yields: 838886656088920652852608
-- Shawn Melton's answer yields: 46000000267600001

RESTORE HEADERONLY FROM DISK = 'C:\temp\backup test\Log1.bak'  
-- yields: 46000000267600001 …
Run Code Online (Sandbox Code Playgroud)

sql-server backup transaction-log

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

错误:“要在 sql server 数据工具之外运行 ssis 包,您必须安装 [发送成功电子邮件] 的 Integration Services 或更高版本。”

请注意,此问题的标题是特定于该用户的逐字错误消息。该错误消息说明了 dtexec 应用程序中的一个错误,该错误将用户变量替换为错误消息字符串。在这种情况下,标准消息Standard E dition被替换为send successful email

“标准”错误消息是:

描述:要在 Business Intelligence Development Studio 之外运行 SSIS 包,您必须安装标准版的 Integration Services 或更高版本。


版本 SSIS 2012。包最初是 2005 版。文件系统上的包。

主机 1 上的数据库引擎/代理,主机 2 上的 SSIS。

从主机 2 执行成功运行。从主机 1 执行会给出问题主题中的错误。看到这个帖子,但是引擎和代理安装在主机 1 上。有没有人看到这个?搜索确切的错误时,Google 不会返回任何结果(主题行是准确的,错误消息中的措辞很奇怪)。

谢谢!

sql-server ssis ssis-2012

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

是否可以在 SSMS 的对象资源管理器中过滤数据库列表?

我知道如何过滤表列表 - 使用过滤器图标。但是,选择数据库节点时,禁用此图标。

不过,我想知道是否有可能。

sql-server ssms

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

从数据库属性对话框中的文件页面更改数据库所有权时出错

我已经恢复了一个数据库并创建了一个新用户(与我登录的用户相同)作为 db_owner。现在,当我想查看数据库图表时出现错误

无法安装数据库关系图支持对象,因为此数据库没有有效的所有者。要继续,首先使用“数据库属性”对话框的文件页面或“更改授权”语句将数据库所有者设置为有效登录名,然后添加数据库支持对象

现在,当我尝试从数据库属性的文件页面更改所有权时,我收到错误消息

为数据库 'ABC' 设置所有者失败。(Microsoft.SqlServer.SMO) 附加信息:SMO 中发生异常 提议的新数据库所有者 James-PC\James 在此数据库中映射为用户 James。参数名称:James-PC\James"

请帮我解决这个问题,以便我可以在从另一个系统恢复数据库备份后在这台计算机上看到数据库图表。

sql-server sql-server-2008-r2

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

使用 STATISTICS_NORECOMPUTE 的可取性

我最近参与维护一组具有一些有趣索引问题的数据库。最让我恼火的是开发、测试、模型和生产机器之间的指标差异。由于差异使得调优查询变得相当困难,因此同步它们是我的第一个项目之一。

当我比较了测试和模型环境时,我注意到模型环境中的大多数索引都STATISTICS_NORECOMPUTE设置为 ,ON而测试中的索引没有。在所有环境中,都有更新所有数据库统计信息的夜间作业。

我以前从未处理过STATISTICS_NORECOMPUTE,所以这里是我的问题。处理此设置时是否有任何最佳做法?如果我在一天结束时进行统计更新,最好打开STATISTICS_NORECOMPUTE所有索引的所有环境?或者有充分的理由不这样做吗?

编辑:我发现了金佰利特里普的关于这一主题的博客之一在这里,似乎表明STATISTICS_NORECOMPUTE应谨慎充其量只能使用。但我仍然担心在全球范围内关闭它。有没有人试过这个,他们经历了什么?

index sql-server statistics sql-server-2008-r2

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

释放未使用的空间 SQL Server 表

我在 SQL Server 2012 Express 中有一个表,有很多未使用的空间。

我需要释放数据库中的空间。

| 姓名 | 行 | 保留 | 数据 | INDEX_SIZE | 未使用 |
|-------------|--------|--------------|----------- ---|------------|--------------|
| 我的表名 | 158890 | 8928296 KB | 5760944 KB | 2248 KB | 3165104 KB |

如何让 SQL 释放 3165104KB?

我已经试过了:

Alter table MyTableName Rebuild
DBCC CLEANTABLE (MyDbName,"MyTableName ", 0)
ALTER INDEX ALL ON MyTableName REORGANIZE ; 
ALTER INDEX PK_Image ON MyTableName REBUILD WITH (ONLINE = OFF) 
Run Code Online (Sandbox Code Playgroud)

这是表:

CREATE TABLE [dbo].[MyTableName](
    [ImageID] [int] IDENTITY(1,1) NOT NULL,
    [DateScan] …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

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

在生产服务器中运行 sp_updatestats 有什么影响?

sp_updatestats在生产环境中的 SQL Server上运行是否安全?

或者更确切地说,更新 sql server 上的所有统计信息有什么影响?它可以在运行时“阻塞”sql server 并导致用户超时或其他问题吗?

sql-server statistics sql-server-2008-r2 index-statistics

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