0

2 つのデータベース間のマージ レプリケーションを構成する必要があります。これらのデータベースには外部キーの整合性があり、レプリケーションが機能しないため、次の方法に頼りました。

  1. サブスクライバ データベースのすべての FK をドロップします。
  2. 複製、および
  3. FK の再作成。

ただし、これにより、サブスクライバー データベースが FK 違反に対して脆弱なままになります。


だから私の質問は:

  1. レプリケーションはサブスクライバー データベースをロックし、トランザクションを発生させ、プロセス中に何らかの方法でデータベースを使用できなくしますか?
  2. そうでない場合、TSQL を使用して手動でそのようなロックを開始できますか?
  3. 上記のいずれも不可能な場合、何か不足していますか?
4

1 に答える 1

0

レプリケーションによって開始されたロックについてはわかりませんが、メンテナンスの際に、データベース全体を single_user または limited_user に設定できます。

ALTER DATABASE SET RESTRICTED_USER 

2番目の方法をお勧めします。これにより、次のすべてのユーザーがデータベースにアクセスできるようになります。

db_owner 固定データベース ロールと dbcreator および sysadmin 固定サーバー ロールのメンバー

(ここを参照してください: http://msdn.microsoft.com/en-us/library/aa933082%28SQL.80%29.aspx )

、通常のユーザーのみが制限されています。すべての通常のユーザー接続が完了するまで待機します

ALTER DATABASE SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE 

そのようなすべての接続をすぐに切断します。これ

select DATABASEPROPERTYEX ('ocon_reportdb','UserAccess') DATABASEPROPERTYEX_UserAccess

現在の状態を読み取ります

UPDATE : データベース エンジンによって実行される統計などのメンテナンス アクティビティがあります。を使用WITH ROLLBACK IMMEDIATEすると、これらの接続も切断されるため、注意してください

UPDATE2: restricted_user-modeでアクセスできる仕様

于 2013-05-08T10:07:37.870 に答える