在事务复制期间,我们有数据从服务器 A 传输到服务器 B。
假设我们要在服务器 A 上的表上重新设置标识列(无论出于何种原因),这将如何影响服务器 B 上的数据?
我的直觉会说服务器 A 上的数据将使用新播种的身份,并将按原样发送到服务器 B(并且服务器 B 将具有使用新身份的内容),但我不确定这是否是正确的。
在事务复制期间,我们有数据从服务器 A 传输到服务器 B。
假设我们要在服务器 A 上的表上重新设置标识列(无论出于何种原因),这将如何影响服务器 B 上的数据?
我的直觉会说服务器 A 上的数据将使用新播种的身份,并将按原样发送到服务器 B(并且服务器 B 将具有使用新身份的内容),但我不确定这是否是正确的。
假设我们有两个服务器:服务器 A 和服务器 B。数据正在从 A 复制(普通事务复制)到 B。
对于其中一个表,我们有如下数据:
Server A - Server B
========= =========
ID|Content ID|Content
---------- ----------
1 | ... 1 | ...
2 | ... 2 | ...
... ...
98| ... 98| ...
99| ... 99| ...
一段时间后,我们删除旧数据:
Server A - Server B
========= =========
ID|Content ID|Content
---------- ----------
50| ... 50| ...
51| ... 51| ...
... ...
98| ... 98| ...
99| ... 99| ...
现在,我们改变了复制的顺序,所以现在服务器 B 正在复制到服务器 A。
问题是:
我本以为添加到服务器 B(然后复制到服务器 A)的新数据将继续使用 ID 列(它将转到 100、101、102,...)。相反,我注意到它从 1 开始。
问题是:
当 ID 最终达到 50 时,数据库将如何处理?数据库会开始抛出主键违规,还是会意识到发生了什么,并从 ID 49 跳到 ID 100?
如果它开始抛出主键违规,是否有一个命令可以用来告诉服务器 B 它应该从 ID 100 开始?如果是这样,这个命令可以在复制数据时完成吗?
当我们执行以下命令时:
DBCC SHRINKFILE('MyDB_log', 1)
我们在 SSMS 中得到以下结果:
DBID | Field | CurrentSize | MinimumSize | UsedPages | Estimated Pages
-----|-------|-------------|-------------|-----------|----------------
11 | 2 | 128 | 128 | 128 | 128
问题:
我们如何在不使用 SSMS 输出窗口的情况下创建将这些结果输出到文本文件的查询。
我试过这个:
CREATE TABLE #x
(
[DBID] int,
FileID int,
CurrentSize int,
MinimumSize int,
UsedPages int,
EstimatedPages int
)
INSERT #x
EXEC('DBCC SHRINKFILE(''MyDB_log'', 1)')
SELECT *
FROM #x
DROP TABLE #x
但我收到以下错误:
Msg 8920, Level 16, State 2, Line 1
Cannot perform a shrinkfile operation inside a user transaction. Terminate the transaction and reissue the statement.
我还尝试了以下方法:
DECLARE @Statement AS VARCHAR(2000);
SET @Statement = 'bcp "DBCC SHRINKFILE(''MyDB_log'', 1)" queryout C:\Test.txt -c -UDBAdmin -P1234 -S192.168.123.123';
exec xp_cmdshell @Statement
我得到:
Error = [Microsoft][SQL Native Client]BCP host-files must contain at least one column
设置:
假设我们有一个处于完全恢复模式的数据库,每晚执行数据库备份、事务日志备份和事务日志收缩。
现在 Transaction Log 在一天中增长如此之快,所以我们需要每 6 小时执行一次 Transaction Log Backup + Transaction Log Shrink 以保持其较小。
问题:
鉴于这些事件的顺序(特别是每六个小时的事务日志备份/收缩),我们是否仍然能够执行“最新”恢复?(即使用上次的DB Backup + Transaction Log获取最新的数据)。
我有一个包含以下列定义的表:
ID (INT, PK)
Name (VarChar)
Active (Bit)
Bunch_of (Other_columns)
问题:我想要一个约束,Name/Active
这样我们只能有 1 条给定Name
为Active
( Active
= 1) 的记录,但我们可以有许多相同Name
的记录Inactive
( Active
= 0)。这可能吗?
我已经尝试过正常的 Unique 约束,但它们将数据集限制为仅允许 1 条记录,且给定Name
为Inactive
.
我继承了执行以下操作的维护计划:
在 23 分钟的维护计划中,更新统计数据需要惊人的 13 分钟。在这 13 分钟期间,对数据库的访问被阻止(或者至少,从这个数据库到我们其他数据库的复制被暂停)。
我的问题是:
我们什么时候应该更新统计数据,为什么?
这似乎是我们应该比每天少做的事情。我试图让我们摆脱“仅仅因为”做不必要的维护的心态。
今天,我遇到了一个存储过程在从 ASP.NET 网页运行时超时(耗时超过 30 秒)的问题,但在从 SSMS 运行时却快速执行(耗时 5 秒)。
在怀疑参数嗅探是罪魁祸首之后,我屏蔽了输入参数,查询执行得更快。
我的问题是:为什么会这样?
这个系统已经投入生产超过 5 年,这是我们第一次在我们的存储过程中看到这样的东西。这是“数据库磨损”吗?
我们已经解决了这个问题,所以这没什么大不了的,但我只是好奇为什么会这样。
发生了什么:
我在 16 小时前重新初始化了订阅。我有大约 120 万条记录要传输,所以我预计这需要一段时间。Replication Monitor 说“ N 个事务和 N 个命令已交付”数小时,所以我认为一切正常。
问题:
今天早上,当我检查复制监视器时,我看到了:
哦不!我惊呼道,我想我需要用更新的快照重新初始化复制以避免拉出 120 万行。但是我查看了复制监视器上的另一个选项卡,我看到了这个:
问题:
我想知道为什么要交付事务,尽管复制监视器抱怨快照。
我有 4 个服务器,服务器 A、B、C、D。
服务器 A 发布一个复制实例,服务器 B、C、D 对其进行请求订阅。
服务器 B 的订阅需要重新初始化,但我担心重新初始化它(使用“当前快照”,而不是生成新快照)会影响到其他服务器的复制性能。
我应该担心,还是因为服务器 B、C 和 D 有拉(而不是推)订阅,我是不是想多了?
我希望我的维护计划的最后一步是执行一个简单的自定义 SQL 脚本 ( SELECT * FROM <SomeTable> WHERE <Condition>
),并将结果保存到一个文件(文本、CSV 等)中。
这可能吗?我发现最接近的是在.bat
Windows 执行的文件中执行此操作,但这似乎有点麻烦。
系统:
我有一个为多个表(10 个表,总共 5000 万条记录)重建索引的维护计划。
问题:
在索引重建期间(约 20 分钟),我们无法将数据插入数据库
问题:
如何减少维护计划期间的停机时间?我正在考虑确保事务日志大小较小(每天截断 4 次),但我认为这不会有帮助。
我也不确定更频繁地重建索引是否会有帮助。(因为我不知道这是否是将受益于最近重新索引表的“批量”操作)。
注意:升级到 SQL Server 2005 Enterprise 以获得实时重新索引功能不是一个选项。
设置:
问题: 在复制失败的情况下,是否可以使用 SSMS 2005 中的警报工具在辅助服务器上启动 Windows 服务?
如果没有,此功能是否在较新版本的 SSMS 中可用?
故事:每周一次,我们运行一个特殊的维护计划,涉及重新索引 2 个关键表,这两个表之间有大约 600 万条记录。我们使用 SQL Server 2005 标准版。
问题:在此重新索引(约 15 分钟操作)期间,我们未能将数据插入表中,并且我们的客户没有数据。
有人告诉我,SQL Server 2008 Enterprise 有一个“联机重新索引”,它在较低版本的 SQL Server 中不存在,可以解决我们的问题。
但是,我刚刚在维护计划选项(SQL 2005 标准)中找到了以下选项:
我的问题:这是否执行与 2008 Enterprise 相同的“在线重新索引”?启用此选项有什么影响(性能方面)?我是不是差点被诱骗购买 2008 Enterprise 许可证?
尝试运行维护计划时,我收到以下错误:
执行查询“”失败,出现以下错误:“无法重新组织表“”上的索引“”(分区 1),因为禁用了页级锁定。”
我们目前在此索引上启用了行级别锁定。我可以启用页面级别锁定,但我不确定会产生什么影响。
我的问题是:这两种锁定方案有什么区别,它们在现实世界(生产中)的后果是什么?