1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【備忘録】Db2 パーティション表 デタッチ・アタッチ操作

Last updated at Posted at 2021-04-21

1. はじめに

Db2ではパーティション表を使用することで、
ひとつの表を複数の区分に分割して、大規模な表の管理を容易にしたり、表データをロールイン・ロールアウトしたり、照会処理を効率化することができます。

パーティション表の作成方法については、以下リンク先の記事をご参照ください。

・Qiita:【備忘録】Db2 パーティション表 作成手順 まとめ
https://qiita.com/Haruka-Ogawa/items/b605021f01b8edb75e83

パーティション表の表データのロールイン・ロールアウトは、
デタッチアタッチ 操作で行います。
今回は Db2 パーティション表における デタッチアタッチ 操作方法について まとめます。

2. 準備

パーティション表のデタッチ・アタッチ操作をするにあたって、
Db2環境 と 必要なデータベース・オブジェクトを 準備します。

2-1. Db2環境 準備

Db2環境を準備します。
バージョンは v11.5 を使用します。

Db2の導入方法については、以下リンク先の記事に記載しています。

・Qiita: 【備忘録】Db2 インストール手順まとめ(Linux)
https://qiita.com/Haruka-Ogawa/items/9576399209b32f3016ea

・Qiita: 【備忘録】Docker版 Db2環境 取得手順

https://qiita.com/Haruka-Ogawa/items/0a4696ded4fa40e5e983

ここでは Dockerで用意したDb2環境を使用します。

2-2. オブジェクト作成

必要なデータベース オブジェクトを作成します。

① データベース作成

データベース SAMPDB を作成します。
実行例は以下の通りです。

$ db2 create db SAMPDB
DB20000I  The CREATE DATABASE command completed successfully.

② 表スペース作成

まずは 作成したデータベース SAMPDB に接続します。
実行例は以下の通りです。

$ db2 connect to SAMPDB

   Database Connection Information

 Database server        = DB2/LINUXX8664 11.5.5.0
 SQL authorization ID   = DB2INST1
 Local database alias   = SAMPDB

表スペース TS1, TS2, TS3, TS4 作成します。
実行例は以下の通りです。

$ db2 "CREATE TABLESPACE TS1"
DB20000I  The SQL command completed successfully.
$ db2 "CREATE TABLESPACE TS2"
DB20000I  The SQL command completed successfully.
$ db2 "CREATE TABLESPACE TS3"
DB20000I  The SQL command completed successfully.
$ db2 "CREATE TABLESPACE TS4"
DB20000I  The SQL command completed successfully.

・IBM Docs:CREATE TABLESPACE ステートメント
https://www.ibm.com/docs/ja/db2/11.5?topic=statements-create-tablespace

3. デタッチ

3-1. 概要

パーティション表では、
デタッチによって、データが古くなったなどで不要になった パーティションを指定して、高速に切り離すことができます。

次項3-2 では、
DATE型の列 COL2を パーティション・キーとして 2020-01-01~2020-12-31 の1年間を 3ヶ月ごとに分割し、
4つのパーティションを持つ パーティション表 TBL1 から、
2020-01-01~2020-03-31 を含むパーティション(PART0)をデタッチしてみます。

図に示すと、以下の通りになります。

image.png

・IBM Docs:データ・パーティションのデタッチ
https://www.ibm.com/docs/ja/db2/11.5?topic=ranges-detaching-data-partitions

3-2. 操作

① パーティション表 準備

CREATE TABLEコマンドで、パーティション表 TBL1 を作成します。

コマンドは以下の通りです。

CREATE TABLE TBL1(COL1 INT, COL2 DATE) 
  IN TS1, TS2, TS3, TS4
  PARTITION BY RANGE(COL2)
  ( STARTING '2020-01-01'
    ENDING '2020-03-31',
    ENDING '2020-06-30',
    ENDING '2020-09-30',
    ENDING '2020-12-31'
  )

実行例は以下の通りです。

