Hitachi

Hitachi Advanced Data Binder SQLリファレンス


3.1.1 ALTER TABLE文の指定形式および規則

ALTER TABLE文で次に示すことができます。

なお,1回のALTER TABLE文で,上記の複数の操作を同時に実行することはできません。

〈この項の構成〉

(1) 指定形式および説明

(a) 実表に列を追加する場合

指定形式

ALTER TABLE文::=ALTER TABLE 表名
                      ADD COLUMN 列定義
 
  列定義::=列名 データ型 〔NOT NULL〕 〔BRANCH {YES|NO|AUTO}〕 〔圧縮方式指定
表名

列を追加する実表の表名を指定します。表名の指定規則については,「6.1.5 名前の修飾」の「(2) 表名の指定形式」を参照してください。

なお,次の表は指定できません。

  • ビュー表

  • ディクショナリ表

  • システム表

ADD COLUMN 列定義
列定義::=列名 データ型 〔NOT NULL〕 〔BRANCH {YES|NO|AUTO}〕 〔圧縮方式指定

追加する列の列定義を指定します。

列追加の仕様を次に示します。

  • 追加できる列は1列だけです。また,実表の最後の列に追加されます。

  • 追加した列にはナル値が格納されます。

  • 次の実表には列を追加できません。

    • 操作対象の実表の列数が上限(4,000列)に達している場合

    • 操作対象の実表がFIX表であり,かつ行を格納するセグメントが割り当てられている状態の場合

    • 操作対象の実表が,CREATE TABLE文を実行した際にBRANCH ALLを指定した実表であり,かつ行を格納するセグメントが割り当てられている状態の場合

    行を格納するセグメントが割り当てられている状態については,マニュアルHADB システム構築・運用ガイドB-treeインデクスを定義する場合の注意点(B-treeインデクスの未完状態)を参照してください。

メモ

ALTER TABLE文でDEFAULT句を指定することはできません。

列名

追加する列の列名を指定します。

表中ですでに使用されている列名は指定できません。

また,HADBによって自動的に設定される導出列名と重複する可能性があるため,列名にEXPnnnn_NO_NAMEを指定しないでください。nnnnは,00009999の符号なし整数です。

データ型

追加する列のデータ型を指定します。指定できるデータ型を次の表に示します。

表3‒1 指定できるデータ型(ALTER TABLE文の場合)

項番

データ型

指定形式

1

INTEGER

INTまたはINTEGER

2

BIGINT※6

BIGINT

3

SMALLINT

SMALLINT

4

DECIMAL

DEC〔(m〔,n〕)〕またはDECIMAL〔(m〔,n〕)〕

m:精度(全体の桁数)

n:位取り(小数部の桁数)

mを省略すると38が仮定され,nを省略すると0が仮定されます。

5

NUMERIC※3

NUMERIC〔(m〔,n〕)〕

m:精度(全体の桁数)

n:位取り(小数部の桁数)

mを省略すると38が仮定され,nを省略すると0が仮定されます。

6

DOUBLE PRECISION

DOUBLEまたはDOUBLE PRECISION

7

FLOAT※4

FLOAT

8

CHARACTER

CHAR(n)またはCHARACTER(n)

n:文字列の長さ(バイト)

CHARまたはCHARACTERと指定した場合は,文字列の長さに1が仮定されます。

9

VARCHAR※1,※2

VARCHAR(n)

n:文字列の最大長(バイト)

10

DATE

DATE

11

TIME

TIME(p)またはTIME

p:小数秒精度(小数秒の桁数)

pに指定できる値は,0369,または12です。TIMEと指定した場合は,p0が仮定されます。

12

TIMESTAMP

TIMESTAMP(p)またはTIMESTAMP

p:小数秒精度(小数秒の桁数)

pに指定できる値は,0369,または12です。TIMESTAMPと指定した場合は,p0が仮定されます。

13

BINARY

BINARY(n)

n:バイナリデータの長さ(バイト数)

BINARYと指定した場合は,バイナリデータの長さに1が仮定されます。

14

VARBINARY※1

VARBINARY(n)

n:バイナリデータの最大長(バイト数)

15

ARRAY※5

要素データ型 ARRAY[最大要素数]

要素データ型

配列要素のデータ型を指定します。要素データ型には,数データ,文字データ,日時データ,またはバイナリデータのどれかのデータ型を指定します。要素データ型の指定形式は,項番1~13で説明している各データ型の指定形式の規則に従います。

最大要素数

配列要素の最大数を指定します。最大要素数には,2~30,000の符号なし整数定数を指定してください。

<指定例>

  • 要素データ型がCHAR(5)で,最大要素数が20の場合

    CHAR(5) ARRAY[20]

  • 要素データ型がINTEGERで,最大要素数が5の場合

    INTEGER ARRAY[5]

※1

