Hitachi

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


8.9.15 option文(データ処理に関する情報の記述)

データ処理に関するオプション機能を使用する場合に指定します。

<適用基準>

次のどれかのオプション機能を使用したい場合に指定します。

  • 空白変換レベルの指定(spacelvlオペランド)

  • リロード時の,空き領域比率の変更(tblfreeオペランド)

  • インデクス作成時の,空き領域比率の変更(idxfreeオペランド)

  • 同期点指定の再編成,又は同期点指定のリロード(jobオペランド)

  • pdrorgの実行時間の監視(exectimeオペランド)

  • 表の再編成の再実行時に,表のステータスを強制的に通常状態に戻す指定(tblstatusオペランド)

  • アンロードする表の排他制御モードの変更(unldenqオペランド)

  • UTF-8の列データを,UTF-16のアンロードデータファイルでアンロードする場合の指定(charsetオペランド)

〈この項の構成〉

(1) 形式

 option 〔spacelvl={0|1|3}〕
     〔tblfree={未使用領域比率|(〔未使用領域比率〕,セグメント内空きページ比率)}〕
     〔idxfree=未使用領域比率〕
     〔job={ジョブ名〔,同期点行数〕〔,CLR〕|,,CLR}〕
     〔exectime=pdrorgの実行監視時間〕
     〔tblstatus=clear〕
     〔unldenq={tblenq|rdenq|nowait}〕
     〔charset={utf-16be|utf-16le}〕

(2) 説明

(a) spacelvl={0|1|3}

再編成するときに,データの空白変換をするかどうかを指定します。0,1,及び3のことを空白変換レベルといいます。

0:

データの空白変換をしません。

1:

リロード時にアンロードデータの空白変換をします。

<適用基準>

次のような場合に指定します。

  • 既存データの空白文字を統一したい場合

  • 別システムに表データを移行する場合に,移行先システムで空白文字を統一したいとき

3:

1と同様の空白変換をして,更に-Wオプション指定のアンロード時にアンロードデータの空白変換をします。

<適用基準>

-Wオプション指定で出力したアンロードデータをUAPなどで使用する場合に,そのアンロードデータの空白文字を統一したいとき

<注意事項>

  • 各指定値による空白変換の有無を次に示します。

    pdrorgの処理内容

    オプション

    spacelvlの指定値

    -c

    -k

    -W

    0

    1

    3

    再編成

    user

    rorg

    ×

    ※1

    ※1

    アンロード

    user

    unld

    あり

    ×

    ×

    ※2

    なし

    ×

    ×

    ×

    リロード

    user

    reld

    ×

    ※1

    ※1

    ディクショナリ表の再編成

    dic

    rorg

    ×

    ×

    ×

(凡例)

○:空白変換をします。

×:空白変換をしません。

−:該当しません。

注※1

処理対象の表の列が各国文字列型,又は混在文字列型の場合,リロード時に次のようにアンロードデータの空白変換をします。

各国文字列型の列の場合:

アンロードデータ中の連続する半角空白2バイトを,全角空白1文字に変換します。

ただし,先頭から2バイト単位で変換します。

混在文字列型の列の場合:

アンロードデータ中の全角空白1文字を,半角空白2バイトに変換します。

文字コードがutf-8の場合,全角空白1文字(3バイト)を半角空白2バイトに変換します。MCHARの場合は,データ長が短くなった分,定義長まで後ろから半角空白が埋められます。MVARCHARの場合は,データ長が短くなったままとなります。

注※2

処理対象の表の列が各国文字列型の場合,アンロード時にアンロードデータ中の全角空白1文字を,半角空白2バイトに変換します。

  • 抽象データ型がある表の場合,抽象データ型のリロード方式によって,次のように空白変換をします。

    抽象データ型のリロード方式

    コンストラクタ関数の引数のデータ型

    option文のspacelvlオペランドの指定値

    省略,又は0

    1,又は3

    プラグインのアンロード機能を使用してアンロードしたアンロードデータファイルからリロードする

    ×

    ×

    プラグインのコンストラクタパラメタ逆生成関数を使用したアンロードデータファイルから,コンストラクタ関数を使用してリロードする

    NCHAR,NVARCHAR,MCHAR,MVARCHAR

    ×

    上記以外

    ×

    ×

    上記の機能を使用しないでリロードする

    ×

    ×

(凡例)

○:空白変換をします。

×:空白変換をしません。

−:該当しません。

注※

