ページの先頭行へ戻る
Symfoware Server V12.2.0 RDB運用ガイド(データベース定義編)
FUJITSU Software

2.7.1 表のDSO定義

表のDSOの定義は、CREATE DSO文を使用して行います。

以下に表のDSO定義の例を示します。

表のDSO定義

  • 表の分割運用を適用しない場合(データ構造:SEQUENTIAL)

    CREATE DSO  在庫表DSO  FROM STOCKS.在庫表
                     ↑                 ↑
                    DSO名              表名
    
                TYPE SEQUENTIAL(PAGESIZE(4),ORDER(1))
                                   ↑
                               データ構造
  • 表の分割運用を適用しない場合(データ構造:RANDOM)

    CREATE DSO  在庫表DSO  FROM STOCKS.在庫表
                     ↑                 ↑
                    DSO名              表名
    
                TYPE RANDOM(PAGESIZE1(4),PAGESIZE2(4),CLUSTER(製品番号))
                                          ↑
                                      データ構造
  • 表の分割運用を適用する場合(データ構造:SEQUENTIAL)

    CREATE DSO  発注表DSO  FROM STOCKS.発注表
                     ↑                 ↑
                    DSO名              表名
    
                             TYPE SEQUENTIAL(PAGESIZE(4),ORDER(1))
                                                ↑
                                            データ構造
    
                             WHERE (取引先) BETWEEN ( ? ) AND ( ? )   ← 分割条件
                                      ↑              ↑        ↑
                                  列名リスト      仮値リスト  仮値リスト
  • コミットデータ即時読込み機能を利用する場合(データ構造:SEQUENTIAL)

    CREATE DSO  発注表DSO  FROM STOCKS.発注表
                     ↑               ↑
                    DSO名            表名
    
                           TYPE SEQUENTIAL(PAGESIZE(32),ORDER(1),PRECEDENCE(1))
                                                     ↑
                                                データ構造
    
                             WHERE (取引先) BETWEEN ( ? ) AND ( ? )   ← 分割条件
                                      ↑             ↑        ↑
                                   列名リスト    仮値リスト  仮値リスト
  • 表の分割運用を適用する場合(データ構造:RANDOM)

    CREATE DSO  発注表DSO  FROM STOCKS.発注表
                     ↑                 ↑
                    DSO名              表名
    
                             TYPE RANDOM(PAGESIZE1(4),PAGESIZE2(4), CLUSTER(取引先))
                                                      ↑
                                                  データ構造
    
                             WHERE (取引先) BETWEEN ( ? ) AND ( ? )     ← 分割条件
                                      ↑              ↑        ↑
                                  列名リスト     仮値リスト 仮値リスト

DSO

DSO名には、36文字以内の先頭が英字で始まる英数字、または18文字以内の日本語文字列を指定します。DSO名は、データベース内で一意です。

表名

格納構造定義に対応する実表の名前を指定します。表名は、スキーマ名で修飾されている必要があります。

データ構造

表のデータ格納時のデータ構造について指定します。DSO定義で表の格納構造を定義する場合には、SEQUENTIALまたはRANDOMが指定可能です。

SEQUENTIAL

SEQUENTIALを指定した場合、追加されるデータは追加順に格納されます。

PAGESIZEは、ページ長を指定します。ORDER(0)は、削除領域を再使用しないことを指定し、また、ORDER(1)は、削除領域を再使用することを指定します。詳細については、“4.1.1 SEQUENTIAL構造”を参照してください。

PRECEDENCE(1)は、コミットデータ即時読込み機能を利用して、更新処理と参照処理が競合した際に参照処理の動作を優先し、更新処理の完了を参照処理が待たないようにする場合に指定します。PRECEDENCE(1)は格納オプションのORDER(1)と組み合わせて指定します。詳細については、“4.1.2 PRECEDENCE(1)を指定したSEQUENTIAL構造の特徴と注意点”を参照してください。

RANDOM

RANDOMを指定した場合、追加されるデータは無作為な順で格納されます。

RANDOMは、データの格納位置を決定するためのキーを、CLUSTERにより指定します。CLUSTERを省略すると、表定義における主キー(PRIMARY KEY)と同じ列の並びとなります。

PAGESIZE1、PAGESIZE2は、データ構造の要素(RANDOM構造の場合のPRIMEとOVERFLOW)のページ長を指定します。

RANDOM構造の場合は、RULEを指定してデータの格納位置を決定することができます。詳細については、“4.1.3 RANDOM構造”を参照してください。

分割条件

表の分割運用を適用する場合に、分割の条件を指定します。実際の分割単位はDSI定義文で指定します。ここでは、分割のための条件だけを指定します。

各分割単位に格納される行は、列名リストに指定された各列に設定する値と、仮値リストの“?”にDSI定義文で指定された値を代入した結果により決定されます。

DSO定義文で分割条件を指定する場合、データ構造がRANDOMのときは、分割条件で指定する列名リストは、CLUSTERで指定した列名リストに含まれた列であることが必要です。

列名リストに指定可能な列の数は、最大で64個です。列名リストと仮値リストの“?”の数は、同じでなければなりません。

CLUSTERおよび列名リストに指定可能な列のデータ型は、以下のとおりです。

表2.6 CLUSTERおよび列名リストに指定可能な列のデータ型

属性

精度

位取り

長さ

SMALLINT

  

INTEGER

  

NUMERIC

1~18

0~精度

  

DECIMAL

1~18

0~精度

  

CHARACTER

1~1000(注1)

VARYINGは指定不可

NATIONAL CHARACTER

1~500 (注2)

VARYINGは指定不可

DATE

  

TIME

  

TIMESTAMP

  

INTERVAL

  

注1) 分割条件に指定する場合は、1~254で指定します。

注2) 分割条件に指定する場合は、1~127で指定します。


CLUSTERおよび列名リストに指定する列には、NOT NULLが指定されている必要があります。なお、分割条件で指定された列名リストを分割キーと呼びます。

以下に、発注表の取引先と取引製品を1組の分割キーとした発注表のDSO定義の例を示します。

例1

列名リスト中の列名の個数と仮値リストの“?”の個数の関係

分割条件 : WHERE (取引先) =   ( ? )
                    ↑          ↑
                列名 = 1     仮値 = 1

分割条件 : WHERE (取引先) BETWEEN   ( ? )   AND   ( ? )
                    ↑                ↑            ↑
                 列名 = 1          仮値 = 1      仮値 = 1

分割条件 : WHERE (製品名, 倉庫番号) =   (?,?)
                         ↑               ↑
                      列名 = 2         仮値 = 2

分割条件 : WHERE (年度, 月) BETWEEN   (?,?)   AND   (?,?)
                      ↑                ↑            ↑
                    列名 = 2        仮値 = 2      仮値 = 2
         :
列名リスト中の列数と仮値の“?”の数は同数である。
例2

取引先名の名前で分割した例

CREATE DSO  発注表DSO2 FROM STOCKS.発注表
            TYPE SEQUENTIAL(PAGESIZE(4),ORDER(1))
            WHERE  (取引先) = (?)
例3

パーティション分割するキー値を、範囲で区切って分割する例

CREATE DSO  発注表DSO FROM STOCKS.発注表
            TYPE SEQUENTIAL(PAGESIZE(4),ORDER(1))
            WHERE  (取引先) BETWEEN (?) AND (?)