Question & Answer
Question
ある表のデータを同じデータベースの新しい表にコピーしたい場合、どのような方法がありますか。
Answer
同じ定義の新しい表を作成し、データをコピーする方法を紹介します。
Db2 9.7 以降であれば、ADMIN_MOVE_TABLE プロシージャーを呼び出して表のコピーができます。
以下、ソース表はコピー元の表、ターゲット表はコピー先の表を表します。
A. 新しい表を作成し、データをコピーする方法
B. ADMIN_MOVE_TABLE プロシージャーを使用する方法
Db2 9.7 以降、ADMIN_MOVE_TABLE プロシージャーを呼び出して、オンラインで表のコピーができます。
移動先の表スペースを指定しない場合は同じ表スペース上に再作成され、さらに KEEP オプションを指定した場合は、元の表が名前を変えて残ります。
関連情報
[Db2] バックアップ・ペンディングの回復方法
CREATE TABLE ステートメント
CURSOR ファイル・タイプを使用したデータの移動
ADMIN_MOVE_TABLE プロシージャーによるオンラインでの表の移動
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート
Db2 9.7 以降であれば、ADMIN_MOVE_TABLE プロシージャーを呼び出して表のコピーができます。
以下、ソース表はコピー元の表、ターゲット表はコピー先の表を表します。
A. 新しい表を作成し、データをコピーする方法
- ターゲット表を作成
CREATE TABLE の LIKE オプションを使用する方法と、 db2look ツールにて生成したソース表の DDL を使用する方法があります。a. CREATE TABLE の LIKE オプションを使用する方法
$ db2 connect to <DB 名> $ db2 create table <ターゲット表> like <ソース表> in <表スペース名>
b. db2look ツールで生成したソース表の DDL を使用する方法$ db2look -d <データベース名> -a -e -t <ソース表> -o <出力ファイル>
$ db2 connect to <DB 名> $ db2 -tvf <出力ファイル>
- データをコピー
INSERT SELECT を使用する方法と、カーソル LOAD を使用する方法があります。a. INSERT SELECT でコピーする方法
$ db2 "insert into <ターゲット表> select * from <ソース表>"
b. カーソル LOAD を使用する方法$ db2 "declare c1 cursor for select * from <ソース表>" $ db2 load from c1 of cursor replace into <ターゲット表>
LOAD に COPY YES または NONRECOVERABLE を指定すると、バックアップ・ペンディングになりません。
B. ADMIN_MOVE_TABLE プロシージャーを使用する方法
Db2 9.7 以降、ADMIN_MOVE_TABLE プロシージャーを呼び出して、オンラインで表のコピーができます。
移動先の表スペースを指定しない場合は同じ表スペース上に再作成され、さらに KEEP オプションを指定した場合は、元の表が名前を変えて残ります。
使用例
運用上の考慮点
ADMIN_MOVE_TABLE プロシージャーを使用する場合、以下の点を注意してください。
$ db2 "CALL SYSPROC.ADMIN_MOVE_TABLE('スキーマ名','ソース表','','KEEP','MOVE')"
以下は、スキーマ名 V97FP4 の表 ORG をコピーし、新たに表 NEW を作成する例です。
$ db2 "CALL SYSPROC.ADMIN_MOVE_TABLE('V97FP4','ORG','','KEEP','MOVE')"
結果セット 1
--------------
KEY VALUE
------------------------------- ---------------------------
AUTHID V97FP4
CLEANUP_END 2011-11-24-13.09.46.532704
CLEANUP_START 2011-11-24-13.09.46.078933
COPY_END 2011-11-24-13.09.40.069264
COPY_OPTS ARRAY_INSERT,NON_CLUSTER
COPY_START 2011-11-24-13.09.39.385066
COPY_TOTAL_ROWS 9
INDEXNAME
INDEXSCHEMA
INIT_END 2011-11-24-13.09.39.139422
INIT_START 2011-11-24-13.09.32.749776
ORIGINAL ORGAAAFRno
REPLAY_END 2011-11-24-13.09.45.345964
REPLAY_START 2011-11-24-13.09.40.074164
REPLAY_TOTAL_ROWS 0
REPLAY_TOTAL_TIME 1
STATUS COMPLETE
SWAP_END 2011-11-24-13.09.45.973409
SWAP_RETRIES 0
SWAP_START 2011-11-24-13.09.45.661825
VERSION 09.07.0004
21 レコードが選択されました。
リターン状況 = 0
$ db2 rename table ORG TO NEW
$ db2 rename table \"ORGAAAFRno\" TO ORG
運用上の考慮点
- 同一表スペースに複数の移動を同時に行うことは避けてください。
- 表に対するアクティビティーが少ないときに実行してください。
- 異なるデータベースへ複数の表をコピーする場合は、 db2move ユーティリティーを利用できます。
db2move ユーティリティーを使用したスキーマ・コピーの例
関連情報
[Db2] バックアップ・ペンディングの回復方法
CREATE TABLE ステートメント
CURSOR ファイル・タイプを使用したデータの移動
ADMIN_MOVE_TABLE プロシージャーによるオンラインでの表の移動
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート
[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008RZsAAM","label":"Data Movement-\u003Eadmin_move_table"},{"code":"a8m500000008PlYAAU","label":"Database Objects-\u003ETables"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]
Was this topic helpful?
Document Information
Modified date:
02 November 2023
UID
swg21576312