• ベストアンサー

データベースの復元

SQLServer2000でDBのバックアップを取った ファイルからデータのみを復元することは可能でしょうか? そのまま復元すると既存のデータ-ベースファイルを 上書きするという形になると思うのですが テーブル構成だけはスクリプトファイルから作成し 入れたいデータはバックアップファイルから入れたいです。

質問者が選んだベストアンサー

  • ベストアンサー
noname#11722
noname#11722
回答No.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)

noname#11722
noname#11722
回答No.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)
回答No.2

>出来れば1ファイルで指定したテーブル全てのデータを格納したいと思ってるのです。 う~ん。私もはっきりわかりませんが、無理のような気がします。もし、出来たとしても中は複数のテーブルのレイアウトに沿ったデータがあるわけですから、そのファイルから元に戻すには、どこからがどのテーブルで、それぞれについてどのようにインポートすかの記述が必要になります。ちょっと使いづらいような気がします。 もし、どうしてもそのようなファイルが欲しい場合には、アプリケーションで全テーブルの全レコードを単純に書き出せば良いので、そう難しくはないと思います。インポートも同様です。ただし、ここからがこのテーブルといったセパレータ等が必要になる場合があります。 どのぐらいのデータ量を想定されているのかわかりませんが、場合によってはかなり大きなテキストファイルになりますので、実行速度を上げるための工夫が必要になると思います。

  • hpp
  • ベストアンサー率64% (22/34)
回答No.1

バックアップファイルからデータだけの復元は難しいと思います。 もしデータだけを復元したいのであれば、「すべてのタスク」より「データのエクスポート」でテキストファイルにデータを落とし、復元では逆に「データのインポート」でテキストファイルからデータをインポートすれば良いと思います。 このとき、参照整合性がくるわないように、インポートする順序を考えなければなりません。また、ID値(自動で振られる番号)の挿入を許可する必要もあります。

noname#7740
質問者

補足

お答えいただきありがとうございます。 「すべてのタスク」から「データのエクスポート」で テキストファイルに書き出す場合 1テーブル1ファイルずつしか指定出来ないのですが これは仕様なのでしょうか? 出来れば1ファイルで指定したテーブル全てのデータを格納したいと思ってるのです。