$ db2 "
> CREATE TABLE TBL1(COL1 INT, COL2 DATE) 
>   IN TS1, TS2, TS3, TS4
>   PARTITION BY RANGE(COL2)
>   ( STARTING '2020-01-01'
>     ENDING '2020-03-31',
>     ENDING '2020-06-30',
>     ENDING '2020-09-30',
>     ENDING '2020-12-31'
>   )
> "
DB20000I  The SQL command completed successfully.

・IBM Docs:CREATE TABLE ステートメント
https://www.ibm.com/docs/ja/db2/11.5?topic=statements-create-table

また、INSERTコマンドで 値 (1,’2020-01-01’),(2,’2020-04-01’),(3,’2020-07-01’),(4,’2020-10-01’)を 挿入します。

コマンドは以下の通りです。

INSERT INTO TBL1 VALUES(1,'2020-01-01'),(2,'2020-04-01'),(3,'2020-07-01'),(4,'2020-10-01')

実行例は以下の通りです。

$ db2 "INSERT INTO TBL1 VALUES(1,'2020-01-01'),(2,'2020-04-01'),(3,'2020-07-01'),(4,'2020-10-01')"
DB20000I  The SQL command completed successfully.

・IBM Docs:INSERT ステートメント
https://www.ibm.com/docs/ja/db2/11.5?topic=statements-insert

パーティション表TBL1の中身を確認すると、
値 (1,’2020-01-01’),(2,’2020-04-01’),(3,’2020-07-01’),(4,’2020-10-01’) が挿入されたことがわかります。

$ db2 "SELECT * FROM TBL1"

COL1        COL2      
----------- ----------
          1 01/01/2020
          2 04/01/2020
          3 07/01/2020
          4 10/01/2020

  4 record(s) selected.

② デタッチするパーティション確認

DESCRIBE コマンドで、デタッチするパーティションを確認します。

コマンドは以下の通りです。

DESCRIBE DATA PARTITIONS FOR TABLE TBL1 SHOW DETAIL

実行例は以下の通りです。

$ db2 DESCRIBE DATA PARTITIONS FOR TABLE TBL1 SHOW DETAIL

PartitionId PartitionName                   TableSpId   PartObjId   IndexTblSpId LongTblSpId AccessMode
                                                                                               Status
----------- ------------------------------- ----------- ----------- ------------ ----------- - ------
          0 PART0                                     3           4            3           3 F                                 
          1 PART1                                     4           4            4           4 F                                 
          2 PART2                                     5           4            5           5 F                                 
          3 PART3                                     6           4            6           6 F                                 

  4 record(s) selected.


PartitionId Inclusive (y/n)                   Inclusive (y/n)
              Low Value                         High Value
----------- - ------------------------------- - -------------------------------
          0 Y '2020-01-01'                    Y '2020-03-31'                   
          1 N '2020-03-31'                    Y '2020-06-30'                   
          2 N '2020-06-30'                    Y '2020-09-30'                   
          3 N '2020-09-30'                    Y '2020-12-31'                   

  4 record(s) selected.

今回は パーティション表 TBL1の パーティションPART0 をデタッチします。

・IBM Docs:DESCRIBE コマンド
https://www.ibm.com/docs/ja/db2/11.5?topic=commands-describe

③ デタッチ

ALTER TABLEコマンドで、
パーティション表TBL1の パーティションPART0 をデタッチします。
またデタッチしたパーティションの宛先として、テーブルTBL1_EXを作成します。

コマンドは以下の通りです。

ALTER TABLE TBL1 DETACH PARTITION PART0 INTO TBL1_EX

実行例は以下の通りです。

$ db2 "ALTER TABLE TBL1 DETACH PARTITION PART0 INTO TBL1_EX"
DB20000I  The SQL command completed successfully.

・IBM Docs:ALTER TABLE ステートメント
https://www.ibm.com/docs/ja/db2/11.5?topic=statements-alter-table

④ 確認

テーブル一覧を確認すると、テーブルTBL1_EXが作成されていることがわかります。

$ db2 list tables

