web-dev-qa-db-ja.com

単一インスタンス内でのDb2データベースの複製

同じインスタンス内の同じサーバー上にDb2データベース(V11.1 +)の正確なコピーを作成する必要があります。 (これは本番データベースを実行しない開発サーバーです。)

これが今のやり方です。

  1. 手書きのスクリプトを使用してテーブルをダンプする
  2. 新しいデータベースを作成する
  3. アプリケーションに固有のサービス機能をデータベースにインポートする
  4. 新しいデータベースにスキーマを作成する
  5. ダンプから新しいデータベースにデータをインポートする
  6. 新しいデータベースのデータベース構成パラメーターを設定する

I readdb2moveを使用してデータベーススキームをコピーすることが可能であること。完全なコピーを実行するために使用できる簡単な方法はありますか?

2

これは、データベース(テスト)を新しいデータベース(テスト2)にコピーする単項の例です。

db2 create database test
db2 backup database test to /tmp
db2 restore database test from /tmp into test2
db2 connect to test2


   Database Connection Information

 Database server        = DB2/LINUXX8664 11.1.3.3
 SQL authorization ID   = DB2INST1
 Local database alias   = TEST2
2
Paul Vernon

これは、データベースをコピーするもう1つの例です。今回は名前付きパイプを使用して、バックアップイメージがファイルシステムに到達しないようにします。

$ db2 create database test
$ mkfifo /tmp/pipe1 /tmp/pipe2
$ db2 restore database test from /tmp/pipe1, /tmp/pipe2 into test2 &
[1] 20744
$ bash
$ db2 backup database test to /tmp/pipe1, /tmp/pipe2

Backup successful. The timestamp for this backup image is : 20180815161749

DB20000I  The RESTORE DATABASE command completed successfully.

[1]+  Done                    db2 restore database test from /tmp/pipe1, /tmp/pipe2 into test2

Db2 CLPは同じCLPバックエンドプロセスを使用して2つの処理を実行できないため、バックアップは別のシェルセッションで実行する必要があることに注意してください。また、インスタンスの所有者でない場合は、chmod o+wパイプまた、もちろんパイプされたデータを別のマシンにsshすることもできます。そして、それはオンラインバックアップでも機能します(上記はオフラインバックアップです)

パイプはいくつでも、またはいくつでも使用できます。複数を使用することのパフォーマンス上の利点については、こちらをご覧ください https://www.ibm.com/developerworks/community/blogs/IMSupport/entry/DB2_Backup_performance_compression_tablespace_imbalance?lang=en

1
Paul Vernon

Sshを使用してバックアップイメージをリモートマシンに送信する例

mkfifo /tmp/localpipe
chmod o+w /tmp/localpipe
ssh remotehost "mkfifo /tmp/remotepipe;chmod o+w /tmp/remotepipe"

db2 backup database test to /tmp/localpipe &
ssh remotehost "cat > /tmp/remotepipe" < /tmp/localpipe &
ssh remotehost "db2 restore database test from /tmp/remotepipe into test2" 
0
Paul Vernon