スケーラブルデータベースサーバ HiRDB Version 8 コマンドリファレンス(UNIX(R)用)

[目次][索引][前へ][次へ]

9.3 規則及び注意事項

<この節の構成>
(1) 規則
(2) 表定義情報,トリガ定義情報,及びストアドプロシジャ情報の搬出入についての規則
(3) 定義系SQLの生成についての規則
(4) 参照制約を定義した表の搬出入の規則について
(5) 注意事項
(6) 搬入時に作成される定義系SQLが2メガバイトを超えた場合の修正例
(7) BOMを持つファイルの使用

(1) 規則

  1. ディクショナリ搬出入ユティリティは,HiRDBが稼働中のときだけ実行できます。ただし,HiRDB/シングルサーバの場合,シングルサーバが起動していなければなりません。また,HiRDB/パラレルサーバの場合は,次に示すサーバが起動していなければなりません。
    <表定義情報の搬出入の場合>
    搬出時:フロントエンドサーバ,ディクショナリサーバ,及びすべてのバックエンドサーバ
    搬入時:フロントエンドサーバ,ディクショナリサーバ,及び対象となるバックエンドサーバ
    搬出時及び搬入時のマスタディレクトリ用RDエリア,データディレクトリ用RDエリア,及びデータディクショナリ用RDエリア,オープン状態,かつ閉塞解除でなければなりません。
    <ストアドプロシジャ情報及びトリガ情報の搬出入の場合>
    搬出時:フロントエンドサーバ,及びディクショナリサーバ
    搬入時:フロントエンドサーバ,及びディクショナリサーバ
    搬入時には,データディクショナリLOB用RDエリアを定義しておく必要があります。
  2. ディクショナリ搬出入ユティリティは,シングルサーバ又はシステムマネジャがあるサーバマシンで実行してください。
  3. ディクショナリ搬出入ユティリティ実行後,パスワード入力要求の応答付きメッセージが表示された場合,パスワードを入力してください(入力したパスワードは表示されません)。パスワードに英小文字を含む場合は,引用符('')で囲んでください。
  4. ディクショナリ搬出入ユティリティを実行する場合のRDエリアの状態については,「付録C コマンド実行時のRDエリアの状態」を参照してください。
  5. ディクショナリ搬出入ユティリティを実行する場合,LANG環境変数を設定してください。また,ディクショナリ搬出入ユティリティの実行環境で,OSがサポートしていない文字コードを使用する場合,PDLANG環境変数を設定する必要があります。LANG,及びPDLANGについては,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。
  6. 搬出時,指定した搬出ファイルがない場合,HiRDBの起動者のものとして新規に作成します。そのため,HiRDBの起動者にはファイルの作成権限が必要です。
  7. 搬入時は,搬出処理で正常に作成した搬出ファイルを指定してください。また,HiRDB管理者には,その搬出ファイルの参照権限が必要です。
  8. HiRDB/パラレルサーバの場合,サーバとRDエリアの対応を搬出前システムと搬入後システムとで同じにしてください。
  9. 異なるバイトオーダのシステム間,及び異なる文字体系のシステム間での搬出入はできません。
  10. SQL予約語削除機能を使用している場合,コマンド実行画面でクライアント環境定義PDDELRSVWDFILEを設定してから,ディクショナリ搬出入ユティリティを実行してください。なお,PDDELRSVWDFILEの設定値の長さが9バイト以上の場合は,PDDELRSVWDFILEの設定が無視されます。また,次の条件を満たしていないと,搬入時にSQLの文法エラーになることがあります。
    • クライアント環境定義PDDELRSVWDFILEの値が,表などを定義したときの値と同じである。
    • 搬出側と搬入側の,システム共通定義pd_delete_reserved_word_fileオペランドの指定値が同じである。
    • 搬出側と搬入側の,$PDDIR/conf/pdrsvwd以下のファイルが同じである。
  11. 搬出時,搬出側システムで定義系SQLを発行しないでください。