コンストラクタ関数の引数のデータ型(対応する抽象データ型のreld_func文のfuncオペランドで指定した引数の型)に対して,空白変換をします。

  • クラスタキー,又はインデクスキーの構成列に各国文字列型を含む場合に,キー順アンロードをするときは,spacelvlの指定に関係なくデータベースに格納されているデータの値の順にアンロードします。そのため,-Wオプション指定のアンロードで空白変換をした場合,出力後のデータはキー順にならないことがあります。この場合,データロード後に,再度,空白変換をしない再編成をすれば,キー順に格納されます。

    また,サーバ間の横分割表の場合,空白変換の有無に関係なくクラスタキー,又はインデクスキー順のアンロードと同様に,必ずキー順にアンロードされるとは限らないので,キー順にデータを格納したいときは,アンロード後にユーザがソートをする必要があります。

  • 空白文字コードが統一されていないデータベースに対して,option文にspacelvl=1,又は3を指定して再編成する場合,次のような現象が発生します。

    • キー順アンロードしたデータが,キー順にならないことがあります。この場合,再度,空白変換をしない再編成をすれば,キー順に格納されます。

    • 空白変換対象の列が,ユニークキーインデクス又は主キーインデクスの構成列の場合,重複キーが発生することがあります。この場合,ユニークキー又は主キーでなければならないか検討し,必要ならば,空白変換をする前にデータを修正(キー値の修正,又は不要な行の削除など)してください。

    • 空白変換対象の列が分割キーの構成列の場合,分割条件の振り分けで格納RDエリアが変わることがあります。この場合,データの格納位置が変わっても処理ができるように,-gオプションを指定します。また,LOB列を含む場合は,-gオプション,及び-jオプションを指定します。

(b) tblfree={未使用領域比率|(〔未使用領域比率〕,セグメント内空きページ比率)}

リロードのときに,CREATE TABLEで指定した空き領域比率(PCTFREEの指定値)を変更してデータを格納したい場合に指定します。

スキーマ単位の再編成の場合,指定した値がすべての表に対して適用されます。

<適用基準>

表定義時に空き領域比率に0以外を指定した表の場合,この表の運用中に空き領域がなくなったとします。

この場合,満杯状態になったRDエリアの表に対してpdrorgを実行したときは,定義時の空き領域比率が適用されて,pdrorg実行時にRDエリアの容量不足が発生することがあります。その場合に,暫定的にRDエリアを拡張しないで,pdrorgの処理を完了できます。

未使用領域比率

0〜99の値を指定できます。

セグメント内空きページ比率

0〜50の値を指定できます。

(c) idxfree=未使用領域比率

インデクスを作成する場合に,CREATE INDEXで指定した空き領域比率(PCTFREEの指定値)を変更してインデクスを作成したいときに指定します。指定できる値は,0〜99です。

スキーマ単位の再編成の場合,指定した値がすべての表に対して適用されます。

<適用基準>

インデクス定義時に空き領域比率に0以外を指定したインデクスの場合,この表の運用中に空き領域がなくなったとします。この場合,満杯状態になったRDエリアのインデクスに対してpdrorgを実行したときは,定義時の空き領域比率が適用されて,pdrorg実行時にRDエリアの容量不足が発生することがあります。その場合に,暫定的にRDエリアを拡張しないで,pdrorgの処理を完了できます。

(d) job={ジョブ名〔,同期点行数〕〔,CLR〕|,,CLR}

同期点指定の再編成,又は同期点指定のリロードをする場合に指定します。

同期点指定の再編成,及び同期点指定のリロードとは,任意の件数のデータを格納するごとに,トランザクションを決着する再編成及びリロードのことをいいます。ログ取得方式がログ取得モード(-l a)又は更新前ログ取得モード(-l p)の場合,データの格納途中で障害が発生したときでも,データを最初から格納し直す必要がなく,短時間でデータベースを回復できます。この場合の対処方法については,マニュアル「HiRDB Version 9 システム運用ガイド」の「同期点指定の再編成実行中にユティリティが異常終了したときの対処方法」を参照してください。

ジョブ名 〜〈英数字〉((1〜3))

同期点指定の再編成,又は同期点指定のリロードを実行する場合のジョブ名を指定します。

ここで指定したジョブ名は,再編成又はリロード実行中にユティリティが異常終了した場合,後から再実行するときの名称となります。また,このジョブ名はほかのpdrorgのジョブ名と重複すると,再実行時に誤動作する原因になります。したがって,ジョブ名はHiRDBシステムでユニークになる名称を指定してください。

同期点行数 〜((1〜1000))《100》

