web-dev-qa-db-ja.com

データベースをコピーするT-SQLスクリプト

"PROD"データベース(読み取り専用で複数のファイルグループで構成されています)を読み取り/書き込み可能な "EDIT"データベースにコピーするT-SQLスクリプトベースの方法を見つけたいと思います。 。

データベースコピーウィザードについて知っており、現在使用しています。ただし、これを自動化して、1つのスクリプトでPRODデータベースをバックアップから復元し、それをEDITデータベースにもコピーできるようにしたいと考えています。

T-SQLには「COPY DATABASE」コマンドがないようです。また、バックアップを2回復元する以外に、これを実現する他の方法を見つけることができません。本当に?これを行うためのより良い方法はありませんか?

私がしたいのはこれです:

  1. ディスクから「MyPROD_Database」への復元を開始します
  2. 完了したら、復元したDBを「MyEDIT_Database」にコピーします
  3. 最後のステップとして、PRODデータベースのファイルグループを読み取り専用に設定します

できれば、SSMSまたはsqlcmd、あるいはその両方から実行できる1つのT-SQLスクリプトですべてを実行できます。

システムは、SQL Server 2005(バックアップ元)とSQL Server 2008(復元先)です。

ガントレットはそこにあります-誰がそれを手に入れますか? :-)

マーク

7
marc_s

SSISにはデータベースのコピー機能があるため、SSISを介してT-SQLを実行する必要があり、そのプロセスのステップとしてデータベースのコピーを作成できます。

3
Yishai

SQL Server Publishing Wizard は、コマンドライン引数を使用して自動化できます。

ヘルプページ から

次のコマンドは、MYSERVERという名前のマシンのデフォルトインスタンスから、ユーザー名が「Alice」、パスワードが「7h92-v6k3」のSQL Server認証を使用して、ファイルC:\ FooDB.sqlにFooDBデータベースをスクリプトします。

sqlpubwiz script -d FooDB -S MYSERVER -U Alice -P 7h92-v6k3 C:\FooDB.sql

したがって、そのスクリプトを取得したら、 [〜#〜] sqlcmd [〜#〜] を使用して、他のデータベースインスタンスでスクリプトを実行できます。

sqlcmd -S MYSERVER -U Alice -P 7h92-v6k3 -i C:\FooDB.sql -o 
7
Bob

スクリプトを実行するログインにsysadmin権限がある場合は、次のようにできます。

  • pRODデータベースを復元する
  • pRODデータベースをデタッチする
  • xp_cmdshellを使用してPRODデータベースのファイルをコピーする
  • 元のファイルを使用してPRODデータベースをアタッチするには
  • コピーしたファイルを使用してEDITデータベースをアタッチします

SQLCMDまたはManagement StudioのSQLCMDモードを使用してスクリプトを実行できる場合は、SQLCMDを利用することもできます!! OSコマンドを実行してファイルをコピーする構文。

ただし、いずれの場合でも、これ(さらに言えば、データベースコピーウィザード)では、PRODデータベースをオフラインにしてコピーを行います。それが選択肢でない場合は、複数の復元が唯一の選択肢となる場合があります。

2

これは便利かもしれません:

SQLマルチスクリプト

1

これは役立ちますか: http://www.codeproject.com/KB/database/ScriptDatabase.aspx

データベースにデータをインポートするためのSQL Insertステートメントを含むデータベース全体をスクリプト化します。

1
Andrija
1
DBAndrew

バックアップ/復元をはるかに高速かつ簡単に:

SqlCmd -E -S localhost -Q "BACKUP DATABASE mydb TO DISK='c:\temp\mydb.bak'"
REM Make Sure connections are closed
SqlCmd -E -S localhost -Q "ALTER DATABASE PIDataCopy SET SINGLE_USER WITH ROLLBACK AFTER 60"
SqlCmd -E -S localhost -Q "RESTORE DATABASE PIDataCopy FROM DISK='c:\temp\mydb.bak WITH MOVE  'mydb_Data' TO 'C:\SQLData\PIDataCopy_Data', MOVE 'mydb_Log' TO 'C:\SQLData\PIDataCopy_Log', RECOVERY,REPLACE"
SqlCmd -E -S localhost -Q "ALTER DATABASE PIDataCopy SET MULTI_USER"
1
Bruce