プロが教えるわが家の防犯対策術!

SQLServer2000でDBのバックアップを取った
ファイルからデータのみを復元することは可能でしょうか?

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

A 回答 (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
    • good
    • 0

出来る方法はあります。


ですが、スクリプトを使うというのが条件ですが・・・

手順としては、
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:\直下に作成してます。)
    • good
    • 0

>出来れば1ファイルで指定したテーブル全てのデータを格納したいと思ってるのです。



う~ん。私もはっきりわかりませんが、無理のような気がします。もし、出来たとしても中は複数のテーブルのレイアウトに沿ったデータがあるわけですから、そのファイルから元に戻すには、どこからがどのテーブルで、それぞれについてどのようにインポートすかの記述が必要になります。ちょっと使いづらいような気がします。

もし、どうしてもそのようなファイルが欲しい場合には、アプリケーションで全テーブルの全レコードを単純に書き出せば良いので、そう難しくはないと思います。インポートも同様です。ただし、ここからがこのテーブルといったセパレータ等が必要になる場合があります。

どのぐらいのデータ量を想定されているのかわかりませんが、場合によってはかなり大きなテキストファイルになりますので、実行速度を上げるための工夫が必要になると思います。
    • good
    • 0

バックアップファイルからデータだけの復元は難しいと思います。


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

この回答への補足

お答えいただきありがとうございます。

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

補足日時:2004/09/27 13:36
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す