ページの先頭行へ戻る
PRIMEFLEX for HA Database 業務開発ガイド(Native SQL編)
FUJITSU Integrated System

3.3.7 格納構造の定義

論理構造の定義が終了したら、格納構造の定義を行います。格納構造の定義を行うと、その情報がRDBディクショナリに格納されます。

格納構造の定義には、DSO定義とDSI定義の2つがあります。論理構造定義で作成された表に対して、表のDSO定義および表のDSI定義を行います。また、表に対してインデックスの定義が必要です。インデックスを定義するためには、インデックスのDSO定義およびインデックスのDSI定義を行います。格納構造の定義は、DSO定義文およびDSI定義文を実行することにより行います。

格納構造についての詳細は、“3.5 格納構造”を参照してください。

以下に格納構造定義の流れを示します。

図3.17 格納構造定義の流れ

DSO定義

DSO定義では、データを格納するための格納構造の種類や、表の分割運用を行うための規則などを指定します。

DSO定義には、表のDSO定義とインデックスのDSO定義の2つがあります。

表のDSO定義

表のDSO定義は、実表に対して、データを格納するための格納構造の種類や、表の分割運用を行うための規則などを指定します。表のDSO定義は、CREATE DSO文で行います。

実表の格納構造は、格納するデータの大きさによって大別できます。文字や数値などのデータを扱う場合と、マルチメディアデータを扱う場合では、格納構造が異なります。マルチメディアデータを扱う場合については、“3.3.7.2 マルチメディアデータを格納する表のDSO定義”を参照してください。

インデックスのDSO定義

インデックスのDSO定義は、インデックスを構成する列や、インデックスのデータを格納するための格納構造の種類などを定義します。インデックスのDSO定義は、CREATE DSO文で行います。

DSI定義

DSI定義では、実際にデータが格納されるデータベーススペースとの対応づけ、表の分割運用を行うための分割キー値の指定、自動容量拡張の指定などを行います。

DSI定義には、表のDSI定義とインデックスのDSI定義の2つがあります。

表のDSI定義

表のDSI定義は、表のDSO定義に従いデータベーススペースとの対応づけ、表の分割運用を行うための分割キー値の指定、自動容量拡張の指定などを行います。表のDSI定義は、CREATE DSI文で行います。

インデックスのDSI定義

インデックスのDSI定義は、インデックスのDSO定義に従いデータベーススペースとの対応づけや、自動容量拡張の指定を行います。インデックスのDSI定義は、CREATE DSI文で行います。

格納構造定義文は、表およびインデックスのDSO定義、およびDSI定義から構成されます。各定義文の詳細は、“3.3.7.1 表のDSO定義”、“3.3.7.3 インデックスのDSO定義”、“3.3.7.4 表のDSI定義”、および“3.3.7.5 インデックスのDSI定義”で説明します。

スコープの定義

スコープは、表のデータ操作の範囲のことです。スコープにより、あらかじめデータ操作の範囲を限定しておいて、その範囲内で表のデータ操作ができます。スコープは、利用者ごとに適用および解除します。

以下に、スコープの利用例を示します。

スコープ“東京スコープ”を定義、そして利用者“SUZUKI”に適用して、アプリケーションから限定された表を検索します。

3.3.7.1 表のDSO定義

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

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

表のDSO定義

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

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

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

    CREATE DSO  発注表DSO  FROM STOCKS.発注表
                     ↑               ↑
                    DSO名            表名
    
                           TYPE SEQUENTIAL(PAGESIZE(32),ORDER(1),PRECEDENCE(1))
                                                     ↑
                                                データ構造
    
                             WHERE (取引先) BETWEEN ( ? ) AND ( ? )   ← 分割条件
                                      ↑             ↑        ↑
                                   列名リスト    仮値リスト  仮値リスト

DSO

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

表名

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

データ構造

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

SEQUENTIAL

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

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

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

分割条件

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

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

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

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

表3.6 列名リストに指定可能な列のデータ型

属性

精度

位取り

長さ

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で指定します。


