状況:2台のPCでSQL Serverが稼働中。一方のデータベースを丸ごともう一方にコピーしたい。
概要:一方でデータベースをバックアップし、そのファイルをもう一方に転送してリストアする。
手順:
MS SQL Server Management Studio(以下MSSMSと略)にて。
コピー元とコピー先のデータベースをsaアカウントで接続する。(うちの環境ではWindows認証不可のため)
MSSMSのオブジェクトエクスプローラでコピー元のデータベースを選び、管理を右クリックし「バックアップ」を選ぶ。
ソースのデータベースを選択し、バックアップの種類は「完全」とする。
バックアップ先のファイル名をメモ。
OKを押してバックアップする。
先ほどメモしたバックアップファイルをコピー先のPCに転送する。
MSSMSのオブジェクトエクスプローラでコピー先のデータベースを選び、データベースを右クリックし「データベースの復元」を選ぶ。
復元先データベースを入力or選択する。
復元用のソースを「デバイス」として参照ボタン(…)を押し、バックアップの場所の追加ボタンを押して、先ほど転送したバックアップファイルを指定する。
ページの選択で「オプション」を選び、復元オプションで「既存のデータベースを上書きする」を選ぶ。
OKを押してリストアする。
データのインポート/エクスポートウィザードではインデックスやストアドプロシージャなどがコピーできなかったので上記の方法を採用した。
きっと他にもっとスマートな方法があるはず。
補足1
どうもセキュリティ関係はそのまま引き継げないようで、ログインできなくなってしまった。仕方ないのでコピーしたデータベースのユーザーを一旦削除し、ログインのユーザーマッピングを設定しなおしてユーザーを再生成したらログインできるようになった。
また、ストアドプロシージャの権限もユーザーを追加してExecute属性を設定しなければならない。