Table/View                      Schema          Type  Creation time             
------------------------------- --------------- ----- --------------------------
TBL1                            DB2INST1        T     2021-04-15-09.22.02.437327
TBL1_EX                         DB2INST1        T     2021-04-15-09.56.52.955792

  2 record(s) selected.
  • デタッチした表(TBL1)

DESCRIBE コマンドで、デタッチした後のパーティション表 TBL1 を確認します。

コマンドは以下の通りです。

DESCRIBE DATA PARTITIONS FOR TABLE TBL1 SHOW DETAIL

実行例は以下の通りです。

$ db2 DESCRIBE DATA PARTITIONS FOR TABLE TBL1 SHOW DETAIL

PartitionId PartitionName                   TableSpId   PartObjId   IndexTblSpId LongTblSpId AccessMode
                                                                                               Status
----------- ------------------------------- ----------- ----------- ------------ ----------- - ------
          1 PART1                                     4           4            4           4 F                                 
          2 PART2                                     5           4            5           5 F                                 
          3 PART3                                     6           4            6           6 F                                 

  3 record(s) selected.


PartitionId Inclusive (y/n)                   Inclusive (y/n)
              Low Value                         High Value
----------- - ------------------------------- - -------------------------------
          1 N '2020-03-31'                    Y '2020-06-30'                   
          2 N '2020-06-30'                    Y '2020-09-30'                   
          3 N '2020-09-30'                    Y '2020-12-31'                   

  3 record(s) selected.

デタッチされたことによって、
パーティション PART0 が表示されていません。

また、AccessMode Statusが、'F' であることから、パーティション表TBL1へのパーティション にフル・アクセス可能であることがわかります。

・IBM Docs:DESCRIBE コマンド
https://www.ibm.com/docs/ja/db2/11.5?topic=commands-describe

パーティション表TBL1 の中身を確認します。

$ db2 "SELECT * FROM TBL1"

COL1        COL2      
----------- ----------
          2 04/01/2020
          3 07/01/2020
          4 10/01/2020

  3 record(s) selected.

値(1, ’01/01/2020’)がなく、
2020-01-01~2020-03-31 を含むパーティション(PART0)がデタッチされたことがわかります。

  • ターゲット表(TBL1_EX)

DESCRIBE コマンドで、デタッチ時 作成した ターゲット表 TBL1_EX を確認します。

$ db2 "SELECT * FROM TBL1_EX"

COL1        COL2      
----------- ----------
          1 01/01/2020

  1 record(s) selected.

パーティション表 TBL1 のパーティション PART0 が、
テーブル TBL1_EX へデタッチされたことがわかりました。

4. アタッチ

4-1. 概要

パーティション表では、
アタッチ操作によって、新しいパーティションを テーブルに 高速に取り付けることができます。

次項目4-2では、
DATE型の列 COL2を パーティション・キーとして 2020-01-01~2020-12-31 の1年間を 3ヶ月ごとに分割し、
4つのパーティションを持つ パーティション表 TBL1 に、
2021-01-01~2021-03-31 を含む新規パーティションをアタッチしてみます。

図に示すと、以下の通りになります。

image.png

・IBM Docs:データ・パーティションのアタッチ
https://www.ibm.com/docs/ja/db2/11.5?topic=ranges-attaching-data-partitions

4-2. 操作

① パーティション表 準備

CREATE TABLEコマンドで、パーティション表 TBL1 を作成します。

コマンドは以下の通りです。

CREATE TABLE TBL1(COL1 INT, COL2 DATE) 
  IN TS1, TS2, TS3, TS4
  PARTITION BY RANGE(COL2)
  ( STARTING '2020-01-01'
    ENDING '2020-03-31',
    ENDING '2020-06-30',
    ENDING '2020-09-30',
    ENDING '2020-12-31'
  )

実行例は以下の通りです。

$ db2 "
> CREATE TABLE TBL1(COL1 INT, COL2 DATE) 
>   IN TS1, TS2, TS3, TS4
>   PARTITION BY RANGE(COL2)
>   ( STARTING '2020-01-01'
>     ENDING '2020-03-31',
>     ENDING '2020-06-30',
>     ENDING '2020-09-30',
>     ENDING '2020-12-31'
>   )
> "
DB20000I  The SQL command completed successfully.