列名リストに指定する列には、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(32),ORDER(1))
            WHERE  (取引先) = (?)
例3

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

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

3.3.7.2 マルチメディアデータを格納する表のDSO定義

画像や音声などのデータを格納する場合の表のDSO定義の方法について説明します。これらのデータは、BLOB型の列に格納します。

画像や音声などのデータを格納する場合、表のレコード長は、ページ長をこえて定義することができます。このとき、データ構造にはSEQUENTIALを指定します。また、対応する表定義に条件があります。表定義の条件についての詳細は、“3.3.6.4 マルチメディアデータを格納する表の定義”を参照してください。

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

例1

マルチメディアデータを格納する表のDSOの定義例(SEQUENTIALの場合)

CREATE DSO  製品写真表DSO  FROM S1.製品写真表
                   ↑                    ↑
                  DSO名                 表名

                             TYPE SEQUENTIAL (PAGESIZE(32),ORDER(1))
                                                ↑
                                            データ構造

3.3.7.3 インデックスのDSO定義

インデックスのDSO定義は、CREATE DSO文を使用して行います。インデックスは、ある列を用いた条件検索を行うとき、検索効率を向上させるために、探索条件で使用する列に対して定義します。

表定義にPRIMARY KEYまたはUNIQUEが指定されている場合、その列と同一構成(順序は同一)のインデックスのDSO定義が必要となります。

また、すでにデータが格納されている表に対して、新たなインデックスのDSO定義を追加することが可能です。

以下にインデックスのDSO定義の例を示します。

インデックスのDSO定義

インデックスを作成する表の名前(表名)とインデックスを構成する列(列名リスト)の指定が、キー指定になります。

表のデータ構造がSEQUENTIALの場合

CREATE DSO  製品番号IXDSO  INDEX ON STOCKS.在庫表 (製品番号)
                   ↑                       ↑          ↑
                  DSO名                    表名     列名リスト
                                                   ↑
                                                キー指定

                              TYPE BTREE(PAGESIZE1(8),PAGESIZE2(8), REALIGNMENT)
                                                       ↑
                                                   データ構造
                              BY ADDRESS
                                   ↑
                               ベース表現

DSO

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

キー指定

インデックスを作成する表名、およびインデックスを構成する列名リストを指定します。

表名

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

列名リスト

インデックスを作成する列名を指定します。インデックスの列名リストに指定可能な列のデータ型は、以下のとおりです。

表3.7 インデックスの列名リストに指定可能な列のデータ型

属性

精度

位取り

長さ

備考

SMALLINT

  

INTEGER

  

NUMERIC

1~18

0~精度

  

DECIMAL

1~18

0~精度

  

CHARACTER

1~1000

VARYINGも指定可

NATIONAL CHARACTER

1~500

VARYINGも指定可

DATE

  

TIME

  

TIMESTAMP

  

INTERVAL

  

データ構造

インデックスのデータ格納時のデータ構造について指定します。BTREEが指定可能です。

BTREE

PAGESIZE1は、データ部のページ長を指定します。

PAGESIZE2は、インデックス部のページ長を指定します。

ページ長には8(キロバイト)を指定します。

詳細については、“3.5.2.1 BTREE構造”を参照してください。

ベース表現

インデックスとベースの対応関係のもち方を指定します。省略するとSEQUENTIALにはADDRESSが指定されたものとみなします。

ADDRESS:

インデックスと表のレコードが、表のレコードの格納アドレスによって対応関係をもちます。表のデータ構造がSEQUENTIALの場合に指定します。

3.3.7.4 表のDSI定義

表のDSIの定義は、CREATE DSI文を使用して行います。表のDSI定義は、表のDSO定義に従ってデータベーススペースの割付けを行います。

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

