機能
表のデータを格納する領域を、データベーススペースに割り付けるために、DSI(Data Structure Instance)を定義します。
データベース簡単運用の場合は利用できません。
記述形式
参照項番
定数 → “2.1.2 定数”
日本語文字列 → “2.1.3 トークン”
権限
表のDSIを定義できるのは、その表の定義者、スキーマの定義者またはその表のALTER権の保持者です。また、データベーススペースに対してALLOCATE権が必要です。
未定義のDSIをスコープ定義したあとにそのDSI定義を行うとき、表のDSIの定義者とスコープ定義者が違う場合はエラーになります。
一般規則
作成する表のDSIの名前を指定します。
DSI名には、36文字以内の先頭が英字で始まる英数字、または18文字以内の日本語文字列を指定します。
DSI名は、データベース内で一意の名前であることが必要です。
表のDSO定義時に分割条件を指定した場合、USINGオペランドで分割値を指定します。そうでない場合には、USINGオペランドは指定できません。
USINGオペランドの分割値は、DSO定義時に分割条件に指定した“?”に対する値を、定数で指定します。分割条件に複数の“?”が存在する場合には、その出現順序に対応して、定数をカンマ(,)で区切り指定します。分割条件に指定した“?”の個数と、定数の個数は同じであることが必要です。
USINGオペランドの分割値に指定可能な定数の記述形式を以下に示します。
対応する列の属性 | 分割値に指定可能な定数の記述形式 |
---|---|
SMALLINT | -32768~32767(小数点なし) |
INTEGER | -2147483648 ~2147483647(小数点なし) |
NUMERIC(p,q) | 整数部(小数点の左側)の数字の数はp-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となるような、分割値の指定の仕方はできません。
表のデータ構造がSEQUENTIALまたはOBJECTの場合、割付け対象にDATAを指定します。RANDOMの場合は、PRIMEとOVERFLOWを指定します。
スペース割付け句で指定する割付け対象の意味を以下に示します。
表のデータ構造 | 指定する割付け対象 | 意味 |
---|---|---|
SEQUENTIAL | DATA | 表のDSIのデータ部にスペースを割り付ける。 |
OBJECT | ||
RANDOM | PRIME | 表のDSIのプライム部にスペースを割り付ける。 |
OVERFLOW | 表のDSIのオーバフロー部にスペースを割り付ける。 |
参照
プライム部、オーバフロー部およびデータ部の構造については、“RDB運用ガイド(データベース定義編)”を参照してください。
表のDSIのデータを格納するデータベーススペースの名前を指定します。
1つのDSIの割付け対象の割付け先として指定するデータベーススペース名は、同じロググループを使用するデータベーススペースでなければなりません。
データを暗号化する場合は、以下の注意事項があります。
1つまたは複数のDSIの割付け先として、複数のデータベーススペースを指定する場合、データベーススペースの暗号化の指定を統一してください。
表のDSIおよびインデックスのDSIを定義する場合、データベーススペースの暗号化の指定は、統一する必要がありません。
割付け量には、データベーススペース中に獲得する格納領域の大きさを、符号なし整数と単位記号(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に、指定した割付け量以下の値が表示された場合、複数の領域に分割して割付けられたと判断できます。
同じデータベーススペースを2回以上指定することはできません。
1つのDSIの割付け対象の割付け先として指定するデータベーススペース名は、同じロググループを使用するデータベーススペースでなければなりません。
データを暗号化する場合は、以下の注意事項があります。
1つまたは複数のDSIの割付け先として、複数のデータベーススペースを指定する場合、データベーススペースの暗号化の指定を統一してください。
表のDSIおよびインデックスのDSIを定義する場合、データベーススペースの暗号化の指定は、統一する必要がありません。
拡張領域の割付け先には、拡張量に指定した値以上の空き領域を用意してください。
また拡張領域の割付け先を省略した場合、DSIのデータベーススペースを拡張領域の割付け先とするため、DSIのデータベーススペースに拡張量に指定した値以上の空き領域を用意してください。
拡張領域の割付け先を省略した場合、省略値は以下となります。
アラームポイント : 【データ部またはオーバーフロー部の割付け量 × 80%】以下となるページ長の倍数の最大値
拡張契機 : 0キロバイト
拡張量 : 1024キロバイト
割付け量は、ページ長以上の値を指定してください。
割付け量には、データベーススペース中に獲得する格納領域の大きさを、符号なし整数と単位記号(KまたはM)の組合せで指定します。指定された値はページ長の整数倍に切り上げます。単位記号Kはキロバイト、単位記号Mはメガバイトを示します。1キロバイトは1024バイト、1メガバイトは1024キロバイトです。
割付け対象のデータベーススペースに、拡張量分の連続領域が存在しない場合、複数の領域に分割して割付けることがあります。複数の領域に分割されたかどうかは、rdbprtコマンドの出力結果で確認できます。DSI情報のAllocation informationのAllocate sizeに、指定した拡張量以下の値が表示された場合、複数の領域に分割して割付けられたと判断できます。
使用例
会社表の表のDSIを定義します。この表のDSO定義は、“3.14 CREATE DSO文(表のDSO定義文)”の例1で定義されています。(表のデータ構造がSEQUENTIAL)
CREATE DSI 会社表DSI DSO 会社表DSO ALLOCATE DATA ON DBSPACE001 SIZE 500K
会社表の表のDSIを定義します。この表のDSO定義は、“3.14 CREATE DSO文(表のDSO定義文)”の例4で定義されています。(表のデータ構造がRANDOM)
CREATE DSI 会社表DSI DSO 会社表DSO ALLOCATE PRIME ON DBSPACE001 SIZE 500K, OVERFLOW ON DBSPACE002 SIZE 300K
在庫表の表のDSIを定義します。なお、在庫表は製品名と倉庫番号の値で分割格納するものとします。この表のDSO定義は、“3.14 CREATE DSO文(表のDSO定義文)”の例5で定義されています。(表のデータ構造がRANDOM)
CREATE DSI 在庫表DSIテレビ2 DSO 在庫表DSO USING (N'テレビ',2) ALLOCATE PRIME ON DBSPACE001 SIZE 200K, OVERFLOW ON DBSPACE002 SIZE 100K
2005年度の上半期の売上数量の売上表の表のDSIを定義します。なお、売上表は年度と月の値で分割格納するものとします。
CREATE DSO 売上表DSO FROM S1.売上表 TYPE SEQUENTIAL (PAGESIZE(4),ORDER(0)) WHERE (年度,月) BETWEEN (?,?) AND (?,?); CREATE DSI 上半期DSI DSO 売上表DSO USING (2005,4,2005,9) ALLOCATE DATA ON DBSPACE001 SIZE 200K;
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を定義することが必要です。
会社表の表の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を指定した場合、割付け量に応じて時間がかかります。