・IBM Docs:CREATE TABLE ステートメント

https://www.ibm.com/docs/ja/db2/11.5?topic=statements-create-table

また、INSERTコマンドで 値 (1,’2020-01-01’),(2,’2020-04-01’),(3,’2020-07-01’),(4,’2020-10-01’)を 挿入します。

コマンドは以下の通りです。

INSERT INTO TBL1 VALUES(1,'2020-01-01'),(2,'2020-04-01'),(3,'2020-07-01'),(4,'2020-10-01')

実行例は以下の通りです。

$ db2 "INSERT INTO TBL1 VALUES(1,'2020-01-01'),(2,'2020-04-01'),(3,'2020-07-01'),(4,'2020-10-01')"
DB20000I  The SQL command completed successfully.

・IBM Docs:INSERT ステートメント
https://www.ibm.com/docs/ja/db2/11.5?topic=statements-insert

パーティション表TBL1の中身を確認すると、
値 (1,’2020-01-01’),(2,’2020-04-01’),(3,’2020-07-01’),(4,’2020-10-01’) が挿入されたことがわかります。

$ db2 "SELECT * FROM TBL1"

COL1        COL2      
----------- ----------
          1 01/01/2020
          2 04/01/2020
          3 07/01/2020
          4 10/01/2020

  4 record(s) selected.

② アタッチする表 準備

