Hitachi

ノンストップデータベース HiRDB Version 9 構造型データベース機能


11.7.2 SDBデータベース格納定義【SD FMB】

*ENTRY DICTIONARY文に指定するSDBデータベース格納定義について説明します。

〈この項の構成〉

(1) 機能

SDBデータベースを格納する際の論理構造を定義します。

(2) 形式

項番

形式

(a)

STORAGE SCHEMA SDBデータベース格納名 FOR SDBデータベース名

(b)

DBTYPE SD

(c)

 STORAGE RECORD 格納レコード名

(d)

   {CLUSTERED 親子集合型名|SEQUENTIAL シーケンシャルインデクス名

(e)

   FOR RECORD

(f)

   ORDER KEY ASCENDING 構成要素名〔,構成要素名〕…

(g)

   〔PCTFREE ページ内の未使用領域の比率〕

(h)

   WITHIN {シーケンシャルインデクス用RDエリア名

       |(シーケンシャルインデクス用RDエリア名)

       |((シーケンシャルインデクス用RDエリア名)

       〔,(シーケンシャルインデクス用RDエリア名)〕…)}

    }

(i)

   〔SUBPAGE NUMBER サブページ分割数〕

(j)

   〔PCTFREE {ページ内の未使用領域の比率

       |(〔ページ内の未使用領域の比率〕,セグメント内の空きページの比率)}〕

(k)

   〔DEPENDING ON 構成要素名〕

(l)

      WITHIN {格納レコード用RDエリア名

         |(格納レコード用RDエリア名)

         |((格納レコード用RDエリア名) 〔格納条件〕

          〔,(格納レコード用RDエリア名) 格納条件〕…)

         |((格納レコード用RDエリア名) RDエリア分割キー値

          〔,(格納レコード用RDエリア名) RDエリア分割キー値…〕

           ,(格納レコード用RDエリア名))}

(m)

 〔SET 親子集合型名

(n)

    OWNER POINTER FOR FIRST LAST MEMBER

(o)

    MEMBER POINTER FOR NEXT PRIOR TENANT

  〕…

 〔SDBOPTION〕

(p)

END STORAGE SCHEMA

定義句は,形式で記述している順序に従って指定します。必須の定義と省略できる定義の間は形式で記載されているとおりに指定してください。

注※

SDBOPTION句の指定有無によってシステムの動作に変わりはありません。そのため,SDBOPTION句は省略してください。

(3) オペランドの説明

SDBデータベース格納定義の各オペランドの指定内容を説明します。

(a) STORAGE SCHEMA

STORAGE SCHEMA SDBデータベース格納名 FOR SDBデータベース名

SDBデータベース格納名と対応するSDBデータベース名を指定します。

SDBデータベース格納名

〜<識別子>((1〜30バイト))

SDBデータベース格納名を指定します。

すでに使用しているSDBデータベース格納名は指定できません。

SDBデータベース名

〜<識別子>((1〜30バイト))

SDBデータベース名を指定します。

SDBデータベース名に一致する名称がSDBデータベース定義にない場合は,エラーとなります。

(b) DBTYPE

DBTYPE SD

SDBデータベース種別がSD FMBのSDBデータベースを定義します。

注意事項

SDBデータベース種別が4V(4V FMBまたは4V AFM)のSDBデータベースとSD FMBのSDBデータベースをシステム内で混在して定義することはできません。混在させた場合,動作を保証しません。

(c) STORAGE RECORD

STORAGE RECORD 格納レコード名
格納レコード名

〜<識別子>((1〜30バイト))

SDBデータベース定義のRECORD句で指定したレコード型名を,格納レコード名として指定します。

《規則》

  • SDBデータベース定義のRECORD句で指定したレコード型名と同じ個数,同じ順番で指定してください。

  • すでに使用している格納レコード名は指定できません。ただし,格納レコードの所有者(スキーマ)が異なる場合は,同じ格納レコード名を指定できます。

(d) CLUSTERED,SEQUENTIAL

CLUSTERED 親子集合型名|SEQUENTIAL シーケンシャルインデクス名

格納するレコードの配置方法を指定します。

CLUSTERED 親子集合型名

親子集合型名

  〜<識別子>((1〜30バイト))

すべての子レコードを親レコードと同じRDエリアに格納する場合に指定します。

《規則》

  • STORAGE RECORD句に指定したレコード型ごとに1つ指定できます。STORAGE RECORD句に指定したレコード型が,ルートレコード型の場合は指定できません。

  • SDBデータベース格納定義のSET句に指定する親子集合型名と同じ個数,同じ順番で指定してください。