FIX表に列を追加する場合,VARCHAR型およびVARBINARY型は指定できません。

※2

列の定義長が32,000バイトを超えるVARCHAR型は指定できません。

※3

NUMERIC型が指定された場合,HADBはデータ型にDECIMAL型が指定されたと見なします。

※4

FLOAT型が指定された場合,HADBはデータ型にDOUBLE PRECISION型が指定されたと見なします。

注※5

配列型のデータ型です。配列型の列を追加する際の考慮点については,マニュアルHADB システム構築・運用ガイド配列型の列の定義【カラムストア表】を参照してください。

重要
  • カラムストア表に配列型の列を追加できます。ローストア表には配列型の列を追加できません。

  • B-treeインデクスまたは一意性制約が定義されている表には,配列型の列を追加できません。

注※6

BIGINT型が指定された場合,HADBはデータ型にINTEGER型が指定されたと見なします。

データ型の詳細については,「6.2 データ型」を参照してください。

NOT NULL

追加する列に非ナル値制約(ナル値を許さない制約)を定義する場合に指定します。

注意事項と規則を次に示します。

  • 行を格納するセグメントが割り当てられている状態の実表に対しては,NOT NULLを指定できません。行を格納するセグメントが割り当てられている状態については,マニュアルHADB システム構築・運用ガイドB-treeインデクスを定義する場合の注意点(B-treeインデクスの未完状態)を参照してください。

  • FIX表の場合,すべての列に対して非ナル値制約が設定されます。そのため,FIX表に列を追加する場合,NOT NULLの指定を省略しても,指定されていると見なされます。

