SQL Server で一度に複数のデータベースを復元する方法は?通常、効率的な T-SQL スクリプトを使用するか、制約が少ない強力なソフトウェアを試すことができます。
残念なことに、SSMS GUI では一度に1つのデータベースしかリストアできません。複数のデータベースを複数のバックアップファイルにバックアップした場合、すべてを一度にリストアすることは可能でしょうか?
答えはYESです。一般的に、バックアップファイルが対応するデータベースの名前で正確に命名され、日付/時刻などの追加情報がない場合、有効なT-SQLスクリプトを使用して複数のデータベースを一度にリストアすることができます。
より柔軟に行いたい場合、GUIを使用した簡単な代替方法もあります。好きな方法を選んでください。
SQL Serverで複数のデータベースを復旧することは、複雑なプロセスになることがあります。ダウンタイムを最小限に抑えるために、以下の複数の前提条件を満たす必要があります:
フォルダからSQL Serverで複数のデータベースをリストアするためにスクリプトを使用することができます。ただし、その前にインスタンスに接続し、xp_cmdshellを有効化する必要があります。
1. New Queryをクリックし、次のコマンドを入力します:
-- To allow advanced options to be changed. EXEC sp_configure "show advanced options", 1;GO-- To update the currently configured value for advanced options.RECONFIGURE;GO-- To enable the feature.EXEC sp_configure "xp_cmdshell", 1;GO-- To update the currently configured value for this feature.RECONFIGURE;GO
クエリを実行し、機能が有効になります。
2. その後、スクリプトを使用してSQL Serverの複数のデータベースを復元できます(「D:\backup\」をバックアップファイルが格納されているフォルダに置き換えてください):
DECLARE @FilesCmdshell TABLE (outputCmd NVARCHAR (255))DECLARE @FilesCmdshellCursor CURSORDECLARE @FilesCmdshellOutputCmd AS NVARCHAR(255)INSERT INTO @FilesCmdshell (outputCmd) EXEC master.sys.xp_cmdshell "dir /B D:\backup\*.bak"SET @FilesCmdshellCursor = CURSOR FOR SELECT outputCmd FROM @FilesCmdshellOPEN @FilesCmdshellCursorFETCH NEXT FROM @FilesCmdshellCursor INTO @FilesCmdshellOutputCmdWHILE @@FETCH_STATUS = 0BEGINDECLARE @cmd NVARCHAR(MAX) = "RESTORE DATABASE [" SUBSTRING(@FilesCmdshellOutputCmd, 0, CHARINDEX(".", @FilesCmdshellOutputCmd)) "] FROM DISK = N"'D:\backup\" SUBSTRING(@FilesCmdshellOutputCmd, 0, CHARINDEX(".", @FilesCmdshellOutputCmd)) ".bak"' WITH FILE = 1, NOUNLOAD, STATS = 10"EXEC(@cmd)FETCH NEXT FROM @FilesCmdshellCursor INTO @FilesCmdshellOutputCmdEND
✎Note: "データベースのログの最後はバックアップされていません。ログに失いたくない作業が含まれている場合は、バックアップログ WITH NORECOVERY を使用してログをバックアップします。 RESTORE ステートメントの WITH REPLACE や WITH STOPAT 句を使用してログの内容のみを上書きする"というエラーが表示された場合、プロンプトに表示されているように行ってください。
例えば、リストアコマンドを「…WITH FILE = 1, REPLACE, NOUNLOAD, STATS = 10」に変更できます
または、SQL Serverのすべてのデータベースに対して復元コマンドを生成し、それらを新しいスクリプトとして結合して実行するスクリプトを使用することもできます。
1. New Query をクリックして、以下のコマンドを SQLQuery ウィンドウに入力します:
DECLARE @folderpath VARCHAR (1000)SELECT @folderpath = "D:\Backup\" -- バックアップの場所SELECT "RESTORE DATABASE[" NAME "] FROM DISK = "'" @folderpath name ".bak"' WITH NORECOVERY, REPLACE, STATS = 5"FROM master.sys.databasesWHERE name NOT IN ("master","model","msdb","tempdb","distribution")
これにより、SQL Server の複数のデータベースを同名の bak ファイルから復元するための一連のコマンドが生成されます。
2. Results のコマンドのいずれかを右クリックし、Select All を選択してから Copy します(または Ctrl A と Ctrl C を使用します)。
3. これらのコマンドを SQLQuery ウィンドウに新しいスクリプトとして Execute します。これにより、対応するファイル名を持つ bak ファイルから SQL Server のすべてのデータベースが復元されます。
上記のスクリプトは、bak ファイルがSQLデータベースとまったく同じ名前である場合にのみ適用されますが、実際には制限があります。したがって、複数のデータベース、またはインスタンス全体をバックアップおよび復元するより便利な方法を提供します。
AOMEI Cyber Backupは、LAN内のすべてのデスクトップ、ノートパソコン、およびサーバーでSQLデータベースをバックアップおよび復元するための信頼性のある集中管理ソリューションです。Windows 11/10/8.1/8/7、Windows Server 2022/2019/2016/2012 (R2)/2008 (R2)で動作し、SQL Server 2005から2022までのバックアップをサポートしています。また、SQLデータベースに加えて、Hyper-VおよびVMwareの仮想マシンバックアップもサポートしています。
これで、追加したSQL Serverのデータバックアップをスケジュールすることができます。
◉ SQL Serverで複数のデータベースをバックアップする方法:
1. バックアップタスク -> 新しいタスクの作成 をクリックし、バックアップタイプを Microsoft SQLバックアップ として選択します。
2. SQLインスタンスとバックアップするデータベースを指定するには、デバイス名をクリックします。必要に応じて1つまたは複数のデータベースを選択できます。
3. SQLバックアップを保存するターゲットストレージを選択します。ローカルパスまたはネットワークパスを指定できます。
4. スケジュールを設定して、SQLデータベースのバックアップを毎日、毎週または毎月で実行し、完全バックアップ、増分バックアップ、差分バックアップのバックアップ方法を選択します。
バックアップを開始をクリックしてタスクを作成および実行します。完了すると、バックアップタスクタブに表示されます。
✍より便利な機能:
◉ バックアップから複数のデータベースを復元する方法:
1. 左側のメニューバーのバックアップタスクをクリックし、復元したいタスクを見つけ、
2. SQLデータベースを復元するために復元するバックアップバージョンを選択します。
3. 次に、復元するターゲットの場所を選択します。2つのオプションがあります:
同名のデータベースを上書きする: このオプションにチェックを入れると、同じ名前のターゲットデータベースがバックアップされたデータベースに上書きされます。チェックを外すと、復元中に同じ名前のターゲットデータベースは省略されます。
4. 全ての設定が完了したら、「復元を開始」をクリックして復元プロセスを開始し、完了するのを辛抱強く待ちます。クリックできる
✍注意事項:
SSMSの復元GUIでは、一度に1つのデータベースのみを復元することができます。SQL Serverで複数のデータベースを一度に復元したい場合、最も一般的な方法はT-SQLスクリプトを使用することです。ただし、バックアップファイル名に厳しい制限があり、他のインスタンスにデータベースを復元するなどの操作が実行しにくくなります。そのため、SQLバックアップソフトウェアであるAOMEI Cyber Backupも試してみることができます。
操作が簡単になります。たとえば、いくつかの簡単なクリックでSQLデータベースを自動バックアップすることができ、同じくらい簡単な操作で複数のデータベースを一度に復元することができます。SQLデータベースを自動バックアップする