3.5.1 ALTER TABLEの形式と規則
(1) 機能
表定義変更には,次に示す機能があります。
-
実表の最後に新しい列を追加します。
-
予備列から列を切り出し,新たな列を追加します。
-
ハッシュ関数によって横分割している実表に対して,表格納用RDエリアを追加します。
-
実表又は列の属性を変更します。
-
可変長データ型の最大長を大きくします。
-
文字データを混在文字データに変更します。
-
繰返し列の最大要素数を大きくします。
-
可変長文字データの格納方式を変更します。
-
列回復制約を変更します。
-
列の既定値を設定,変更,又は削除します。
-
既定値のない非ナル値制約の列を,既定値のある非ナル値制約の列に変更します。
-
更新可能列属性を変更します。
-
データの格納されていない実表のクラスタキーの一意性制約を変更します。
-
実表の最小排他リソース単位を変更します。
-
ハッシュ関数によって横分割している実表に対して,ハッシュ関数を変更します。
-
空き領域の再利用機能を適用又は解除します。
-
空き領域の再利用機能でのセグメント数上限を変更します。
-
改竄防止表に変更します。
-
-
データの格納されていない実表の列を削除します。
-
実表又は列の名称を変更します。
-
横分割している実表やマトリクス分割している実表の分割格納条件を変更します。
-
主キーを追加,又は削除します。
(2) 使用権限
- 実表の所有者
-
自分が所有する実表にだけ指定できます。
(3) 形式
ALTER TABLE 〔認可識別子.〕表識別子 表定義変更動作 表定義変更動作::={ 列追加定義 |表制約定義追加 |RDエリア追加定義 |列属性変更定義 |列削除定義 |表制約定義削除 |表名変更定義 |列名変更定義 |分割格納条件変更定義 }
- ≪各項目の詳細≫
列追加定義::= ADD 列名 データ型〔ARRAY [最大要素数]〕 〔〔列回復制約1〕 {LOB列格納用RDエリア指定 |マトリクス分割LOB列格納用RDエリア指定 |抽象データ型定義内LOB格納用RDエリア指定 〔プラグイン指定〕 |マトリクス分割LOB属性格納用RDエリア指定 〔プラグイン指定〕}〕 〔圧縮指定〕 〔DEFAULT句〕 〔非ナル値制約〕 〔予備列定義〕 〔更新可能列属性〕 〔INTO 予備列名〕 〔WITH PROGRAM〕 列回復制約1::=RECOVERY〔{ALL|PARTIAL|NO}〕 LOB列格納用RDエリア指定::= IN {LOB列格納用RDエリア名 |(LOB列格納用RDエリア名) |((LOB列格納用RDエリア名) 〔,(LOB列格納用RDエリア名)〕…)} マトリクス分割LOB列格納用RDエリア指定::=2次元格納用RDエリア指定 マトリクス分割LOB属性格納用RDエリア指定::=2次元格納用RDエリア指定 2次元格納用RDエリア指定::=(マトリクス分割用RDエリアリスト 〔,マトリクス分割用RDエリアリスト〕…) マトリクス分割用RDエリアリスト::=(RDエリア名〔,RDエリア名〕…) 抽象データ型定義内LOB格納用RDエリア指定::= ALLOCATE(属性名〔..属性名〕… IN {LOB属性格納用RDエリア名 |(LOB属性格納用RDエリア名) |((LOB属性格納用RDエリア名) 〔,(LOB属性格納用RDエリア名)〕…)} 〔,属性名〔..属性名〕… IN {LOB属性格納用RDエリア名 |(LOB属性格納用RDエリア名) |((LOB属性格納用RDエリア名) 〔,(LOB属性格納用RDエリア名)〕…)}〕…) 圧縮指定::= COMPRESSED 〔BY 圧縮分割サイズ〕 圧縮分割サイズ::= n〔{K|M|G}〕 DEFAULT句::=DEFAULT 〔既定値〕 既定値::={定数|USER|CURRENT_USER|CURRENT_DATE|CURRENT DATE |CURRENT_TIME|CURRENT TIME |CURRENT_TIMESTAMP〔(小数秒精度)〕 〔USING BES〕 |CURRENT TIMESTAMP〔(小数秒精度)〕〔USING BES〕 |NULL} 非ナル値制約::={{NULL|NOT NULL〔WITH DEFAULT〕}※1 |〔NOT NULL〕 WITH DEFAULT ※2} 予備列定義::=FOR RESERVED 更新可能列属性::=UPDATE 〔ONLY FROM NULL〕 予備列名::=列名 表制約定義追加::= ADD PRIMARY KEY(列名〔{ASC|DESC}〕 〔,列名〔{ASC|DESC}〕…〕) 〔IN{インデクス格納用RDエリア名 |(インデクス格納用RDエリア名) |((インデクス格納用RDエリア名) 〔,(インデクス格納用RDエリア名)〕…) |マトリクス分割インデクス格納用RDエリア指定}〕 〔インデクスオプション〔インデクスオプション〕…〕 マトリクス分割インデクス格納用RDエリア指定::=2次元格納用RDエリア指定 2次元格納用RDエリア指定::=(マトリクス分割用RDエリアリスト 〔,マトリクス分割用RDエリアリスト〕…) マトリクス分割用RDエリアリスト::=(RDエリア名〔,RDエリア名〕…) インデクスオプション::={PCTFREE=未使用領域の比率 |UNBALANCED SPLIT |EMPTY} RDエリア追加定義::= ADD RDAREA 表格納用RDエリア名 〔FOR COLUMN 列名 {LOB列格納用RDエリア指定 |抽象データ型定義内LOB格納用RDエリア指定} 〔,列名 {LOB列格納用RDエリア指定 |抽象データ型定義内LOB格納用RDエリア指定}〕…〕 〔FOR INDEX インデクス識別子 インデクス格納用RDエリア指定 〔,インデクス識別子 インデクス格納用RDエリア指定〕…〕 〔FOR 〔PRIMARY〕 CLUSTER KEY インデクス格納用RDエリア指定〕 〔FOR PRIMARY KEY インデクス格納用RDエリア指定〕 〔WITH PROGRAM〕 LOB列格納用RDエリア指定::= IN {LOB列格納用RDエリア名 |(LOB列格納用RDエリア名) |((LOB列格納用RDエリア名) 〔,(LOB列格納用RDエリア名)〕…)} 抽象データ型定義内LOB格納用RDエリア指定::= ALLOCATE(属性名〔..属性名〕… IN {LOB属性格納用RDエリア名 |(LOB属性格納用RDエリア名) |((LOB属性格納用RDエリア名) 〔,(LOB属性格納用RDエリア名)〕…)} 〔,属性名〔..属性名〕… IN {LOB属性格納用RDエリア名 |(LOB属性格納用RDエリア名) |((LOB属性格納用RDエリア名) 〔,(LOB属性格納用RDエリア名)〕…)}〕…) インデクス格納用RDエリア指定::= IN{インデクス格納用RDエリア名 |(インデクス格納用RDエリア名) |((インデクス格納用RDエリア名) 〔,(インデクス格納用RDエリア名)〕…)} 列属性変更定義::= CHANGE{列名{〔{VARCHAR(データ長) |NVARCHAR(データ長) |MCHAR({*|データ長}) |MVARCHAR({*|データ長})} 〔ARRAY [{*|最大要素数}]〕〕 |〔ARRAY [最大要素数]〕 |BINARY(データ長)} 〔{NO SPLIT|SPLIT}〕 〔列回復制約2〕 〔{SET DEFAULT句|DROP DEFAULT}〕 〔WITH DEFAULT〕 〔更新可能列属性〕 |CLUSTER KEY〔UNIQUE〕 |LOCK{ROW|PAGE} |HASHハッシュ関数名 |SEGMENT REUSE {〔セグメント数〔{K|M}〕〕|NO} |SEGMENT REUSE OPTION 再利用オプション値 |INSERT ONLY 〔WHILE {日間隔データ|ラベル付き間隔} BY 列名〕} 〔WITH PROGRAM〕 列回復制約2::= RECOVERY{ALL|PARTIAL|NO} 列削除定義::= DROP 列名 〔WITH PROGRAM〕 表制約定義削除::= DROP PRIMARY KEY 〔WITH PROGRAM〕 表名変更定義::= RENAME TABLE TO 表識別子 〔WITH PROGRAM〕 列名変更定義::= RENAME COLUMN FROM 変更前列名 TO 変更後列名 〔WITH PROGRAM〕 分割格納条件変更定義::= CHANGE RDAREA {横分割表変更指定|マトリクス分割表変更指定} 〔LOB列格納用RDエリア変更指定〕 〔インデクス格納用RDエリア変更指定 〔インデクス格納用RDエリア変更指定〕…〕 〔クラスタキー格納用RDエリア変更指定〕 〔主キー格納用RDエリア変更指定〕 〔WITHOUT PURGE〕 〔WITH PROGRAM〕 横分割表変更指定::= {〔PARTITIONED〕変更前境界値リスト INTO 変更後境界値分割指定 |PARTITIONED CONDITION 変更前RDエリア情報リスト INTO 変更後格納条件分割指定} マトリクス分割表変更指定::= MULTIDIM(変更対象列名 変更前境界値リスト) AT 変更後境界値リスト INTO マトリクス分割表格納用RDエリア変更指定 変更前境界値リスト::=境界値リスト 変更後境界値リスト::=境界値リスト 境界値リスト::=(({境界値|MAX})〔,({境界値|MAX})〕…) 変更後境界値分割指定::={表格納用RDエリア名 |(表格納用RDエリア名) |(〔(表格納用RDエリア名)境界値,〕 …(表格納用RDエリア名))} 変更前RDエリア情報リスト::= {表格納用RDエリア名 |(表格納用RDエリア名) |((表格納用RDエリア名) 〔,(表格納用RDエリア名)〕…〔,OTHERS〕) |OTHERS} 変更後格納条件分割指定::={表格納用RDエリア名 |(表格納用RDエリア名) |((表格納用RDエリア名)格納条件 {,(表格納用RDエリア名)格納条件 〔〔,(表格納用RDエリア名)格納条件〕 …〕 〔{,(表格納用RDエリア名) |,OTHERS}〕) |,(表格納用RDエリア名)) |,OTHERS)} |OTHERS} 格納条件::=列名={定数|(定数〔,定数…〕)} インデクス格納用RDエリア変更指定::= FOR INDEX インデクス名 INTO 変更後インデクス格納用RDエリア名リスト 変更後インデクス格納用RDエリア名リスト::=RDエリア名リスト RDエリア名リスト::= {インデクス格納用RDエリア名 |(インデクス格納用RDエリア名) |((インデクス格納用RDエリア名) 〔,(インデクス格納用RDエリア名)〕…〔,OTHERS〕) |2次元格納用RDエリア指定 |OTHERS} 主キー格納用RDエリア変更指定::= FOR PRIMARY KEY INTO 変更後インデクス格納用RDエリア名リスト クラスタキー格納用RDエリア変更指定::= FOR 〔PRIMARY〕CLUSTER KEY INTO 変更後インデクス格納用RDエリア名リスト LOB列格納用RDエリア変更指定::= FOR COLUMN 列名 {LOB列格納用RDエリア変更リスト |INTO マトリクス分割LOB列格納用RDエリア変更指定} 〔,列名 {LOB列格納用RDエリア変更リスト |INTOマトリクス分割LOB列格納用RDエリア変更指定}〕 〕… LOB列格納用RDエリア変更リスト::= INTO {LOB列格納用RDエリア名 |(LOB列格納用RDエリア名) |((LOB列格納用RDエリア名) 〔,(LOB列格納用RDエリア名)〕…〔,OTHERS〕) |OTHERS} マトリクス分割表格納用RDエリア変更指定::=2次元格納用RDエリア指定 マトリクス分割LOB列格納用RDエリア変更指定::=2次元格納用RDエリア指定 2次元格納用RDエリア指定::=(マトリクス分割格納用RDエリアリスト 〔,マトリクス分割格納用RDエリアリスト〕…) マトリクス分割格納用RDエリアリスト::=(RDエリア名〔,RDエリア名〕…)
注※1 FIX表以外の表の列の場合
注※2 FIX表の列の場合
(4) オペランド
(b) 列追加定義
::=ADD 列名 データ型 〔ARRAY [最大要素数]〕 〔〔列回復制約1〕 {LOB列格納用RDエリア指定 |マトリクス分割LOB列格納用RDエリア指定 |抽象データ型定義内LOB格納用RDエリア指定〔プラグイン指定〕 |マトリクス分割LOB属性格納用RDエリア指定〔プラグイン指定〕}〕 〔圧縮指定〕〔DEFAULT句〕〔非ナル値制約〕〔予備列定義〕 〔更新可能列属性〕〔INTO 予備列名〕〔WITH PROGRAM〕
- 列名
-
次のどちらかの名称を指定します。
-
実表に追加する列の名称
-
予備列から切り出す列の名称
列名についての規則を次に示します。
- <実表に追加する列の規則>
-
-
列を追加しようとする実表内で同じ列名は指定できません。
-
既に列が30,000個ある実表には,列は追加できません。
-
データが格納されているFIX表には,列は追加できません。
-
列を追加すると,既存の行の追加した列にはナル値が設定されます。ナル値の値の設定は,「UPDATE文 形式1(データ更新)」を参照してください。
-
予備列が存在する表に対して,列は追加できません。
-
- <予備列から切り出す列の規則>
-
-
列を追加しようとする実表内で同じ列名は指定できません。
-
切り出した結果,列数が30,001個以上になる場合は,切り出し列を定義できません。
-
予備列すべてを切り出す場合を除き,予備列と同じ名称を指定できません。
-
-
- データ型
-
次のどちらかのデータ型を指定します。
-
実表に追加する列のデータ型
-
予備列から切り出す列のデータ型
データ型についての規則を次に示します。
- <実表に追加する列のデータ型の規則>
-
-
データ型にBLOBを指定する場合,LOB列格納用RDエリアを指定してください。
-
データ型に抽象データ型を指定する場合,LOB属性格納用RDエリア名を指定してください。ただし,スーパタイプでBLOBが定義されている抽象データ型は指定できません。
-
抽象データ型の認可識別子を省略した場合で,かつ仮定された認可識別子の抽象データ型がないときは,'MASTER'のスキーマ中に同一名称の抽象データ型があると,その抽象データ型を指定したものとします。
-
- <予備列から切り出す列のデータ型の規則>
-
-
予備列の定義長を超える長さのデータ型を指定できません。
データ長については,「既定義型データ長一覧」を参照してください。
-
予備列の定義長と等しいデータ長のデータ型を指定した場合,予備列すべてが切り出され,予備列が存在しない表となります。その際,予備列に付けていた注釈も削除されます。
-
-
- ARRAY [最大要素数]
-
実表に追加する繰返し列の最大要素数を指定します。
ARRAY 最大要素数についての規則を次に示します。
-
最大要素数には,2〜30,000の符号なし整数を指定します。
-
ARRAY 最大要素数を省略した場合,繰返し列でないことを示します。
-
繰返し列は,次のデータ型には指定できません。
・BLOB
・BINARY
・抽象データ型
-
FIX表には指定できません。
-
繰返し列は,圧縮列に指定できません。
-
- 列回復制約1::= RECOVERY〔{ALL|PARTIAL|NO}〕
-
データ型がBLOBの列,又はBLOB属性の抽象データ型の列を表に追加する場合,列を格納するLOB列格納用RDエリア,又は抽象データ型定義内LOB格納用RDエリアのデータベースの更新ログ取得方式を指定します。
なお,列回復制約は,データ型がBLOB又はBLOB属性の抽象データ型以外の列には指定できません。省略すると,更新前ログ取得モード(PARTIAL)が仮定されます。仮定値は,システム共通定義のpd_ddl_tbl_recoveryオペランドで変更できます。pd_ddl_tbl_recoveryオペランドについては,マニュアル「HiRDB Version 9 システム定義」を参照してください。
- ALL
-
ログ取得モードでユーザLOB用RDエリアを運用するときに指定します。ログ取得モードで運用すると,ロールバック,及びロールフォワードに必要なデータベースの更新ログを取得します。
- PARTIAL
-
更新前ログ取得モードでユーザLOB用RDエリアを運用するときに指定します。更新前ログ取得モードで運用すると,ロールバックに必要なデータベースの更新ログを取得します。
- NO
-
ログレスモードでユーザLOB用RDエリアを運用するときに指定します。ログレスモードで運用すると,データベースの更新ログを取得しません。
指定するデータベースの更新ログ取得方式によって,UAPを実行するときの運用方法や,障害が発生したときのユーザLOB用RDエリアの回復方法が異なります。ログレスモードの運用については,マニュアル「HiRDB Version 9 システム運用ガイド」を参照してください。
- LOB列格納用RDエリア指定::=
-
IN {LOB列格納用RDエリア名
|(LOB列格納用RDエリア名)
|((LOB列格納用RDエリア名)
〔,(LOB列格納用RDエリア名)〕…)}
BLOB型の列を追加する場合,BLOB列のデータを格納するユーザLOB用RDエリアの名前を指定します。
-
データ型にBLOBを指定した列は,LOB列格納用RDエリア名を必ず指定してください。BLOB以外のデータ型を指定した列には指定できません。
-
指定するRDエリア名は,表格納用RDエリアと同じサーバに定義しているユーザLOB用RDエリアを指定してください。
-
横分割表に列を追加する場合は,表定義で指定したユーザ用RDエリアと同じ数のユーザLOB用RDエリアを指定してください。その場合,同じサーバのユーザ用RDエリアとユーザLOB用RDエリアが,同じ順番になるように指定してください。
-
境界値指定の横分割表,ハッシュ分割表,又はマトリクス分割表にLOB列を追加する場合は,表定義で指定した表格納用RDエリアと1対1に対応するようにLOB列格納用RDエリアを指定してください。また,表定義で指定している表格納用RDエリアに重複したRDエリアがある場合は,LOB列格納用RDエリアも同一位置が重複するように指定してください。
上記以外の場合は,LOB列格納用RDエリアは重複して指定できません。
-
- マトリクス分割LOB列格納用RDエリア指定::=2次元格納用RDエリア指定
-
2次元格納用RDエリア指定::=(マトリクス分割用RDエリアリスト
〔,マトリクス分割用RDエリアリスト〕…)
(RDエリア名〔,RDエリア名〕…)
マトリクス分割した表にBLOB型の列を追加する場合に,BLOB列を格納するRDエリア名を指定します。
マトリクス分割した表にBLOB型の列を追加する場合,マトリクス分割LOB列格納用RDエリア指定を指定してください。
RDエリア名については,LOB列格納用RDエリア指定の説明を参照してください。
- 抽象データ型定義内LOB格納用RDエリア指定::=
-
ALLOCATE(属性名〔..属性名〕…
IN {LOB属性格納用RDエリア名
|(LOB属性格納用RDエリア名)
|((LOB属性格納用RDエリア名)
〔,(LOB属性格納用RDエリア名)〕…)}
〔,属性名〔..属性名〕…
IN {LOB属性格納用RDエリア名
|(LOB属性格納用RDエリア名)
|((LOB属性格納用RDエリア名)
〔,(LOB属性格納用RDエリア名)〕…)}〕…)
LOB属性を含む抽象データ型の列を追加する場合に指定します。
- 属性名〔..属性名〕
-
抽象データ型を構成する属性名を指定します。抽象データ型の属性が抽象データ型であり,その入れ子になっている抽象データ型の属性にLOB型の属性がある場合は,そのLOB型の属性名を指定してください。
属性名は,次のような場合に指定してください。
-
抽象データ型定義の属性
抽象データ型定義の属性のデータ型がLOB型であれば指定します。
-
抽象データ型定義の入れ子
抽象データ型の属性が抽象データ型であり,その入れ子になっている抽象データ型の属性にLOB型の属性であれば,そのLOB型の属性名を指定してください。
-
- LOB属性格納用RDエリア名
-
抽象データ型の任意の階層にある,BLOB属性のデータを格納するユーザLOB用RDエリアの名前を指定します。
LOB属性格納用RDエリアについての規則を次に示します。
-
データ型にBLOBを含む抽象データ型を指定した場合,各BLOB属性に対してユーザLOB用RDエリアの名前を必ず指定してください。BLOB以外のデータ型を指定した属性には指定できません。
-
指定するRDエリア名は,表格納用RDエリアと同じサーバに定義しているユーザLOB用RDエリアを指定してください。
-
横分割表に列を追加する場合は,表定義で指定したユーザ用RDエリアと同じ数のユーザLOB用RDエリアを指定してください。その場合,同じサーバのユーザ用RDエリアとユーザLOB用RDエリアが,同じ順番になるようにしてください。
-
境界値指定の横分割表,ハッシュ分割表,又はマトリクス分割表にLOB属性を含む抽象データ型の列を追加する場合は,表定義で指定した表格納用RDエリアと1対1に対応するようにLOB属性格納用RDエリアを指定してください。また,表定義で指定している表格納用RDエリアに重複したRDエリアがある場合は,LOB属性格納用RDエリアも同一位置が重複するように指定してください。
上記以外の場合は,LOB属性格納用RDエリアは重複して指定できません。
-
- プラグイン指定::=PLUGIN プラグインオプション
-
プラグイン機能が実装されている抽象データ型として定義された列に対して,プラグイン機能に渡すためのパラメタ情報を文字列定数(最大255バイト)で記述します。パラメタ情報には,16進文字列定数は指定できません。
パラメタ情報の詳細については,各種プラグインマニュアルを参照してください。
- マトリクス分割LOB属性格納用RDエリア指定::=2次元格納用RDエリア指定
-
2次元格納用RDエリア指定::=(マトリクス分割用RDエリアリスト
〔,マトリクス分割用RDエリアリスト〕…)
(RDエリア名〔,RDエリア名〕…)
マトリクス分割した表にLOB属性を含む抽象データ型列を追加する場合に,LOB属性を格納するRDエリア名を指定します。
マトリクス分割した表にLOB属性を含む抽象データ型列を追加する場合,マトリクス分割LOB属性格納用RDエリア指定を指定してください。
RDエリア名については,抽象データ型定義内LOB格納用RDエリア指定のLOB属性格納用RDエリア名の説明を参照してください。
- 圧縮指定::=
-
COMPRESSED 〔BY 圧縮分割サイズ〕
圧縮指定は,列データを圧縮する場合に指定します。BINARY型の列に圧縮を指定する場合は,定義長が256バイト以上である必要があります。255バイト以下の場合,エラーになります。
- 圧縮分割サイズ::= n〔{K|M|G}〕
-
圧縮処理や伸張処理のオーバヘッドを削減したい場合,又は圧縮効率を向上させたい場合に指定します。ただし,圧縮分割サイズを大きくすると,メモリ所要量が増加します。詳細は,マニュアル「HiRDB Version 9 システム導入・設計ガイド」を参照してください。
データをnバイト単位で分割して圧縮します。nは符号なし整数で指定し,単位としてK(キロバイト),M(メガバイト)及びG(ギガバイト)が指定できます(指定省略時はバイト単位)。圧縮分割サイズに指定できる値の範囲を次の表に示します。
表3‒2 圧縮分割サイズに指定できる値の範囲 単位
nに指定できる値の範囲
圧縮分割サイズの値
BINARY型
抽象データ型(XML型)
指定しない(バイト)
32,000≦n≦2,147,483,647
1,048,576≦n≦2,147,483,647
n
K
32≦n≦2,097,152
1024≦n≦2,097,152
n×1,024
M
1≦n≦2,048
1≦n≦2,048
n×1,048,576
G
1≦n≦2
1≦n≦2
n×1,073,741,824
圧縮分割サイズの注意事項を次に示します。
-
圧縮分割サイズに指定できる値の範囲外の値を指定した場合,エラーになります。ただし,実際の最大長の計算結果が2,147,483,648の場合は,2,147,483,647になります。
-
圧縮分割サイズに定義長より大きい値を指定した場合,分割しないで圧縮します。
-
圧縮分割サイズを省略すると,BINARY型の場合は32,000バイトを仮定し,抽象データ型(XML型)の場合は1メガバイトを仮定します。ALTER TABLE文で列の定義長を大きくしても,圧縮列の定義追加時に仮定した圧縮分割サイズは変わりません。
圧縮指定についての規則を次に示します。
-
圧縮指定が指定できる列は次のデータ型の列だけです。
・BINARY型
・抽象データ型(XML型)※
注※
抽象データ型(XML型)の列のデータを圧縮するためには,バージョン09-03以降のHiRDB XML Extensionが必要です。バージョン09-02以前のHiRDB XML Extensionを使用している場合,抽象データ型(XML型)の列に圧縮指定はできません。
-
- DEFAULT句::=DEFAULT 〔既定値〕
-
追加する列に既定値を設定する場合に指定します。
DEFAULT句についての規則を次に示します。
-
一つのALTER TABLEで,WITH DEFAULTと同時には指定できません。
-
実表にデータが格納されている場合,追加する列にDEFAULT句は指定できません。
-
BLOB型,抽象データ型,及び定義長が32,001バイト以上のBINARY型の列には指定できません。
-
繰返し列には指定できません。
-
予備列には指定できません。
-
追加する列が既定の文字集合以外の場合,次に示す項目はDEFAULT句に指定できません。
・CURRENT_DATE(CURRENT DATE)
・CURRENT_TIME(CURRENT TIME)
・CURRENT TIMESTAMP(CURRENT_TIMESTAMP)
-
- 非ナル値制約::={{NULL|NOT NULL〔WITH DEFAULT〕}※1
-
|〔NOT NULL〕 WITH DEFAULT ※2}
注※1 FIX表以外の表の列の場合
注※2 FIX表の列の場合
- NULL
-
列名で指定した列にナル値を許す場合に指定できます。
FIX表の列には指定できません。
- NOT NULL
-
列名で指定した列にナル値を許さないように制約(非ナル値制約)が必要な場合に指定します。
NOT NULLについての規則を次に示します。
-
実表にデータが格納されている場合,NOT NULLは指定できません。
-
NOT NULLを省略すると,追加した列にナル値が許され,既にデータが入っている行に追加した列にはナル値が設定されます。
-
NOT NULLは,繰返し列及び抽象データ型の列に指定できません。
-
- WITH DEFAULT
-
既定値のある非ナル値制約の列を追加する場合に指定します。
WITH DEFAULTについての規則を次に示します。
-
FIX表以外の表でWITH DEFAULTを指定する場合,NOT NULLを指定してください。
-
一つのALTER TABLEで,DEFAULT句と同時には指定できません。
-
WITH DEFAULTは,繰返し列には指定できません。
-
WITH DEFAULTは,追加する予備列には指定できません。
-
WITH DEFAULTは,抽象データ型の列には指定できません。
-
- 予備列定義::=FOR RESERVED
-
列を予備列として追加する場合に指定します。予備列は,将来,FIX表に列を追加する見込みがある場合に定義します。予備列を定義すると,FIX表にデータが格納されている状態でも,予備列から切り出して列を追加できます。
予備列には,定義長分の0x00が格納されます。0x00以外の値は格納できません。
次の列に対しては,FOR RESERVEDを指定できません。
-
非FIX表の列
-
予備列を定義済みの表の列
-
CHAR型以外の列又は文字集合を指定したCHAR型の列
-
改竄防止表の列
-
- 更新可能列属性::=UPDATE 〔ONLY FROM NULL〕
-
改竄防止表に更新可能な列を追加する場合,又は改竄防止表に変更する予定のある表に更新可能な列を追加する場合に指定します。
更新可能列属性は改竄防止表の場合だけ有効となります。
改竄防止表への変更については,「CHANGE」の「INSERT ONLY」オプションを参照してください。
更新可能列属性についての規則を次に示します。
-
次に示す更新できない列には指定できません。
・予備列
- UPDATE
-
改竄防止表で,更新可能な列を追加する場合に指定します。
- UPDATE ONLY FROM NULL
-
改竄防止表で,行の値がナル値から非ナル値へ一度だけ更新可能な列を追加する場合に指定します。
改竄防止表で,UPDATE ONLY FROM NULL指定した列の値の更新可否を次に示します。
更新前の列の値
更新後の列の値
更新可否
ナル値
ナル値
○
ナル値
非ナル値
○
非ナル値
ナル値
×
非ナル値
非ナル値※
×
- (凡例)
-
○:更新できます。
×:更新できません。
- 注
-
繰返し列の場合は,ナル値(要素数が0の値)から添え字指定なしでの列単位更新だけが実行できます。
- 注※
-
更新前の値と同値を含みます。
UPDATE ONLY FROM NULL指定についての規則を次に示します。
-
NOT NULLを指定した列には指定できません。
-
FIX表の場合指定できません。
-
BLOB型及び定義長が32,001バイト以上のBINARY型の列には指定できません。
-
- 更新可能列属性の指定可否と指定時の列の値の更新可否は次のようになります。
-
表種別
UPDATE指定
UPDATE ONLY
FROM NULL指定
左記の
指定なし
指定
可否
列の値の更新可否
指定
可否
列の値の更新可否
指定
可否
列の値の更新可否
非改竄防止表
○
○
○
○
−
○
改竄防止表
○
○
○
○※
−
×
- (凡例)
-
○:更新できます。
×:更新できません。
−:該当しません。
- 注※
-
ナル値から非ナル値へ一度だけ更新できます。
-
- INTO 予備列名
-
新規に追加する列を,予備列から切り出したい場合に指定します。切り出した列は,定義長分の0x00で初期化されます。列名には,予備列以外の列名を指定できません。
- WITH PROGRAM
-
次のどれかの操作をする場合,その表を使用する手続き,及びトリガの有効なSQLオブジェクトを無効にしたいときに指定します。
-
DEFAULT句指定の列を表に追加する場合
-
NOT NULL指定の列を表に追加する場合
-
BLOB型,又は抽象データ型の列を表に追加する場合
-
予備列から列を切り出す場合
-
(c) 表制約定義追加
::=ADD PRIMARY KEY(列名〔{ASC|DESC}〕 〔,列名〔{ASC|DESC}〕…〕) 〔IN{インデクス格納用RDエリア名 |(インデクス格納用RDエリア名) |((インデクス格納用RDエリア名) 〔,(インデクス格納用RDエリア名)〕…) |マトリクス分割インデクス格納用RDエリア指定}〕 〔インデクスオプション〔インデクスオプション〕…〕
主キーを追加する場合に指定します。
主キーを追加する場合の規則を次に示します。
-
表に主キーが定義されている場合は指定できません。
-
表にインデクスが255個定義されている場合は指定できません。
-
同じ列構成のインデクス(クラスタキーも含む)が既に定義されている場合,主キーは追加できません。同じ列構成とは,次の条件をすべて満たすものをいいます。
-
列名の並び,及び列数が一致している
-
昇順,降順の指定がすべて一致している,又はすべて逆になっている
-
-
主キーを構成する列に非ナル値制約が定義されている必要があります。
-
重複したデータがある場合,主キーは追加できません。
-
主キーを定義しようとしている表を使用する手続き及びトリガが定義されている場合,そのSQLオブジェクト中のインデクス情報は無効になります。この場合,トリガは実行できなくなります。また,手続きからこの手続き又はトリガが実行できなくなるため,SQLオブジェクトを再作成する必要があります。
-
主キーを追加すると,指定した列に対してインデクスを定義します。
-
主キーのインデクス識別子は,(PRIMARYtttttttttt)のような名称となります。ttttttttttは表ID(10進数)です。なお,長さは19バイトです。
-
その他の規則については,「CREATE TABLE(表定義)」の「複数列一意性制約定義」を参照してください。
- 〔IN{インデクス格納用RDエリア名
-
|(インデクス格納用RDエリア名)
|((インデクス格納用RDエリア名)
〔,(インデクス格納用RDエリア名)〕…)
|マトリクス分割インデクス格納用RDエリア指定}〕
インデクス格納用RDエリア名,マトリクス分割インデクス格納用RDエリア指定については,「CREATE INDEX 形式1(インデクス定義)」の「オペランド」を参照してください。
- インデクスオプション::=
-
{PCTFREE=未使用領域の比率
|UNBALANCED SPLIT
|EMPTY}
インデクスオプションの規則を次に示します。
-
同一のインデクスオプションは,繰り返して指定できません。
-
各インデクスオプションの規則については,「CREATE INDEX 形式1(インデクス定義)」の「オペランド」を参照してください。
-
(d) RDエリア追加定義
::=ADD RDAREA 表格納用RDエリア名 〔FOR COLUMN 列名 {LOB列格納用RDエリア指定 |抽象データ型定義内LOB格納用RDエリア指定} 〔,列名 {LOB列格納用RDエリア指定 |抽象データ型定義内LOB格納用RDエリア指定}〕…〕 〔FOR INDEX インデクス識別子 インデクス格納用RDエリア指定 〔,インデクス識別子 インデクス格納用RDエリア指定〕…〕 〔FOR 〔PRIMARY〕 CLUSTER KEY インデクス格納用RDエリア指定〕 〔FOR PRIMARY KEY インデクス格納用RDエリア指定〕 〔WITH PROGRAM〕
- 表格納用RDエリア名
-
ハッシュ関数によって横分割している表に対して,ユーザ用RDエリアを追加する場合に指定します。
表格納用RDエリア名についての規則を次に示します。
-
表にユニーク指定のインデクスが定義されている場合,ユーザ用RDエリアは追加できないことがあります。詳細については,「CREATE INDEX 形式1(インデクス定義)」のUNIQUEの説明を参照してください。
-
リバランス機能を使用しない場合,データが格納されているFIXハッシュ分割の表に対してユーザ用RDエリアは追加できません。リバランス機能については,マニュアル「HiRDB Version 9 システム運用ガイド」を参照してください。
-
リバランス機能を使用している表を格納するRDエリアに,ほかの表及びインデクスは格納できません。
-
リバランス機能を使用するFIXハッシュ分割表に対して,RDエリアを追加した場合,リバランスユティリティを実行し正常終了するまでは,その表を検索,更新するSQLの性能が劣化することがあります。
-
リバランス機能を使用するFIXハッシュ分割表にユニーク指定のインデクス,ユニーククラスタキー,又は主キーを定義している場合,その表に対してRDエリアを追加すると,リバランスユティリティを実行し正常終了するまでは,その表へのデータの追加,更新はできません。
-
空き領域の再利用機能を使用した表にRDエリアを追加する場合,追加したRDエリアにも空き領域の再利用機能が適用されます。
-
表格納用RDエリアに共用RDエリアは指定できません。
-
表定義変更後の総分割RDエリア数の最大数は重複を含んで4096個です。
ただし,リバランス機能を使用した場合の総分割RDエリア数の最大数は重複を除いて1,024個です。
-
- 列名
-
RDエリアを追加する表に,BLOB又はBLOB属性を含む抽象データ型の列がある場合に指定します。
列名にはBLOB型の列,又はBLOB属性を含む抽象データ型で定義した列を指定してください。
表に定義しているBLOB型の列,又はBLOB属性を含む抽象データ型の列はすべて指定する必要があります。
- LOB列格納用RDエリア指定::=
-
IN {LOB列格納用RDエリア名
|(LOB列格納用RDエリア名)
|((LOB列格納用RDエリア名)
〔,(LOB列格納用RDエリア名)〕…)}
BLOB列のデータを格納するユーザLOB用RDエリアの名前を指定します。
指定するRDエリア名は,表格納用RDエリア名に指定したRDエリアと同じサーバにあるユーザLOB用RDエリアを指定してください。LOB列格納用RDエリアは,表定義で指定した表格納用RDエリアと1対1に対応するように指定してください。また,表格納用RDエリアに重複したRDエリアがある場合は,LOB列格納用RDエリアも同一位置が重複するように指定してください。上記以外の場合は,LOB列格納用RDエリアは重複して指定できません。
- 抽象データ型定義内LOB格納用RDエリア指定::=
-
ALLOCATE(属性名〔..属性名〕…
IN {LOB属性格納用RDエリア名
|(LOB属性格納用RDエリア名)
|((LOB属性格納用RDエリア名)
〔,(LOB属性格納用RDエリア名)〕…)}
〔,属性名〔..属性名〕…
IN {LOB属性格納用RDエリア名
|(LOB属性格納用RDエリア名)
|((LOB属性格納用RDエリア名)
〔,(LOB属性格納用RDエリア名)〕…)}〕…)
- 属性名〔..属性名〕
-
抽象データ型を構成する属性名を指定します。抽象データ型の属性が抽象データ型であり,その入れ子になっている抽象データ型の属性にLOB型の属性がある場合は,そのLOB型の属性名を指定してください。
属性名は,次のような場合に指定してください。
-
抽象データ型定義の属性
抽象データ型定義の属性のデータ型がLOB型であれば指定してください。
-
抽象データ型定義の入れ子
抽象データ型の属性が抽象データ型であり,その入れ子になっている抽象データ型の属性にLOB型の属性であれば,そのLOB型の属性名を指定してください。
-
- LOB属性格納用RDエリア名
-
抽象データ型の任意の階層にある,BLOB属性のデータを格納するユーザLOB用RDエリアの名前を指定します。
LOB属性格納用RDエリアについての規則を次に示します。
-
抽象データ型内にあるすべてのBLOB属性に対して,ユーザLOB用RDエリアを指定してください。
-
指定するRDエリア名は,表格納用RDエリア名に指定したRDエリアと同じサーバに定義しているユーザLOB用RDエリアを指定してください。
-
LOB属性格納用RDエリアは,表定義で指定した表格納用RDエリアと1対1に対応するように指定してください。また,表格納用RDエリアに重複したRDエリアがある場合は,LOB属性格納用RDエリアも同一位置が重複するように指定してください。
上記以外の場合は,LOB属性格納用RDエリアは重複して指定できません。
-
- FOR INDEX インデクス識別子 インデクス格納用RDエリア指定
-
〔,インデクス識別子 インデクス格納用RDエリア指定〕…〕
RDエリアを追加する表にインデクスが定義されている場合,追加する表格納用RDエリアに対応するインデクス格納用のRDエリアを指定します。
- インデクス識別子
-
RDエリアを追加する表に定義されているインデクスの,インデクス識別子を指定します。
- インデクス格納用RDエリア指定
-
インデクス格納用RDエリア指定については,ADD RDAREAのインデクス格納用RDエリア指定の説明を参照してください。
- FOR 〔PRIMARY〕 CLUSTER KEY インデクス格納用RDエリア指定
-
RDエリアを追加する表にクラスタキーが定義されている場合,追加する表格納用RDエリアに対応するクラスタキー格納用のRDエリアを指定します。
- PRIMARY
-
クラスタキーを主キーとして定義している場合に指定します。
- インデクス格納用RDエリア指定
-
インデクス格納用RDエリア指定については,ADD RDAREAのインデクス格納用RDエリア指定の説明を参照してください。
- FOR PRIMARY KEY インデクス格納用RDエリア指定
-
RDエリアを追加する表に主キーが定義されている場合,追加する表格納用RDエリアに対応する主キー格納用のRDエリアを指定します。
クラスタキーを構成する列を主キーとして定義している場合,FOR PRIMARY CLUSTER KEYを指定してください。
インデクス格納用RDエリア指定については,ADD RDAREAのインデクス格納用RDエリア指定の説明を参照してください。
- インデクス格納用RDエリア指定::=
-
IN{インデクス格納用RDエリア名
|(インデクス格納用RDエリア名)
|((インデクス格納用RDエリア名)
〔,(インデクス格納用RDエリア名)〕…)}
インデクス,クラスタキー,又は主キーを格納するRDエリアの名称を指定します。
CREATE INDEX 形式1で定義したインデクス(インデクス構成列のデータ型が抽象データ型以外),CREATE INDEX 形式3で定義したインデクス(部分構造インデクス),クラスタキー,及び主キーの場合は,一時表用RDエリア以外のユーザ用RDエリアを指定します。ただし,HiRDB/パラレルサーバでは,共用表の場合は共用RDエリアを指定します。
CREATE INDEX 形式2で定義したインデクス(インデクス構成列のデータ型が抽象データ型)の場合は,ユーザLOB用RDエリアを指定します。
インデクス格納用RDエリアを指定する場合の規則を次に示します。
-
HiRDB/パラレルサーバの場合,追加する表を格納するRDエリアと,それに対応するインデクスを格納するRDエリアは,同じバックエンドサーバになければなりません。
-
サーバ内で横分割しているインデクスは,表を格納するRDエリアとインデクスを格納するRDエリアの数を同じにする必要があります。
-
サーバ内で横分割していないインデクスは,表を格納するバックエンドサーバとインデクスを格納するRDエリアの数を同じにする必要があります。
-
ユーザ用RDエリアを追加する場合,次の計算式を満たすようなRDエリアを指定する必要があります。
キー長≦(インデクス格納用RDエリアのページサイズ÷2)−1242
-
インデクス格納用RDエリアは,表定義で指定した表格納用RDエリアと1対1に対応するように指定してください。また,表格納用RDエリアに重複したRDエリアがある場合は,インデクス格納用RDエリアも同一位置が重複するように指定してください。
-
インデクス種別によるインデクス格納用RDエリアの指定可否を次の表に示します。インデクス格納用RDエリアの指定が必要となっているインデクスについては,必ずインデクス格納用RDエリアを指定してください。
表3‒3 インデクス種別によるインデクス格納用RDエリアの指定可否 インデクスの定義方法
インデクスの分割方法
インデクス格納用RDエリアの指定要否
CREATE INDEX 形式1,又は形式3で定義したインデクス,及び主キー
1サーバ内だけの横分割※1
サーバ内分割キーインデクス
○
サーバ内非分割キーインデクス
サーバ間だけの横分割※2
サーバ内分割キーインデクス
サーバ内非分割キーインデクス
×※5※6
サーバ内,かつサーバ間の横分割※3
サーバ内分割キーインデクス
○
サーバ内非分割キーインデクス
非分割※4
非分割キーインデクス
×※5
CREATE INDEX 形式2で定義したインデクス,及びクラスタキー
1サーバ内だけの横分割※1
○
サーバ間だけの横分割※2
サーバ内,かつサーバ間の横分割※3
- (凡例)
-
○:インデクス格納用RDエリアを指定する必要があります。
×:インデクス格納用RDエリアを指定する必要はありません。
- 注※1
-
HiRDB/シングルサーバでの横分割,又はHiRDB/パラレルサーバで一つのバックエンドサーバに閉じた横分割のことをいいます。
- 注※2
-
HiRDB/パラレルサーバで複数のバックエンドサーバにわたった横分割で,かつバックエンドサーバ内ではインデクスを分割していない横分割のことをいいます。
- 注※3
-
HiRDB/パラレルサーバで複数のバックエンドサーバにわたった横分割で,かつバックエンドサーバ内でもインデクスを分割している横分割のことをいいます。
- 注※4
-
横分割していないインデクスのことをいいます。
- 注※5
-
RDエリアの追加によって,表を格納するバックエンドサーバの数が増える場合は,インデクス格納用RDエリアも指定する必要があります。
- 注※6
-
RDエリアを追加しても表を格納するバックエンドサーバの数が変わらない場合,インデクス格納用RDエリアを指定することもできます。インデクス格納用RDエリアを指定すると,インデクスはサーバ内の横分割をしたインデクスとなります。
-
- WITH PROGRAM
-
ハッシュ分割表にRDエリアを追加する場合,その表を使用する手続き,及びトリガの有効なSQLオブジェクトがあれば,そのSQLオブジェクトを無効にするときに指定します。
(e) 列属性変更定義
::=CHANGE{列名{〔{VARCHAR(データ長) |NVARCHAR(データ長) |MCHAR({*|データ長}) |MVARCHAR({*|データ長})} 〔ARRAY [{*|最大要素数}]〕〕 |〔ARRAY [最大要素数]〕 |BINARY(データ長)} 〔{NO SPLIT|SPLIT}〕〔列回復制約2〕 〔{SET DEFAULT句|DROP DEFAULT}〕 〔WITH DEFAULT〕〔更新可能列属性〕 |CLUSTER KEY〔UNIQUE〕 |LOCK{ROW|PAGE} |HASH ハッシュ関数名 |SEGMENT REUSE {〔セグメント数〔{K|M}〕〕|NO} |SEGMENT REUSE OPTION 再利用オプション値 |INSERT ONLY 〔WHILE {日間隔データ|ラベル付き間隔} BY 列名〕} 〔WITH PROGRAM〕
- 列名
-
定義を変更する場合,列の名称を指定します。
列名についての規則を次に示します。
-
ビュー表定義時にビュー定義文中で次に示す指定をした列は,ALTER TABLEで定義内容を変更できません。
・選択式や探索条件中でスカラ関数の引数として指定した列
・選択式や探索条件中で関数呼出しの引数として指定した列
・選択式や探索条件中で連結演算の演算項として指定した列
・選択式や探索条件中でCASE式の値式中に指定した列
・選択式や探索条件中でCAST指定の値式中に指定した列
-
ビュー表定義時にビュー定義文中で次に示す指定をした場合,そのビュー表で指定した表の列は,ALTER TABLEで定義内容を変更できません。
・行副問合せを含む場合
・集合演算を用いたスカラ副問合せ,表副問合せを含む場合
・FROM句の導出表,又はEXISTS述語以外で結果の列数が2以上の表副問合せを含む場合
・選択式中にスカラ副問合せを含む場合
・比較述語,IN述語,及び限定述語の左側の行値構成子が,スカラ副問合せを含む場合
・比較述語の右側の行値構成子が,スカラ副問合せを含む場合でかつ行値構成子要素数が2以上の場合
・IN述語の右側の行値構成子の並び中に,スカラ副問合せを含む場合
・BETWEEN述語,LIKE述語,XLIKE述語,SIMILAR述語,NULL述語及び論理述語中にスカラ副問合せを含む場合
・値式中にスカラ副問合せを含む場合
-
列名は,表識別子で指定した実表中の列名を指定してください。
-
列名の後に,列定義の変更内容を指定するオペランドを一つ以上指定してください。
-
- {VARCHAR(データ長)
-
|NVARCHAR(データ長)
|MCHAR({*|データ長})
|MVARCHAR({*|データ長})
|BINARY(データ長)}
可変長データのデータ長を変更する場合に指定します。又はデータ型を,CHARからMCHARに,VARCHARからMVARCHARに変更する場合に指定します。
規則を次に示します。
-
可変長データ型の列の最大長は小さくできません。
-
インデクスの定義された可変長データ型の列の場合,次の計算式を満たさないような変更はできません。
キー長≦
MIN((インデクス格納用RDエリアのページサイズ÷2)−1242,4036)
-
最大長を変更しない場合,データ型の指定は省略してください。
-
ビュー定義文中の導出問合せ式に指定した列のうち,次に示す指定をした列は,32,001バイト以上のBINARYに変更できません。
・比較述語,限定述語,及びIN述語の副問合せ中に指定した列
・重複排除に指定した列
・グループ分け,又は集合関数に指定した列
・集合演算の対象となる問合せ指定の選択式に指定した列
・内部導出表を作成する条件の,どれかを満たす問合せ指定中で,内部導出表として展開されるビュー表を定義するときに指定した列
内部導出表となる条件については,「内部導出表」を参照してください。
-
CHARをMCHARに変更できます。その場合,データ長は変更できません。データ長には,変更前のデータ長,又は*を指定してください。
-
VARCHARをMVARCHARに変更できます。その場合,列の最大長を大きくできます。最大長を変更しない場合,データ長には変更前の最大長,又は*を指定してください。
-
文字集合を指定した列は,データ型を変更できません。
-
次のBINARY型の列は32,001バイト以上に変更できません。
・更新可能列属性のUPDATE ONLY FROM NULLを指定している列
・データ長の変更と同時に更新可能列属性のUPDATE ONLY FROM NULLを付与する列
-
予備列のデータ型をCHARからMCHARに変更することはできません。
-
- ARRAY [{*|最大要素数}]
-
繰返し列の最大要素数を大きくする場合に指定します。
規則を次に示します。
-
最大要素数には,2〜30,000の符号なし整数を指定します。
-
省略した場合は,繰返し列でないことを示します。
-
最大要素数を変更しない場合は,*を指定してください。
-
最大要素数は小さくできません。
-
- ARRAY [最大要素数]
-
繰返し列の最大要素数を大きくする場合に指定します。
最大要素数には,2〜30,000の符号なし整数を指定します。
最大要素数は小さくできません。
- {NO SPLIT|SPLIT}
-
可変長文字列(VARCHAR,NVARCHAR,又はMVARCHAR)のデータ格納時に,データベース容量を削減したい場合に指定します。
可変長文字列型の定義長を255バイト以下から256バイト以上に変更する場合で,データベース容量を削減したい場合は,NO SPLITを指定してください。
NO SPLIT,及びSPLITの詳細(ノースプリットオプション)については,マニュアル「HiRDB Version 9 システム導入・設計ガイド」を参照してください。
- NO SPLIT
-
実データ長が256バイト以上の場合に指定します。
-
バージョン09-50より前のHiRDBで,CREATE TABLE又はALTER TABLE ADDによって定義した,定義長が256バイト以上である可変長文字列型の列のうち,定義時にNO SPLITを指定していない列に対して指定します。
-
実表にデータが格納されている場合,指定できません。
-
- SPLIT
-
実データ長が255バイト以下の場合に指定します。
-
バージョン09-50より前のHiRDBで,CREATE TABLE又はALTER TABLE ADDによって定義した,定義長が255バイト以下である可変長文字列型の列のうち,定義時にNO SPLITを指定した列に対して指定します。
-
実表にデータが格納されている場合,指定できません。
-
列回復制約2::= RECOVERY{ALL|PARTIAL|NO}
データ型がBLOBの列又はBLOB属性を含む抽象データ型の列の場合,列に対するデータベースの更新ログ取得方式を変更するときに指定します。ALL,PARTIAL,及びNOの内容はALTER TABLE ADDの列回復制約1と同じです。
- {SET DEFAULT句|DROP DEFAULT}
-
- DEFAULT句::=DEFAULT 〔既定値〕
-
既定値を設定又は変更する場合に指定します。規則を次に示します。
-
指定できる列のデータ型はALTER TABLE ADDのデフォルト句と同じです。
-
WITH DEFAULTを定義している列に対してSET DEFAULT句を指定した場合,WITH DEFAULTの指定は無効となり,SET DEFAULT句の指定が有効となります。
-
一つのALTER TABLEで,WITH DEFAULTと同時には指定できません。
-
最大長を変更する列が既定の文字集合以外の場合,DEFAULT句に次の項目は指定できません。
・CURRENT_DATE(CURRENT DATE)
・CURRENT_TIME(CURRENT TIME)
・CURRENT_TIMESTAMP(CURRENT TIMESTAMP)
-
改竄防止表の行削除禁止期間を指定した挿入履歴保持列には指定できません。
-
予備列に対してSET DEFAULT句は指定できません。
既定値を削除する場合に指定します。
DROP DEFAULTは,DEFAULT句を指定している列に対して指定してください。
-
- WITH DEFAULT
-
既定値のない非ナル値制約のある列を,既定値のある非ナル値制約の列に変更する場合に指定します。
WITH DEFAULTについての規則を次に示します。
-
非ナル値制約のない列には指定できません。
-
既に既定値のある非ナル値制約の列に対して,WITH DEFAULTは指定できません。
-
DEFAULT句を定義している列に対して,WITH DEFAULTは指定できません。
-
一つのALTER TABLEで,SET DEFAULT句,又はDROP DEFAULT句と同時には指定できません。
-
既定値を持つ列を既定値のない列に変更できません。
-
繰返し列には指定できません。
-
抽象データ型の列には指定できません。
-
予備列には指定できません。
-
- 更新可能列属性::=UPDATE 〔ONLY FROM NULL〕
-
改竄防止表に変更する前に更新可能列属性を変更する場合に指定します。
更新可能列属性は改竄防止表の場合だけ有効になります。
改竄防止表への変更については,「INSERT ONLY」オプションを参照してください。
更新可能列属性についての規則を次に示します。
-
改竄防止表に対しては指定できません。
-
SYSTEM GENERATEDを指定した列には指定できません。
-
既に更新可能列属性を指定している列には指定できません。
-
次に示す更新できない列には指定できません。
・クラスタキー構成列
・分割キー構成列(フレキシブルハッシュ分割表の分割キー構成列を除く)
・予備列
- UPDATE
-
改竄防止表に変更後も更新可能な列になります。
- UPDATE ONLY FROM NULL
-
改竄防止表に変更後ナル値から非ナル値へ一度だけ更新できます。
改竄防止表でUPDATE ONLY FROM NULL指定した列の値の更新可否を次に示します。
更新前の列の値
更新後の列の値
更新可否
ナル値
ナル値
○
ナル値
非ナル値
○
非ナル値
ナル値
×
非ナル値
非ナル値※
×
- (凡例)
-
○:更新できます。
×:更新できません。
- 注
-
繰返し列の場合は,ナル値(要素数が0の値)から添え字指定なしでの列単位更新だけ実行できます。
- 注※ 更新前の値と同値含む
-
UPDATE ONLY FROM NULL指定についての規則を次に示します。
-
NOT NULLを指定した列には指定できません。
-
FIX表の場合指定できません。
-
主キー又はクラスタキー構成列には指定できません。
-
分割キー構成列には指定できません。
-
BLOB型及び定義長が32,001バイト以上のBINARY型の列には指定できません。
-
- 更新可能列属性の指定可否と指定時の列の値の更新可否は次のようになります。
-
表種別
UPDATE指定
UPDATE ONLY
FROM NULL指定
左記の
指定なし
指定
可否
列の値の更新可否
指定
可否
列の値の更新可否
指定
可否
列の値の更新可否
非改竄防止表
○
○
○
○
−
○
改竄防止表
×
○
×
○※
−
×
- (凡例)
-
○:更新できます。
×:更新できません。
−:該当しません。
- 注※
-
ナル値から非ナル値へ一度だけ更新できます。
-
- CLUSTER KEY UNIQUE
-
一意性制約のないクラスタキーを一意性制約のあるクラスタキーに変更する場合に指定します。
CLUSTER KEY UNIQUEについての規則を次に示します。
-
実表にデータが入っている場合,クラスタキーの属性は変更できません。
-
表定義で一意性制約のあるクラスタキーを定義している場合は指定できません。
-
フレキシブルハッシュ分割の表に対しては指定できません。
-
- CLUSTER KEY
-
一意性制約のあるクラスタキーを一意性制約のないクラスタキーに変更する場合に指定します。
実表にデータが入っている場合,クラスタキーの属性は変更できません。
表定義で一意性制約のないクラスタキーを定義している場合は指定できません。
- LOCK{ROW|PAGE}
- HASH ハッシュ関数名
-
表をハッシュ関数によって横分割している場合に,ハッシュ関数を変更するときに指定します。データが格納されているFIXハッシュ分割の表に対しては変更できません。
リバランス機能を使用する表のハッシュ関数に,HASH1〜HASH6,HASHZ,HASH0は指定できません。また,リバランス機能を使用しない表のハッシュ関数に,HASHA〜HASHFは指定できません。
- SEGMENT REUSE {〔セグメント数〔{K|M}〕〕|NO}
-
セグメント数を変更します。空き領域を再利用する処理はオーバヘッドが掛かるため,性能よりも格納効率を優先するシステムにだけ適用してください。
空き領域の再利用機能については,マニュアル「HiRDB Version 9 システム導入・設計ガイド」を参照してください。
- セグメント数〔{K|M}〕
-
空き領域の再利用機能を使用し,かつ該当する表のセグメント数に上限を設定する場合,その上限のセグメント数を指定します。セグメント数は,1〜268,435,440の符号なし整数で指定できます。また,単位として,K(キロ),又はM(メガ)を指定できますが,268,435,440を超える値は指定できません。
行の挿入,削除を頻繁に行う表に対して,行の挿入性能の向上,及び指定したセグメント内での格納効率の向上が期待できます。
- セグメント数の指定なし
-
空き領域の再利用機能を使用し,かつ該当する表のセグメント数に上限を設定しない場合,セグメント数を省略します。
行の挿入,削除を頻繁に行う表で,かつRDエリアに格納される表が該当する表だけの場合に適用してください。行の挿入性能の向上,及び該当する表を格納するRDエリア内での,空き領域の格納効率の向上が期待できます。
- NO
-
空き領域の再利用機能を使用しない場合に指定します。
行の挿入,削除を頻繁に行わない表に対してはNOを指定してください。
SEGMENT REUSEについての規則を次に示します。
-
空き領域の再利用機能は,LOB列,LOB属性の抽象データ型列,及びインデクスに対しては無効となります。
-
空き領域の再利用機能は,リバランス表に対しては指定できません。
- SEGMENT REUSE OPTION 再利用オプション値
-
再利用オプション機能の適用範囲を変更する場合に指定します。この機能を適用している場合,空き領域の再利用機能を使用したときのデータ格納効率が向上します。空き領域の再利用機能が非適用の表に対しては指定できません。
再利用オプション値には0〜3を値として指定できます。0を指定した場合は,再利用オプション機能を適用しません。なお,このオプションの推奨値は3です。
それぞれを指定すると,次の場合に格納効率の向上が期待できます。
各機能の再利用オプション値
機能
格納効率の向上が期待できるケース
1
UPDATE対応
-
固定長データ,ADT列のNULL値からのUPDATEがある
-
BINARY列のUPDATEがある
-
VARCHAR列,NVARCHAR列,MVARCHAR列(NO SPLIT指定)のUPDATEがある
-
確保済みセグメント数に比べてサーチモードの切り替え回数が少ない(pddbstコマンドで確認できる)
2
分岐行が多発する表の格納効率向上
分岐行を作成する表を運用するケース
3
UPDATE対応及び分岐行が多発する表の格納効率向上
-
固定長データ,ADT列のNULL値からのUPDATEがある
-
BINARY列のUPDATEがある
-
VARCHAR列,NVARCHAR列,MVARCHAR列(NO SPLIT指定)のUPDATEがある
-
確保済みセグメント数に比べてサーチモードの切り替え回数が少ない(pddbstコマンドで確認できる)
-
分岐行を作成する表を運用するケース
-
- INSERT ONLY 〔WHILE {日間隔データ|ラベル付き間隔} BY 列名〕
-
改竄防止表に変更する場合に指定します。改竄防止表については,マニュアル「HiRDB Version 9 システム導入・設計ガイド」を参照してください。
改竄防止表とした場合,その表の値は更新できません。ただし,更新可能列は更新できます。
改竄防止表には,行の削除を禁止する期間(行削除禁止期間)を指定できます。行削除禁止期間を指定する場合,WHILEで期間を指定し,列名には挿入履歴保持列(DATE型の列で,かつSYSTEM GENERATEDの列)を指定してください。削除禁止期間を指定しない場合,永久的に行の削除はできません。
- 日間隔データ
-
行削除禁止期間を,日間隔データの10進数表現で指定します。日間隔データの10進数表現については,「日間隔データの10進数表現」を参照してください。
なお,日間隔データは正の値だけ指定できます。
- ラベル付き間隔
-
行削除禁止期間を,ラベル付き間隔で指定します。ラベル付き間隔については,「日付演算」を参照してください。
ラベル付き間隔の値式には,括弧で囲まれていない正の整数定数だけ指定できます。
- 列名
-
DATE型で,かつSYSTEM GENERATEDの列を指定してください。
行削除禁止期間には行を挿入した日を含み,行削除禁止期間の計算は,「日付演算」の「日付データと日間隔データとを加減算する場合の規則」に従います。削除禁止最終日付と削除可能日付は,それぞれ次の演算結果となります。
-
削除禁止最終日付=行挿入日付+削除禁止期間−1日
-
削除可能日付=行挿入日付+削除禁止期間
行挿入日付と削除禁止期間の指定値での,削除禁止最終日付と削除可能日付の関係については,「削除禁止最終日付と削除可能日付の関係」を参照してください。
-
表を改竄防止表に変更する場合,次に示す制限があります。
-
既に改竄防止表となっている表は指定できません。
-
外部キーを定義した表は改竄防止表に変更できません。
-
検査制約を定義した表は改竄防止表に変更できません。
-
すべての列に更新可能列属性を指定している表は改竄防止表に変更できません。
-
インナレプリカ機能を適用したRDエリアに表を定義している場合,その表を改竄防止表に変更できません。
-
指定した表に行がある場合,その表を改竄防止表に変更できません。
-
予備列を定義した表を,改竄防止表とすることはできません。
- WITH PROGRAM
-
次の場合に指定します。
-
列名の変更,DEFAULT句の既定値の変更,表の排他制御モード変更,ハッシュ分割した表のハッシュ関数の変更,SEGMENT REUSEの変更,又は改竄防止表に変更をする場合に,その表を使用する手続き,及びトリガの有効なSQLオブジェクトを無効にしたいとき
-
クラスタキーの一意性制約属性の変更をする場合に,そのクラスタキーを使用する手続き,及びトリガの有効なSQLオブジェクトを無効にしたいとき
-
(f) 列削除定義::=DROP 列名〔WITH PROGRAM〕
- 列名
-
列を削除する場合に指定します。
列名についての規則を次に示します。
-
列名は,表識別子で指定した実表中の列名にしてください。
-
実表にデータが格納されている場合,列は削除できません。
-
列が1個の場合は,削除できません。
-
列を削除すると,その列に対するインデクス,注釈,及び削除する列を使用しているビュー表(パブリックビュー表を含む)も削除されます。
-
クラスタキー又は主キーを定義したインデクスを構成する列は削除できません。
-
列のデータ型がBLOBの場合は削除できません。
-
抽象データ型列がある表の列は指定できません。
-
改竄防止表の挿入履歴保持列の場合,その列は削除できません。
-
改竄防止表の列を削除した結果,すべての列が更新可能列となる場合,その列は削除できません。
-
列を削除した結果,予備列だけの表になる場合,その列は削除できません。
-
予備列を削除すると,その予備列を持つ表を使用しているビュー表(パブリックビュー表を含む)も削除されることがあります。
-
- WITH PROGRAM
-
表中の列を削除するときに,その表を使用する手続き,及びトリガの有効なSQLオブジェクトを無効にしたいときに指定します。
(g) 表制約定義削除::=DROP PRIMARY KEY〔WITH PROGRAM〕
- PRIMARY KEY
-
主キーを削除する場合に指定します。
主キーを削除する場合の規則を次に示します。
-
表に主キーが定義されていない場合は指定できません。
-
参照している外部キーが存在する場合,主キーは削除できません。
-
クラスタキーとして定義した主キー(PRIMARY CLUSTER KEY)は削除できません。
-
- WITH PROGRAM
-
主キーを削除するときに,その主キーを使用する手続き,及びトリガの有効なSQLオブジェクトを無効にしたいときに指定します。
WITH PROGRAMを省略した場合,その主キーを使用する手続き及びトリガの有効なSQLオブジェクトがあると,その主キーは削除できません。
(h) 表名変更定義::=RENAME TABLE TO 表識別子〔WITH PROGRAM〕
表の名称を変更する場合に指定します。
- 表識別子
-
変更後の実表の名称を指定します。
表識別子についての規則を次に示します。
-
インデクスが付いている表の名称も変更できます。
-
ビュー表の名称は変更できません。
-
次に示す表の名称は変更できません。
・ビュー表の基になる表
・CREATE PROCEDUREのSQL手続き文中に指定した表
・CREATE TRIGGERのSQL手続き文中に指定した表,及びトリガを定義した表
-
スキーマ内にある実表及びビュー表と同じ名称には,変更できません。
-
改竄防止表の名称は変更できません。
-
- WITH PROGRAM
-
表識別子の名称を変更する場合に,その表を使用する手続き,及びトリガの有効なSQLオブジェクトを無効にしたいときに指定します。ただし,WITH PROGRAMを指定しても,トリガを定義した表の表名は変更できません。
(i) 列名変更定義::=RENAME COLUMN FROM 変更前列名 TO 変更後列名〔WITH PROGRAM〕
列の名称を変更する場合に指定します。
- 変更前列名,変更後列名
-
名称を変更する列の,変更前と変更後の名称を指定します。
変更前列名,変更後列名についての規則を次に示します。
-
インデクスのキー列の名称も変更できます。
-
ビュー表の列名は変更できません。
-
次に示す列の名称は変更できません。
・ビュー表の基になる表の列
・CREATE PROCEDUREのSQL手続き文中に指定した表の列
・CREATE TRIGGERのSQL手続き文中に指定した表の列,トリガ契機列,及びトリガ動作条件中に指定した列
-
既に表にある列名には変更できません。
-
変更前列名が表にない場合は,変更できません。
-
改竄防止表の列名は変更できません。
-
- WITH PROGRAM
-
列の名称を変更するときに,その列を含む表を使用する手続き,及びトリガの有効なSQLオブジェクトを無効にしたいときに指定します。ただし,WITH PROGRAMを指定しても,次の列の列名は変更できません。
-
トリガ契機列
-
トリガ動作条件中で新旧値相関名を使用して参照している列
-
トリガSQL文中で新旧値相関名を使用して参照している列
-
(j) 分割格納条件変更定義
::=CHANGE RDAREA {横分割表変更指定|マトリクス分割表変更指定} 〔LOB列格納用RDエリア変更指定〕 〔インデクス格納用RDエリア変更指定 〔インデクス格納用RDエリア変更指定〕…〕 〔クラスタキー格納用RDエリア変更指定〕 〔主キー格納用RDエリア変更指定〕 〔WITHOUT PURGE〕〔WITHOUT PROGRAM〕
横分割された表やマトリクス分割された表の分割格納条件を変更する場合に指定します。
次に示す表は,分割格納条件を変更できません。
-
抽象データ型の列を持つ表
本文中では,データ型にBLOB型を指定した列を”LOB列”と記述します。
一つのALTER TABLE文での,表の分割格納条件の分割,統合の単位は次のとおりです。
表種別
表の分割方法
実行種別
分割
統合
横分割表
キーレンジ分割
境界値指定
任意の1個の境界値を2〜16個に分割します。
任意の2〜16個の境界値を1個に統合します。
格納条件指定
任意の1個のRDエリアを2〜16個に分割します。
任意の2〜16個のRDエリアを1個に統合します。
マトリクス分割表
キーレンジ分割
境界値指定
一つの次元の1個の境界値を2〜16個に分割します。結果として,n個の境界値を2n〜16n個の境界値に分割します。
一つの次元の2〜16個の境界値を1個に統合します。結果として,2n〜16n個の境界値をn個の境界値に統合します。
- (凡例)
-
n:分割又は統合する表の分割格納条件に該当する別次元の分割数
表の分割格納条件を分割・統合する場合のSQL例については,「使用例」の9.(境界値指定の横分割表の場合),10.(格納条件指定の横分割表の場合),又は11.(マトリクス分割表の場合)を参照してください。また,分割格納条件を変更した場合,変更対象のRDエリアに格納されているデータは,ALTER TABLE実行時にシステムが削除します(「WITHOUT PURGE」オプションを指定した場合,変更対象のデータを,削除する範囲が変わる場合があります。詳細は「WITHOUT PURGE」オプションを参照してください)。このため,ALTER TABLE実行後も使用するデータは,データを格納し直す必要があります。分割格納条件の変更を行う前にデータをアンロードし,分割格納条件の変更後にデータのロードを行うなどの操作が必要です。削除するデータを格納し直す方法については,マニュアル「HiRDB Version 9 システム運用ガイド」の「表の分割格納条件を変更するときの運用」を参照してください。
表の分割格納条件の変更時の規則を次に示します。
- 《表の分割格納条件の変更前の確認事項》
-
表の分割格納条件の変更前の確認事項を次に示します。
-
分割格納条件を変更する場合,HiRDB Advanced High Availabilityが必要です。
-
表の種別と分割方法によって,分割格納条件を変更できない場合があります。表の種別と分割方法による変更の可否を次に示します。
表種別
分割方法
変更の可否
横分割表
キーレンジ分割
格納条件指定
格納条件の比較演算子に=だけを用いた表
○
格納条件の比較演算子に=以外を用いた表
×
境界値指定
○
ハッシュ分割
×
マトリクス分割表
第1次元:境界値指定
第2次元:境界値指定
○
第1次元:境界値指定
第2次元:ハッシュ分割
○※2
非分割表※1
−
×
(凡例)
○:変更できます。
×:変更できません。
−:該当しません。
注※1 分割格納条件を指定していない表です。
注※2 境界値指定の次元だけ変更できます。ハッシュ分割の次元は変更できません。
-
表格納用RDエリア,インデクス格納用RDエリア及びLOB列格納用RDエリアが,1対1の関係にない場合,分割格納条件を変更できません。
-
格納条件指定の横分割表,又は境界値指定のキーレンジ分割の組み合わせのマトリクス分割表の場合,次の条件をすべて満たすときは分割格納条件を変更できません。
・変更対象の表にインデクス,主キー,又はクラスタキーが定義されている
・変更対象の表又は変更した結果の表の表格納用RDエリアが一つである
-
改竄防止表の分割格納条件は,変更できません。
-
インナレプリカ機能を使用している場合の確認事項を次に示します。
・表,インデクス,主キー,クラスタキー,LOB列を格納するRDエリアの世代数をすべて同じにする必要があります。
・表に参照制約を定義している場合,参照表及び被参照表を格納するRDエリアの世代数を,すべて同じにする必要があります。
-
- 《表の分割格納条件の変更時の規則》
-
表の分割格納条件の変更時の規則を次に示します。
-
1回のALTER TABLEで分割格納条件の分割と統合を同時に実行できません。2回のALTER TABLEに分けて実行する必要があります。
-
変更対象の表のRDエリア(横分割表変更指定,又はマトリクス分割表変更指定の変更前境界値リストで特定するRDエリア,又は変更前RDエリア情報リストで指定するRDエリア),インデクス格納用RDエリア及びLOB列格納用RDエリアは,1対1の関係にする必要があります。
-
表,インデクス,主キー,クラスタキー,及びLOB列は,表を基準に分割数やRDエリアの重複の対応関係を維持する必要があります(例えば,表の変更前後で,システムが境界値を一つにまとめる場合,及び指定するRDエリアが変更対象の境界値以外のデータを格納している場合,変更前後で同じRDエリアを使用し,同じRDエリアを指定する位置などをインデクス,主キー,クラスタキー,及びLOB列も同じように指定する必要があります。詳細については,マニュアル「HiRDB Version 9 システム運用ガイド」の「表の分割格納条件の変更」を参照してください)。
-
格納条件指定の横分割表の場合,表定義変更後の表格納用RDエリア名は重複しないようにしてください。
-
表定義変更後の総分割RDエリア数の最大数は重複を含んで4,096個です。
-
表定義変更後の総格納条件指定数(格納条件を指定しないRDエリアも含む)の最大数は15000個です。
-
変更対象として指定したRDエリアの表のデータは,ALTER TABLE実行時にシステムが削除します(そのRDエリアに対応するインデクス格納用RDエリア,及びLOB列格納用RDエリアのデータもシステムが削除します)。また,インナレプリカ機能を使用している場合,変更対象の表,インデクス,主キー,クラスタキー,及びLOB列(LOB型属性列含む)を格納するすべての世代のレプリカRDエリアのデータもALTER TABLE実行時にシステムが削除します(変更時の注意事項の4を参照してください)。
-
システム定義のpd_check_pendingオペランドにUSEを指定した場合,変更対象の表が被参照表のとき,被参照表を参照する参照表に対し,ディクショナリ表とRDエリア中の表情報を検査保留状態に設定します。また,インナレプリカ機能を使用している場合は,すべての世代でRDエリア中の表情報を検査保留状態に設定します。
-
検査保留状態の表の分割格納条件を変更した場合の,検査保留状態の解除に関する規則を次に示します。
<<RDエリアの表情報中に設定された検査保留状態>>
データ削除対象のRDエリアだけ,変更対象表の検査保留状態を解除します。
<<ディクショナリ表中に設定された検査保留状態>>
システム定義のpd_check_pendingオペランドにUSEを指定している場合に,検査保留状態を解除するディクショナリ表を次の表に示します。NOUSEを指定している場合は,検査保留状態を解除するディクショナリ表はありません。
表3‒4 システム定義のpd_check_pendingオペランドにUSEを指定している場合に,検査保留状態を解除するディクショナリ表 変更対象表に定義されている制約
表情報に検査保留状態が設定されたRDエリアの有無※
検査保留状態を解除するディクショナリ表
参照制約
なし
SQL_REFERENTIAL_CONSTRAINTS表
CHECK_PEND列
SQL_TABLES表
CHECK_PEND列
検査制約
なし
SQL_CHECKS表
CHECK_PEND2列
SQL_TABLES表
CHECK_PEND2列
参照制約及び検査制約
参照制約:なし
検査制約:なし
SQL_REFERENTIAL_CONSTRAINTS表
CHECK_PEND列
SQL_CHECKS表
CHECK_PEND2列
SQL_TABLES表
CHECK_PEND列,CHECK_PEND2列
参照制約:なし
検査制約:あり
SQL_REFERENTIAL_CONSTRAINTS表
CHECK_PEND列
SQL_TABLES表
CHECK_PEND列
参照制約:あり
検査制約:なし
SQL_CHECKS表
CHECK_PEND2列
SQL_TABLES表
CHECK_PEND2列
制約が定義されていない
なし
−
−
-
- (凡例)
-
−:該当しません。
注※ インナレプリカ機能を使用している場合は,すべての世代の変更対象表の表格納用RDエリアを示します。
-
変更対象のデータを削除する範囲を次に示します(「WITHOUT PURGE」オプションを指定した場合,変更対象のデータを,削除する範囲が変わることがあります。詳細については,「WITHOUT PURGE」オプションを参照してください)。
境界値指定の横分割表の場合:
・変更前境界値リストに指定した境界値で特定するRDエリアの表,インデクス,主キー,クラスタキー,及びLOB列のデータ。
・変更前境界値リストに指定した境界値で特定するRDエリアが,変更対象以外の境界値のデータを格納するRDエリアと重複していた場合,変更対象以外の境界値のデータ。
・インナレプリカ機能を使用している場合,変更前境界値リストに指定した境界値で特定するRDエリアの全世代のレプリカRDエリアの表,インデクス,主キー,クラスタキー,及びLOB列のデータ。
格納条件指定の横分割表の場合:
・変更前RDエリア情報リストに指定したRDエリアの表,インデクス,主キー,クラスタキー,及びLOB列のデータ。
・インナレプリカ機能を使用している場合,変更前RDエリア情報リストに指定したRDエリアの全世代のレプリカRDエリアの表,インデクス,主キー,クラスタキー,及びLOB列のデータ。
マトリクス分割表の場合:
・変更対象列名と変更前境界値リストに指定した境界値で特定する複数のRDエリアの表,インデクス,主キー,クラスタキー,及びLOB列のデータ。
・変更前境界値リストに指定した境界値で特定するRDエリアが,変更対象以外の境界値のデータを格納するRDエリアと重複していた場合,変更対象以外の境界値のデータ。
・インナレプリカ機能を使用している場合,変更前境界値リストに指定した境界値で特定するRDエリアの全世代のレプリカRDエリアの表,インデクス,主キー,クラスタキー,及びLOB列のデータ。
-
境界値指定の横分割表又はマトリクス分割表の場合,RDエリアが重複(隣り合っていない境界値を格納するRDエリアが同じRDエリアの場合)又は連続(隣り合った境界値を格納するRDエリアが同じRDエリアの場合)するとき,境界値指定の横分割表とマトリクス分割表で次のようになります。詳細については,マニュアル「HiRDB Version 9 システム運用ガイド」を参照してください。
境界値指定の横分割表の場合を次に示します。
項目
境界値指定の横分割表
ALTER TABLEに指定する変更後のRDエリア※
重複
重複してもかまいません。
連続
連続しないようにしてください。
分割格納条件を変更した結果の表全体のRDエリア
重複
重複してもかまいません。
連続
分割時は,連続したRDエリアをシステムが一つにまとめます。
統合時は指定できません。
マトリクス分割表の場合を次に示します。
項目
境界値指定の横分割表
ALTER TABLEに指定する変更後のRDエリア※
重複
重複してもかまいません。
連続
連続してもかまいません。
分割格納条件を変更した結果の表全体のRDエリア
重複
重複してもかまいません。
連続
連続したRDエリアをシステムは一つにまとめません。
注※
変更後境界値分割指定,又はマトリクス分割表格納用RDエリア変更指定に指定したRDエリアです。
-
統合した結果,表格納用RDエリアが次の状態になる指定はできません。
・表の分割数が1個になる場合
・一つの次元の分割数が1個になる場合
-
変更後のRDエリアに共用RDエリアは指定できません。
-
分割格納条件を変更する表を使用する手続き,及びトリガを定義している場合,「WITH PROGRAM」を指定して手続き,及びトリガを無効化する必要があります。
分割格納条件を変更する場合の注意を次に示します。
-
- 《変更時の注意事項》
-
-
分割格納条件を変更する表を使用する手続き,及びトリガが定義され,「WITH PROGRAM」を指定して手続き,及びトリガを無効化した場合,定義無効化になった手続き,及びトリガはALTER ROUTINEで再作成する必要があります(手続きの場合,ALTER PROCEDURE,トリガの場合,ALTER TRIGGERで再作成することもできます)。
-
変更対象の境界値で特定するRDエリアが,変更対象以外の境界値のデータを格納するRDエリアと重複していた場合,システムは変更対象のRDエリアの表のデータをすべて削除するため,変更対象以外の境界値のデータも削除します。
-
変更対象の表のデータを変更した結果の表に格納し直す場合,及び障害に備えてデータのバックアップを取得する場合,変更する前のデータをデータベース再編成ユティリティ(pdrorg)でアンロードし,変更した結果の表にロードする運用方法や,データベース複写ユティリティ(pdcopy)でRDエリアのバックアップを取得する運用方法などが必要です。詳細については,マニュアル「HiRDB Version 9 システム運用ガイド」の「表の分割格納条件を変更するときの運用」を参照してください。
-
変更する表が被参照表で,表のデータを削除する場合,参照表,及び被参照表の整合性を保てなくなります。この場合,表の分割格納条件の変更を行い,表のデータを変更した結果の表に格納し直した後に,参照表と被参照表の整合性を確認してください。変更後の表に格納し直す方法については,変更時の注意事項の項番3を,確認方法については,マニュアル「HiRDB Version 9 システム運用ガイド」の「表の分割格納条件を変更するときの運用」を参照してください。
-
インナレプリカ機能を使用している場合,参照表,及び被参照表を格納するRDエリアの世代数をすべて同じにしていなかったとき,参照表,及び被参照表の整合性を保てなくなります。参照表,及び被参照表の整合性が保てなくなった場合,RDエリアのバックアップからデータを回復するなどの運用が必要です。運用方法については,マニュアル「HiRDB Version 9 システム運用ガイド」の「表の分割格納条件を変更するときの運用」を参照してください。
-
システム定義のpd_check_pendingオペランドにUSEを指定した場合,分割格納条件を変更する表を被参照表とする参照表がほかのユーザによって使用されていたとき,そのトランザクションが終了してから参照表を検査保留状態に設定します。
-
(k) 横分割表変更指定
::={〔PARTITIONED〕変更前境界値リスト INTO 変更後境界値分割指定 |PARTITIONED CONDITION 変更前RDエリア情報リスト INTO 変更後格納条件分割指定}
境界値指定又は格納条件指定の横分割表の,分割格納条件を変更する場合に指定します。
- PARTITIONED
-
境界値指定の横分割表の分割格納条件を変更する場合に指定します。横分割表変更指定の規則を次に示します。
- <分割時>
-
-
一つのSQLで,一つの境界値,及び境界値に対応したRDエリアを分割できます。
-
変更前境界値リストに指定した境界値を,変更後境界値分割指定に従って分割します。
-
- <統合時>
-
-
一つのSQLで,連続した複数の境界値,及び境界値に対応したRDエリアを統合できます。
-
変更前境界値リストに指定した境界値を,変更前境界値リストに指定した最大の境界値,及び変更後境界値分割指定に指定したRDエリアに統合します。
-
- PARTITIONED CONDITION
-
格納条件指定の横分割表の分割格納条件を変更する場合に指定します。横分割表変更指定の規則を次に示します。
- <分割時>
-
-
一つのSQLで,格納条件に対応した一つのRDエリアを分割できます。
-
変更前RDエリア情報リストに指定したRDエリアを,変更後格納条件分割指定に従って分割します。
-
- <統合時>
-
-
一つのSQLで,格納条件に対応した複数のRDエリアを統合できます。
-
変更前RDエリア情報リストに指定したRDエリアを,変更後格納条件分割指定に指定したRDエリアに統合します。
-
- マトリクス分割表変更指定::=
-
MULTIDIM(変更対象列名 変更前境界値リスト)
AT 変更後境界値リスト
INTO マトリクス分割表格納用RDエリア変更指定
マトリクス分割表の分割格納条件を変更する場合に指定します。
マトリクス分割表格納用RDエリア変更指定についての規則を次に示します。
- <分割時>
-
-
一つのSQLで,任意の一つの次元の境界値,及び境界値に対応したRDエリア群を分割できます。
-
変更対象列名で特定した次元の,変更前境界値リストで特定したRDエリア群を,変更後境界値リストに指定した境界値,及びマトリクス分割表格納用RDエリア変更指定に指定したRDエリア群に分割します。
-
- <統合時>
-
-
一つのSQLで,任意の一つの次元の連続した複数の境界値,及び複数のRDエリア群を統合できます。
-
変更対象列名で特定した次元の,変更前境界値リストで特定したRDエリア群を,変更後境界値リストに指定した境界値で,マトリクス分割表格納用RDエリア変更指定に指定したRDエリア群に統合します。
-
- MULTIDIM(変更対象列名 変更前境界値リスト)
-
マトリクス分割表の変更対象の分割列名,及び境界値を指定します。
- 変更対象列名
-
変更対象の次元の分割列名を指定します。
- 変更前境界値リスト::=(({境界値|MAX})〔,({境界値|MAX})〕…)
-
変更対象の境界値を指定します。
AT 変更後境界値リスト
- INTO マトリクス分割表格納用RDエリア変更指定
-
変更後の境界値及び表を格納用するRDエリアを指定します。
(l) 変更前境界値リスト::=境界値リスト,変更後境界値リスト::=境界値リスト
- 変更前境界値リスト::=境界値リスト
-
境界値リスト::=(({境界値|MAX})〔,({境界値|MAX})〕…)
変更前の境界値を指定します。指定した境界値から変更対象のRDエリアを特定します。
変更前境界値リストについての規則を次に示します。
- <分割時>
-
-
境界値又はMAXを1個指定できます。
-
表に定義していない境界値は指定できません。
-
表に定義した最大の境界値より大きい分割キー値に対しては,境界値の代わりにMAXを指定してください。
-
- <統合時>
-
-
境界値及びMAXを2〜16個指定できます。
-
MAXは1個指定できます。
-
表に定義していない境界値は指定できません。
-
表に定義した最大の境界値より大きい分割キー値に対しては,境界値の代わりにMAXを指定してください。
-
連続した境界値を,昇順に指定してください。
-
同じ境界値を複数指定できません。
-
- 境界値
-
変更する前の表に定義してある境界値を指定します。変更対象の境界値及びRDエリアを特定するために指定します。
- MAX
-
変更する前の表に定義してある最大の境界値を超えた範囲を変更対象にする場合に指定します。
- 変更後境界値リスト::=境界値リスト
-
境界値リスト::=(({境界値|MAX})〔,({境界値|MAX})〕…)
変更後の境界値を指定します。
変更後境界値リストの規則を次に示します。
- <分割時>
-
-
境界値及びMAXを1〜16個指定できます。
-
MAXは1個指定できます。
-
境界値には定数を指定してください。
-
連続した境界値を昇順に指定してください。
-
最後に指定する境界値は,変更前境界値リストで指定した値を指定してください。
-
変更前境界値リストで指定した境界値の範囲を超える境界値は指定できません。
-
境界値に指定できる値については,「CREATE TABLE(表定義)」を参照してください。
-
- <統合時>
-
-
境界値又はMAXを1個指定できます。
-
指定する境界値は,変更前境界値リストで最後に指定した値を指定する必要があります。
-
変更した結果の表で,一つの次元の分割数が一つになる指定はできません。
-
- 境界値
-
変更後の境界値を指定します。
- MAX
-
変更した結果の表の,最後の境界値の範囲を指定します。
(m) 変更後境界値分割指定
::={表格納用RDエリア名 |(表格納用RDエリア名) |(〔(表格納用RDエリア名)境界値,〕…(表格納用RDエリア名))}
変更前境界値リスト((j))で指定した境界値及び変更対象のRDエリアを,指定した境界値及びRDエリアに変更します。指定した境界値を分割キーに持つデータは,直前に指定したRDエリアに格納します。
- <分割時>
-
-
表格納用RDエリア名は2〜16個指定できます。
-
最後のRDエリアに対しては,境界値を指定できません。
-
境界値は1〜15個指定できます。
-
境界値には定数を指定してください。
-
境界値は昇順に指定してください。
-
変更前境界値リストで指定した,変更対象の境界値を分割した最後の範囲を格納するRDエリアの場合,RDエリアの直後に境界値を指定しない形式でRDエリア名を記述してください。
-
変更前境界値リストで指定した変更対象の範囲を超える境界値は指定できません。
-
表格納用RDエリア名には,同一のRDエリアを複数指定できます。ただし,同一のRDエリアを連続して指定できません。
-
境界値に指定できる値については,「CREATE TABLE(表定義)」を参照してください。
-
- <統合時>
-
-
表格納用RDエリア名は1個指定できます。
-
境界値は指定できません。
-
変更した結果の表で,格納するRDエリアが一つになる指定はできません。
-
- <注意事項>
-
分割した結果,隣り合った境界値を格納するRDエリアが,同じRDエリアだった場合,システムが境界値を最大の境界値にまとめます。
- 表格納用RDエリア名
-
変更後にデータを格納するRDエリアを指定します。ただし,一時表用RDエリアは指定できません。
- 境界値
-
分割時に変更後の境界値を指定します。統合時は指定できません。
(n) 変更前RDエリア情報リスト
::={表格納用RDエリア名 |(表格納用RDエリア名) |((表格納用RDエリア名) 〔,(表格納用RDエリア名)〕…〔,OTHERS〕) |OTHERS}
変更前の表格納用RDエリア名を指定します。指定した表格納用RDエリア名から変更対象の格納条件を特定します。
変更前RDエリア情報リストについての規則を次に示します。
- <分割時>
-
-
表格納用RDエリア名又はOTHERSを1個指定できます。
-
表に指定していない表格納用RDエリア名は指定できません。
-
格納条件に指定している定数が一つだけの表格納用RDエリア名は指定できません。ただし,格納条件を指定していない表格納用RDエリア名は指定できます。
-
格納条件を指定している表格納用RDエリア名を指定した場合,RDエリア内の格納条件をほかのRDエリアに分割し,新たに格納条件を追加することはできません。
-
格納条件を指定していない表格納用RDエリア名を指定した場合,新たに格納条件を追加できます。
-
表定義を変更する表に格納条件を指定していない表格納用RDエリアが存在しない場合,格納条件を追加するときは,表格納用RDエリア名の代わりにOTHERSを指定してください。
-
格納条件を指定していない表格納用RDエリアが存在する場合,OTHERSは指定できません。
-
- <統合時>
-
-
表格納用RDエリア名又はOTHERSを2〜16個指定できます。
-
OTHERSは1個指定できます。
-
表に指定していない表格納用RDエリア名は指定できません。
-
同じ表格納用RDエリア名は複数指定できません。
-
格納条件を指定していない表格納用RDエリア名を含んだ指定をした場合,格納条件を削除できます。
-
格納条件を指定していない表格納用RDエリアが存在しない場合,格納条件を削除するときは,表格納用RDエリア名の代わりにOTHERSを指定してください。
-
格納条件を指定していない表格納用RDエリアが存在する場合,OTHERSは指定できません。
-
- 表格納用RDエリア名
-
変更する前の表に指定してある表格納用RDエリア名を指定します。変更対象の格納条件を特定するために指定します。
- OTHERS
-
変更する表に格納条件を指定していない表格納用RDエリアが存在しない場合に,格納条件を追加又は削除するときに指定します。
(o) 変更後格納条件分割指定
::={表格納用RDエリア名 |(表格納用RDエリア名) |((表格納用RDエリア名)格納条件 {,(表格納用RDエリア名)格納条件 〔〔,(表格納用RDエリア名)格納条件〕…〕 〔{,(表格納用RDエリア名) |,OTHERS}〕) |,(表格納用RDエリア名)) |,OTHERS)} |OTHERS} 格納条件::=列名={定数|(定数〔,定数…〕)}
変更前RDエリア情報リストで指定した変更対象のRDエリアを,指定した格納条件及びRDエリアに変更します。
変更後格納条件分割指定についての規則を次に示します。
- <分割時>
-
-
表格納用RDエリア名又はOTHERSを2〜16個指定できます。
-
OTHERSは1個指定できます。
-
格納条件を指定しない表格納用RDエリア名の指定は1個指定できます。
- <変更前RDエリアリストに格納条件を指定しているRDエリア名を指定した場合>
-
-
格納条件を指定しないRDエリア名及びOTHERSを指定できません。
-
- <変更前RDエリアリストに格納条件を指定していないRDエリア名を指定した場合>
-
-
格納条件を指定しないRDエリア名又はOTHERSを含めて指定してください。
-
格納条件を指定していないRDエリアを削除する場合,OTHERSを指定します。
-
- <変更前RDエリアリストにOTHERSを指定した場合>
-
-
格納条件を指定しないRDエリア名又はOTHERSを含めて指定してください。
-
格納条件を追加する場合,OTHERSを指定してください。
-
-
- <統合時>
-
-
表格納用RDエリア名又はOTHERSは1個指定できます。
-
格納条件は指定できません。
-
格納条件を削除する場合,OTHERSを指定してください。
-
統合を行った結果の表で格納条件がすべてなくなる指定はできません。
- <変更前RDエリアリストに格納条件を指定しているRDエリア名だけを指定した場合>
-
-
格納条件を指定しないRDエリア名を指定できません。
-
- <変更前RDエリアリストに格納条件を指定していないRDエリア名を含んで指定した場合>
-
-
格納条件を指定していないRDエリアを削除する場合,OTHERSを指定してください。
-
- <変更前RDエリアリストにOTHERSを含んで指定した場合>
-
-
格納条件を指定しないRDエリアを追加できます。
-
-
- 表格納用RDエリア名
-
変更後にデータを格納するRDエリア名を指定します。ただし,一時表用RDエリアは指定できません。
- 格納条件
-
分割時に変更後の格納条件を指定します。統合時は指定できません。
列名には分割キーに指定している列名を指定してください。
格納条件には定数を指定してください。格納条件に指定できる値については,「CREATE TABLE(表定義)」を参照してください。
- <変更前RDエリア情報リストに格納条件を指定している表格納用RDエリア名を指定した場合>
-
-
変更対象の表格納用RDエリアに指定している格納条件はすべて指定してください。
-
存在しない格納条件は指定できません。
-
格納条件を重複して指定できません。
-
- <変更前RDエリア情報リストに格納条件を指定していない表格納用RDエリア名又はOTHERSを指定した場合>
-
-
表定義に存在しない格納条件を指定してください。
-
表定義に存在する格納条件は指定できません。
-
- OTHERS
-
表定義変更した結果,表に定義した格納条件を満たさないデータを格納するRDエリアが必要ない場合に指定します。
(p) インデクス格納用RDエリア変更指定::= FOR INDEX インデクス名 INTO 変更後インデクス格納用RDエリア名リスト
分割格納条件を変更する表にインデクスを定義している場合に指定します。
インデクス格納用RDエリア変更指定の規則を次に示します。
-
インデクス格納用RDエリアだけの変更はできません。
-
インデクス格納用RDエリアは横分割表変更指定又はマトリクス分割表変更指定で指定した境界値と同じ範囲又は格納条件のRDエリアを変更できます。
-
表に定義したインデクスをすべて指定する必要があります。
- インデクス名
-
分割格納条件を変更する表にインデクスを定義している場合,定義しているインデクスの識別子を指定します。
- 変更後インデクス格納用RDエリア名リスト::=
-
{インデクス格納用RDエリア名
|(インデクス格納用RDエリア名)
|((インデクス格納用RDエリア名)
〔,(インデクス格納用RDエリア名)〕…〔,OTHERS〕)
|2次元格納用RDエリア指定}
|OTHERS}
2次元格納用RDエリア指定::=(マトリクス分割用RDエリアリスト
〔,マトリクス分割用RDエリアリスト〕…)
(インデクス格納用RDエリア名
〔,インデクス格納用RDエリア名〕…)
インデクス,主キー,又はクラスタキーを格納するRDエリア名を指定します。
変更後インデクス格納用RDエリア名リストの規則を次に示します。
-
変更後インデクス格納用RDエリア名リストに指定するRDエリアの数は,次の箇所に指定したRDエリアの数と同じにする必要があります。
・変更後境界値分割指定(境界値指定の横分割表の場合)
・変更後格納条件分割指定(格納条件指定の横分割表の場合)
・マトリクス分割表格納用RDエリア変更指定(マトリクス分割表の場合)
-
変更後境界値分割指定で重複したRDエリアを指定した場合,変更後インデクス格納用RDエリア名リストに指定するRDエリアも,同じように重複して指定する必要があります。
-
表,インデクス,主キー,及びクラスタキーは,表を基準に,分割数やRDエリアの重複の対応関係を維持する必要があります(例えば,表の変更前後で,システムが境界値を一つにまとめる場合,及び指定するRDエリアが変更対象の境界値以外のデータを格納している場合,変更前後で同じRDエリアを使用し,同じRDエリアを指定する位置などをインデクス,主キー,及びクラスタキーも同じように指定する必要があります)。
-
変更後格納条件指定でOTHERSを指定した場合,変更後格納条件指定に対応する変更後インデクス格納用RDエリア名リストにOTHERSを指定する必要があります。
-
(q) 主キー格納用RDエリア変更指定::= FOR PRIMARY KEY INTO 変更後インデクス格納用RDエリア名リスト
分割格納条件を変更する表に主キーを定義している場合に指定します。
主キー格納用RDエリア変更指定の規則を次に示します。
-
主キー格納用RDエリア変更指定は,1個だけ指定できます。
-
主キーを格納するRDエリアだけの変更はできません。
(r) クラスタキー格納用RDエリア変更指定::= FOR 〔PRIMARY〕 CLUSTER KEY INTO 変更後インデクス格納用RDエリア名リスト
分割格納条件を変更する表にクラスタキーを定義している場合に指定します。
クラスタキー格納用RDエリア変更指定の規則を次に示します。
-
クラスタキーを格納するRDエリアだけの変更はできません。
-
クラスタキー格納用RDエリア変更指定は,1個だけ指定できます。
(s) LOB列格納用RDエリア変更指定
::=FOR COLUMN 列名 {LOB列格納用RDエリア変更リスト |INTO マトリクス分割LOB列格納用RDエリア変更指定} 〔,列名{LOB列格納用RDエリア名指定 |INTO マトリクス分割LOB列格納用RDエリア変更指定}〕…
分割格納条件を変更する表にLOB列を定義していた場合に指定します。
LOB列格納用RDエリア変更指定の規則を次に示します。
-
LOB列格納用RDエリアだけの変更はできません。
-
列名にはLOB列を指定してください。
-
表に定義しているLOB列はすべて指定する必要があります。
(t) LOB列格納用RDエリア変更リスト
::=INTO {LOB列格納用RDエリア名 |(LOB列格納用RDエリア名) |((LOB列格納用RDエリア名) 〔,(LOB列格納用RDエリア名)〕…〔,OTHERS〕) |OTHERS}
横分割表のLOB列のデータを格納するユーザLOB用RDエリアの名称を指定します。
LOB列格納用RDエリアについての規則を次に示します。
-
データ型にBLOBを指定した列は,LOB列格納用RDエリア名を必ず指定してください。BLOB以外のデータ型を指定した列には指定できません。
-
変更後境界値分割指定で重複したRDエリアを指定した場合,LOB列格納用RDエリア名も同じように重複したRDエリアを指定する必要があります。
-
表,及びLOB列は,表を基準に分割数やRDエリアの重複の対応関係を維持する必要があります(例えば,表の変更前後で,システムが境界値を一つにまとめる場合,及び指定するRDエリアが変更対象の境界値以外のデータを格納している場合,変更前後で同じRDエリアを使用し,同じRDエリアを指定する位置などをLOB列も同じように指定する必要があります)。
-
変更後格納条件指定でOTHERSを指定した場合,変更後格納条件指定に対応するLOB列格納用RDエリア変更リストにOTHERSを指定する必要があります。
(u) マトリクス分割表格納用RDエリア変更指定::=2次元格納用RDエリア指定
マトリクス分割LOB列格納用RDエリア変更指定::=2次元格納用RDエリア指定
- マトリクス分割表格納用RDエリア変更指定::=2次元格納用RDエリア指定
-
2次元格納用RDエリア指定::=(マトリクス分割用RDエリアリスト〔,マトリクス分割用RDエリアリスト〕…)
マトリクス分割用RDエリアリスト::=(RDエリア名〔,RDエリア名〕…)
マトリクス分割された表の,変更後のRDエリアを指定します。
マトリクス分割表格納用RDエリア変更指定の規則を次に示します。
- <分割時(第1次元分割列で分割する場合)>
-
-
マトリクス分割用RDエリアリストの数は,変更後境界値リストで指定した境界値の数と同じです。
-
一つのマトリクス分割用RDエリアリストに指定するRDエリアの数は,第2次元の分割数と同じです。
-
SQL例については,「使用例」の10.の<例1>を参照してください。
-
- <分割時(第2次元分割列で分割する場合)>
-
-
マトリクス分割用RDエリアリストの数は,第1次元の分割数と同じです。
-
一つのマトリクス分割用RDエリアリストに指定するRDエリアの数は,変更後境界値リストで指定した境界値の数と同じです。
-
SQL例については,「使用例」の10.の<例3>を参照してください。
-
- <統合時(第1次元分割列で統合する場合)>
-
-
マトリクス分割用RDエリアリストの数は,1個です。
-
一つのマトリクス分割用RDエリアリストに指定するRDエリアの数は,第2次元の分割数と同じです。
-
SQL例については,「使用例」の10.の<例2>を参照してください。
-
- <統合時(第2次元分割列で統合する場合)>
-
-
マトリクス分割用RDエリアリストの数は,第1次元の分割数と同じです。
-
一つのマトリクス分割用RDエリアリストに指定するRDエリアの数は,1個です。
-
SQL例については,「使用例」の10.の<例4>を参照してください。
-
- <注意事項>
-
-
マトリクス分割表格納用RDエリア変更指定を指定する場合の注意事項を次に示します。
-
変更した結果の表の隣り合った境界値を格納するRDエリアが,同じRDエリアとなった場合でも,システムはRDエリアを一つにまとめません(境界値指定の横分割表の変更ではシステムがRDエリアを一つにまとめます)。
-
- 2次元格納用RDエリア指定
-
マトリクス分割表の格納用RDエリアを指定します。
- マトリクス分割用RDエリアリスト
-
マトリクス分割表の一つの次元用のRDエリアを指定します。
- RDエリア名
-
変更後のデータを格納するRDエリアの名称を指定します。ただし,一時表用RDエリアは指定できません。
- マトリクス分割LOB列格納用RDエリア変更指定::=2次元格納用RDエリア指定
-
2次元格納用RDエリア指定::=(マトリクス分割用RDエリアリスト〔,マトリクス分割用RDエリアリスト〕…)
マトリクス分割用RDエリアリスト::=(RDエリア名〔,RDエリア名〕…)
マトリクス分割した表にLOB列を定義している場合に,格納するRDエリア名を指定します。
マトリクス分割LOB列格納用RDエリア変更指定についての規則を次に示します。
-
データ型にBLOBを指定した列は,LOB列格納用RDエリア名を必ず指定してください。BLOB以外のデータ型を指定した列には指定できません。
-
マトリクス分割表変更指定で重複したRDエリアを指定した場合,LOB列格納用RDエリア名も,同じように重複して指定する必要があります。
-
表,及びLOB列は,表を基準に分割数やRDエリアの重複の対応関係を維持する必要があります(例えば,表の変更前後で,システムが境界値を一つにまとめる場合,及び指定するRDエリアが変更対象の境界値以外のデータを格納している場合,変更前後で同じRDエリアを使用し,同じRDエリアを指定する位置などをLOB列も同じように指定する必要があります)。
-
- WITHOUT PURGE
-
変更後の表のデータが,分割格納条件の境界値の範囲又は格納条件指定に一致しない場合,ALTER TABLE実行時にHiRDBがそのデータを削除します。しかし,変更前後で同じRDエリアを指定している場合に(変更対象のRDエリアを,変更後境界値分割指定,変更後格納条件分割指定,又はマトリクス分割表変更指定に指定している場合),同じRDエリアの表のデータをALTER TABLE実行時にHiRDBに削除させないようにするときに指定します。この指定は,分割格納条件の変更前の表のデータを変更後も使用し,表のデータのアンロード,及びデータロードの運用を削減したい場合に有効です。
ただし,WITHOUT PURGEを指定しても,変更後に使用されないRDエリアの表のデータは,変更対象の表と関連を持たなくなり,整合性を保てなくなるため,システムが削除します。
WITHOUT PURGEを指定できるのは,次に示す条件を満たす場合(マトリクス分割表の場合は,RDエリアを分割・統合する各次元で次の条件を満たす場合)です。これ以外の場合にWITHOUT PURGEを指定すると,エラーとなります。詳細については,マニュアル「HiRDB Version 9 システム運用ガイド」の「表の分割格納条件の変更」を参照してください。
- 《境界値指定の横分割表の場合》
-
変更対象のRDエリアを,変更後のRDエリアに含んでいること
- 《格納条件指定の横分割表の場合》
-
変更対象のRDエリアを,変更後のRDエリアに含んでいること
- 《マトリクス分割表の場合》
-
-
変更対象のRDエリア群を,変更後のRDエリア群に含んでいること
-
1.のRDエリア群の指定順序が同じ場合
-
- 《注意事項》
-
WITHOUT PURGE指定時の注意事項を次に示します。
-
分割格納条件の分割時は,変更対象のRDエリアのデータが,分割後に割り当てる境界値の範囲のデータ又は分割後に割り当てる格納条件の値とすべて一致していることを確認する必要があります。詳細については,マニュアル「HiRDB Version 9 システム運用ガイド」の「表の分割格納条件の変更」を参照してください。
-
分割格納条件の統合時は,削除するRDエリアのデータを登録し直す必要がある場合,分割格納条件を変更する前にアンロードし,分割格納条件を変更した結果の表にロードする必要があります。ただし,WITHOUT PURGEによって削除しないデータを,分割格納条件を変更した後にロードした場合,二重にデータを登録することになるため,アンロード,及びデータロードを行うRDエリアに対する注意が必要です。詳細については,マニュアル「HiRDB Version 9 システム運用ガイド」の「表の分割格納条件の変更」を参照してください。
-
格納条件指定の横分割表の場合,分割格納条件の分割時に変更前RDエリア情報リストでOTHERSを指定したとき,WITHOUT PURGEは指定できません。
-
- WITH PROGRAM
-
変更対象の表を使用する手続き,及びトリガの有効なSQLオブジェクトを無効にする場合に指定します。
(5) 共通規則
-
CHANGE句で実表の列を変更すると,ビュー表の列も変更されます。
-
格納条件を指定した列に対してALTER TABLEは指定できません。
-
WITH PROGRAMを省略した場合,表定義する表,又はその表を参照して定義したビュー表を使用する手続き,及びトリガの有効なSQLオブジェクトがあると,表定義を変更できません。
-
繰返し列でない列を繰返し列に変更できません。また,繰返し列を繰返し列でない列に変更できません。
-
境界値指定の横分割表,ハッシュ分割表,又はマトリクス分割表に,BLOB列又はBLOB属性を含む抽象データ型の列を追加する場合,表定義で指定した表格納用RDエリア名に対応するように,それぞれLOB列格納用RDエリア名又はLOB属性格納用RDエリア名を指定しなければなりません。そのため,表定義で指定している表格納用RDエリア名に重複したRDエリア名があるときは,LOB列格納用RDエリア名又はLOB属性格納用RDエリア名を重複して指定することになります。
-
ADD COLUMN,ADD RDAREA,又はCHANGE RDAREAで指定する表格納用RDエリア,LOB列格納用RDエリア,LOB属性格納用RDエリア,及びインデクス格納用RDエリアは,事前にデータベース初期設定ユティリティで作成しておくか,データベース構成変更ユティリティで追加しておく必要があります。
-
LOB列格納用RDエリア,LOB属性格納用RDエリア,及びユーザLOB用RDエリアを指定したインデクス格納用RDエリアは重複して指定できません。それぞれ,異なるユーザLOB用RDエリアを指定してください。
-
ほかのBLOB列,BLOB属性,又はインデクスに割り当てられているユーザLOB用RDエリアは指定できません。
-
実行中のSQLオブジェクトが無効になる場合,Java手続き中からALTER TABLEは実行できません。
-
ADD COLUMN,ADD RDAREA,又はCHANGE RDAREAで指定する,表格納用RDエリア,LOB列格納用RDエリア,LOB属性格納用RDエリア,及びインデクス格納用RDエリアに,インナレプリカ機能を適用しているRDエリアと,適用していないRDエリアとを混在して指定できません。インナレプリカ機能を適用しているRDエリアを指定する場合,オリジナルRDエリアの名称を指定します。
-
インナレプリカ機能を使用している場合のALTER TABLEの実行条件については,マニュアル「インナレプリカ機能 HiRDB Staticizer Option Version 9」を参照してください。
-
監査証跡表の場合,ALTER TABLEは実行できません。
-
被参照表,参照表に対して,DROP句を用いた表定義変更はできません。
-
被参照表,参照表に対して,RENAME句を用いた表名変更はできません。
-
被参照表の主キー構成列,外部キー構成列に対して定義変更を行う場合,次に示す制限があります。
-
CHANGE句を用いたデータ型,データ長の変更はできません。
-
RENAME句を用いた列名変更はできません。
-
-
検査制約を定義した表に対して,DROP句を用いた表定義変更はできません。
-
検査制約を定義した表に対して,RENAME句を用いた表名変更はできません。
-
検査制約を定義した列に対して定義変更を行う場合,次に示す制限があります。
-
CHANGE句を用いたデータ型,データ長の変更はできません。
-
CHANGE句を用いたSPLITの変更はできません。
-
CHANGE句を用いた既定値の設定,解除はできません。
-
CHANGE句を用いたWITH DEFAULTの設定はできません。
-
RENAME句を用いた列名変更はできません。
-
-
一時表の場合,ALTER TABLEは実行できません。
(6) 留意事項
-
表定義時にFIXを指定した実表にデータが格納されている場合,ALTER TABLEでは次に示す項目が指定できます。
-
表格納用RDエリアの追加
-
ハッシュ関数の変更
-
CHARからMCHARへの列属性の変更
-
表名,及び列名の変更
-
最小排他資源単位の変更
-
分割格納条件の変更
-
更新可能列属性の付与(UPDATE指定だけ)
-
改竄防止表への変更
-
予備列からの列の切り出し
-
-
WITH DEFAULTを指定した場合,データが格納されている表に列を追加できません。
-
行単位インタフェースを使用して,日付データをCHAR(10)で受け渡しする場合,日付データ型を使用しないで,CHAR(10)で列を指定してください。
-
行単位インタフェースを使用して,時刻データをCHAR(8)で受け渡しする場合,時刻データ型を使用しないでCHAR(8)で列を指定してください。
-
行単位インタフェースを使用して,時刻印データを19,22,24,又は26バイトのCHARで受け渡しをする場合,時刻印データ型を使用しないで19,22,24,又は26バイトのCHARで列を指定してください。
-
ALTER TABLEは,OLTP下のX/Openに従ったUAPから指定できません。
-
表又は列の名称を変更した場合,ユティリティや運用コマンドでは変更後の名称を指定してください。
-
表又は列の名称を変更した場合,名称変更前に作成した次のファイルは使用できません。
-
データベース再編成ユティリティのアンロードデータファイル
-
データベース作成ユティリティ及びデータベース再編成ユティリティのインデクス情報ファイル
-
ディクショナリ搬出入ユティリティの搬出ファイル
-
-
ハッシュ関数を変更,又は表格納用RDエリアを追加する場合,データを再ロードする必要はありません。ただし,追加された表格納用RDエリアには,INSERT文実行時に初めてデータが格納されるため,表格納用RDエリア追加時にはデータが格納されません。
-
WITH PROGRAMを指定して手続き,及びトリガの有効なSQLオブジェクトを無効にした場合,ディクショナリ表SQL_ROUTINE_RESOURCES中の無効となった手続き,及びトリガの行は削除されます。
-
WITH PROGRAMを指定して無効にした手続き,及びトリガのSQLオブジェクトを実行するためには,ALTER ROUTINE,ALTER PROCEDURE,又はALTER TRIGGERを実行して,手続き,及びトリガのSQLオブジェクトを再作成しておく必要があります。
-
ALTERのADD指定で追加する列については,列データ抑制指定はできません。
-
WITHOUT ROLLBACKオプションを指定した表には,CHANGE LOCK PAGEを指定できません。
-
トリガを定義した表には,列を追加できます。トリガ契機列を省略したトリガの場合には,追加した列もトリガの実行対象になります。トリガ契機列を指定している場合には,トリガの実行対象にはなりません。なお,列を追加してもトリガのSQLオブジェクトは無効になりません。
-
トリガ契機列は,列定義変更,又は列削除ができます。ただし,トリガ契機列をすべて削除した場合は,そのトリガは削除されます。なお,一度削除した列と同名の列を追加しても,その列はトリガの実行対象にはなりません。また,トリガ契機列の列定義変更又は列削除をしても,トリガのSQLオブジェクトは無効になりません。
-
トリガ契機列の列削除をした後,ほかの操作でそのトリガのSQLオブジェクトを無効にした場合,無効にしたSQLオブジェクトを実行するためには,次のどちらかの操作をする必要があります。
-
列定義を元に戻し,ALTER TRIGGER又はALTER ROUTINEを実行してトリガのSQLオブジェクトを再作成します。
-
無効にしたトリガをDROP TRIGGERで削除してから,列削除した列を使用しないようにCREATE TRIGGERでトリガを再定義します。ただし,次のすべての条件を満たすトリガがある場合は,それらもすべてDROP TRIGGERで削除し,定義していた順にCREATE TRIGGERで再定義しないと,トリガ動作の実行順序が変わります。
(条件)
・無効にしたトリガよりも定義したのが後である。
・無効にしたトリガと定義した表が同じである。
・無効にしたトリガとトリガ契機(INSERT,UPDATE,又はDELETE)が同じである(ただし,UPDATEの場合は,トリガ契機列の指定の有無,及び内容に関係なく同じとみなされます)。
・無効にしたトリガとトリガ動作時期(BEFORE又はAFTER)が同じである。
・無効にしたトリガとトリガの動作する単位(行単位又は文単位)が同じである。
-
-
WITH PROGRAMを指定して,トリガSQL文中で参照している表に対してNOT NULL列の追加をすると,そのトリガのSQLオブジェクトは無効になります。無効にしたトリガのSQLオブジェクトを実行するためには,ALTER TRIGGER又はALTER ROUTINEを実行して,トリガのSQLオブジェクトを再作成しておく必要があります。
-
WITH PROGRAMを指定して次の操作をすると,そのトリガのSQLオブジェクトは無効になります。
-
トリガSQL文中で参照している表に対して,列定義変更,列削除,列名変更,又は表名変更をした場合
-
トリガSQL文中で新旧値相関名を使用して参照している列を,列定義変更,又は列削除した場合
無効にしたトリガのSQLオブジェクトを実行するためには,次のどちらかの操作をする必要があります。
-
列定義,列名,又は表名を元に戻し,ALTER TRIGGER又はALTER ROUTINEを実行してトリガのSQLオブジェクトを再作成します。
-
無効にしたトリガをDROP TRIGGERで削除してから,列定義変更,若しくは列削除した列,又は名称変更前の列名,表名を使用しないようにCREATE TRIGGERでトリガを再定義します。ただし,次のすべての条件を満たすトリガがある場合は,それらもすべてDROP TRIGGERで削除し,定義していた順にCREATE TRIGGERで再定義しないと,トリガ動作の実行順序が変わります。
(条件)
・無効にしたトリガよりも定義したのが後である。
・無効にしたトリガと定義した表が同じである。
・無効にしたトリガとトリガ契機(INSERT,UPDATE,又はDELETE)が同じである(ただし,UPDATEの場合は,トリガ契機列の指定の有無,及び内容に関係なく同じとみなされます)。
・無効にしたトリガとトリガ動作時期(BEFORE又はAFTER)が同じである。
・無効にしたトリガとトリガの動作する単位(行単位又は文単位)が同じである。
-
-
WITH PROGRAMを指定して,トリガ動作条件中で新旧値相関名を使用して参照している列の列定義変更,又は列削除をした場合,そのトリガのSQLオブジェクトは無効になります。また,トリガを引き起こすSQLを前処理するときにもエラーになります。無効にしたトリガのSQLオブジェクトを実行したり,トリガを引き起こすSQLを前処理したりするためには,次のどちらかの操作をする必要があります。
-
列定義を元に戻し,ALTER TRIGGER又はALTER ROUTINEを実行してトリガのSQLオブジェクトを再作成します。
-
無効にしたトリガをDROP TRIGGERで削除してから,列定義変更,又は列削除した列を使用しないようにCREATE TRIGGERでトリガを再定義します。ただし,次のすべての条件を満たすトリガがある場合は,それらもすべてDROP TRIGGERで削除し,定義していた順にCREATE TRIGGERで再定義しないと,トリガ動作の実行順序が変わります。
(条件)
・無効にしたトリガよりも定義したのが後である。
・無効にしたトリガと定義した表が同じである。
・無効にしたトリガとトリガ契機(INSERT,UPDATE,又はDELETE)が同じである(ただし,UPDATEの場合は,トリガ契機列の指定の有無,及び内容に関係なく同じとみなされます)。
・無効にしたトリガとトリガ動作時期(BEFORE又はAFTER)が同じである。
・無効にしたトリガとトリガの動作する単位(行単位又は文単位)が同じである。
-
-
トリガを定義した表の表名,及び次の列の列名は変更できません。
-
トリガ契機列
-
トリガ動作条件中で新旧値相関名を使用して参照している列
-
トリガSQL文中で新旧値相関名を使用して参照している列
-
(7) 使用例
-
在庫表(ZAIKO)に,倉庫住所(SADRS)列を追加します。
ALTER TABLE ZAIKO ADD SADRS VARCHAR(40)
-
在庫表(ZAIKO)に,既定値のある非ナル値制約の列の倉庫住所(SADRS)を追加します。
ALTER TABLE ZAIKO ADD SADRS VARCHAR(40) NOT NULL WITH DEFAULT
-
在庫表(ZAIKO)の,可変長データ型である倉庫住所(SADRS)列の最大長を60に変更します。
ALTER TABLE ZAIKO CHANGE SADRS VARCHAR(60)
-
在庫表(ZAIKO)の商品コード(SCODE)列に設定されているクラスタキーの属性を,一意性制約のないものから一意性制約のあるものへ変更します。
ALTER TABLE ZAIKO CHANGE CLUSTER KEY UNIQUE
-
在庫表(ZAIKO)の倉庫住所(SADRS)列を削除します。
ALTER TABLE ZAIKO DROP SADRS
-
在庫表(ZAIKO)の倉庫住所(SADRS)の列に対する手続きの有効なオブジェクトを無効にして,倉庫住所(SADRS)の列を削除します。
ALTER TABLE ZAIKO DROP SADRS WITH PROGRAM
-
在庫表(ZAIKO)に倉庫地図(SMAP)列を追加します。
ALTER TABLE ZAIKO ADD SMAP BLOB(1M) IN (RMAPLOB1)
-
ハッシュ分割の新在庫表(NZAIKO)を格納するRDエリアを追加します。このとき,インデクス(ISCODE)とBLOB型の倉庫地図(SMAP)列を格納するRDエリアも追加します。
ALTER TABLE NZAIKO ADD RDAREA RDA3 FOR COLUMN SMAP IN (RMAPLOB3) FOR INDEX ISCODE IN (RDA4)
-
境界値指定の横分割表の境界値の変更例を次に示します。
<例1>境界値の分割,統合
変更前
CREATE FIX TABLE "T1"("C1" INT,"C2" INT) PARTITIONED BY "C1" IN(("TA1")100,("TA2")200,("TA3")400,("TA4")500,("TA5")600,("TA6")) CREATE INDEX "I1" ON "T1"("C1") IN(("IA1"),("IA2"),("IA3"),("IA4"),("IA5"),("IA6"))
1.統合《状態1 →状態2》
ALTER TABLE "T1" CHANGE RDAREA ((100),(200)) INTO "TA11" FOR INDEX "I1" INTO "IA11"
2.分割《状態2 →状態3》
ALTER TABLE "T1" CHANGE RDAREA ((400)) INTO (("TA12")300,("TA13")) FOR INDEX "I1" INTO (("IA12"),("IA13"))
3.統合《状態3 →状態4》
ALTER TABLE "T1" CHANGE RDAREA ((600),(MAX)) INTO "TA11" FOR INDEX "I1" INTO "IA11"
<例2>システムが隣り合った境界値を統合する場合(分割時の特殊例)
変更前
CREATE FIX TABLE "T1"("C1" INT,"C2" INT) PARTITIONED BY "C1" IN(("TA1")100,("TA2")200,("TA3")400,("TA4")500,("TA5")600,("TA6")) CREATE INDEX "I1" ON "T1"("C1") IN(("IA1"),("IA2"),("IA3"),("IA4"),("IA5"),("IA6"))
境界値の変更
ALTER TABLE "T1" CHANGE RDAREA ((400)) INTO (("TA3")300,("TA4")) FOR INDEX "I1" INTO (("IA3"),("IA4"))
-
格納条件指定の横分割表のRDエリアの変更例を次に示します。
変更前《状態1》
CREATE FIX TABLE "T1"("C1" CHAR(3),"C2" INT) IN(("TA1")"C1"='001',("TA2")"C1"='002', ("TA3")"C1"='003',("TA4")"C1"=('004','005'),("TA5")) CREATE INDEX "I1" ON "T1"("C1") IN(("IA1"),("IA2"),("IA3"),("IA4"),("IA5"))
<例1>格納条件の追加
1.分割《状態1 →状態2》
ALTER TABLE "T1" CHANGE RDAREA PARTITIONED CONDITION (("TA5")) INTO (("TA6")"C1"='006',("TA5")) FOR INDEX "I1" INTO (("IA6"),("IA5"))
<例2>格納条件の削除
2.統合《状態1 →状態3》
ALTER TABLE "T1" CHANGE RDAREA PARTITIONED CONDITION (("TA1"),("TA5")) INTO "TA5" FOR INDEX "I1" INTO "IA5"
<例3>RDエリアの分割
3.分割《状態1 →状態4》
ALTER TABLE "T1" CHANGE RDAREA PARTITIONED CONDITION (("TA4")) INTO (("TA4")"C1"='004',("TA7")"C1"='005') FOR INDEX "I1" INTO (("IA4"),("IA7"))
<例4>RDエリアの統合
4.統合《状態1 →状態5》
ALTER TABLE "T1" CHANGE RDAREA PARTITIONED CONDITION (("TA1"),("TA2")) INTO "TA2" FOR INDEX "I1" INTO "IA2"
-
マトリクス分割表の分割格納条件の分割,及び統合の例を次に示します。
- 前提
-
在庫表(ZAIKO)を定義します。このとき,商品番号(GNO)と入庫日(NYUUKOBI)のそれぞれに境界値を設定し,それぞれのデータが該当するRDエリアに格納されるようにします。この状態を《状態1》とします。
CREATE FIX TABLE "USERA"."ZAIKO" ("GNO" CHAR(5),"GNAME" CHAR(8),"KIKAKU" CHAR(3),"TANKA" INTEGER,"NYUUKOBI" CHAR(10)) PARTITIONED BY MULTIDIM ("GNO" (('20000')), "NYUUKOBI" (('2010-12-31'),('2011-12-31'))) IN (("RDAT01","RDAT02","RDAT03"), ("RDAT01","RDAT04","RDAT05")) CLUSTER KEY ("GNO","NYUUKOBI") IN (("RDAI01","RDAI02","RDAI03"), ("RDAI01","RDAI04","RDAI05"))
<例1>第1次元列でのRDエリアの分割(《状態1》→《状態2》)
ALTER TABLE "USERA"."ZAIKO" CHANGE RDAREA MULTIDIM ("GNO" ((MAX))) AT (('60000'),(MAX)) INTO (("RDAT01","RDAT04","RDAT05"), ("RDAT11","RDAT14","RDAT15")) FOR CLUSTER KEY INTO (("RDAI01","RDAI04","RDAI05"), ("RDAI11","RDAI14","RDAI15"))
- 注
-
RDAT01,RDAT04,RDAT05のデータ,及びRDAI01,RDAI04,RDAI05のキーは削除されます。
<例2>第1次元列でのRDエリアの統合(《状態2》→《状態1》)
ALTER TABLE "USERA"."ZAIKO" CHANGE RDAREA MULTIDIM ("GNO" (('60000'),(MAX))) AT ((MAX)) INTO (("RDAT01","RDAT04","RDAT05")) FOR CLUSTER KEY INTO (("RDAI01","RDAI04","RDAI05"))
- 注
-
RDAT01,RDAT11,RDAT04,RDAT14,RDAT05,RDAT15のデータ,及びRDAI01,RDAI11,RDAI04,RDAI14,RDAI05,RDAI15のキーは削除されます。
<例3>第2次元列でのRDエリアの分割(《状態1》→《状態3》)
ALTER TABLE "USERA"."ZAIKO" CHANGE RDAREA MULTIDIM ("NYUUKOBI" ((MAX))) AT (('2012-12-31'),(MAX)) INTO (("RDAT03","RDAT13"), ("RDAT05","RDAT15")) FOR CLUSTER KEY INTO (("RDAI03","RDAI13"), ("RDAI05","RDAI15"))
- 注
-
RDAT03,RDAT05のデータ,及びRDAI03,RDAI05のキーは削除されます。
<例4>第2次元列でのRDエリアの統合(《状態3》→《状態1》)
ALTER TABLE "USERA"."ZAIKO" CHANGE RDAREA MULTIDIM ("NYUUKOBI" (('2012-12-31'),(MAX))) AT ((MAX)) INTO (("RDAT03"), ("RDAT05")) FOR CLUSTER KEY INTO (("RDAI03"), ("RDAI05"))
- 注
-
RDAT03,RDAT13,RDAT05,RDAT15のデータ,及びRDAI03,RDAI13,RDAI05,RDAI15のキーは削除されます。
-
非改竄防止表の受注表(JUTYU)を,次の条件で改竄防止表に変更します。
《表定義時の条件》
-
あらかじめ挿入履歴保持列として,JINSERTDATE列を定義する。
-
改竄防止表に変更後も更新可能な列としてBIKOU列を定義する。
CREATE TABLE JUTYU (DNO CHAR(6),TCODE CHAR(5),SCODE CHAR(4), BIKOU CHAR(60) UPDATE, JSURYO INTEGER,JDATE DATE,JTIME TIME, JINSERTDATE DATE NOT NULL WITH DEFAULT SYSTEM GENERATED)
《表定義変更時の条件》
-
行削除禁止期間を10年とする。
ALTER TABLE JUTYU CHANGE INSERT ONLY WHILE 10 YEARS BY JINSERTDATE
-