データベースの復元:RESTORE FILELISTONLY

複数のデータベースをバックアップ → 復元の方法で別のマシンにコピーしようとした。
手作業でやるのは面倒なのでT-SQLでやろうと考えた。そこからosqlでバッチファイルにもできるだろうし。

やり方としては
http://technet.microsoft.com/ja-jp/library/ms186858.aspx
の「E. BACKUP および RESTORE を使用してデータベースのコピーを作成する」に相当する。

BACKUP DATABASE AdventureWorks 
   TO AdventureWorksBackups ;

RESTORE FILELISTONLY 
   FROM AdventureWorksBackups ;

RESTORE DATABASE TestDB 
   FROM AdventureWorksBackups 
   WITH MOVE 'AdventureWorks_Data' TO 'C:\MySQLServer\testdb.mdf',
   MOVE 'AdventureWorks_Log' TO 'C:\MySQLServer\testdb.ldf';
GO

RESTORE DATABASE の WIRH MOVE句にて、データファイルとログファイルの論理名を指定しなくてはいけなくて、その論理名を求めるのが、RESTORE FILELISTONLYという命令。

つまり、作業手順としては、RESTORE FILELISTONLY を実行して論理ファイル名を求め、その結果を RESTORE DATABASE の MOVEの後に貼り付ける。そして RESTORE DATABASE を実行する。


自動化できないじゃん。バッチ化できないじゃん。


こんな手間かけるなら Management StudioのGUI使ったほうが速いのではないか。何のためにT-SQLで書いてるんだ俺。

どうしても自動化したいのなら、RESTORE FILELISTONLYの結果セットから値を引っ張ってくるようにプログラム組めばいいのだが、ここまでくるとバッチファイルでは厳しくてWSHになるんだろうけどそこまでやるのは大げさだなー。

しばらく悩んだ結果、論理ファイル名は頻繁に変わるものではないので、一度手動で RESTORE FILELISTONLY 実行して求める。そしてその結果をバッチファイルに埋め込むというやり方でいくことにした。

もう少しスマートに行きたかったが妥協。