- ベストアンサー
データベースの復元
SQLServer2000でDBのバックアップを取った ファイルからデータのみを復元することは可能でしょうか? そのまま復元すると既存のデータ-ベースファイルを 上書きするという形になると思うのですが テーブル構成だけはスクリプトファイルから作成し 入れたいデータはバックアップファイルから入れたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
追加: データのコピーは、データベースまたぐので完全修飾で行う。 Insert Into [db1].[dbo].[t1] SELECT * FROM [COPY_DB].[dbo].[t1] もしフィールドが最後に追加されてるなら。 Insert Into [db1].[dbo].[t1] SELECT *,ダミーデータ FROM [COPY_DB].[dbo].[t1] フィールドの順番が変っていたら・・・ Insert Into [db1].[dbo].[t1] SELECT Field1,Field2~ FROM [COPY_DB].[dbo].[t1] Selectフィールド全指定 でOK
その他の回答 (3)
出来る方法はあります。 ですが、スクリプトを使うというのが条件ですが・・・ 手順としては、 1.バックアップしたDBを名前を変えた形で復元。 2.元のデータを削除 3.名前を変えたDBから元のDBにデータをコピー 2と3のSQLは難しくないので割愛 1.の為のスクリプトサンプル BACKUP DATABASE [ORIGINAL_DB] TO DISK = 'c:\Temp\COPY.bak' WITH INIT RESTORE FILELISTONLY FROM DISK = 'c:\Temp\COPY.bak' DROP DATABASE [COPY_DB] RESTORE DATABASE [COPY_DB] FROM DISK = 'c:\Temp\COPY.bak' WITH MOVE 'COPY_DB_Data' TO 'c:\COPY_DB_Data.MDF', MOVE 'COPY_DB_Log' TO 'c:\COPY_DB_Log.LDF' 元DBをバックアップ バックアップデバイスの設定 念のためコピーDBの削除 元DBからコピー用のDBを作成するための復元。 (このときファイルの復元先をデフォで使わない。 c:ProgramFiles\~ だと結局上書きになるので、 上の例ではC:\直下に作成してます。)
- hpp
- ベストアンサー率64% (22/34)
>出来れば1ファイルで指定したテーブル全てのデータを格納したいと思ってるのです。 う~ん。私もはっきりわかりませんが、無理のような気がします。もし、出来たとしても中は複数のテーブルのレイアウトに沿ったデータがあるわけですから、そのファイルから元に戻すには、どこからがどのテーブルで、それぞれについてどのようにインポートすかの記述が必要になります。ちょっと使いづらいような気がします。 もし、どうしてもそのようなファイルが欲しい場合には、アプリケーションで全テーブルの全レコードを単純に書き出せば良いので、そう難しくはないと思います。インポートも同様です。ただし、ここからがこのテーブルといったセパレータ等が必要になる場合があります。 どのぐらいのデータ量を想定されているのかわかりませんが、場合によってはかなり大きなテキストファイルになりますので、実行速度を上げるための工夫が必要になると思います。
- hpp
- ベストアンサー率64% (22/34)
バックアップファイルからデータだけの復元は難しいと思います。 もしデータだけを復元したいのであれば、「すべてのタスク」より「データのエクスポート」でテキストファイルにデータを落とし、復元では逆に「データのインポート」でテキストファイルからデータをインポートすれば良いと思います。 このとき、参照整合性がくるわないように、インポートする順序を考えなければなりません。また、ID値(自動で振られる番号)の挿入を許可する必要もあります。
補足
お答えいただきありがとうございます。 「すべてのタスク」から「データのエクスポート」で テキストファイルに書き出す場合 1テーブル1ファイルずつしか指定出来ないのですが これは仕様なのでしょうか? 出来れば1ファイルで指定したテーブル全てのデータを格納したいと思ってるのです。