BRANCH {YES|NO|AUTO

VARCHAR型またはVARBINARY型の列のデータの格納方法を指定します。

BRANCHYESまたはNOを指定した方がよいケースについては,マニュアルHADB システム構築・運用ガイド可変長データ型の列データの分岐指定(BRANCH)【ローストア表】を参照してください。

指定できる格納方法の種類は,CREATE TABLE文と同じです。また,BRANCHの指定を省略した場合の動作も,CREATE TABLE文と同じです。CREATE TABLE文でのBRANCHの詳細については,「3.7.1 CREATE TABLE文の指定形式および規則」の「(2) 指定形式の説明」の「(d) 列定義  【共通】」を参照してください。

なお,このオプションは,次の場合には指定できません。

  • 列を追加する表の表定義時に,BRANCH ALLを指定している場合

  • 追加する列のデータ型がVARCHAR型またはVARBINARY型以外の場合

  • 列を追加する表がカラムストア表の場合

圧縮方式指定
圧縮方式指定::=COMPRESSION TYPE {AUTO|NONE|RUNLENGTH|DICTIONARY|DELTA|DELTA_RUNLENGTH}

追加する列のデータを圧縮する方式(列データの圧縮方式)を指定します。

指定できる圧縮方式の種類は,CREATE TABLE文と同じです。また,圧縮方式指定の指定を省略した場合の動作も,CREATE TABLE文と同じです。CREATE TABLE文での圧縮方式指定の詳細については,「3.7.1 CREATE TABLE文の指定形式および規則」の「(2) 指定形式の説明」の「(d) 列定義  【共通】」を参照してください。

なお,このオプションは,列を追加する表がローストア表の場合は指定できません。

(b) 実表の列を削除する場合

指定形式

ALTER TABLE文::=ALTER TABLE 表名
                      DROP 〔COLUMN〕 列名削除動作 削除動作::={CASCADE|RESTRICT}
表名

列を削除する実表の表名を指定します。表名の指定規則については,「6.1.5 名前の修飾」の「(2) 表名の指定形式」を参照してください。

なお,次の表は指定できません。

  • ビュー表

  • ディクショナリ表

  • システム表

DROP 〔COLUMN〕 列名削除動作
列名

削除対象の列の列名を指定します。削除できる列は1列だけです。

削除動作
削除動作::={CASCADE|RESTRICT}

次のどれかの条件を満たす場合に,列を削除するかどうかを指定します。

  • 削除対象の列にインデクスが定義されている場合

  • 列を削除する実表に依存するビュー表が定義されている場合

  • 削除対象の列に表制約が定義されている場合

削除動作の各指定の説明を次の表に示します。

削除動作の指定

説明

列を削除した実表に依存するビュー表の扱い

削除動作の指定を省略した場合

次のどれかの条件を満たす場合でも,列を削除します。

  • 削除対象の列にインデクスが定義されている場合

  • 列を削除する実表に依存するビュー表が定義されている場合

  • 削除対象の列に表制約が定義されている場合

このとき,次に示すものも削除されます。

  • 削除対象の列に定義されているインデクス

  • 削除対象の列に定義されている主キー,外部キー,および削除対象の列に定義されている主キーを参照する外部キー

列を削除した実表に依存するビュー表が無効化されます。自スキーマのビュー表だけではなく,ほかのスキーマの依存するビュー表も無効化されます。

CASCADEを指定した場合

列を削除した実表に依存するビュー表が削除されます。自スキーマのビュー表だけではなく,ほかのスキーマの依存するビュー表も削除されます。

RESTRICTを指定した場合

次のどれかの条件を満たす場合は,ALTER TABLE文をエラーにします。

  • 削除対象の列にインデクスが定義されている場合

  • 列を削除する実表に依存するビュー表が定義されている場合

  • 削除対象の列に表制約が定義されている場合

ALTER TABLE文がエラーになるため,依存するビュー表に影響はありません。

実表の列を削除する場合は,マニュアルHADB システム構築・運用ガイド実表の列を削除する方法を参照してください。

留意事項

  • 次のどちらかの条件を満たしている場合に限り,実表の列を削除できます。

    • 列を削除する実表に行を格納するセグメントが割り当てられていない状態の場合

    • 削除対象の列がALTER TABLE文で追加した列であり,かつ列を追加したあとに次のSQL文またはコマンドを実行していない場合

      • DELETE文,INSERT文,またはUPDATE

      • adbidxrebuildコマンド,adbimportコマンド,adbmergechunkコマンド,またはadbunarchivechunkコマンド

      なお,上記のSQL文またはコマンドを実行した場合でも,追加した列を削除できることがあります。

      また,列を追加したあとに更新行のカラム化機能を有効にした場合,追加した列を削除できないことがあります。

  • のどれかの条件に該当する場合は列を削除できません。

    • 列を削除する実表に,列が1列だけしかない場合

    • 列を削除する実表がFIX表であり,かつ行を格納するセグメントが割り当てられている状態の場合

    • 列を削除する実表がCREATE TABLE文を実行した際にBRANCH ALLを指定した実表であり,かつ行を格納するセグメントが割り当てられている状態の場合

    • 列を削除する実表がアーカイブマルチチャンク表の場合

    行を格納するセグメントが割り当てられている状態については,マニュアルHADB システム構築・運用ガイドB-treeインデクスを定義する場合の注意点(B-treeインデクスの未完状態)を参照してください。

(c) 実表の列名を変更する場合

指定形式

ALTER TABLE文::=ALTER TABLE 表名
                      RENAME COLUMN 〔FROM〕 変更前の列名 TO 変更後の列名
表名

列名を変更する実表の表名を指定します。表名の指定規則については,「6.1.5 名前の修飾」の「(2) 表名の指定形式」を参照してください。

なお,次の表は指定できません。

  • ビュー表

  • ディクショナリ表

  • システム表

RENAME COLUMN 〔FROM〕 変更前の列名 TO 変更後の列名

変更前の列名と変更後の列名を指定します。変更前の列名が,変更後の列名に変更されます。

指定規則を次に示します。

  • すでに存在する列名を変更後の列名に指定できません。

  • 変更前の列名と変更後の列名に同じ列名を指定できません。

  • HADBによって自動的に設定される導出列名と重複する可能性があるため,変更後の列名にEXPnnnn_NO_NAMEを指定しないでください。nnnnは,00009999の符号なし整数です。

重要

列名を変更した場合,列名を変更した表に依存するビュー表が無効化されます。無効化されるビュー表の確認方法については,マニュアルHADB システム構築・運用ガイド依存するビュー表を確認する方法を参照してください。

(d) 実表の表名を変更する場合

指定形式

ALTER TABLE文::=ALTER TABLE 表名
                      RENAME 〔TABLE〕 TO 表識別子
表名

表名を変更する実表の表名を指定します。表名の指定規則については,「6.1.5 名前の修飾」の「(2) 表名の指定形式」を参照してください。

なお,次の表は指定できません。

  • ビュー表

  • ディクショナリ表

  • システム表

RENAME 〔TABLE〕 TO 表識別子

変更後の表識別子を指定します。

指定規則を次に示します。

  • すでに存在する表名は指定できません。

  • 変更前の表識別子と同じ表識別子を指定することはできません。

重要

表名を変更した場合,表名を変更した表に依存するビュー表が無効化されます。無効化されるビュー表の確認方法については,マニュアルHADB システム構築・運用ガイド依存するビュー表を確認する方法を参照してください。

(e) 実表の列のデータ型(VARCHAR型のデータ長)を変更する場合

指定形式

ALTER TABLE文::=ALTER TABLE 表名
                      {CHANGE|ALTER} 〔COLUMN〕 列名 変更後のデータ型

  変更後のデータ型::=データ型
表名

列のデータ型を変更する実表の表名を指定します。表名の指定規則については,「6.1.5 名前の修飾」の「(2) 表名の指定形式」を参照してください。

なお,次の表は指定できません。

  • ビュー表

  • ディクショナリ表

  • システム表

CHANGEALTER} 〔COLUMN列名 変更後のデータ型

