Bakファイルを使用してSQLを復元しようとしています
エラーが発生しています
データベースが使用中であるため、排他的アクセスを取得できませんでした
私は試した
USE [master]
ALTER DATABASE myDB
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
クエリを実行します
USE [master] RESTORE DATABASE myDB
FROM DISK = 'C:\MyDatabase.bak' WITH FILE = 1, NOUNLOAD, STATS = 10
復元ウィザードからも同じ結果を試しました。
データベースが使用中であるため、排他的アクセスを取得できませんでした。
方法1
declare @sql as varchar(20), @spid as int
select @spid = min(spid) from master..sysprocesses where dbid = db_id('<database_name>') and spid != @@spid
while (@spid is not null)
begin
print 'Killing process ' + cast(@spid as varchar) + ' ...'
set @sql = 'kill ' + cast(@spid as varchar)
exec (@sql)
select
@spid = min(spid)
from
master..sysprocesses
where
dbid = db_id('<database_name>')
and spid != @@spid
end
print 'Process completed...'
方法2
alter database database_name
set offline with rollback immediate
alter database database_name
set online
行く
この問題を解決するためにクエリを記述する必要はありません。私は同じ問題を数回抱えていて、この方法でそれを解決します:データベースを復元するとき
データベースの復元を開始しています...
上記の問題を抱えていて、どのアドバイスも機能しない人は誰でも。「オプション」の下でTaillogバックアップをオフにしてください。
このオプションをオン(またはオン)にすると、ソースデータベース自体の末尾ログの取得が試行されます(復元のソースが単なるファイルであっても)。したがって、ソースデータベースが使用中の場合(本番データベースのコピーを実行している場合は、通常はそうなります)、復元は失敗します。
既にデータベースが存在する開発サーバーに本番バックアップを復元しようとしたときに、この問題が発生しました。ターゲットデータベース名を変更してコピーとして復元したかったのですが、実際にはファイルに問題がありました。デフォルトでは、すでに存在するファイルを上書きしようとしました。復元ダイアログの「ファイル」ページで「すべてのファイルをフォルダーに再配置」をチェックし、ファイルの衝突が発生しないように新しいディレクトリを選択することで問題を修正しました。