何万件格納するごとにトランザクションを決着するか,データ件数を指定します。例えば,100を指定すると,100万件ごとに同期点が取得されます。

ここで小さな値を指定した場合,少ない件数でトランザクションが決着するので,異常終了時のロールバック処理は短くなります。しかし,トランザクションの生成,決着や,プロセスの再起動が頻繁に発生するため,オーバヘッドが大きくなります。一方,大きな値を指定した場合,処理性能の劣化は少なくなりますが,障害発生時の回復時間は長くなります。

ジョブ名を指定しないで同期点行数だけを指定した場合,エラーとなります。

CLR

pdrorgの再実行が必要ない場合,又は現在データベース中にある同期点情報をクリアして再度pdrorgを実行する場合に指定します。

ユティリティが異常終了した場合,同期点情報がデータベースに残ります。この情報が残ったままだと,次に実行したユティリティが動作できない場合があります。

CLRを指定した場合,ほかのユーザやユティリティが設定した同期点情報をクリアしてしまうため,注意して使用してください。

データベース中に同期点情報が設定されているかどうかは,データベース状態解析ユティリティ(pddbst)の表単位の状態解析で確認できます。

<適用基準>

大量データの再編成,リロードをする場合など,格納時間が長くなるときに有効となります。ただし,同期点処理が実行される分,処理性能は悪くなります。また,データページについては,同期点のたびに新たなページから格納を開始するため,データ格納に必要なページ数が通常の再編成よりも多くなります。そのため,RDエリアの空き容量が少ない場合は,適用しない方がよいです。

<jobオペランドの指定例>
  • 100万件単位に同期点指定の再編成,又は同期点指定のリロードをする場合

    job=JOB,100 又は job=JOB

  • 現在設定されている同期点情報をクリアして,新たに100万件単位の同期点指定の再編成,又は同期点指定のリロードをする場合

    job=JOB,100,CLR 又は job=JOB,,CLR

  • 現在設定されている同期点情報をクリアして通常の再編成又はリロードをする場合

    job=,,CLR

<注意事項>
  1. ディクショナリ表に対しては,同期点指定の再編成はできません。

  2. 同期点情報は,ジョブ名で管理されます。例えば,同期点指定の再編成,又は同期点指定のリロードを実行していたpdrorg(A)が異常終了した場合,その表に対して同じジョブ名を指定したpdrorg(B)を実行すると,pdrorg(A)が残した同期点情報を引き継いでpdrorg(B)が動作してしまいます。このため,ジョブ名が重複しないように管理する必要があります。

  3. 同期点指定の再編成,又は同期点指定のリロードが異常終了した場合,そのときのジョブ名の同期点指定の再編成,又は同期点指定のリロードを再実行するまでは,その表に対して通常の再編成又はリロードも実行できません。

  4. 同期点情報はRDエリア単位に管理されます。このため,横分割した表の場合,次の条件では表全体の同期点情報が不一致となります。

    ・一部のRDエリアだけ再初期化された場合

    ・RDエリア単位の同期点指定の再編成,又は同期点指定のリロードでエラーが発生した場合

    各RDエリアが管理している同期点情報は,ジョブ名が同じ場合でも行数が不一致の場合は,再実行できません。しかし,同期点情報を保持しているRDエリアと保持していないRDエリアが混在する場合は,保持されている同期点情報で再実行できます。同期点情報のジョブ名が同じで行数が異なる場合の動作を次に示します。

    保持している同期点情報(同期点行数)

    表単位の同期点指定の再編成,又は同期点指定のリロードをした場合の入力開始行

    RDエリア1

    RDエリア2

    RDエリア3

    0

    0

    0

    0件目

    0

    n

    0

    n件目

    n

    0

    m

    実行できません。

    n

    m

    p

    実行できません。

    (凡例)

    0:同期点情報を保持していない状態

    n,m,p:保持している同期点行数

  5. 次の条件をすべて満たす場合,同期点指定の再編成,又は同期点指定のリロードはお勧めできません。

    ・HiRDB/パラレルサーバ

    ・表を複数のサーバに横分割している

    ・-gオプションを指定していない

    この場合,サーバごとに別々の制御で処理がされます。このため,障害発生時には,サーバごとにアンロード中やリロード中であったり,一部のサーバの処理が終了していることがあります。この状態では,異常終了後にサーバごとに異なる再実行方法をユーザが指示する必要があり,運用が複雑になります。

  6. 同期点指定の再編成,又は同期点指定のリロードが異常終了した場合,再実行時のインデクス作成方法(-iオプション)は変更できません。

  7. 同期点指定の再編成,又は同期点指定のリロードの実行中に,異常終了する前にリマウント操作をした場合,再実行するときは1巻目からマウントし直して実行してください。

  8. 同期点指定の再編成,又は同期点指定のリロードが異常終了してから再実行するまでに,RDエリアの再初期化,及びPURGE TABLE文を実行すると,設定されていた同期点情報が削除されます。

  9. LOB列構成基表に対してだけ同期点指定の再編成,又は同期点指定のリロードをする場合,異常終了後の再実行時にはCLRを指定してください。CLRを指定しない場合,再編成したのにLOB列の検索性能が劣化したりすることがあります。

  10. 同期点指定の再編成,又は同期点指定のリロードで制御できるデータ件数の上限は4,294,960,000件です。これ以上のデータ件数の再編成をする場合は,次のどちらかの運用を検討してください。

    ・RDエリア単位に再編成する。

    ・-W指定でpdload用入力データファイルを複数個に分けて出力し,複数回pdloadで同期点指定のデータロードをする。