次のどちらかの変更ができます。

  • データ長が1~254バイトのVARCHAR型の列のデータ長を,最大255バイトまで長くする

  • データ長が256~31,999バイトのVARCHAR型の列のデータ長を,最大32,000バイトまで長くする

メモ

データ長が255バイトのVARCHAR型の列のデータ長は変更できません。

列名

データ型を変更する列の列名を指定します。

指定規則を次に示します。

  • VARCHAR型の列を指定してください。ただし,データ長が255バイトのVARCHAR型の列は指定できません。

  • テキストインデクスが定義されている列は指定できません。

  • 外部キーの構成列は指定できません。

  • ほかの表の外部キーから参照されている主キーの構成列は指定できません。

  • データ長が254バイト以下のVARCHAR型の列を指定する場合,次の制限事項があります。

    複数列インデクスのインデクス構成列を指定するときは,データ型を変更したあとの複数列インデクスのインデクス構成列の合計長が255バイト以下である必要があります。

    複数列インデクスを構成する列の長さについては,「表3‒6 複数列インデクスを構成する列の長さ」を参照してください。

  • データ長が256バイト以上のVARCHAR型の列を指定する場合,次の制限事項があります。

    B-treeインデクスの構成列を指定するときは,変更後のデータ型のデータ長が次に示す条件式を満たす必要があります。

    B-treeインデクスの構成列の合計長≦MIN{(a÷3)−128,4036 }(単位:バイト)

    a:B-treeインデクスを格納するDBエリアのページサイズ

    単一列インデクス,または複数列インデクスを構成する列の長さについては,「表3‒5 単一列インデクスを構成する列の長さ」,または「表3‒6 複数列インデクスを構成する列の長さ」を参照してください。

変更後のデータ型

変更後のデータ型を指定します。

指定規則を次に示します。

  • 変更後のデータ型には,VARCHAR型を指定してください。

  • 変更後のデータ型のデータ長は,変更前のデータ長より長い値を指定してください。

  • 変更前のデータ型のデータ長が254バイト以下の場合,変更後のデータ型には,データ長が255バイト以下のVARCHAR型を指定してください。

  • 変更前のデータ型のデータ長が256バイト以上の場合,変更後のデータ型には,データ長が32,000バイト以下のVARCHAR型を指定してください。

<指定例>

[図データ]

実表の列のデータ型を変更する場合は,マニュアルHADB システム構築・運用ガイド実表の列のデータ型を変更する方法(VARCHAR型の列のデータ長を長くする方法)を参照してください。

重要

列のデータ型を変更した場合,列のデータ型を変更した表に依存するビュー表は,データ型を変更した列の列名をビュー表の定義時に明示的に指定しているかどうかに関係なく無効化されます。

無効化されるビュー表の確認方法については,マニュアルHADB システム構築・運用ガイド依存するビュー表を確認する方法を参照してください。

ビュー表の無効化を解除する方法については,マニュアルHADB システム構築・運用ガイドビュー表の無効化を解除する方法ALTER TABLE文で表の列のデータ型を変更したことによってビュー表が無効化された場合を参照してください。

(f) マルチチャンク表のチャンク数の最大値を変更する場合

指定形式

ALTER TABLE文::=ALTER TABLE 表名
                      CHANGE OPTION CHUNK=チャンク数の最大値
表名

チャンク数の最大値を変更するマルチチャンク表の表名を指定します。表名の指定規則については,「6.1.5 名前の修飾」の「(2) 表名の指定形式」を参照してください。

CHANGE OPTION CHUNK=チャンク数の最大値

〜〈符号なし整数〉((230,000))(単位:個)

CREATE TABLE文のチャンク指定で指定したチャンク数の最大値を変更する場合に,変更後のチャンク数の最大値を指定します。

注意事項を次に示します。

  • このオプションは,マルチチャンク表に対してだけ指定できます。

  • 表中に作成されているチャンク数よりも小さい値を指定することはできません。

(g) 配列型の列の最大要素数を大きくする場合

指定形式

ALTER TABLE文::=ALTER TABLE 表名
                      {CHANGE|ALTER} 〔COLUMN〕 列名 ARRAY[最大要素数]
表名

最大要素数を大きくする表の表名を指定します。表名の指定規則については,「6.1.5 名前の修飾」の「(2) 表名の指定形式」を参照してください。

なお,次の表は指定できません。

  • ビュー表

  • ディクショナリ表

  • システム表

CHANGEALTER} 〔COLUMN列名 ARRAY[最大要素数]
列名

最大要素数を大きくする列の列名を指定します。

存在する配列型の列の列名を指定してください。

最大要素数

〜〈符号なし整数〉((230,000))

変更後の最大要素数を指定します。

変更前の最大要素数より大きい値を指定してください

重要

