Hitachi

ノンストップデータベース HiRDB Version 9 コマンドリファレンス(UNIX(R)用)


9.3.6 搬入時に作成される定義系SQLが2,000,000バイトを超えた場合の修正例

pdexpで搬入をする場合,定義系SQLが作成され,その定義系SQLが実行されます。その際,次に示す原因によって,作成されるSQL文が,SQL文の最大長2,000,000バイトを超えることがあります。

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

<CREATE TABLEが2,000,000バイトを超えた場合の例>

CREATE TABLEが2,000,000バイトを超えた場合,2,000,000バイト以内に収まるように,列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が作成されます。

[ALTER TABLEの列定義部分に追加されたことによって発生するSQLエラー]

2.で追加される列が,次のどれかに該当する場合,SQLエラーとなります。

  • 分割キー

  • クラスタキー

  • 参照制約で指定した列

  • 検査制約の探索条件で指定した列

この例では,分割キーである列C100が追加されているため,作成されるALTER TABLEはSQLエラーとなります。

<SQLエラーを回避する方法>

SQLエラーとなる場合,次の手順で回避できます。

  1. 搬入時に-oオプションを指定し,定義系SQLを生成します(定義系SQLをファイルに出力します)。

  2. 1.で出力した定義系SQLの,先頭のALTER TABLEから,該当するALTER TABLE(SQLエラーとなる列定義)までを,CREATE TABLEの列定義に移動します。

  3. 1.で出力した定義系SQLの,CREATE TABLEの省略時仮定値の部分を削除し,2,000,000バイト以内に収まるようにします。

  4. 編集した定義系SQLを,pddefで実行します。

上記の定義系SQLの編集例を次に示します。

CREATE TABLE "root"."T1"
("C1" INTEGER NOT NULL,
"C2" CHAR(100),
     :
     :
"C98" VARCHAR(100),
"C99" INTEGER,   ...............上記手順2.で追加
"C100" INTEGER NOT NULL   .....上記手順2.で追加
) IN (("RDUSER01") "C100" < 1500
("RDUSER02"))
PCTFREE=(30,10)
FOREIGN KEY ("C1","C2") REFERENCES "root"."T2"
  CONSTRAINT CNST01   .........上記手順の3.で一部分を削除
;