SEQUENTIAL シーケンシャルインデクス名

インデクスのキーの値の順序に従って,親レコード実現値の格納位置を決めるときに指定します。SEQUENTIAL句は,ルートレコード型に必ず指定します。

シーケンシャルインデクス名

  〜<識別子>((1〜30バイト))

STORAGE RECORD句に指定したルートレコード型に対して1つ指定します。STORAGE RECORD句に指定したレコード型が,ルートレコード型以外の場合は指定できません。

《規則》

  • シーケンシャルインデクス名は,同一スキーマ内で一意になるように指定してください。

(e) FOR RECORD

FOR RECORD

レコード型単位にシーケンシャルインデクスを作成します。

キーの値が同じ場合,シーケンシャルインデクスへの格納を禁止します。

(f) ORDER KEY

ORDER KEY ASCENDING 構成要素名〔,構成要素名〕…

インデクスのキーとなる構成要素名を指定します。

指定した構成要素名をキーとして,昇順にシーケンシャルインデクスが作成されます。

ASCENDING

昇順にシーケンシャルインデクスを作成します。

構成要素名

〜<識別子>((1〜30バイト))

インデクスのキーに指定する構成要素を次に示すように指定してください。

《規則》

  • 構成要素名は,格納レコード名と対応するSDBデータベース定義のレコード型名で指定した構成要素名としてください。

  • シーケンシャルインデクス作成時に指定できる構成要素名の条件について,次の表に示します。

    表11‒74 シーケンシャルインデクス作成時に指定できる構成要素名の条件

    項目

    内容

    指定できる構成要素名の数

    最大7個

    インデクスのキー長の合計

    255バイト以内

    インデクスのキーに指定する構成要素とキー長の関係については,「表11-75 インデクスのキーに指定する構成要素とキー長の関係」を参照してください。

    構成要素名

    基本項目の構成要素名

    集団項目が含まれる構成要素名は指定できません。

    表11‒75 インデクスのキーに指定する構成要素とキー長の関係

    データ型

    インデクスのキー長(単位:バイト)

    構成要素名の指定が1つの場合

    構成要素名の指定が複数の場合

    CHARACTER

    SDBデータベース定義で指定したデータ長

    SDBデータベース定義で指定したデータ長+制御部(1バイト)

    XCHARACTER

    PACKED 〔DECIMAL FIXED〕 整数部桁数〔,小数部桁数〕

    ↓(整数部桁数+小数部桁数)÷2↓+1

    ↓(整数部桁数+小数部桁数)÷2↓+2

    INTEGER

    4

    5

    SMALLINT

    2

    3

(g) PCTFREE

PCTFREE ページ内の未使用領域の比率

〜<符号なし整数>((0〜99))≪30≫

インデクスページ内の未使用領域の比率を指定します。

(h) WITHIN

WITHIN {シーケンシャルインデクス用RDエリア名

|(シーケンシャルインデクス用RDエリア名)

|((シーケンシャルインデクス用RDエリア名)

〔,(シーケンシャルインデクス用RDエリア名)〕…)}

シーケンシャルインデクス用RDエリア名

〜<RDエリア名>((1〜30バイト))

シーケンシャルインデクスを格納するRDエリア名を指定します。

1つのSEQUENTIAL句に対して,WITHIN句を必ず1つ指定してください。

《規則》