最大要素数を変更した場合,最大要素数を変更した表に依存するビュー表は,最大要素数を変更した列の列名をビュー表の定義時に明示的に指定しているかどうかに関係なく無効化されます。

無効化されるビュー表の確認方法については,マニュアルHADB システム構築・運用ガイド依存するビュー表を確認する方法を参照してください。

ビュー表の無効化を解除する方法については,マニュアルHADB システム構築・運用ガイドビュー表の無効化を解除する方法ALTER TABLE文で配列型の列の最大要素数を変更したことによってビュー表が無効化された場合を参照してください。

(h) レギュラーマルチチャンク表をアーカイブマルチチャンク表に変更する場合

指定形式

ALTER TABLE文::=ALTER TABLE 表名
                      CHANGE OPTION CHUNK チャンクアーカイブ指定
 
  チャンクアーカイブ指定::=ARCHIVABLE
                                RANGECOLUMN=列名
                               〔RANGEINDEXNAME=インデクス識別子〕
                               〔IN DBエリア名〕
                                ARCHIVEDIR=アーカイブディレクトリ名
表名

アーカイブマルチチャンク表に変更するレギュラーマルチチャンク表の表名を指定します。表名の指定規則については,「6.1.5 名前の修飾」の「(2) 表名の指定形式」を参照してください。

なお,次の表は指定できません。

  • FIX表

  • シングルチャンク表

  • カラムストア表

CHANGE OPTION CHUNK チャンクアーカイブ指定
チャンクアーカイブ指定::=ARCHIVABLE
                              RANGECOLUMN=列名
                             〔RANGEINDEXNAME=インデクス識別子〕
                             〔IN DBエリア名〕
                              ARCHIVEDIR=アーカイブディレクトリ名

レギュラーマルチチャンク表をアーカイブマルチチャンク表に変更する場合に指定するオプションです。

なお,クラウドストレージ機能を使用している場合は,このオプションは指定できません。クラウドストレージ機能については,マニュアルHADB システム構築・運用ガイドクラウド環境でHADBサーバを使用する場合を参照してください。

RANGECOLUMN=列名

列名を指定します。ここで指定した列が,アーカイブレンジ列になります。

指定規則を次に示します。

  • 次に示すデータ型の列は,アーカイブレンジ列にできません。

    ・定義長が33バイト以上のCHARACTER

    VARCHAR

    BINARY

    VARBINARY

  • 非ナル値制約(NOT NULL)の指定がされている列を,アーカイブレンジ列に指定してください。

RANGEINDEXNAME=インデクス識別子

ALTER TABLE文の実行時,アーカイブレンジ列をインデクス構成列とするレンジインデクスが,HADBサーバによって自動的に定義されます。このレンジインデクスに付けるインデクス識別子を指定します。

重要

アーカイブレンジ列にすでにレンジインデクスが定義されている場合は,ALTER TABLE文の実行時にレンジインデクスは自動的に定義されません。すでに定義されているレンジインデクスを使用します。そのため,アーカイブレンジ列にすでにレンジインデクスが定義されている場合に,RANGEINDEXNAMEを指定すると,ALTER TABLE文がエラーになります。

RANGEINDEXNAMEの指定を省略した場合,HADBサーバが次の規則に従ってインデクス識別子を決定します。

ARCHIVE_RANGE_INDEX_nnnnnnnn

nnnnnnnnは,アーカイブマルチチャンク表の表IDを16進数に変換した8桁の文字列です。

上記の規則に従って決定されたインデクス識別子が,同一スキーマ内に存在する場合,ALTER TABLE文がエラーになります。そのため,CREATE INDEX文でインデクスを定義する際は,上記の形式に類似した名称を使用しないことを推奨します。

メモ

自動的に定義されたレンジインデクスは,CREATE INDEX文で定義したレンジインデクスと同じ規則が適用されます。

IN DBエリア名

HADBサーバによって自動的に定義されたレンジインデクスを格納するDBエリアの名称を指定します。

なお,次に示す場合は,「IN DBエリア名」の指定を省略してください。

  • アーカイブレンジ列にレンジインデクスがすでに定義されている場合

上記の場合は,HADBサーバによって自動的にレンジインデクスが定義されないため,「IN DBエリア名」の指定が不要になります。

また,次の条件をすべて満たす場合は,サーバ定義のadb_sql_default_dbarea_sharedオペランドに指定したDBエリアに,HADBサーバによって自動的に定義されたレンジインデクスが格納されます。

  • IN DBエリア名」の指定を省略した場合

  • アーカイブレンジ列にレンジインデクスが定義されていない場合

なお,上記2つの条件を両方とも満たす場合に,サーバ定義のadb_sql_default_dbarea_sharedオペランドが指定されていないと,ALTER TABLE文がエラーになります。また,サーバ定義のadb_sql_default_dbarea_sharedオペランドに指定したDBエリアが存在しない場合や,データ用DBエリア以外のDBエリアを指定している場合も,ALTER TABLE文がエラーになります。