(2) 表定義情報トリガ定義情報,及びストアドプロシジャ情報の搬出入についての規則

  1. 搬出と搬入は,1回の実行で同時に指定できません。
  2. トリガ定義情報,又はストアドプロシジャ情報の搬出順序は,制御文ファイルでの-g,又は-pオプションの指定順になります。搬入時の搬入順序は,-g,又は-pオプションの指定に関係なく,搬出時の搬出順序と同じになります。
  3. 搬出入の処理は,一つの表ごと,一つのトリガごと,又は一つのストアドプロシジャごとに処理が完結します。
  4. 搬入先に同一の表(認可識別子.表識別子が同じ表),トリガ(認可識別子.トリガ識別子),又はストアドプロシジャ(認可識別子.ルーチン識別子が同じストアドプロシジャ)がある場合,その表,トリガ,又はストアドプロシジャは搬入エラーとなります。エラーになった表以外の搬出処理は続行されます。
  5. 搬入前には,搬入先システムを初期設定し,搬入する表,トリガ,又はストアドプロシジャのスキーマを定義しておいてください。
  6. ディクショナリ搬出入ユティリティは,搬出元の表定義をそのまま搬入先に移行します。そのため,対象となる表の格納RDエリアは,搬出元と同じ名称のものを搬入先にも定義しておく必要があります。
  7. 搬入する表,トリガ,又はストアドプロシジャの所有者には,表,トリガ,又はストアドプロシジャを格納するRDエリアの利用権限が必要です。
  8. ストアドプロシジャの搬入時,ストアドプロシジャが使用する表は搬入先に定義しておく必要があります。該当する表が定義されていない場合は,ストアドプロシジャの搬入はできません。
  9. 制御文ファイルに,-tオプション,-gオプション,及び-pオプションは混在して指定できません。
  10. 搬入時に,2メガバイトを超えるSQL文を実行する場合(表,トリガ,又はストアドプロシジャを定義するSQL文の長さが2メガバイトを超える場合),搬入はできません。
  11. 次に示す表の定義情報,及びストアドプロシジャの情報は,搬出できません。
    • 抽象データ型を含む表定義(CREATE TABLE)
    • インデクス型を指定したインデクス定義(CREATE INDEX)
    • 関数定義(CREATE FUNCTION,及びシステム定義スカラ関数)
    • 抽象データ型定義(CREATE TYPE)
    • 抽象データ型を含むストアドプロシジャ(CREATE PROCEDURE)
    • 抽象データ型内で宣言されているストアドプロシジャ(CREATE TYPE)
    • 手続き定義の中から手続きを呼び出している手続き(CREATE PROCEDURE)
    • 手続き定義の中から関数定義(CREATE FUNCTION,及びシステム定義スカラ関数)を呼び出している手続き(CREATE PROCEDURE)
    • TABLEに指定した表に抽象データ型の列を持つ注釈付加(COMMENT)
    • COLUMNに指定した列が抽象データ型である注釈付加(COMMENT)
  12. HiRDB/パラレルサーバで共用表を搬入する場合,搬入先の環境の共用表,及び共用表に定義した共用インデクスを格納するRDエリアは,すべて共用RDエリアである必要があります。共用RDエリアでない場合,SQLエラーとなります。また,共用表でない表を搬入する場合,及び表の格納RDエリアが共用RDエリアの場合,SQLエラーとなります。共用表と搬入先のRDエリアとの関係を次に示します。なお,HiRDB/シングルサーバの共用表の場合,共用RDエリアを作成しないため,該当しません。
    搬入元の表の種別 搬入先のRDエリアの定義 定義の実行可否 エラー後のpdexpの処理
    表格納用RDエリア 表に定義したインデクスの格納RDエリア インデクス
    共用表 共用RDエリア 共用RDエリア 該当しません。
    共用RDエリア 非共用RDエリア 処理を中断し,表定義は無効となります。
    非共用RDエリア 共用RDエリア × 処理を中断します。
    非共用RDエリア 非共用RDエリア ×
    非共用表 共用RDエリア 共用RDエリア ×
    共用RDエリア 非共用RDエリア ×
    非共用RDエリア 共用RDエリア 処理を中断し,表定義は無効となります。
    非共用RDエリア 非共用RDエリア 該当しません。
    (凡例)
    ○:定義をします。
    △:定義をしますが,SQLエラーとなります。
    ×:定義をしません。
    注※
    pdexpは,定義系SQLの内部COMMITを抑止し,処理途中でエラーが発生した場合はロールバックします。
  13. 参照表定義時に内部的に作成されるトリガは搬出できません。搬出時にそのトリガを指定した場合,KFPX28504-Wメッセージが出力されます(該当するトリガの処理はスキップし,次のトリガの搬出をします)。