表のDSI定義

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

    CREATE DSI  在庫表DSI  DSO  在庫表DSO
                     ↑                 ↑
                    DSI名              DSO名
    
                ALLOCATE DATA ON DBSP_1   SIZE 288K     ←スペース割付け
                                   ↑           ↑
                             データベース    割付け量
                             スペース名
  • 表の分割運用を適用する場合(データ構造:SEQUENTIAL)

    CREATE DSI  関西発注表DSI  DSO  発注表DSO  USING(70,90)
                      ↑                    ↑            ↑
                     DSI名                 DSO名      分割キー値
    
                ALLOCATE DATA    ON DBSP_2   SIZE 288K  ←スペース割付け
                                      ↑           ↑
                                 データベース    割付け量
                                 スペース名
  • DSIの自動容量拡張の設定を行う場合

    CREATE DSI  在庫表DSI  DSO  在庫表DSO
                     ↑                 ↑
                    DSI名              DSO名
    
                ALLOCATE DATA ON DBSP_1   SIZE 288K,    ←スペース割付け
                                   ↑           ↑
                             データベース    割付け量
                             スペース名
    
                EXPAND ON DBSP_1 ALARM 224K CAPACITY 0K SIZE 1M
                            ↑          ↑           ↑      ↑
                       容量拡張先    アラーム     拡張契機  拡張量
                       データベース  ポイント
                       スペース名
  • DSIに表のデータ圧縮機能を指定する場合

    CREATE DSI  在庫表DSI  DSO  在庫表DSO  COMPRESS 
                     ↑                 ↑            ↑
                    DSI名              DSO名      圧縮指定
    
                ALLOCATE DATA ON DBSP_1   SIZE 1024M    ←スペース割付け
                                   ↑           ↑
                             データベース    割付け量
                             スペース名

DSI

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

DSO

CREATE DSO文で指定した表のDSO名を指定します。

表の分割運用を行わない場合は、1つのDSO定義に対して1つのDSIだけを定義します。一方、表の分割運用を行う場合、分割キー値を指定した複数個のDSI定義が必要となります。表の分割運用を行う場合のDSI定義では、存在するデータをすべて網羅するだけのDSI定義が必要です。

圧縮指定

COMPRESSを指定した場合、DSIに対して格納されるデータの圧縮を行います。表のデータ構造がSEQUENTIALの場合に指定可能です。

分割キー値

表の分割運用を行う場合に、分割条件の具体的な値を指定します。

分割キー値は、表のDSO定義の分割条件に指定した仮値リストの“?”に対する値を、定数で指定します。分割条件に複数の“?”が存在する場合には、その出現順序にあわせて、定数をカンマで区切り指定します。分割条件に指定した“?”の個数と、定数の個数は同じでなければなりません。

ある行(データ)の格納先が、複数のDSIとなるような分割キー値の指定はできません。

分割条件にBETWEENで複数の列を指定した場合、DSIで指定する分割値は複数列の値を連結して1の値として評価します。

分割条件が(年, 月)BETWEEN(?,?)AND(?,?)で、DSIの分割値に(2006,4,2007,3)を指定した場合、このDSIのデータ格納範囲は以下となります。たとえば、(2006,12)は範囲内のデータとなります。

2006年4月2007年3月

“年”と“月”を連結して“年月”として評価します。

注意

たとえば、分割条件として(支店コード, 製品番号)BETWEEN(?,?)AND(?,?)を指定しても、DSIのデータ格納範囲として“支店コードの範囲 かつ 製品番号の範囲”とはならないので注意してください。

例1

支店コード表を支店コードと製品番号の値で分割格納し、支店コード表に対する製品番号のDSIを作成します。

CREATE DSO  支店コード表DSO                   -- 支店コード表のDSO
       FROM STOCKS.支店コード表
       TYPE SEQUENTIAL ( PAGESIZE(32), ORDER(0))
       WHERE (支店コード,製品番号) BETWEEN (?,?) AND (?,?);
                                                 -- 支店コードと製品
                                                 -- 番号でデータ分割

CREATE DSI  支店コードDSI製品番号1           -- 支店コード表のDSI
       DSO      支店コード表DSO
       USING   (100,1,199,10)                    -- (100,1)~(199,10)
       ALLOCATE DATA ON DBSP_2  SIZE 288K;       -- の分割値