シーケンシャルインデクスを複数のRDエリアに格納する場合の規則

  • シーケンシャルインデクス用RDエリアとして指定できるRDエリアの数とSDBデータベースの横分割の関係を次の表に示します。

    表11‒76 シーケンシャルインデクス用RDエリアとして指定できるRDエリア数とSDBデータベースの横分割の関係

    SDBデータベースの横分割方法

    指定できるRDエリア数

    分割指定なし

    1

    格納条件分割

    1〜256

    境界値分割

    2〜3,000(1,024)

    注※

    WITHIN句に指定できるRDエリア名の延べ数の最大値は3,000になります。1,024は,WITHIN句にRDエリア名を重複して指定する場合,RDエリア名の重複を排除して数えたときの最大値です。

  • シーケンシャルインデクス用RDエリアは,格納レコード用RDエリアと同じ数を指定する必要があります。

  • 1つのWITHIN句の中では,シーケンシャルインデクス用RDエリア名は一意に指定してください。なお,境界値分割指定の場合,隣接するRDエリア名が重複している場合だけエラーとなります。

  • 境界値分割指定の格納レコード用RDエリアを重複して指定している場合は,シーケンシャルインデクス用RDエリアも重複して指定してください。シーケンシャルインデクス用RDエリアを重複して指定する場合の例を次の表に示します。

    表11‒77 シーケンシャルインデクス用RDエリアを重複して指定する場合の例

    指定

    格納レコード用RDエリアの指定

    シーケンシャルインデクス用RDエリアの指定

    RDエリアの重複なし

    ((RDAREAX) X'00FF',

    (RDAREA1) X'01FF',

    (RDAREA2) X'03FF',

    (RDAREA3) )

    ((RDAREAX_I),

    (RDAREA1_I),

    (RDAREA2_I),

    (RDAREA3_I))

    RDエリアの重複あり

    ((RDAREAX) X'00FF',

    (RDAREA1) X'01FF',

    (RDAREA2) X'03FF',

    (RDAREA1))

    ((RDAREAX_I),

    (RDAREA1_I),

    (RDAREA2_I),

    (RDAREA1_I))

  • 格納レコード用RDエリアと対応するシーケンシャルインデクス用RDエリアは,同じサーバ内のRDエリアである必要があります。

指定するシーケンシャルインデクス用RDエリアに関する規則

  • 格納レコード用RDエリアとして指定したRDエリアは指定できません。

  • シーケンシャルインデクス用RDエリアには,create rdarea文のdata modelオペランドにstructuredを指定したRDエリアを指定してください。

  • シーケンシャルインデクス用RDエリアとして指定するRDエリアには,1つのRDエリアにシーケンシャルインデクスを最大500個指定できます。

  • シーケンシャルインデクス用RDエリアに定義できるリソースの組み合わせを次の表に示します。

    表11‒78 RDエリアに定義できるリソースの組み合わせ

    定義するリソース

    RDエリアの定義

    レコード型・インデクス定義なし

    SDBデータベース格納定義A

    レコード型定義あり

    インデクス定義あり

    SDBデータベース格納定義A

    レコード型

    ×

    インデクス

    ×

    SDBデータベース格納定義B

    レコード型

    ×

    ×

    インデクス

    ×

    (凡例)

    ○:定義できます。

    ×:定義できません。

(i) SUBPAGE NUMBER

SUBPAGE NUMBER サブページ分割数
サブページ分割数

〜<符号なし整数>((2〜16))

1データページ当たりのサブページ分割数を指定します。SUBPAGE NUMBERを省略した場合,サブページ分割されません。サブページ分割数の設計方針については,「3.2.4 サブページの設計」を参照してください。

《規則》

  • ルートレコード型,およびすべての子レコード型で同じサブページ分割数を指定してください。

  • サブページ分割数を指定する場合,格納レコード用RDエリアのページ長が,4096バイトである必要があります。

(j) PCTFREE

PCTFREE {ページ内の未使用領域の比率

|(〔ページ内の未使用領域の比率〕,セグメント内の空きページの比率)}

ページ内の未使用領域の比率

〜<符号なし整数>((0〜99))

セグメント内の空きページの比率

〜<符号なし整数>((0〜50))

データベースの初期作成時に設定するページ内の未使用領域の比率を指定します。ページ内の未使用領域の比率は,0〜99(%)の範囲で指定できます。ページ内の未使用領域の比率を省略すると,30(%)が仮定されます。

SUBPAGE NUMBER句でサブページ分割数を指定している場合,ページ内の未使用領域の比率は,サブページ内の未使用領域の比率になります。例えば,30を指定した場合,サブページ内の未使用領域の比率が30%になります。

また,セグメント内の空きページの比率を0〜50(%)の範囲で指定できます。セグメント内の空きページの比率を省略すると,10(%)が仮定されます。

《規則》

ルートレコード型,およびすべての子レコード型で同じ値を指定してください。

(k) DEPENDING ON

DEPENDING ON 構成要素名
構成要素名

〜<識別子>((1〜30バイト))

SDBデータベースを境界値で複数のRDエリアに横分割して格納する場合の,境界値分割のキーとなる構成要素名を指定します。

《規則》

  • ルートレコード型にだけ指定できます。

  • CLUSTERED句を指定した格納レコードに対しては指定できません。

  • 格納レコード名と対応するSDBデータベース定義のレコード型名で指定した構成要素名である必要があります。

  • 構成要素名には,データ種別1がK,データ種別2がAの構成要素名を指定します。

  • SDBデータベースの横分割方法が格納条件指定の場合は指定できません。