CREATE TABLEコマンドで、アタッチするテーブルTBL1_NEWを作成します。
また、INSERTコマンドで 作成した表TBL1_NEWに データ(1, '2021-01-01’)を挿入します。

コマンドは以下の通りです。

CREATE TABLE TBL1_NEW(COL1 INT, COL2 DATE) IN TS5
INSERT INTO TBL1_NEW VALUES(1, '2021-01-01')

実行例は以下の通りです。

$ db2 "CREATE TABLE TBL1_NEW(COL1 INT, COL2 DATE) IN TS5"
DB20000I  The SQL command completed successfully.

$ db2 "INSERT INTO TBL1_NEW VALUES(5, '2021-01-01')"
DB20000I  The SQL command completed successfully.

作成した テーブルTBL1_NEWの中身を確認すると、以下の通りです。

$ db2 "SELECT * FROM TBL1_NEW"

COL1        COL2      
----------- ----------
          5 01/01/2021

  1 record(s) selected.

・IBM Docs:CREATE TABLE ステートメント
https://www.ibm.com/docs/ja/db2/11.5?topic=statements-create-table

・IBM Docs:INSERT ステートメント
https://www.ibm.com/docs/ja/db2/11.5?topic=statements-insert

③ アタッチ

ALTER TABLEコマンドで、
パーティション表TBL1に 表TBL1_NEW をアタッチします。
また アタッチしたパーティションの範囲(開始値・終了値)を、’2021-01-01’~*’2021-03-31’*に設定します。

コマンドは以下の通りです。

ALTER TABLE TBL1 ATTACH PARTITION STARTING ('2021-01-01') ENDING('2021-03-31') FROM TBL1_NEW

実行例は以下の通りです。

$ db2 "ALTER TABLE TBL1 ATTACH PARTITION STARTING ('2021-01-01') ENDING('2021-03-31') FROM TBL1_NEW"
SQL3601W  The statement caused one or more tables to automatically be placed 
in the Set Integrity Pending state.  SQLSTATE=01586

SQLメッセージ SQL3601W が返されており、
アタッチによって、テーブルが SET INTEGRITY ペンディング状態になったことがわかります。

ペンディングを解除するために、この後 SET INTEGRITY コマンドを実行します。

・IBM Docs:ALTER TABLE ステートメント
https://www.ibm.com/docs/ja/db2/11.5?topic=statements-alter-table

・IBM Docs:SQL3500 - SQL3749
https://www.ibm.com/docs/ja/db2/11.5?topic=SSEPGG_11.5.0/com.ibm.db2.luw.messages.sql.doc/sql3500-sql3749.html#sql3601w

④ 確認

DESCRIBEコマンドで、アタッチした表 TBL1を確認します。

コマンドは以下の通りです。

DESCRIBE DATA PARTITIONS FOR TABLE TBL1 SHOW DETAIL

実行例は以下の通りです。

$ db2 DESCRIBE DATA PARTITIONS FOR TABLE TBL1 SHOW DETAIL

PartitionId PartitionName                   TableSpId   PartObjId   IndexTblSpId LongTblSpId AccessMode
                                                                                               Status
----------- ------------------------------- ----------- ----------- ------------ ----------- - ------
          0 PART0                                     3           4            3           3 F                                 
          1 PART1                                     4           4            4           4 F                                 
          2 PART2                                     5           4            5           5 F                                 
          3 PART3                                     6           4            6           6 F                                 
          4 PART4                                     7           4            7           7 N A                               

  5 record(s) selected.


PartitionId Inclusive (y/n)                   Inclusive (y/n)
              Low Value                         High Value
----------- - ------------------------------- - -------------------------------
          0 Y '2020-01-01'                    Y '2020-03-31'                   
          1 N '2020-03-31'                    Y '2020-06-30'                   
          2 N '2020-06-30'                    Y '2020-09-30'                   
          3 N '2020-09-30'                    Y '2020-12-31'                   
          4 Y '2021-01-01'                    Y '2021-03-31'                   

  5 record(s) selected.

新たに アタッチした パーティション PART4が 表示されています。

また、パーティション PART4AccessMode Statusが 'N A' であることから、
アタッチによって、アクセス不可になっていることがわかります。

・IBM Docs:DESCRIBE コマンド
https://www.ibm.com/docs/ja/db2/11.5?topic=commands-describe

・IBM Docs:SYSCAT.DATAPARTITIONS カタログ・ビュー
https://www.ibm.com/docs/ja/db2/11.5?topic=views-syscatdatapartitions

⑤ ペンディング 解除

SET INTEGRITYコマンドで 新しくアタッチしたパーティションの値の範囲を検査し、
TBL1のペンディングを解除します。

コマンドは以下の通りです。

SET INTEGRITY FOR TBL1 IMMEDIATE CHECKED

実行例は以下の通りです。

$ db2 SET INTEGRITY FOR TBL1 IMMEDIATE CHECKED
DB20000I  The SQL command completed successfully.

・IBM Docs:SET INTEGRITY ステートメント
https://www.ibm.com/docs/ja/db2/11.5?topic=statements-set-integrity

⑥ 確認

DESCRIBEコマンドで、アタッチした表 TBL1を確認します。

コマンドは以下の通りです。

DESCRIBE DATA PARTITIONS FOR TABLE TBL1 SHOW DETAIL

実行例は以下の通りです。

$ db2 DESCRIBE DATA PARTITIONS FOR TABLE TBL1 SHOW DETAIL

PartitionId PartitionName                   TableSpId   PartObjId   IndexTblSpId LongTblSpId AccessMode
                                                                                               Status
----------- ------------------------------- ----------- ----------- ------------ ----------- - ------
          0 PART0                                     3           4            3           3 F                                 
          1 PART1                                     4           4            4           4 F                                 
          2 PART2                                     5           4            5           5 F                                 
          3 PART3                                     6           4            6           6 F                                 
          4 PART4                                     7           4            7           7 F                                 

  5 record(s) selected.


PartitionId Inclusive (y/n)                   Inclusive (y/n)
              Low Value                         High Value
----------- - ------------------------------- - -------------------------------
          0 Y '2020-01-01'                    Y '2020-03-31'                   
          1 N '2020-03-31'                    Y '2020-06-30'                   
          2 N '2020-06-30'                    Y '2020-09-30'                   
          3 N '2020-09-30'                    Y '2020-12-31'                   
          4 Y '2021-01-01'                    Y '2021-03-31'                   

  5 record(s) selected.

アタッチしたパーティション PART4AccessMode Statusが、'F' になっていることから、
ペンディングが解除され、アクセス可能になったことがわかります。

・IBM Docs:DESCRIBE コマンド
https://www.ibm.com/docs/ja/db2/11.5?topic=commands-describe

パーティション表TBL1 の中身を確認します。

$ db2 "SELECT * FROM TBL1"

COL1        COL2      
----------- ----------
          1 01/01/2020
          2 04/01/2020
          3 07/01/2020
          4 10/01/2020
          5 01/01/2021

  5 record(s) selected.

値 (5,’2021-01-01’)があることから、
無事 アタッチされたことがわかりました。

5. パーティション追加

5-1. 概要

パーティション表では、
新しい空のパーティションを テーブルに追加することができます。

次項目 5-2では、
DATE型の列 COL2を パーティション・キーとして 2020-01-01~2020-12-31 の1年間を 3ヶ月ごとに分割し、
4つのパーティションを持つ パーティション表 TBL1 に、
2021-01-01~2021-03-31 を範囲とする 空のパーティションを追加してみます。

図に示すと、以下の通りになります。

image.png

・IBM Docs:パーティション表へのデータ・パーティションの追加
https://www.ibm.com/docs/ja/db2/11.5?topic=ranges-adding-data-partitions

5-2. 操作

① パーティション表 準備

CREATE TABLEコマンドで、パーティション表 TBL1 を作成します。

コマンドは以下の通りです。

CREATE TABLE TBL1(COL1 INT, COL2 DATE) 
  IN TS1, TS2, TS3, TS4
  PARTITION BY RANGE(COL2)
  ( STARTING '2020-01-01'
    ENDING '2020-03-31',
    ENDING '2020-06-30',
    ENDING '2020-09-30',
    ENDING '2020-12-31'
  )

実行例は以下の通りです。

$ db2 "
> CREATE TABLE TBL1(COL1 INT, COL2 DATE) 
>   IN TS1, TS2, TS3, TS4
>   PARTITION BY RANGE(COL2)
>   ( STARTING '2020-01-01'
>     ENDING '2020-03-31',
>     ENDING '2020-06-30',
>     ENDING '2020-09-30',
>     ENDING '2020-12-31'
>   )
> "
DB20000I  The SQL command completed successfully.

パーティション表TBL1が作成できました。

・IBM Docs:CREATE TABLE ステートメント
https://www.ibm.com/docs/ja/db2/11.5?topic=statements-create-table

INSERTコマンドで、試しにパーティション表TBL1に 値(1, ’2021-01-01’)を挿入すると、
パーティションの範囲外のため 挿入ができないことがわかります。

$ db2 "INSERT INTO TBL1 VALUES(1, '2021-01-01')"
DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL0327N  The row cannot be inserted into table "DB2INST1.TBL1" because it is 
outside the bounds of the defined data partition ranges.  SQLSTATE=22525

・IBM Docs:DB20000 - DB29999
https://www.ibm.com/docs/ja/db2/11.5?topic=SSEPGG_11.5.0/com.ibm.db2.luw.messages.db2.doc/db20000-db29999.html

・IBM Docs:SQL0250 - SQL0499
https://www.ibm.com/docs/ja/db2/11.5?topic=SSEPGG_11.5.0/com.ibm.db2.luw.messages.sql.doc/sql0250-sql0499.html

② 確認

DESCRIBEコマンドで、作成した表 TBL1を確認します。

コマンドは以下の通りです。

DESCRIBE DATA PARTITIONS FOR TABLE TBL1 SHOW DETAIL

実行例は以下の通りです。

$ db2 DESCRIBE DATA PARTITIONS FOR TABLE TBL1 SHOW DETAIL

PartitionId PartitionName                   TableSpId   PartObjId   IndexTblSpId LongTblSpId AccessMode
                                                                                               Status
----------- ------------------------------- ----------- ----------- ------------ ----------- - ------
          0 PART0                                     3           4            3           3 F                                 
          1 PART1                                     4           4            4           4 F                                 
          2 PART2                                     5           4            5           5 F                                 
          3 PART3                                     6           4            6           6 F                                 

  4 record(s) selected.


PartitionId Inclusive (y/n)                   Inclusive (y/n)
              Low Value                         High Value
----------- - ------------------------------- - -------------------------------
          0 Y '2020-01-01'                    Y '2020-03-31'                   
          1 N '2020-03-31'                    Y '2020-06-30'                   
          2 N '2020-06-30'                    Y '2020-09-30'                   
          3 N '2020-09-30'                    Y '2020-12-31'                   

  4 record(s) selected.

・IBM Docs:DESCRIBE コマンド
https://www.ibm.com/docs/ja/db2/11.5?topic=commands-describe

③ パーティション追加

ALTER TABLEコマンドで、範囲が2021-01-01~2021-03-31の パーティションを追加します。
コマンドは以下の通りです。

ALTER TABLE TBL1 ADD PARTITION
  STARTING '2021-01-01'
  ENDING '2021-03-31' IN TS5

実行例は以下の通りです。

$ db2 "
> ALTER TABLE TBL1 ADD PARTITION
>   STARTING '2021-01-01'
>   ENDING '2021-03-31' IN TS5
> "
DB20000I  The SQL command completed successfully.

パーティション追加ができました。

・IBM Docs:ALTER TABLE ステートメント
https://www.ibm.com/docs/ja/db2/11.5?topic=statements-alter-table

④ 確認

DESCRIBEコマンドで、パーティションを追加した 表 TBL1を確認します。

コマンドは以下の通りです。

DESCRIBE DATA PARTITIONS FOR TABLE TBL1 SHOW DETAIL

実行例は以下の通りです。

$ db2 DESCRIBE DATA PARTITIONS FOR TABLE TBL1 SHOW DETAIL

PartitionId PartitionName                   TableSpId   PartObjId   IndexTblSpId LongTblSpId AccessMode
                                                                                               Status
----------- ------------------------------- ----------- ----------- ------------ ----------- - ------
          0 PART0                                     3           4            3           3 F                                 
          1 PART1                                     4           4            4           4 F                                 
          2 PART2                                     5           4            5           5 F                                 
          3 PART3                                     6           4            6           6 F                                 
          4 PART4                                     7           4            7           7 F                                 

  5 record(s) selected.


PartitionId Inclusive (y/n)                   Inclusive (y/n)
              Low Value                         High Value
----------- - ------------------------------- - -------------------------------
          0 Y '2020-01-01'                    Y '2020-03-31'                   
          1 N '2020-03-31'                    Y '2020-06-30'                   
          2 N '2020-06-30'                    Y '2020-09-30'                   
          3 N '2020-09-30'                    Y '2020-12-31'                   
          4 Y '2021-01-01'                    Y '2021-03-31'                   

  5 record(s) selected.

2021-01-01~2021-03-31を範囲とする パーティション PART4 が追加されていることがわかります。

・IBM Docs:DESCRIBE コマンド
https://www.ibm.com/docs/ja/db2/11.5?topic=commands-describe

試しに、INSERTコマンドで、パーティション表TBL1に 値(1, ’2021-01-01’)を挿入すると、
パーティションの範囲内のため 挿入ができることがわかります。

$ db2 "INSERT INTO TBL1 VALUES(1, '2021-01-01')"
DB20000I  The SQL command completed successfully.

$ db2 "SELECT * FROM TBL1"

COL1        COL2      
----------- ----------
          1 01/01/2021

  1 record(s) selected.

6. おわりに

今回は、パーティション表における デタッチアタッチパーティション追加 操作を確認しました。

パーティション表の デタッチ・アタッチの処理では、データの移動が発生しないので、
高速にデータを 追加・削除したい時に 活用することができます。

参考情報

・IBM Docs:パーティション表
https://www.ibm.com/docs/ja/db2/11.5?topic=schemes-partitioned-tables

・[ThinkIT] 第2回:大規模データベースでも威力発揮!
https://thinkit.co.jp/free/article/0707/19/2/

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?