ストアドプロシージャからSQLServerデータベースを復元するための動的スクリプト
より広範な保守計画の一部として多数のパラメーターを使用してデータベースを復元できる動的SQLスクリプトを使用して、一元化された汎用で再利用可能なストアード・プロシージャーを作成します。
処理する
データベースを復元するプロセスは、SSMSからスクリプト化できます。これをストアドプロシージャに保存すると、他の処理済みサーバーまたはサーバーから呼び出すことができ、結合された保守計画の一部として特に役立ちます。
以下に2つのスクリプトを作成しました。
単純なスクリプトで、SSMSから生成されたコードを使用し、ストアドプロシージャのコンテンツを置き換えます。
汎用スクリプトを使用すると、変数を使用して単一のデータベースを復元できます。つまり、再利用できます。
Simple Script
USE [utilities]GOCREATE PROC [maint].RestoreDatabase_{dbname} AS BEGINRESTORE DATABASE [dbname] FROM DISK=N'c:\backupfolder\{dbname}.bak' WITH FILE= 1,MOVE N'{dbname}' TO N'd:\database\{dbname}.mdf',MOVE N'{dbname}_log' TO N'e:\database\{dbname}.ldf',NOUNLOAD, REPLACE, STATS= 10,STANDBY=N'e:\database\ROLLBACK_UNDO_{dbname}.bak'ENDGO
再利用可能なスクリプト
このスクリプトは、他の場所から呼び出すことができるようにいくつかのパラメーターを使用するため、必要に応じて再利用してサーバー間で呼び出すことができます。
- @ dbname-呼び出すデータベース名
- @ Directory_Bak-バックアップが保存されるフォルダ
- @ Directory_Dat-ログファイルとデータベースファイルを別のディスクに保存するのが最善なので、これは保存するディレクトリです
- @ Directory_Log-上記のように、ログファイル用に別のディレクトリを使用します
- @ Directory_Stand-これはログ配布を念頭に置いて開発されたため、メインデータベースからレポートデータベースへの復元に使用できます。
SQL
USE [utilities]GOCREATE PROC [maint].RestoreDatabase(@dbname NVARCHAR(100),@Directory_Bak NVARCHAR(100),@Directory_Dat NVARCHAR(100),@Directory_Log NVARCHAR(100),@Directory_Stand BIT) AS BEGINDECLARE @SQL NVARCHAR(MAX)='RESTORE DATABASE ['+@dbname+'] FROM DISK=N'''+@Directory_Bak+''+@dbname+'.bak'' WITH FILE= 1,MOVE N'''+@dbname+''' TO N'''+@Directory_Dat+@dbname+'.mdf'',MOVE N'''+@dbname+'_log'' TO N'''+@Directory_Log+@dbname+'.ldf'',NOUNLOAD, REPLACE, STATS=10'--Standby CodeIF ISNULL(@Directory_Bak,'')<>''SET @SQL=@SQL+',STANDBY=N'''+@Directory_Stand+'ROLLBACK_UNDO_'+@dbname+'.bak'''EXEC master..sp_executesql @SQLENDGO