ページの先頭行へ戻る
Symfoware Server V10.1.1 SQLリファレンス
Symfoware

3.12 CREATE DSI文(表のDSI定義文)

機能

表のデータを格納する領域を、データベーススペースに割り付けるために、DSI(Data Structure Instance)を定義します。

データベース簡単運用の場合は利用できません。

記述形式

表のデータ構造がSEQUENTIALまたはOBJECTの場合

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

構文の構成

参照項番

権限

一般規則

DSI
  • 作成する表のDSIの名前を指定します。

  • DSI名には、36文字以内の先頭が英字で始まる英数字、または18文字以内の日本語文字列を指定します。

  • DSI名は、データベース内で一意の名前であることが必要です。

DSO
  • 表のDSI定義の対象とする表について、定義済である表のDSO名を指定します。

USING
  • 表のDSO定義時に分割条件を指定した場合、USINGオペランドで分割値を指定します。そうでない場合には、USINGオペランドは指定できません。

    • USINGオペランドの分割値は、DSO定義時に分割条件に指定した“?”に対する値を、定数で指定します。分割条件に複数の“?”が存在する場合には、その出現順序に対応して、定数をカンマ(,)で区切り指定します。分割条件に指定した“?”の個数と、定数の個数は同じであることが必要です。

    • USINGオペランドの分割値に指定可能な定数の記述形式を以下に示します。

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

      対応する列の属性

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

      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(年月)

      年から月までの任意の単一または連続する日時フィールドをもつ時間隔

      INTERVAL(日時)

      日から秒までの任意の単一または連続する日時フィールドをもつ時間隔

      p: 精度、q: 位取り、n: 長さ

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

    • DSIによるデータベーススペースへの格納の単位は、DSO定義での分割条件と、USINGオペランドでの分割値の指定により、次のように決定されます。

      [その1] 分割条件を“=”指定で行う場合

      分割条件の指定: (製品名,倉庫番号) = (?,?)
      分割値の指定  : (N'テレビ',2)
      上記の場合、以下の条件式の結果が真になる行の集まりが格納の対象となります。
        格納対象    : 製品名 = テレビ  かつ  倉庫番号 = 2

      [その2] 分割条件を“BETWEEN”指定で行う場合

      分割条件の指定: (製品番号) BETWEEN (?) AND (?)
      分割値の指定  : (110,119)
      上記の場合、以下の条件式の結果が真になる行の集まりが格納の対象となります。
        格納対象    : 110 <= 製品番号 <=119

      [その3] 分割条件を“=”指定で、複数個指定する場合

      分割条件の指定: (製品名,倉庫番号) = (?,?)
      分割値の指定  : (N'テレビ',2),(N'冷蔵庫',1)
      上記の場合、以下の条件式の結果が真になる行の集まりが格納の対象となります。
        格納対象    : (製品名 = テレビ  かつ  倉庫番号 = 2)
                または(製品名 = 冷蔵庫  かつ  倉庫番号 = 1)

      [その4] 分割条件を“BETWEEN”指定で、複数個指定する場合(使用する表は使用例4の売上表とします)

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

割付け対象(DATAPRIMEおよびOVERFLOW)
  • 表のデータ構造がSEQUENTIALまたはOBJECTの場合、割付け対象にDATAを指定します。RANDOMの場合は、PRIMEとOVERFLOWを指定します。

  • スペース割付け句で指定する割付け対象の意味を以下に示します。

    表3.3 表のデータ構造と指定する割付け対象

    表のデータ構造

    指定する割付け対象

    意味

    SEQUENTIAL

    DATA

    表のDSIのデータ部にスペースを割り付ける。

    OBJECT

    RANDOM

    PRIME

    表のDSIのプライム部にスペースを割り付ける。

    OVERFLOW

    表のDSIのオーバフロー部にスペースを割り付ける。

    参照

    プライム部、オーバフロー部およびデータ部の構造については、“RDB運用ガイド(データベース定義編)”を参照してください。

割付け先(ON)
  • 1つの割付け要素について、同じデータベーススペースを2回以上指定することはできません。

データベーススペース名
  • 表のDSIのデータを格納するデータベーススペースの名前を指定します。

  • 1つのDSIの割付け対象の割付け先として指定するデータベーススペース名は、同じロググループを使用するデータベーススペースでなければなりません。

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

  • 表のデータ構造がSEQUENTIALの場合、表のDSIのデータ部に対する割付け量は、ページ長の2倍以上を指定することが必要です。たとえば、データ部のページ長が2キロバイトの場合、データ部に対する割付け量は4キロバイト以上になるように指定します。

  • 表のデータ構造がRANDOMの場合、表のDSIのプライム部およびオーバフロー部に対する割付け量は、ページ長の2倍以上を指定することが必要です。たとえば、プライム部のページ長が1キロバイトの場合、プライム部に対する割付け量は2キロバイト以上になるように指定します。オーバフロー部のページ長が2キロバイトの場合、オーバフロー部に対する割付け量は4キロバイト以上になるように指定します。

  • 表のデータ構造がOBJECTの場合、表のDSIのデータ部に対する割付け量は、ページ長の2倍以上を指定することが必要です。データ部のページ長は32キロバイトであるため、データ部に対する割付け量は64キロバイト以上になるように指定します。

  • 割付け量を省略した場合は、表のDSIのプライム部、オーバフロー部およびデータ部に対する割付け量は、それぞれDSO定義時のページ長の64倍になります。

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

