スタンバイモードを使用してログ配布を設定しました([バックアップの復元時にデータベース内のユーザーを切断する]がオフになっています)。
次のコードをセカンダリサーバー/データベースで実行することをテストしました。
declare @a int
while 1=1
begin
select @a = count(*) from ....
end
ただし、ログ配布復元ジョブの実行が開始されると、コードは次のエラーで停止します。
データベースを開けません。復元の途中です。
問題を回避する方法は?
これは、ログ配布がどのように機能するかのようなものです。ログバックアップを適用するには、データベースへの排他的アクセスが必要です。つまり、スクリプトはデータベースをsingle_userに設定するか、ログバックアップを適用する前にすべてのユーザーを削除する必要があります。
いくつかの回避策:
まず、データベースが実際に復元されているかどうかを最初に確認します。これは、ステータスのレポートに使用するクエリです。
SELECT session_id AS SPID
,command
,a.TEXT AS Query
,start_time
,percent_complete
,dateadd(second, estimated_completion_time / 1000, getdate()) AS estimated_completion_time
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a
WHERE r.command IN ('BACKUP DATABASE','RESTORE DATABASE')