none
バックアップから復元したデータベースのレプリケーション設定が削除できません。 RRS feed

  • 質問

  • バックアップから復元したデータベースのレプリケーション設定が削除出来なくて困っています。

    旧環境
    OS:Windows Server 2003 R2
    SQL Server 2005 STD SP4
    AD:exm.localに参加
    ホスト名:svr1
    でデータベースを運用しておりました。
    またsvr1がディストレビュータ―及びパブリッシャーになり
    2つのトランザクションレプリケーションを設定しておりました。
    2つともプッシュ型でサブスクライバは1つずつです。

    今回OSとSQLを
    OS:Windows Server 2012 R2
    SQL Server 2012 SP1
    に致しました。
    ハードウェアは1つしかありませんでしたので
    DBのバックアップを取ってからOSをクリーンインストール。
    その際にバックアップを行ってからレプリケーションの設定を削除してしまいました。

    ホスト名を含め同じ環境でサーバを構築しバックアップから復元したところ
    ローカルパブリケーションが2つ。それぞれにサブスクリプションが1つずつ設定がありました。
    これらを削除したいのですが、management studioで削除しようとしても
    エラーが出てどうにも削除できません。

    エラー内容
    'xxsrv'は'svr1'のサブスクライバーとして定義されていません。
    ディストレビューションデータベースのサブスクリプションテーブルを更新できませんでした。


    今考えるとdistribution等のシステムデータベースもバックアップを
    取っておけばよかったのでしょうが、バックアップを取っておいたのは
    1つのユーザデータベースのみです。

    いろいろ調べて下記のコマンド
    sp_dropsubscription @publication='all',@article='all',@subscriber='all',@ignore_distributor=1
    を実行するとパブリッシャーが有効ではない。と怒られます。
    ディストレビューションデータベースから削除するコマンドのようですので
    当然と言えば当然でした。


    ユーザデータベースがレプリケーションの設定を持っていると思うのですが
    どのようにして削除したらいいのか情報を見つけることが出来ませんでした。

    とりあえずホスト名が異なるサーバにバックアップを戻すと
    レプリケーションの設定がされませんでしたので現在はホスト名を変えて
    なんとか運用しています。

    svr2に復元し、レプリケーションの設定がmanagement studio上で表示されないことを確認して
    バックアップを取りsvr1へ復元してみましたがレプリケーションの設定は消えていませんでした。

    バックアップから戻すときのオプションでレプリケーションの設定は
    復元しないようにしていても復元されてしまうのが納得がいきませんが
    これは正しい動作なのでしょうか。

    また、なんとかバックアップから復旧させた後にレプリケーションの設定を消す方法
    もしくはレプリケーションの設定がない形で復元する方法はありませんでしょうか。

    ご教授お願いいたします。

    2014年3月27日 1:33

回答

  • 下記の手順ではいかがでしょうか?
    GUI を使う方法と Transact SQL で操作する方法、どちらか一方でもうまくいけば良いのかなと思います。
    http://technet.microsoft.com/ja-jp/library/ms151759.aspx

    上記ページ内で紹介されている sp_removedbreplication は、ディストリビューションデータベースとの整合性を維持しないため、他の方法でレプリケーションを削除できなかったときだけ使うよう警告されているようななかなか強烈なストアドですので、あまり積極的にお勧めしてはいけない気もしますが、この状況の場合は試してみる価値はあるかと思われます。


    MCITP(Database Developer/Database Administrator)

    • 回答としてマーク T.Tappu 2014年3月27日 6:43
    2014年3月27日 2:06

すべての返信

  • 下記の手順ではいかがでしょうか?
    GUI を使う方法と Transact SQL で操作する方法、どちらか一方でもうまくいけば良いのかなと思います。
    http://technet.microsoft.com/ja-jp/library/ms151759.aspx

    上記ページ内で紹介されている sp_removedbreplication は、ディストリビューションデータベースとの整合性を維持しないため、他の方法でレプリケーションを削除できなかったときだけ使うよう警告されているようななかなか強烈なストアドですので、あまり積極的にお勧めしてはいけない気もしますが、この状況の場合は試してみる価値はあるかと思われます。


    MCITP(Database Developer/Database Administrator)

    • 回答としてマーク T.Tappu 2014年3月27日 6:43
    2014年3月27日 2:06
  • nagio様

    ご回答頂きありがとうございました。

    GUIからの無効化は既に試しており、エラーで消せませんでしたが

    そもそもディストリビューションデータベースにパブリッシャーやサブスクライバの情報がないのが

    削除できない原因だと思われたため、sp_removedbreplicationを使用し

    sp_removedbreplication @dbname = 'sampledb1' , @type = 'tran'

    としたところ無事レプリケーションの設定が消えました。

    非常に助かりました。ありがとうございました。

    2014年3月27日 6:42