none
数据库使用镜像迁移导致的复制问题 RRS feed

  • 问题

  • 麻烦大家给介绍个好的方案,问题如下:

    在用的数据库服务器A 性能不行了,要换机器。但IP又不能变更,而且对业务的影响要到最短时间。

    当前的做法:

    1、先准备一台替换服的服务器B。

    2、A上面的数据库全部做了镜像到新机器B

    3、把主库切到B后,替换A和B的IP地址,重启数据库(这时可以暂不做镜像)

    存在问题:

    原本A机器上还有复制配置,做事务发布,推送到C和D服务器上 。 发布和分发服务器都是在A上。 虽然可以通过镜像的方式先把库切到B,但复制的配置没法过去。由于A是较早的版本,B服务器上安装的MSSQL版本与A不同,不能把A的Master,MSDB等系统数据库在B上还原。

    在B替换A后(换成原来A机器的IP),导致原来A上的作业要重新配置,复制也要重新推送。影响C,D上的业务查询。对业务造成较大的影响。

    在此请教各位老师,大侠们,在这种条件下采用什么样的方案能将对业务的影响减少到最好。最好不要重新做发布,分布,初始化订阅的操作。

    2013年4月8日 16:09

答案

全部回复

  • You don't have many options here, have to reset replication. If it's not 24x7, you can swap server on weekend.
    2013年4月8日 17:23
  • BTW,也需要修改电脑名称的.....

    有可能某些时候是直接使用的servername去连接DB的


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.

    2013年4月9日 2:42
  • 配置你的镜像服务器做为分发服务器(远程分发)

    2013年4月9日 4:14
  • 硬件要升级,可以把Master/msdb/等整体迁移到新机机上,开始全备份并恢复好后,再停用原机,备份并恢复日志,启用新机,改IP

    估计几十秒也OK了


    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com

    2013年4月9日 5:10
  • 数据量大,这种方法没办法操作。

    2013年4月9日 23:40
  • 由于服务器名不一样。这次迁过来问题大了。现在复制又不能用了。

    执行了
    DELETE FROM msdb.dbo.MSdistpublishers

    后,现在服务器上本地发布都是空的,但系统数据库里distribution库还在,右键点本地的复制,弹出菜单里也没有禁用发布和分发选项(系统认为是没有配置的,但DISTRIBUTION库却还是在的。),要想重新建一个发布,但就是弹不出新建发布的菜单,要进行这样的操作时,MSSQL就提示忙。

    MSSQL版本:9.0.5000

    ====现在我还原了一个干净的MSDB进去,但DISTRIBUTION库,还是无法新建发布。现在如何删除DISTRIBUTION库呢?
    2013年4月9日 23:45
  • Follow instructions listed under 'How to: Disable Publishing and Distribution (Replication Transact-SQL Programming)' in books online. 
    2013年4月10日 2:18
  • 'How to: Disable Publishing and Distribution (Replication Transact-SQL Programming)'

    ====这个之前就已经照做了。无效。在master 里执行drop database distribution还是提示在用于复制 。

    消息 3724,级别 16,状态 3,第 1 行
    無法 卸除 資料庫 'distribution',因為它已用來複寫。

    2013年4月10日 2:22
  • Did follow steps in correct order?
    2013年4月10日 2:40
  • yes.

    我重新执行一遍去
    2013年4月10日 2:48
  • At which step you got error? There's no 'drop database', all are performed with sps. 
    2013年4月10日 3:03
    1. 停止所有与复制相关的作业。 有关作业名称列表,请参阅复制代理安全模式的“SQL Server 代理下的代理安全性”部分。===NO any job.

    2. 在每个订阅服务器上,对订阅数据库执行 sp_removedbreplication 以从该数据库删除复制对象。 此存储过程不会删除分发服务器上的复制作业。==没有订阅服务器连接

    3. 在发布服务器上,对发布数据库执行 sp_removedbreplication 以从该数据库删除复制对象。==执行正确,无错误提示

    4. 如果发布服务器使用远程分发服务器,则执行 sp_dropdistributor。==本地分发,这步不执行。

    5. 在分发服务器上,执行 sp_dropdistpublisher。 应为在分发服务器上注册的每个发布服务器运行一次此存储过程。===错误如下

    6. 在分发服务器上,执行 sp_dropdistributiondb 以删除分发数据库。 应为在分发服务器上注册的每个分发数据库运行一次此存储过程。 此操作还将删除与分发数据库关联的任何队列读取器代理作业。

    7. 在分发服务器上,执行 sp_dropdistributor 以从该服务器删除分发服务器指定。

    DECLARE @distributionDB AS sysname;
    DECLARE @publisher AS sysname;
    DECLARE @publicationDB as sysname;
    SET @distributionDB = N'distribution';
    SET @publisher=$(DistPubServer);
    SET @publicationDB = N'XXXXXX';

    -- Disable the publication database.
    USE XXXXXX
    EXEC sp_removedbreplication @publicationDB;

    -- Remove the registration of the local Publisher at the Distributor.
    USE master
    EXEC sp_dropdistpublisher @publisher;

    -- Delete the distribution database.
    EXEC sp_dropdistributiondb @distributionDB;

    -- Remove the local server as a Distributor.
    EXEC sp_dropdistributor;
    GO

    ===执行这个提示:

    消息 102,级别 15,状态 1,第 6 行
    接近 'DistPubServer' 之處的語法不正確。

    2013年4月10日 3:09
  • Replace $(DistPubServer) with server name then try again.
    2013年4月10日 3:21
  • 消息 14071,级别 16,状态 1,过程 sp_dropdistpublisher,第 99 行
    找不到本機伺服器的散發者或散發資料庫。可能未安裝散發者、或在散發者端尚未將本機伺服器設定為發行者。
    消息 14114,级别 16,状态 1,过程 sp_dropdistributiondb,第 61 行
    伺服器 'XXXXXX' 未設定為散發者。
    消息 21043,级别 16,状态 1,过程 sp_dropdistributor,第 50 行
    並未安裝散發者。
    2013年4月10日 3:32
  • Means that machine is not configured for replication.
    2013年4月10日 13:22