DB2 10.1 から 「SMS 永続表スペースの非推奨」 ということで、SMS に普通のデータを置くなと。
というわけで SMS にあるテーブルを DMS に移動してみたいと思います。ADMIN_MOVE_TABLE を使うと移動が簡単にできます。
まずは SMS のテーブルスペースを作ります
db2 => CREATE REGULAR TABLESPACE USER2 MANAGED BY SYSTEM USING ('/home/db2inst1/tmp') DB20000I SQL コマンドが正常に完了しました。 db2 => LIST TABLESPACES 表スペース ID = 2 名前 = USERSPACE1 タイプ = データベース管理スペース 内容 = すべての永続データ。 LARGE 表スペース。 状態 = 0x0000 詳しい説明: 正常 表スペース ID = 6 名前 = USER2 タイプ = システム管理スペース 内容 = すべての永続データ。 REGULAR 表スペース。 状態 = 0x0000 詳しい説明: 正常
もともとあった USERSPACE1 と、新しく作った USER2 の比較がこんな感じ
では SMS なテーブルスペース USER2 上にテーブルやインデックスを作ってデータを入れてみます。
db2 => CREATE TABLE samptab2 (id INT, name VARCHAR(32)) IN USER2 db2 => CREATE INDEX smpidx02 ON samptab2 (name) db2 => INSERT INTO samptab2 VALUES (1,'aaaa') db2 => INSERT INTO samptab2 VALUES (2,'aabb') db2 => INSERT INTO samptab2 VALUES (3,'acca')
ではこの USER2 上にあるテーブルを USERSPACE1 に、すなわち SMS から DMS に移動しましょう。
サンプルのテーブル SAMPTAB2 がどこにあるか確認
db2 => SELECT TBSPACE FROM SYSCAT.TABLESPACES WHERE TBSPACEID IN (SELECT TBSPACEID FROM SYSCAT.TABLES WHERE TABNAME='SAMPTAB2') TBSPACE -------------------------------------------------------------------------------------------------------------------------------- USER2 1 レコードが選択されました。
それでは移動。
db2 => CALL SYSPROC.ADMIN_MOVE_TABLE( 'DB2INST1', 'SAMPTAB2', 'USERSPACE1', 'USERSPACE1', 'USERSPACE1', '', '', '', '', '', 'MOVE') 結果セット 1 -------------- KEY VALUE -------------------------------- -------------------------------------------------------------------------------------------------------------------------------- AUTHID DB2INST1 CLEANUP_END 2014-06-03-22.28.56.419435 CLEANUP_START 2014-06-03-22.28.56.136638 COPY_END 2014-06-03-22.28.53.611463 COPY_OPTS ARRAY_INSERT,NON_CLUSTER COPY_START 2014-06-03-22.28.53.333669 COPY_TOTAL_ROWS 3 INDEXNAME SMPIDX02 INDEXSCHEMA DB2INST1 INDEX_CREATION_TOTAL_TIME 0 INIT_END 2014-06-03-22.28.53.142602 INIT_START 2014-06-03-22.28.51.525084 ORIGINAL_TBLSIZE 40 REPLAY_END 2014-06-03-22.28.55.676193 REPLAY_START 2014-06-03-22.28.53.612687 REPLAY_TOTAL_ROWS 0 REPLAY_TOTAL_TIME 1 STATUS COMPLETE SWAP_END 2014-06-03-22.28.56.086361 SWAP_RETRIES 0 SWAP_START 2014-06-03-22.28.55.825478 UTILITY_INVOCATION_ID 0100000003000000080000000000000000002014060322285314512500000000 VERSION 10.05.0001 23 レコードが選択されました。 リターン状況 = 0 db2 => SELECT TBSPACE FROM SYSCAT.TABLESPACES WHERE TBSPACEID IN (SELECT TBSPACEID FROM SYSCAT.TABLES WHERE TABNAME='SAMPTAB2') TBSPACE -------------------------------------------------------------------------------------------------------------------------------- USERSPACE1 1 レコードが選択されました。
USERSPACE1 に移動されました。よしよし。こんなに簡単にできるんだあね。