服务器崩溃后如何恢复复制

hor*_*rgh 8 replication sql-server-2005 sql-server transactional-replication

我们在一个 SQL Server 2005 实例上有两个数据库,它们之间有事务复制(3 个表作为文章)。该服务器同时充当发布者和分发者。

然后服务器上的 RAID 失败。然而,我们设法.mdf在崩溃之前分离并复制了几乎所有文件。

系统恢复后,我们重新安装了SQL Server,恢复了系统数据库(master、model、msdb)并将.mdf文件放在相同的路径下。于是开始了。

问题出现在复制中。在本地发布文件夹是空的,虽然本地订阅文件夹包含有问题的订阅。当我尝试添加新出版物时,我得到了:

新发布向导在检索发布名称时遇到一个或多个错误。

执行 Transact-SQL 语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo)

无效的对象名称“dbo.syspublications”。(Microsoft SQL Server,错误:208)

我决定尝试删除左订阅(最终我设法)并禁用服务器上的发布和分发,这给了我:

SQL Server 无法禁用“someserver”上的发布和分发。

无效的对象名称“dbo.syssubscriptions”。EXECUTE 之后的事务计数表示缺少 COMMIT 或 ROLLBACK TRANSACTION 语句。先前计数 = 0,当前计数 = 1。 EXECUTE 之后的事务计数表示缺少 COMMIT 或 ROLLBACK TRANSACTION 语句。先前计数 = 0,当前计数 = 1。 EXECUTE 之后的事务计数表示缺少 COMMIT 或 ROLLBACK TRANSACTION 语句。先前计数 = 0,当前计数 = 1。 EXECUTE 之后的事务计数表示缺少 COMMIT 或 ROLLBACK TRANSACTION 语句。先前计数 = 0,当前计数 = 1。 EXECUTE 之后的事务计数表示缺少 COMMIT 或 ROLLBACK TRANSACTION 语句。先前计数 = 0,当前计数 = 1。将数据库上下文更改为“master”。(Microsoft SQL Server,错误:208)

似乎一些信息没有从系统数据库备份中恢复(可能distribution数据库可能丢失了一些东西)。

我还尝试按照无法禁用发布和分发中给出的答案进行操作。但没有成功。我试图syspublicationsmaster和 中创建distribution,但没有任何改变。

那么,如何在此服务器上进行复制?

尝试在服务器上发布一些其他数据库并且它起作用了。所以问题似乎与发布的数据库有关。如何清除它以管理在其上创建新出版物?

System Tables 问题数据库的子文件夹丢失了在发布数据库时创建的复制表。

在复制监视器中,我可以看到那些旧订阅,而它们在复制文件夹中不可用 。

hor*_*rgh 4

最后,我只是做了服务器想要的事情,即通过脚本表在有问题的数据库(发布者的数据库)中创建了所有“发布”表(*dbo.MSpeer_** 和 *dbo.sys** )作为-> CREATE 到对话框。感谢该服务器允许我禁用发布和分发。然后我只需要重新配置复制。

希望下次崩溃时(实际上我希望不会),我们能够明智地彻底备份复制涉及的表。


Zane的附加信息,最初留在评论中:

还可以通过在安装了 SQL Server 的不同服务器上配置分发者/发布者来创建表 dbo.MSpeer_* 和 dbo.sys*。这将在您设置用于发布的数据库中创建这些表。请参阅 SSMS 中的 -> 表 -> 系统表。

然后,生成所有这些表的架构,然后在有问题的数据库中创建这些表,这将允许您禁用分发和发布并重新配置分发器。