(3) 定義系SQLの生成についての規則

  1. 搬出時(-eオプション)に,定義系SQLの生成(-oオプション)を指定した場合,定義系SQLの生成はしません。
  2. 定義系SQLを生成する場合,SQL文の生成順序は搬出順となります。
  3. 次に示す表,手続き,及び関数の定義系SQLは生成されません。
    • 抽象データ型を含む表定義(CREATE TABLE)
    • 手続きのパラメタのデータ型として抽象データ型を指定している手続き(CREATE PROCEDURE)
    • 手続き定義中の手続き(CREATE PROCEDURE)
    • 抽象データ型内で宣言されている手続き及び関数(CREATE TYPE)
    • インデクス型を指定したインデクス定義(CREATE INDEX)
    • 関数定義(CREATE FUNCTION)
  4. 生成された定義系SQLには,データベース定義ユティリティの入力ファイルとして利用できるように,行の最後にセミコロン(;)が付きます。ただし,CREATE PROCEDURE,及びCREATE TRIGGERの場合はend_proc;が付きます。
  5. CREATE PROCEDURE,及びCREATE TRIGGERを生成する場合,SQL最適化オプション,及びSQL拡張最適化オプションの指定値は,数値に変換された形になります。
  6. 表の定義系SQLを生成する場合,その表に外部キー,又は検査制約が定義されているときは,表の定義系SQLと同時に,外部キー,及び検査制約の定義系SQLも生成します。この外部キー,及び検査制約の定義系SQLを生成する場合,外部キー,及び検査制約の制約名の定義位置は,クライアント環境定義のPDCNSTRNTNAMEとシステム定義のpd_constraint_nameオペランドの指定値によって決まります。PDCNSTRNTNAMEについてはマニュアル「HiRDB Version 8 UAP開発ガイド」を,pd_constraint_nameオペランドについてはマニュアル「HiRDB Version 8 システム定義」を参照してください。
  7. 生成された定義系SQLの改行条件を次に示します。
    生成された定義系SQL 改行条件
    CREATE TABLE
    • CREATEから表識別子まで
    • 列定義ごと
    • 表格納用RDエリアごと
    • 表オプションごと
    • 外部キーごと
    • 検査制約定義ごと
    • WITH PROGRAM
    • 1行が80バイトを超える場合は,80バイトごと
    CREATE INDEX
    • CREATEからインデクス識別子まで
    • ONから表識別子まで
    • 列定義ごと
    • インデクス格納用RDエリアごと
    • インデクスオプションごと
    • 1行が80バイトを超える場合は,80バイトごと
    CREATE ALIAS 1行が80バイトを超える場合は,80バイトごと
    COMMENT 1行が80バイトを超える場合は,80バイトごと
    CREATE VIEW
    • CREATEからASまで
    • 1行が80バイトを超える場合は,80バイトごと
    CREATE PROCEDURE
    • CREATEからパラメタモード指定まで
    • 定義ソース文中にある改行記号
    • SQLコンパイルオプション
    • SQL手続き文
    • 1行が80バイトを超える場合は,80バイトごと
    CREATE TRIGGER
    • CREATEからトリガ動作
    • 定義ソース文中にある改行記号
    • SQLコンパイルオプション
    • WITH PROGRAM
    • 1行が80バイトを超える場合は,80バイトごと
  8. 列のデータ型がCHAR型,かつ文字集合UTF-16を指定した列を,キーレンジ分割,又はマトリクス分割(境界値指定のキーレンジ分割)の分割キー指定し,分割キーの長さが列の定義長を超える表は,表の定義系SQLは生成できません。

(4) 参照制約を定義した表の搬出入の規則について

(a) 搬出
  1. 参照表,及び被参照表を搬出すると,無条件に主キー,及び外部キーの定義も搬出します。
  2. 表定義情報は,制御文ファイルに指定した順序に関係なく,HiRDBが搬出順序を決定して被参照表を先に搬出します。-vオプションを指定した場合は,制御文ファイルに指定した順序で搬出します。
  3. トリガ定義情報,又はストアドプロシジャ情報は,制御文ファイルに指定した順序で搬出します。
