DB2 10.x で SMS のテーブルを DMS に移動する

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 に移動されました。よしよし。こんなに簡単にできるんだあね。