CREATE DSI  支店コードDSI製品番号2           -- 支店コード表のDSI
       DSO      支店コード表DSO
       USING   (200,10,299,20)                   -- (200,10)~(299,20)
       ALLOCATE DATA ON DBSP_2  SIZE 288K;       -- の分割値

下線で記述したレコードもDSIの分割条件に含まれるので注意してください。

分割キー値に指定可能な定数の記述形式を以下に示します。

表3.8 分割キー値に指定可能な定数の記述形式

対応する列の属性

分割キー値に指定可能な定数の記述形式

SMALLINT

-32768~32767(小数点なし)

INTEGER

-2147483648~2147483647(小数点なし)

NUMERIC(p,q)

整数部(小数点の左側)の数字の数はp-q以下
小数部(小数点の右側)の数字の数はq以下
(注)

DECIMAL(p,q)

CHARACTER(n)

文字数がn以下の文字列定数

NATIONAL CHARACTER(n)

文字数がn以下の日本語文字列定数

DATE

年から日までの10文字の日付

TIME

時から秒までの8文字の時刻

TIMESTAMP

年から秒までの19文字の時刻印

INTERVAL 開始日時フィールド TO 終了日時フィールド

各フィールドの指定により、年~月、日~時刻の時間隔を格納
(詳細は“表3.9 分割キー値に指定可能な時間隔型の記述形式”を参照)

n : 文字数
p : 精度
q : 位取り

注)定数が小数点を含まない場合はすべて整数部となります。

表3.9 分割キー値に指定可能な時間隔型の記述形式

型種類

開始日時フィールド

終了日時フィールド

指定の意味

年・月型

YEAR(p)

桁数pの年を表す時間隔

MONTH

桁数pの年と月を表す時間隔

MONTH(p)

桁数pの月を表す時間隔

日・時型

DAY(p)

SECOND

桁数pの日と時間から秒を表す時間隔

MINUTE

桁数pの日と時間から分を表す時間隔

HOUR

桁数pの日と時間を表す時間隔

桁数pの日を表す時間隔

HOUR(p)

SECOND

桁数pの時間と分から秒を表す時間隔

MINUTE

桁数pの時間と分を表す時間隔

桁数pの時間を表す時間隔

MINUTE(p)

SECOND

桁数pの分と秒を表す時間隔

桁数pの分を表す時間隔

SECOND(p)

桁数pの秒を表す時間隔

p : 開始日時フィールドの精度(1~9の整数を指定)

スペース割付け

表のDSIに対して物理的なスペースの割付けを指定します。

データを物理的に格納するデータベーススペース名、およびデータベーススペース中に、このDSI用に獲得する格納領域の大きさを指定します。獲得された格納領域は、DSO定義で指定されたページ長によりアクセスされます。

データベーススペース名

実際にデータを格納する、物理的なデータベーススペース名を指定します。

割付け量

割付け量には、データベーススペース中に獲得する格納領域の大きさを、符号なし整数と単位記号(KまたはM)の組合せで指定します。単位記号Kはキロバイト、単位記号Mはメガバイトを示します。

割付け対象のデータベーススペースに、割付け量分の連続領域が存在しない場合、複数の領域に分割して割付けることがあります。複数の領域に分割されたかどうかは、rdbprtコマンドの出力結果で確認できます。DSI情報のAllocation informationのAllocate sizeに、指定した割付け量以下の値が表示された場合、複数の領域に分割して割付けられたと判断できます。

参照

rdbprtコマンドの詳細については、“Symfoware Server コマンドリファレンス”を参照してください。

表のDSIによるデータベーススペースへの格納の単位は、表のDSO定義での分割条件と、分割キー値の指定により決定されます。以下に使用例を示します。

例1

分割条件で指定した“?”の個数と分割値指定の定数の個数の関係

分割条件 : WHERE (取引先) =  (?)
分割値   : USING  (61)        ↑
                   ↑      仮値 = 1
                定数 = 1

分割条件 : WHERE (取引先) BETWEEN  (?) AND (?)
分割値   : USING  (61,71)               ↑
                     ↑             仮値 = 2
                  定数 = 2