(e) exectime=pdrorgの実行監視時間

   〜<符号なし整数>((0〜35791394))

pdrorgの実行時間を監視する場合に,その監視時間を分単位で指定します。0を指定した場合は,実行時間の監視はしません。指定した監視時間内にpdrorgの処理が終了しなかった場合,pdrorg制御プロセスを強制終了し,無応答原因の調査用に障害情報を取得します。

<pdrorgの実行時間の監視>

pdrorg実行時,次の2つの処理に対して実行時間を監視できます。

  • 表,インデクスのメンテナンス前準備で,ディクショナリを操作する時間(-Xオプション)

  • 実際に表,インデクスのメンテナンスをする時間(option文のexectimeオペランド)

-Xオプション,及びoption文のexectimeで設定する監視時間の関係については,次の図を参照してください。

図8‒23 pdrorg実行時の監視時間範囲の関係

[図データ]

このオペランドを省略した場合は,次の優先順位でシステム定義の指定値に従います。

  1. pd_utl_exec_time

  2. pd_cmd_exec_time

<適用基準>

夜間バッチなどで監視時間を設定しておけば,pdrorg実行中に何らかの障害(通信障害(一時的な障害を含む),ディスク障害など)が発生し,pdrorgが無応答状態になった場合は異常終了するため,早期に異変を検知できて,早期に回復処理に着手できます。

<指定値の目安>

このオペランドは無応答障害検知を目的とするもので,長大トランザクション実行時間を監視するものではありません。したがって,指定値は,該当する表の処理時間に余裕をもたせた値にする必要があります。例えば,7,8分程度で終了するpdrorgの実行時間を監視する場合は,exectime=10と指定しないで,exectime=20と指定するようにしてください。なお,データ量が単調に増加する表の場合,適時指定値を見直す必要があります。

(f) tblstatus=clear

表の再編成の再実行時に,強制的に表のステータスモードを通常状態にする場合に指定します。この場合,表の再編成処理は再開始しません。

<適用基準>
  • データ未完状態となったRDエリア(表)をSQLで参照したい場合など,強制的に表のステータスモードを通常状態に戻すときに指定します。

  • 再編成(-k rorg)実行時,インデクスの一括作成中にユティリティが異常終了した場合に,再編成(-k rorg)を再実行しないでインデクス一括作成(-k ixmk)やインデクス再作成(-k ixrc)でインデクス作成だけを行って表とインデクスの状態を回復したとき,表のステータスモードを通常状態に戻すときに指定します。

<注意事項>
  1. このオペランドは,-k rorgの場合にだけ指定できます。そのほかの場合に指定するとエラーになります。

  2. このオペランドを指定して表のステータスを通常状態に戻した後,表の再編成をしても再編成処理は再開始されません。この場合,バックアップから表を回復する必要があります。表を回復しないで表の再編成をすると,アンロードデータファイルの上書き,及びデータ件数不正(データが0件)となります。

(g) unldenq={tblenq|rdenq|nowait}

アンロード時に,他トランザクションに更新を許可するかどうかを指定します(アンロードする表の排他制御モードを変更します)。なお,更新できるのは,アンロード処理でアクセスしていない部分だけです。

tblenq:

他トランザクションに,表に対する参照だけを許可する場合に指定します。この場合,表に共用モード,RDエリアに意図共用モードの排他が掛かります。

rdenq:

他トランザクションに,RDエリアに対する参照だけを許可する場合に指定します。この場合,表に意図共用モード,RDエリアに共用モードの排他が掛かります。

nowait:

他トランザクションに参照,及びアンロード処理対象外のRDエリアの更新を許可する場合に指定します。この場合,RDエリアにだけ意図共用モードの排他が掛かるため,アンロード中の表が更新できてしまいます。更新処理と同時にアンロードして作成したアンロードデータファイルを使用して,データロードやリロードをすると,データの重複や喪失の原因となるため,アンロード対象表(RDエリア)の更新がないことが保証できる場合にだけ使用してください。

<適用例>

次のような表,RDエリアの配置構成で,RDエリア1の表T1だけ(網掛け部分だけ)アンロードする場合,オペランドの指定によって他トランザクションの更新実行可否が変わります。

[図データ]

〔説明〕

他トランザクションの更新実行可否を次に示します。

unldenqの指定値

アンロード時の順序

排他制御モード

他トランザクションの実行可否

RDエリア

(NOWAIT検索時)

表T1

表T2

インデクス

RDエリア1

RDエリア2

RDエリア1

RDエリア2

参照

更新

参照

更新

参照

更新

参照

更新

tblenq

キー順

SR

SR

PR

×

×

物理順

rdenq

キー順

PR

PR

SR

×

×

物理順

nowait

キー順

SR

SR

SR

×

物理順

(凡例)

SR:意図共用モードの排他が掛かります。

PR:共用モードの排他が掛かります。

−:排他は掛かりません。

○:実行できます。

×:実行できません。

注※

表T1のRDエリア1のデータを更新しないように,ユーザが制御する必要があります。

(h) charset={utf-16be|utf-16le}

UTF-8の列データを,UTF-16のアンロードデータファイルでアンロードする場合,アンロードデータファイルのエンディアンを指定します。このオペランドは次の条件を満たす場合に指定できます。

  • -Wオプションを指定している。

  • アンロードデータファイルが,拡張DAT形式又は固定長データ形式のpdload用アンロードファイルである。

utf-16be:エンディアンがビッグエンディアンの場合に指定します。

utf-16le:エンディアンがリトルエンディアンの場合に指定します。

このオペランドを省略した場合,アンロードデータファイルの文字コードをUTF-8にしてアンロードします。

また,このオペランドを指定した場合,UTF-8の列データをUTF-16としてアンロードするため,pdrorgが文字コード変換をします。文字コード変換が発生するデータ型について次に示します。

項番

データ型

文字コード変換とcharsetオペランド指定の関係

指定なし

指定あり

utf-16be

utf-16le

1

CHAR,VARCHAR

文字集合指定なし

×

2

文字集合EBCDIC

×

×

3

文字集合UTF-16

×

4

NCHAR,NVARCHAR

×

×

×

5

MCHAR,MVARCHAR

×

6

BINARY型

×

×

×

7

BLOB

×

×

×

8

抽象データ型

CHAR,VARCHAR

×

9

NCHAR,NVARCHAR

×

×

×

10

MCHAR,MVARCHAR

×

11

BINARY型

×

×

×

12

BLOB

×

×

×

13

上記以外

×

×

×

14

上記以外

×

×

×

(凡例)

○:文字コードを変換します(変換後にデータ長が変わります)。

◎:文字コードを変換します(変換後もデータ長は変わりません)。

×:文字コードを変換しません。

変換前と変換後でデータ長が変わる場合,次のようにpdrorgがデータ長を調整します。

変換前と変換後でデータ長が変わらない場合
  • 拡張DAT形式のpdload用アンロードファイル(固定長文字属性列)のとき

    データを左詰めにし,列定義長まで空白文字を埋めてアンロードします。

  • 拡張DAT形式のpdload用アンロードファイル(可変長文字属性列)のとき

    変換後のデータをそのままアンロードします。

  • 固定長データ形式のpdload用アンロードファイルのとき

    データを左詰めにし,列定義長までパディング文字を埋めてアンロードします。

変換前と変換後でデータ長が変わる場合
  • 拡張DAT形式のpdload用アンロードファイル(固定長文字属性列)のとき

    データを左詰めにし,列定義長の2倍まで空白文字を埋めてアンロードします。

  • 拡張DAT形式のpdload用アンロードファイル(可変長文字属性列)のとき

    変換後のデータをそのままアンロードします。

  • 固定長データ形式のpdload用アンロードファイルのとき

    データを左詰めにし,列定義長の2倍までパディング文字を埋めてアンロードします。