(b) 搬入
  1. 参照表,及び被参照表を搬入すると,無条件に主キー,及び外部キーの定義も搬入します。
  2. 搬入先に同一名称の制約がある場合,CREATE TABLEのSQLエラーとなります。この場合,次の表の処理をしないで,搬入処理を終了します。
  3. 主キー,並びにクラスタキーのインデクス番号,及び表番号は,搬入先で新たに割り当てられます。
  4. 主キーのインデクス識別子は,搬入時の表の表番号を基に決まります。したがって,搬出元と同じになるとは限りません。
  5. 参照表を搬入する場合の,被参照表を使用するSQLオブジェクトの扱いを次に示します。
    表定義時の参照動作 -wオプション 被参照表を使用するSQLオブジェクトの扱い 備考
    CASCADE 指定あり 参照表と被参照表の整合性を保つために,内部的にトリガが定義されます。このとき,SQLオブジェクトが作成されるため,被参照表を使用する関数,手続き,及びトリガのSQLオブジェクトが無効になります。 被参照表を使用する関数,手続き,及びトリガのSQLオブジェクトが既にある場合,そのSQLオブジェクトは無効な状態となっています。そのため,参照表を搬入した後に,SQLオブジェクトを再作成する必要があります。
    指定なし 被参照表を使用する関数,手続き,及びトリガのSQLオブジェクトが無効になります。そのため,そのSQLオブジェクトを再作成しないと,参照表と被参照表の整合性が保たれないため,CREATE TABLEのSQLエラーとなります。
    RESTRICT 指定あり 被参照表を使用する関数,手続き,及びトリガのSQLオブジェクトが有効な場合,被参照表の行を更新又は削除してしまうため,整合性が保てなくなります。そのため,そのSQLオブジェクトは無効となります。 被参照表を使用する関数,手続き,及びトリガのSQLオブジェクトが既にある場合,そのSQLオブジェクトは無効な状態となっています。そのため,参照表を搬入した後に,SQLオブジェクトを再作成する必要があります。
    指定なし 被参照表を使用する関数,手続き,及びトリガのSQLオブジェクトが無効になります。そのため,そのSQLオブジェクトを再作成しないと,参照表と被参照表の整合性が保たれないため,CREATE TABLEのSQLエラーとなります。

    (凡例)−:特にありません。

(5) 注意事項

  1. ディクショナリ搬出入ユティリティの結果は,ユティリティ実行時のリターンコード,又はエラーメッセージの有無で確認できます。ユティリティ実行時のリターンコードを次に示します。
    0:正常終了です。
    4:警告レベルのエラーです。
    8:正常に終了したものと,一部処理をスキップしたものとがあります。
    12:正常な処理は1件も完了しないで処理を終了しました。
  2. 表のアクセス権限は,搬入後に定義系SQLのGRANTで設定してください。
  3. ビュー表を搬入する場合,ビュー表の搬入前に,基となる実表を搬入又は定義し,アクセス権限を設定しておいてください。
  4. ディクショナリ搬出入ユティリティは,同時に複数実行できません。既に処理を実行している場合は,その処理が終了してから次の処理を実行してください。
  5. 搬入処理は,搬入先システムで次に示す定義系SQLを実行するのと同様の機能です。各SQLの仕様を確認してから搬入を実行してください。
    <表定義情報の搬出入の場合>
    • ALTER TABLE
    • COMMENT
    • CREATE ALIAS
    • CREATE INDEX
    • CREATE TABLE
    • CREATE VIEW
    <トリガ定義情報の搬出入の場合>
    • CREATE TRIGGER
    <ストアドプロシジャ情報の搬出入の場合>
    • CREATE PROCEDURE
    SQLの仕様については,マニュアル「HiRDB Version 8 SQLリファレンス」を参照してください。
  6. ディクショナリ搬出入ユティリティの強制終了,又はサーバの停止などによって,搬出処理が中断された場合,KFPX28402-Iメッセージが出力されていても,搬出ファイルに表定義情報,トリガ定義情報,又はストアドプロシジャ情報が搬出されていないことがあります。この場合には,再度ディクショナリ搬出入ユティリティを実行し,搬出処理を正常に終了させてください。
  7. pdexpを実行する場合,搬出ファイルと定義系SQL出力ファイルのアクセス権限を,HiRDB管理者に対して与えておく必要があります。