ARCHIVEDIR=アーカイブディレクトリ名

アーカイブファイルを格納するアーカイブディレクトリの名称を絶対パスで指定します。

指定規則を次に示します。

  • アーカイブディレクトリ名は,文字列定数の形式で指定してください。文字列定数については,「6.3 定数」を参照してください。

  • アーカイブディレクトリには,存在するディレクトリを指定してください。また,HADB管理者に対して,読み取り権限,書き込み権限,および実行権限を与えたディレクトリを指定してください。

    さらに,アーカイブディレクトリのパスに含まれるすべてのディレクトリに,HADB管理者に対する実行権限を付与してください。

    (例)アーカイブディレクトリが,/HADB/archiveの場合

    /HADB/archiveには,読み取り権限,書き込み権限,および実行権限が必要です。

    /,および/HADBには,実行権限が必要です。

  • 次のディレクトリは,アーカイブディレクトリにできません。

    ・サーバディレクトリ

    ・サーバディレクトリの下位のディレクトリ

    ・下位のディレクトリにサーバディレクトリがあるディレクトリ

    ・DBディレクトリ

    ・DBディレクトリの下位のディレクトリ

    ・下位のディレクトリにDBディレクトリがあるディレクトリ

    ・ルートディレクトリ

    DBディレクトリが/HADB/dbの場合,アーカイブディレクトリにできるディレクトリの例と,できないディレクトリの例を次に示します。

    アーカイブディレクトリの例

    理由

    アーカイブディレクトリにできるディレクトリの例

    /HADB/archive

    なし。

    アーカイブディレクトリにできないディレクトリの例

    /HADB/db

    左記のディレクトリは,DBディレクトリと同一のため,アーカイブディレクトリにできません。

    /HADB/db/archive

    左記のディレクトリは,DBディレクトリの下位のディレクトリのため,アーカイブディレクトリにできません。

    /HADB

    左記のディレクトリは,下位のディレクトリにDBディレクトリがあるため,アーカイブディレクトリにできません。

  • HADBサーバのインストール時にインストールデータを格納したディレクトリを,アーカイブディレクトリに指定しないようにしてください。

  • アーカイブディレクトリ名は,前後の空白を除いて1〜400バイトの長さにしてください。

    メモ

    アーカイブディレクトリ名の前後に空白がある場合,その空白は取り除かれて処理されます(空白が取り除かれた名称が仮定されます)。

  • アーカイブディレクトリ名のパスに含まれる各要素は,NAME_MAXバイト以下になるようにしてください。NAME_MAXの値は,ご利用の環境によって異なります。

アーカイブディレクトリ名にシンボリックリンクを指定した場合,シンボリックリンクを解決したあとの絶対パス名が,ここで説明している規則に従っているかどうかがチェックされます。

[マルチノード機能]

マルチノード機能を使用している場合は,次のことに注意してください。

  • アーカイブディレクトリは,NFSなどを使用して全ノードで共有してください。また,ALTER TABLE文の実行時点で,全ノードで共有されている必要があります。

  • ALTER TABLE文の実行時,ここで説明しているアーカイブディレクトリ名の指定規則のチェックが,プライマリノードで実行されます。セカンダリノードおよびワーカーノードでは,チェックは行われません。そのため,ALTER TABLE文の実行後,セカンダリノードおよびワーカーノードでアーカイブディレクトリ名のチェックを行ってください。

■レギュラーマルチチャンク表をアーカイブマルチチャンク表に変更したときに定義されるロケーション表について

ALTER TABLE文を実行して,レギュラーマルチチャンク表をアーカイブマルチチャンク表に変更した場合,ロケーション表とロケーション表のインデクスがHADBサーバによって自動的に定義されます。この,ロケーション表とロケーション表のインデクスは,HADBサーバが使用します。そのため,ロケーション表とロケーション表のインデクスをユーザが直接操作したり,定義変更したり,または削除したりすることはできません。ロケーション表については,マニュアルHADB システム構築・運用ガイドアーカイブマルチチャンク表の検索を参照してください。

ロケーション表,およびロケーション表のインデクスは,アーカイブマルチチャンク表と同じDBエリア内に格納されます。

ロケーション表およびロケーション表のインデクスの名称は,次の表で説明している規則に従って決定されます。

表3‒2 ロケーション表およびロケーション表のインデクスの名称規則

種別

名称規則

インデクスが管理する情報

インデクス構成列

ロケーション表

"HADB"."LOCATION_TABLE_nnnnnnnn"

ロケーション表のインデクス

"HADB"."LOCATION_INDEX_nnnnnnnn_CHUNK_ID"

アーカイブファイルに対応するチャンクのチャンクIDを管理しています。