分割条件 : WHERE (製品名, 倉庫番号) =  (?,?)
分割値   : USING  (N'テレビ',2)          ↑
                       ↑            仮値 = 2
                   定数 = 2

分割条件 : WHERE (年度, 月) BETWEEN  (?,?)  AND  (?,?)
分割値   : USING  (2006,4,2007,3)            ↑
                           ↑             仮値 = 4
                       定数 = 4
         :

備考.定数の個数と分割条件に指定した“?”は同数です。

例2

在庫表を製品名と倉庫番号の値で分割格納し、在庫表に対するテレビのDSIを作成します。

CREATE DSO  在庫表DSO                  --  在庫表のDSO
       FROM STOCKS.在庫表
       TYPE SEQUENTIAL(PAGESIZE(32),
                       ORDER(1))
       WHERE (製品名,倉庫番号) = (?,?);   --  製品名と倉庫番号で
                                          --  データ分割
CREATE DSI  在庫表DSIテレビ2          --  倉庫番号2の在庫表のDSI
       DSO      在庫表DSO
       USING   (N'テレビ',2)              --  製品名テレビ、倉庫番号2
       ALLOCATE DATA ON DBSP_1 SIZE 288K; --  の在庫表
例3

発注表を取引先の地区別にデータ分割し、発注表に対する関西地区のDSIを作成します。発注表の発注先番号は地区別に割り振られており、70から79の範囲は、関西地区の会社を表しているものとします。

CREATE DSO  発注表DSO                      --  発注表のDSO
       FROM STOCKS.発注表
       TYPE SEQUENTIAL(PAGESIZE(32),
                       ORDER(1))
       WHERE (取引先) BETWEEN (?) AND (?);    --  取引先の番号別に
                                              --  データ分割配置

CREATE DSI  関西発注表DSI                  --  関西に所在の会社用の
       DSO      発注表DSO                  --  発注表のDSI
       USING   (70,79)                        --  70番台は関西所在の会社
       ALLOCATE DATA     ON DBSP_2 SIZE 224K;
例4

在庫表を製品名と倉庫番号の値で分割格納し、在庫表に対する製品名がテレビと冷蔵庫のDSIを作成します。なお、分割条件を製品名と倉庫番号とし、分割値の指定を複数指定するものとします。

CREATE DSO  在庫表DSO                    --  在庫表のDSO
       FROM STOCKS.在庫表
       TYPE SEQUENTIAL ( PAGESIZE(32),
                         ORDER(1))
       WHERE (製品名,倉庫番号) = (?,?);     --  製品名と倉庫番号で
                                            --  データ分割

CREATE DSI  在庫表DSI電化製品            --  倉庫番号2と1の
       DSO      在庫表DSO                --  在庫表のDSI
       USING  (N'テレビ',2),(N'冷蔵庫',1)   --  製品名テレビと冷蔵庫
       ALLOCATE DATA ON DBSP_1  SIZE 288K;  --  の在庫表
例5

売上表を年と月にデータ分割し、売上表に対する2005年度と2006年度の下半期の売上数量のDSIを作成します。なお、分割値の指定を複数指定するものとします。

CREATE DSO  売上表DSO                          -- 売上表のDSO
       FROM STOCKS.売上表
       TYPE SEQUENTIAL ( PAGESIZE(32), ORDER(1))
       WHERE (年度,月) BETWEEN (?,?) AND (?,?);   -- 年度と月で
                                                  -- データ分割

CREATE DSI  下半期DSI                          -- 2005年度と2006年度
       DSO      売上表DSO                      -- の下半期のDSI     
       USING   (2005,10,2006,3),(2006,10,2007,3)  -- 年度と月の売上表
       ALLOCATE DATA ON DBSP_2  SIZE 288K;

容量拡張先データベーススペース名

自動容量拡張するデータベーススペース名を指定します。

容量拡張定義を省略した場合、省略値は以下となります。

拡張領域の割付け先: DSIの割付け先のデータベーススペース

アラームポイント : 【データ部の割付け量 × 80%】以下となるページ長の倍数の最大値