(6) 搬入時に作成される定義系SQLが2メガバイトを超えた場合の修正例

pdexpで搬入をする場合,定義系SQLが作成され,その定義系SQLが実行されます。このとき,定義系SQLには,省略時仮定値の構文も作成されるため,SQL文の最大長2メガバイトを超えることがあります。

定義系SQLが2メガバイトを超えた場合の修正例を次に示します。ここでは,CREATE TABLEを例に説明します。

<CREATE TABLEが2メガバイトを超えた場合の例>
CREATE TABLEが2メガバイトを超えた場合,2メガバイト以内に収まるように,列IDの大きいものから列定義部分を削除した状態でCREATE TABLEが作成されます。このとき,削除された列定義部分を追加する必要があるため,削除された列定義部分を追加するALTER TABLEが作成されます。例を次に示します。
 
CREATE TABLE "root"."T1"
("C1" INTEGER NOT NULL,
"C2" CHAR(100),
     :
     :
"C98" VARCHAR(100)
) IN (("RDUSER01") "C100" < 1500
("RDUSER02"))
PCTFREE=(30,10)
FOREIGN KEY ("C1","C2") REFERENCES "root"."T2"
  ON DELETE RESTRICT ON UPDATE RESTRICT CONSTRAINT CNST01
;   ........................................................1
ALTER TABLE "root"."T1"
ADD "C99" INTEGER
;   ........................................................2
ALTER TABLE "root"."T1"
ADD "C100" INTEGER NOT NULL 
;   ........................................................2
 
[説明]
  1. 列C99,及び列C100が除かれた状態のCREATE TABLEが作成されます。
  2. CREATE TABLEから削除された列C99,及び列C100を追加するALTER TABLEが作成されます。
[CREATE TABLEの列定義部分が削除されたことによって発生するSQLエラー]
1.で削除される列が,次のどれかに該当する場合,SQLエラーとなります。
  • 分割キー
  • クラスタキー
  • 参照制約で指定した列
  • 検査制約の探索条件で指定した列
この例では,分割キーである列C100が削除されているため,作成されるCREATE TABLEはSQLエラーとなります。

<SQLエラーを回避する方法>
SQLエラーとなる場合,次の手順で回避できます。
  1. 搬入時に-oオプションを指定し,定義系SQLを生成します(定義系SQLをファイルに出力します)。
  2. 1.で出力した定義系SQLの,CREATE TABLEの省略時仮定値の部分を削除します。
  3. 1.で出力した定義系SQLの,先頭のALTER TABLEから,該当するALTER TABLE(CREATE TABLEで削除されているためにSQLエラーとなる列定義)までを,CREATE TABLEの列定義に移動します。
  4. 編集した定義系SQLを,pddefで実行します。
上記の定義系SQLの編集例を次に示します。
 
CREATE TABLE "root"."T1"
("C1" INTEGER NOT NULL,
"C2" CHAR(100),
     :
     :
"C98" VARCHAR(100)
"C99" INTEGER   ...............上記手順3.で追加
"C100" INTEGER NOT NULL   .....上記手順3.で追加
) IN (("RDUSER01") "C100" < 1500
("RDUSER02"))
PCTFREE=(30,10)
FOREIGN KEY ("C1","C2") REFERENCES "root"."T2"
  CONSTRAINT CNST01   .........上記手順の2.で一部分を削除
;

(7) BOMを持つファイルの使用

pdsetupコマンドで文字コードとしてutf-8を選択した場合,pdexpの入力ファイルには,BOMを持つファイルを使用できることがあります。pdexpでのBOMを持つファイルの使用可否を次の表に示します。なお,pdexpの入力ファイルとしてBOMを持つファイルを使用しても,BOMは読み飛ばされます。また,pdexpで出力されるファイルにはBOMは付きません。

表9-1 pdexpでのBOMを持つファイルの使用可否(UTF-8の場合)

オプション 入力ファイル BOMを持つファイルの使用
-l 搬出ファイル ×
-f 制御文ファイル

(凡例)
○:使用できます。
×:使用できません。