CHUNK_ID

"HADB"."LOCATION_INDEX_nnnnnnnn_RANGE_01"

アーカイブファイルに格納されているデータのアーカイブレンジ列の値の範囲(上限値と下限値)を管理しています。

  • RANGE_MAX

  • RANGE_MIN

"HADB"."LOCATION_INDEX_nnnnnnnn_RANGE_02"

アーカイブファイルに格納されているデータのアーカイブレンジ列の値の下限値を管理しています。

RANGE_MIN

(凡例)

−:該当しません。

nnnnnnnnは,アーカイブマルチチャンク表の表IDを16進数に変換した8桁の文字列です。

ロケーション表,およびロケーション表のインデクスのスキーマ名はHADBです。

レギュラーマルチチャンク表をアーカイブマルチチャンク表に変更する際の注意事項を次に示します。

  • レギュラーマルチチャンク表をアーカイブマルチチャンク表に変更した場合,ロケーション表,ロケーション表のインデクス,およびアーカイブレンジ列のレンジインデクスがHADBサーバによって自動的に定義されます。ただし,アーカイブレンジ列に指定した列にレンジインデクスが定義されている場合は,レンジインデクスは新たに定義されません。すでに定義されているレンジインデクスを使用します。列にレンジインデクスが定義されているかどうかを調べる方法については,マニュアルHADB システム構築・運用ガイドディクショナリ表の検索アーカイブレンジ列として指定する列にレンジインデクスが定義されているかどうかを調べる場合を参照してください。

  • レギュラーマルチチャンク表をアーカイブマルチチャンク表に変更した場合,変更対象の表に依存するビュー表が無効化されます。無効化されるビュー表の確認方法については,マニュアルHADB システム構築・運用ガイド依存するビュー表を確認する方法を参照してください。

レギュラーマルチチャンク表をアーカイブマルチチャンク表に変更する方法については,マニュアルHADB システム構築・運用ガイドレギュラーマルチチャンク表をアーカイブマルチチャンク表に変更する方法を参照してください。

(i) アーカイブマルチチャンク表をレギュラーマルチチャンク表に変更する場合

指定形式

ALTER TABLE文::=ALTER TABLE 表名
                      CHANGE OPTION CHUNK UNARCHIVABLE
表名

レギュラーマルチチャンク表に変更するアーカイブマルチチャンク表の表名を指定します。表名の指定規則については,「6.1.5 名前の修飾」の「(2) 表名の指定形式」を参照してください。

CHANGE OPTION CHUNK UNARCHIVABLE

アーカイブマルチチャンク表をレギュラーマルチチャンク表に変更する場合に指定するオプションです。

アーカイブマルチチャンク表をレギュラーマルチチャンク表に変更する際の注意事項を次に示します。

  • アーカイブ状態のチャンクがある場合,アーカイブマルチチャンク表をレギュラーマルチチャンク表に変更できません。チャンクのアーカイブ状態を解除したあとに,アーカイブマルチチャンク表をレギュラーマルチチャンク表に変更してください。

  • アーカイブマルチチャンク表をレギュラーマルチチャンク表に変更した場合,ロケーション表と,ロケーション表に定義されたインデクスが削除されますが,アーカイブレンジ列に自動的に定義されたレンジインデクスは削除されません。このレンジインデクスが不要な場合は,アーカイブマルチチャンク表をレギュラーマルチチャンク表に変更したあとに,DROP INDEX文でレンジインデクスを削除してください。

  • アーカイブマルチチャンク表をレギュラーマルチチャンク表に変更した場合,変更対象の表に依存するビュー表が無効化されます。無効化されるビュー表の確認方法については,マニュアルHADB システム構築・運用ガイド依存するビュー表を確認する方法を参照してください。

アーカイブマルチチャンク表をレギュラーマルチチャンク表に変更する方法については,マニュアルHADB システム構築・運用ガイドアーカイブマルチチャンク表をレギュラーマルチチャンク表に変更する方法を参照してください。

(2) 実行時に必要な権限

ALTER TABLE文を実行する場合,CONNECT権限およびスキーマ定義権限が必要になります。