拡張契機 : 0キロバイト

拡張量 : 1024キロバイト

注意

容量拡張先データベーススペースには、拡張量に指定した値以上の空き領域を用意してください。

また容量拡張定義を省略した場合、DSIの割付け先のデータベーススペースを容量拡張先データベーススペースとするため、DSIの割付け先のデータベーススペースに拡張量に指定した値以上の空き領域を用意してください。

アラームポイント

アラームポイントの契機をDSIの使用容量で指定します。

使用容量は、符号なし整数と単位記号(KまたはM)の組合せで指定します。単位記号Kはキロバイト、単位記号Mはメガバイトを示します。

拡張契機

自動容量拡張の拡張契機をDSIの空きページ容量で指定します。

空きページ容量は、符号なし整数と単位記号(KまたはM)の組合せで指定します。単位記号Kはキロバイト、単位記号Mはメガバイトを示します。

拡張量

DSIの拡張領域の割付け量を指定します。

拡張量は、符号なし整数と単位記号(KまたはM)の組合せで指定します。単位記号Kはキロバイト、単位記号Mはメガバイトを示します。

割付け対象のデータベーススペースに、拡張量分の連続領域が存在しない場合、複数の領域に分割して割付けることがあります。複数の領域に分割されたかどうかは、rdbprtコマンドの出力結果で確認できます。DSI情報のAllocation informationのAllocate sizeに、指定した拡張量以下の値が表示された場合、複数の領域に分割して割付けられたと判断できます。

3.3.7.5 インデックスのDSI定義

インデックスのDSIの定義は、CREATE DSI文を使用して行います。インデックスのDSI定義はインデックスのDSO定義に従ってデータベーススペースとの割付けを行います。

すでにデータが格納されている表のDSIに対して、新たなインデックスのDSI定義を追加することが可能です。

インデックスのDSI定義の例を以下に示します。

インデックスのDSI定義

CREATE DSI  製品番号IXDSI     INDEX     DSO  製品番号IXDSO
                   ↑                                  ↑
                  DSI名                               DSO名

       BASE 在庫表DSI
                 ↑
              表のDSI名

       ALLOCATE BASE   ON   DBSP_1    SIZE  200K,  ←スペース割付け
                INDEX  ON   DBSP_1    SIZE   40K,  ←スペース割付け
                              ↑             ↑
                         データベース     割付け量
                         スペース名

       EXPAND ON DBSP_1 ALARM 150K CAPACITY 0K SIZE 1M
                   ↑          ↑           ↑      ↑
             容量拡張先     アラーム     拡張契機  拡張量
             データベース   ポイント
             スペース名

DSI

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

DSO

CREATE DSO文で指定したインデックスのDSO名を指定します。

表のDSI

対応する実表をDSI名で指定します。表の分割運用を行う場合、インデックスは、表のDSIごとに作成します。表の分割運用を行わない場合は、表のDSI名を指定することはできません。

スペース割付け

インデックスのDSIに対して物理的なスペースを割り付ける指定をします。

データを物理的に格納するデータベーススペース名およびデータベーススペース中に、このDSI用に獲得する格納領域の大きさを指定します。

データベーススペース名

実際にインデックスのデータを格納する、物理的なデータベーススペース名を指定します。

割付け量

割付け量には、データベーススペース中に獲得する格納領域の大きさを、符号なし整数と単位記号(KまたはM)の組合せで指定します。単位記号Kはキロバイト、単位記号Mはメガバイトを示します。

割付け対象のデータベーススペースに、割付け量分の連続領域が存在しない場合、複数の領域に分割して割付けることがあります。複数の領域に分割されたかどうかは、rdbprtコマンドの出力結果で確認できます。DSI情報のAllocation informationのAllocate sizeに、指定した割付け量以下の値が表示された場合、複数の領域に分割して割付けられたと判断できます。

参照

rdbprtコマンドの詳細については、“Symfoware Server コマンドリファレンス”を参照してください。

容量拡張先データベーススペース名