FORMAT
  • 表のDSIを初期化する場合に指定します。

  • rdbddlexコマンドの準備モードで定義する場合、FORMATは指定できません。

EXPAND OFF
  • アラームポイントおよび容量拡張定義を設定しない場合に指定します。

拡張領域の割付け先
  • 同じデータベーススペースを2回以上指定することはできません。

  • 1つのDSIの割付け対象の割付け先として指定するデータベーススペース名は、同じロググループを使用するデータベーススペースでなければなりません。

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

  • 拡張領域の割付け先を省略した場合、省略値は以下となります。

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

    • 拡張契機 : 0キロバイト

    • 拡張量 : 1024キロバイト

拡張領域の割付け量
  • 割付け量は、ページ長以上の値を指定してください。

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

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

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

  • アラームポイントは、ページ長以上の値を指定してください。

  • アラームポイントには、DSIの使用量を符号なし整数と単位記号(KまたはM)の組合せで指定します。指定された値はページ長の整数倍に切り捨てます。単位記号Kはキロバイト、単位記号Mはメガバイトを示します。1キロバイトは1024バイト、1メガバイトは1024キロバイトです。

  • アラームポイントを省略した場合、アラームポイントは設定されません。

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

  • 拡張契機には、DSIの空き容量を符号なし整数と単位記号(KまたはM)の組合せで指定します。指定された値はページ長の整数倍に切り上げます。単位記号Kはキロバイト、単位記号Mはメガバイトを示します。1キロバイトは1024バイト、1メガバイトは1024キロバイトです。

  • 拡張契機を省略した場合、拡張契機の値は“DSIの容量 - アラームポイント”になります。

使用例

1

会社表の表のDSIを定義します。この表のDSO定義は、“3.14 CREATE DSO文(表のDSO定義文)”の例1で定義されています。(表のデータ構造がSEQUENTIAL)

CREATE DSI 会社表DSI  DSO 会社表DSO
        ALLOCATE DATA ON DBSPACE001 SIZE 500K

2

会社表の表のDSIを定義します。この表のDSO定義は、“3.14 CREATE DSO文(表のDSO定義文)”の例3で定義されています。(表のデータ構造がRANDOM)

CREATE DSI 会社表DSI  DSO 会社表DSO
        ALLOCATE PRIME ON DBSPACE001 SIZE 500K,
                 OVERFLOW ON DBSPACE002 SIZE 300K

3

在庫表の表のDSIを定義します。なお、在庫表は製品名と倉庫番号の値で分割格納するものとします。この表のDSO定義は、“3.14 CREATE DSO文(表のDSO定義文)”の例4で定義されています。(表のデータ構造がRANDOM)

CREATE DSI 在庫表DSIテレビ2  DSO 在庫表DSO
        USING (N'テレビ',2)
        ALLOCATE PRIME ON DBSPACE001 SIZE 200K,
                 OVERFLOW ON DBSPACE002 SIZE 100K

例4

2007年度の上半期の売上数量の売上表の表のDSIを定義します。なお、売上表は年度と月の値で分割格納するものとします。

CREATE DSO 売上表DSO
        FROM S1.売上表
        TYPE SEQUENTIAL (PAGESIZE(4),ORDER(0))
        WHERE (年度,月) BETWEEN (?,?) AND (?,?);
  
CREATE DSI 上半期DSI  DSO 売上表DSO
        USING (2007,4,2007,9)
        ALLOCATE DATA ON DBSPACE001 SIZE 200K;

5

2005年度の下半期と2006年度の下半期の売上数量の売上表のDSIを定義します。なお、売上表は年度と月の値で分割格納するものとします。また、分割値の指定を複数個指定するものとします。

CREATE DSO 売上表DSO
        FROM S1.売上表
        TYPE SEQUENTIAL (PAGESIZE(4),ORDER(0))
        WHERE (年度,月) BETWEEN (?,?) AND (?,?);
  
CREATE DSI 下半期DSI  DSO 売上表DSO
        USING (2005,10,2006,3),(2006,10,2007,3)
        ALLOCATE DATA ON DBSPACE001 SIZE 200K;

例4の上半期DSIと例5の2005年度と2006年度の下半期DSIで定義された表のDSIに格納されるデータです。ほかのデータを格納するためには、それぞれのDSIを定義することが必要です。


例6

会社表の表のDSIを定義します。この表のDSO定義は、“CREATE DSO文(表のDSO定義文)”の例1で定義されています。アラームポイントの契機をDSIの使用容量224キロバイト、自動容量拡張の拡張契機を空きページ容量0キロバイト、拡張量を1メガバイトとします。

CREATE DSI 会社表DSI  DSO 会社表DSO
        ALLOCATE DATA ON DBSPACE001 SIZE 280K,
        EXPAND ON DBSPACE001 ALARM 224K CAPACITY 0K SIZE 1M

注意

  • ロードシェア運用の場合、他ノードのRDBシステムまたは当該RDBシステムでRDBネットへの参入と離脱が行われていると、エラーとなります。

  • ロードシェア運用の場合、ユーザロググループの縮退または切り戻しが行われている場合、エラーとなります。

  • FORMATを指定した場合、割付け量に応じて時間がかかります。