(3) 規則

  1. 表定義を変更できるのは,自分(HADBサーバに接続中の認可識別子のHADBユーザ)が所有するスキーマの表だけです。ほかのHADBユーザが所有するスキーマの表の表定義は変更できません。

  2. 実表の列の長さの合計(行長)が,次の計算式を満たさない場合,列追加または列のデータ型の変更はできません。

    ●計算式(対象の実表がローストア表の場合)
    ROWSZ(行長)ページサイズ - 56 (単位:バイト)
    ●計算式(対象の実表がカラムストア表の場合)
    ROWSZ(行長)ページサイズ - 80 (単位:バイト)

    ROWSZ(行長)を求める計算式については,マニュアルHADB システム構築・運用ガイド行の種別ごとの格納ページ数の求め方を参照してください。

  3. コマンドの中断によって更新不可状態となった表の表定義を変更することはできません。

  4. 配列型の列を定義した表は,ページサイズが4,096バイトのデータ用DBエリアには格納できません。

  5. 次の操作をする場合,下記の条件を満たす必要があります。

    • 列型の列を追加する場合

    • 列型の列を定義した表に列を追加する場合

    • 配列型の列を定義した表の列のデータ型を変更する場合

    • 配列型の列の最大要素数を大きくする場合

    <条件>
    1セグメントの容量(単位バイト)≧ARRAY_ROWSZ上記の操作後の表の行長)

    1セグメントの容量は,adbinitコマンドまたはadbmodareaコマンドの-sオプションで指定します。

    ARRAY_ROWSZの求め方については,マニュアルHADB システム構築・運用ガイド行の種別ごとの格納ページ数の求め方配列型の列を定義した表の行長(変数ARRAY_ROWSZ)の求め方を参照してください。

(4) 例題

例題1(ローストア表に列を追加する場合)

ローストア表の店舗表(SHOPSLIST)に,次の店舗メールアドレス列(EMAIL_ADDRESS)を追加します。

  • 列名:EMAIL_ADDRESS

  • データ型:VARCHAR(100)

  • 列のデータを分岐して格納する

ALTER TABLE "SHOPSLIST"
    ADD COLUMN "EMAIL_ADDRESS" VARCHAR(100) BRANCH YES

[図データ]

例題2(カラムストア表に列を追加する場合)

カラムストア表のレシート表(RECEIPT)に,次の発行時刻列(ISSUE_TIME)を追加します。

  • 列名:ISSUE_TIME

  • データ型:TIME

  • 列のデータを,差分ランレングス圧縮方式(DELTA_RUNLENGTH)で圧縮する

ALTER TABLE "RECEIPT"
    ADD COLUMN  "ISSUE_TIME" TIME COMPRESSION TYPE DELTA_RUNLENGTH

[図データ]

例題3(列を削除する場合)

店舗表(SHOPSLIST)から,店舗メールアドレス列(EMAIL_ADDRESS)を削除します。

ALTER TABLE "SHOPSLIST"
    DROP COLUMN "EMAIL_ADDRESS"
例題4(列名を変更する場合)

店舗表(SHOPSLIST)のEMAIL_ADDRESS列の列名を,EMAILに変更します。

ALTER TABLE "SHOPSLIST"
    RENAME COLUMN FROM EMAIL_ADDRESS TO EMAIL
例題5(実表の表名を変更する場合)

店舗表(SHOPSLIST)の表名を,STORELISTに変更します。

ALTER TABLE "SHOPSLIST"
    RENAME TABLE TO "STORELIST"
例題6(実表の列のデータ型を変更する場合)

店舗表(SHOPSLIST)の店舗メールアドレス列(EMAIL_ADDRESS)のデータ型をVARCHAR(10)からVARCHAR(20)に変更します。

ALTER TABLE "SHOPSLIST"
    CHANGE COLUMN "EMAIL_ADDRESS" VARCHAR(20)
例題7(チャンク数の最大値を変更する場合)

店舗表(SHOPSLIST)のチャンク数の最大値を300に変更します。

ALTER TABLE "SHOPSLIST"
    CHANGE OPTION CHUNK=300
例題8(配列型の列の最大要素数を大きくする場合)

商品表(PRODUCTLIST)の配列型の列である商品コード列(PUR-CODE)の最大要素数を200に変更します(大きくします)。

ALTER TABLE "PRODUCTLIST"
    CHANGE COLUMN "PUR-CODE" ARRAY[200]
例題9(レギュラーマルチチャンク表をアーカイブマルチチャンク表に変更する場合)

ローストア表の店舗表(SHOPSLIST)を,レギュラーマルチチャンク表からアーカイブマルチチャンク表に変更します。アーカイブレンジ列などに関する指定は,次のとおりとします。

  • RECORD_DAY列をアーカイブレンジ列とする

  • /mnt/nfs/archivedirをアーカイブディレクトリとする

  • HADBサーバによって自動的に定義されたレンジインデクスを格納するDBエリアをDBAREA02とする

ALTER TABLE "SHOPSLIST"
    CHANGE OPTION CHUNK ARCHIVABLE
        RANGECOLUMN="RECORD_DAY"
        IN "DBAREA02"
        ARCHIVEDIR='/mnt/nfs/archivedir'
例題10(アーカイブマルチチャンク表をレギュラーマルチチャンク表に変更する場合)

店舗表(SHOPSLIST)を,アーカイブマルチチャンク表からレギュラーマルチチャンク表に変更します。

ALTER TABLE "SHOPSLIST"
    CHANGE OPTION CHUNK UNARCHIVABLE