自動容量拡張するデータベーススペース名を指定します。

容量拡張定義を省略した場合、省略値は以下となります。

拡張領域の割付け先: DSIの割付け先のデータベーススペース

アラームポイント : 【ベース部の割付け量 × 80%】以下となるページ長の倍数の最大値

拡張契機 : 0キロバイト

拡張量 : 1024キロバイト

注意

容量拡張先データベーススペースには、拡張量に指定した値以上の空き領域を用意してください。

また容量拡張定義を省略した場合、DSIの割付け先のデータベーススペースを容量拡張先データベーススペースとするため、DSIの割付け先のデータベーススペースに拡張量に指定した値以上の空き領域を用意してください。

アラームポイント

アラームポイントの契機をDSIの使用容量で指定します。

使用容量は、符号なし整数と単位記号(KまたはM)の組合せで指定します。単位記号Kはキロバイト、単位記号Mはメガバイトを示します。

拡張契機

自動容量拡張の拡張契機をDSIの空きページ容量で指定します。

空きページ容量は、符号なし整数と単位記号(KまたはM)の組合せで指定します。単位記号Kはキロバイト、単位記号Mはメガバイトを示します。

拡張量

DSIの拡張領域の割付け量として、ベース部のページ長以上の値を指定します。

拡張量は、符号なし整数と単位記号(KまたはM)の組合せで指定します。単位記号Kはキロバイト、単位記号Mはメガバイトを示します。

拡張量は、ページ長単位に繰り上げますので、ベース部のページ長の倍数で指定してください。

インデックス部の拡張量は、ベース部の5分の1の値となります。ベース部の5分の1がインデックス部のページ長の倍数でない場合、インデックス部のページ長の倍数に繰り上げます。

割付け対象のデータベーススペースに、拡張量分の連続領域が存在しない場合、複数の領域に分割して割付けることがあります。複数の領域に分割されたかどうかは、rdbprtコマンドの出力結果で確認できます。DSI情報のAllocation informationのAllocate sizeに、指定した拡張量以下の値が表示された場合、複数の領域に分割して割付けられたと判断できます。

3.3.7.6 スコープ定義

スコープ定義は、CREATE SCOPE文で行います。

CREATE SCOPE文の定義者と表のDSIの定義者は、同じでなければなりません。

スコープ“東京スコープ”の定義

CREATE SCOPE    東京スコープ
                     ↑
                 スコープ名

       DSI (東京在庫表DSI, 東京発注表DSI)
                             ↑
                          DSI名リスト

スコープ名

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

DSI名リスト

DSI名リストは、アクセス範囲を限定する表のDSI名を指定します。DSI名は、データベース内で一意でなければなりません。スコープ定義文で同じDSIを指定することはできません。

注意事項

スコープ機能で限定されるデータ操作の範囲は、アプリケーションのSQL文、rdbuptコマンドおよびrdbunlsqlコマンドで有効となります。rdbsloaderコマンドなどのRDBコマンドでは有効となりません。

3.3.7.7 格納構造の定義の適用

ここでは、格納構造の定義の適用について説明します。格納構造の定義の適用にはスコープ定義の適用があります。

3.3.7.7.1 スコープ定義の適用

スコープ定義の適用は、APPLY SCOPE文で行います。スコープ定義をある利用者に適用することにより、利用者は、指定された範囲で表のデータ操作ができます。

APPLY SCOPE文の実行者は、スコープの定義者でなければなりません。

スコープの適用の例を、以下に示します。

利用者“SUZUKI”にスコープ“東京スコープ”を適用します。

APPLY SCOPE    東京スコープ
                    ↑
                スコープ名

       TO     SUZUKI
                ↑
            認可識別子

スコープ名

スコープ名は、表の利用者に対して適用するスコープの名前を指定します。スコープ名には、36文字以内の先頭が英字で始まる英数字、または18文字以内の日本語文字列を指定します。

スコープ名は、CREATE SCOPE文で定義されていなければなりません。スコープ名はデータベース内で一意です。

認可識別子

認可識別子は、スコープの利用者を指定します。