(l) WITHIN

WITHIN {格納レコード用RDエリア名

|(格納レコード用RDエリア名)

|((格納レコード用RDエリア名) 〔格納条件〕

〔,(格納レコード用RDエリア名) 格納条件〕…)

|((格納レコード用RDエリア名) RDエリア分割キー値

〔,(格納レコード用RDエリア名) RDエリア分割キー値…〕

,(格納レコード用RDエリア名))}

格納レコード用RDエリア名

〜<RDエリア名>((1〜30))

格納条件

〜構成要素名=(RDエリア分割キー値〔,RDエリア分割キー値〕…)

RDエリア分割キー値

〜X'<16進数字>'((1〜30バイト))

〜'<英数字または下線(_)>'((1〜30バイト))※1

〜<10進数定数>※2

〜<整数定数>※3

注※1

先頭に下線(_)は指定できません。

注※2

10進数定数については,マニュアル「HiRDB Version 9 SQLリファレンス」の「定数」を参照してください。

整数部と小数部にすべて0を指定する場合,符号に-を指定しないでください。-0.を指定しても0.として扱います。

なお,10進数定数の値の範囲を超える値を指定できません。

注※3

整数定数については,マニュアル「HiRDB Version 9 SQLリファレンス」の「定数」を参照してください。

-0を指定しても0として扱います。

なお,整数定数の値の範囲を超える値を指定できません。

レコード実現値を格納するRDエリア名を指定します。

1つのSTORAGE RECORD句に対して,WITHIN句を必ず1つ指定してください。

RDエリア分割キーのデータ型ごとのRDエリア分割キー値の指定形式を次の表に示します。

表11‒79 RDエリア分割キーのデータ型ごとのRDエリア分割キー値の指定形式

RDエリア分割キーのデータ型

RDエリア分割キー値の指定形式

16進数字

英数字,または下線(_)

10進数定数

整数定数

CHARACTER

×

×

XCHARACTER

×

×

PACKED 〔DECIMAL FIXED〕

×

×

×

INTEGER

×

×

×

(凡例)

○:指定できます。

×:指定できません。

《規則》

レコードを複数のRDエリアに格納する場合の規則

  • 1レコード型に対して指定できる格納レコード用RDエリアの数とSDBデータベースの横分割の関係を次の表に示します。

    表11‒80 レコード型に対して指定できる格納レコード用RDエリアの数とSDBデータベースの横分割の関係

    SDBデータベースの横分割方法

    指定できるRDエリア数

    分割指定なし

    1

    格納条件分割

    1〜256

    境界値分割

    2〜3,000(1,024)

    注※

    WITHIN句に指定できるRDエリア名の延べ数の最大値は3,000になります。1,024は,WITHIN句にRDエリア名を重複して指定する場合,RDエリア名の重複を排除して数えたときの最大値です。

  • 格納条件分割で格納レコード用RD エリア名を複数指定した場合は,すべての格納レコード用RD エリア名に格納条件を指定してください。

  • 同一SDBデータベース格納定義内の子レコード型に指定する格納レコード用RDエリア名は,ルートレコード型と同じ数,同じ順番ですべて指定する必要があります。

  • 1つのWITHIN句の中では,格納レコード用RDエリア名は一意に指定してください。なお,境界値分割指定の場合,隣接するRDエリア名が重複している場合だけエラーとなります。

  • RDエリア分割キー値に指定できる範囲を次の表に示します。

    表11‒81 RDエリア分割キー値に指定できる範囲

    RDエリア分割キー値の指定形式

    SDBデータベースの横分割方法

    RDエリア分割キー値

    最小

    最大

    16進数字

    格納条件分割

    X'00…00'

    X'FF…FF'

    境界値分割

    X'00…00'

    X'FF…FE'

    10進数定数

    格納条件分割

    -9…9.9…9

    (整数部と小数部がRDエリア分割キーの全体桁数分'9'の負の数)

    9…9.9…9

    (整数部と小数部がRDエリア分割キーの全体桁数分'9'の正の数)

    境界値分割

    -9…9.9…9

    (整数部と小数部がRDエリア分割キーの全体桁数分'9'の負の数)

    9…9.9…8

    (整数部と小数部がRDエリア分割キーの全体桁数のうち,最後の桁を除くすべての桁が'9'かつ最後の桁が'8'の正の数)

    整数定数

    格納条件分割

    −2147483648

    2147483647

    境界値分割

    −2147483648

    2147483646

