SQL Server で複数のデータベースを復元する方法(3つの方法)
SQL Server で一度に複数のデータベースを復元する方法は?通常、効率的な T-SQL スクリプトを使用するか、制約が少ない強力なソフトウェアを試すことができます。
複数のSQLデータベースを一度にリストアできますか
残念なことに、SSMS GUI では一度に1つのデータベースしかリストアできません。複数のデータベースを複数のバックアップファイルにバックアップした場合、すべてを一度にリストアすることは可能でしょうか?
答えはYESです。一般的に、バックアップファイルが対応するデータベースの名前で正確に命名され、日付/時刻などの追加情報がない場合、有効なT-SQLスクリプトを使用して複数のデータベースを一度にリストアすることができます。
より柔軟に行いたい場合、GUIを使用した簡単な代替方法もあります。好きな方法を選んでください。
SQL Serverで複数のデータベースをリストアするための前提条件
SQL Serverで複数のデータベースを復旧することは、複雑なプロセスになることがあります。ダウンタイムを最小限に抑えるために、以下の複数の前提条件を満たす必要があります:
- 管理者特権を持ち、バックアップファイルにアクセスできること。
- バックアップファイルごとに1つだけのデータベースバックアップが存在すること。
- バックアップファイルのデータベースには、ログファイルとデータファイルの2つのファイルしか含まれていないこと。
- データベース名をディスク上の物理ファイルの名前に使用しているため、リストアする新しいデータベースで使用できる物理ファイル名の文字が許可されていること。
方法1. xp_cmdshellを使用してbakファイルから複数のデータベースをリストアする
フォルダから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 CURSOR
DECLARE @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 @FilesCmdshell
OPEN @FilesCmdshellCursor
FETCH NEXT FROM @FilesCmdshellCursor INTO @FilesCmdshellOutputCmd
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @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 @FilesCmdshellOutputCmd
END
✎Note: "データベースのログの最後はバックアップされていません。ログに失いたくない作業が含まれている場合は、バックアップログ WITH NORECOVERY を使用してログをバックアップします。 RESTORE ステートメントの WITH REPLACE や WITH STOPAT 句を使用してログの内容のみを上書きする"というエラーが表示された場合、プロンプトに表示されているように行ってください。
例えば、リストアコマンドを「…WITH FILE = 1, REPLACE, NOUNLOAD, STATS = 10」に変更できます
方法2:SQL Serverで全データベースを復元するスクリプトを生成する
または、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.databases
WHERE 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 のすべてのデータベースが復元されます。
方法3:GUIを使用して複数のSQLデータベースをバックアップおよび復元する(最も簡単な方法)
上記のスクリプトは、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の仮想マシンバックアップもサポートしています。
- AOMEI Cyber Backupをインストールするために、ダウンロードした .exe ファイルを実行し、メインインターフェースを起動します。 ソースデバイス -> Microsoft SQL -> Microsoft SQLを追加 をクリックします。
- ダウンロードプロキシプログラムまたは リンクのコピー を選択して、SQL Serverがインストールされたデバイス上でエージェントプログラムをダウンロードしてインストールします。その後、既にインストールされたプロキシ に切り替えてデバイスを選択します。
- 次に、
-> 認証 をクリックして、データベースインスタンスを検証します。 Windows認証 または SQL認証 を選択することができます。
これで、追加したSQL Serverのデータバックアップをスケジュールすることができます。
◉ SQL Serverで複数のデータベースをバックアップする方法:
1. バックアップタスク -> 新しいタスクの作成 をクリックし、バックアップタイプを Microsoft SQLバックアップ として選択します。
2. SQLインスタンスとバックアップするデータベースを指定するには、デバイス名をクリックします。必要に応じて1つまたは複数のデータベースを選択できます。
3. SQLバックアップを保存するターゲットストレージを選択します。ローカルパスまたはネットワークパスを指定できます。
4. スケジュールを設定して、SQLデータベースのバックアップを毎日、毎週または毎月で実行し、完全バックアップ、増分バックアップ、差分バックアップのバックアップ方法を選択します。
バックアップを開始をクリックしてタスクを作成および実行します。完了すると、バックアップタスクタブに表示されます。
✍より便利な機能:
- バックアップのクリーンアップ:古いバックアップバージョンを自動的に削除し、ストレージスペースを節約します。
- メール通知:タスクが異常または成功した場合にメール通知を受け取ることができます。
- アーカイブ:バックアップファイルをAWS S3ストレージにアーカイブします。
◉ バックアップから複数のデータベースを復元する方法:
1. 左側のメニューバーのバックアップタスクをクリックし、復元したいタスクを見つけ、 -> 復元をクリックします。
2. SQLデータベースを復元するために復元するバックアップバージョンを選択します。
3. 次に、復元するターゲットの場所を選択します。2つのオプションがあります:
- 元の場所に復元(デフォルト): 以前のバージョンにSQLデータベースを復元するインプレースリカバリ。
- 新しい場所に復元: 別のターゲットを選択してスペース切れのリカバリを実行します。新しいデータベースの名前を指定し、ストレージ場所を変更できます。
同名のデータベースを上書きする: このオプションにチェックを入れると、同じ名前のターゲットデータベースがバックアップされたデータベースに上書きされます。チェックを外すと、復元中に同じ名前のターゲットデータベースは省略されます。
4. 全ての設定が完了したら、「復元を開始」をクリックして復元プロセスを開始し、完了するのを辛抱強く待ちます。クリックできる ボタンをクリックして復元の詳細を確認したり、キャンセルしたりすることができます。
✍注意事項:
- "元の場所に復元"は、元の場所が存在することを確認する必要があります。そうでない場合、"新しい場所に復元"のみ選択できます。
- "元の場所に復元"は、元のデータベースのデータを上書きまたは削除します。元のデータベースに重要なデータがある場合は、"新しい場所に復元"を選択することをお勧めします。
結論
SSMSの復元GUIでは、一度に1つのデータベースのみを復元することができます。SQL Serverで複数のデータベースを一度に復元したい場合、最も一般的な方法はT-SQLスクリプトを使用することです。ただし、バックアップファイル名に厳しい制限があり、他のインスタンスにデータベースを復元するなどの操作が実行しにくくなります。そのため、SQLバックアップソフトウェアであるAOMEI Cyber Backupも試してみることができます。
操作が簡単になります。たとえば、いくつかの簡単なクリックでSQLデータベースを自動バックアップすることができ、同じくらい簡単な操作で複数のデータベースを一度に復元することができます。SQLデータベースを自動バックアップする