指定する格納レコード用RDエリアに関する規則

  • インデクスを格納するRDエリアは指定できません。

  • 格納レコード用RDエリアには,create rdarea文のdata modelオペランドにstructuredを指定したRDエリアを指定してください。

  • 指定するRDエリア名には,格納レコード長が当該RDエリアのページ長(サブページ分割をしている場合はサブページ長)に収まるRDエリア名を指定してください。

  • 格納レコード用RDエリアに定義できるリソースの組み合わせについては,「表11-78 RDエリアに定義できるリソースの組み合わせ」を参照してください。

レコードの格納条件に関する規則

  • 格納条件は,ルートレコード型にだけ指定できます。

格納条件に指定する構成要素に関する規則

  • 1個のWITHIN句の中では,単一の構成要素名を指定してください。複数種類の構成要素名は指定できません。

  • 構成要素名には,SDBデータベース定義で指定した構成要素名を指定してください。

  • 構成要素名には,データ種別1がK,データ種別2がAの構成要素名を指定してください。

格納条件のRDエリア分割キー値に関する規則

  • 1つのWITHIN句に対するRDエリア分割キー値は,最大4,000個指定できます。

  • 1つのWITHIN句の中で同じRDエリア分割キー値は重複して指定できません。

  • RDエリア分割キーのデータ型がCHARACTER,またはXCHARACTERの場合,指定したRDエリア分割キー値の長さは,SDBデータベース定義で指定した格納条件の構成要素の長さと一致させる必要があります。

  • RDエリア分割キーのデータ型がPACKEDの場合,RDエリア分割キーの整数部桁数,および小数部桁数の範囲内の値を指定してください。

境界値分割時(DEPENDING ON句指定時)のRDエリア分割キー値に関する規則

  • 最初に境界値を指定するRDエリアには,指定する境界値以下の値のレコードが格納されます。

    2番目以降(最後は除く)に指定するRDエリアには,その前に指定した境界値より大きく,かつその後に指定する境界値以下の値のレコードが格納されます。

    最後に指定するRDエリアには,その前に指定した境界値より大きい値のレコードが格納されます。

    境界値分割時のSDBデータベースの横分割とSDBデータベース格納定義の例を次の図に示します。

    図11‒17 境界値分割時のSDBデータベースの横分割とSDBデータベース格納定義の例

    [図データ]

    <定義例>

    STORAGE SCHEMA SCM01 FOR SCM01
      DBTYPE SD
      STORAGE RECORD RECA
        SEQUENTIAL IDX1 FOR RECORD
            :
          WITHIN ((RI1),(RI2),(RI1),(RI2))
        DEPENDING ON C1
          WITHIN ((RT1)100,(RT2)200,(RT1)300,(RT2))
            :
    END STORAGE SCHEMA
  • 境界値分割時には,格納条件の指定はできません(RDエリア分割キー値の指定をする必要があります)。

  • RDエリア分割キーのデータ型がCHARACTER,またはXCHARACTERの場合,RDエリア分割キー値の長さは,DEPENDING ON句で指定した構成要素の長さと一致させる必要があります。

  • RDエリア分割キー値は重複して指定できません。

  • RDエリア分割キー値は昇順に指定する必要があります。

  • RDエリア分割キー値を16進数字,英数字または下線(_)の形式で指定する場合,RDエリア分割キー値の長さが1つ目の長さと異なるとエラーとなります。

  • RDエリア分割キーのデータ型がPACKEDの場合,RDエリア分割キーの整数部桁数,および小数部桁数の範囲内の値を指定してください。

(m) SET

SET 親子集合型名

〜<識別子>((1〜30バイト))

親レコード型,子レコード型の親子集合型名を指定します。

《規則》

SDBデータベース定義のSET句で指定した親子集合型名と同じ個数,同じ順番で指定してください。

(n) OWNER POINTER FOR

OWNER POINTER FOR FIRST LAST MEMBER

親レコードに持たせるポインタを指定します。

FIRST LAST

親レコードにFIRSTポインタ,およびLASTポインタを持たせる場合に指定します。

(o) MEMBER POINTER FOR

MEMBER POINTER FOR NEXT PRIOR TENANT

子レコードに持たせるポインタを指定します。

NEXT PRIOR

子レコードにNEXTポインタ,およびPRIORポインタを持たせる場合に指定します。

(p) END STORAGE SCHEMA

END STORAGE SCHEMA

SDBデータベース格納定義の終了を示します。