RMU Loadコマンドは、次の処理に使用できます。
次の2つの方法のいずれかを使用してデータをロードできます。
デフォルトでは、パラレル・ロード操作は次のように設定されます。
エグゼキュータと通信バッファが設定されると、パラレル・ロード操作は入力ファイルを次のように処理します。
Row_Count修飾子とParallel修飾子(Executor_CountおよびBuffer_Countオプションが使用可能)を使用して、パラレル・ロード操作を細かく調整することもできます。
ロード操作のパフォーマンスを最適化するヒントは、『Oracle Rdb Guide to Database Design and Definition』を参照してください。
RMU Loadコマンドでは、次の5種類のデータ・ファイルを使用できます。セキュリティ監査ジャーナル以外のすべてのファイルの拡張子は.unlです。
- テキスト・データ・ファイル
- デリミタ付きテキスト・データ・ファイル
- バイナリ・データ・ファイル
- 特殊構造ファイル
- OpenVMSのセキュリティ監査ジャーナル・ファイル
特殊構造ファイルおよびセキュリティ監査ジャーナル・ファイル以外では、データ・ファイルをロードするRMU Loadコマンドラインでレコード定義ファイル(.rrd)を指定する必要があります。レコード定義ファイルによって、ロードするデータの説明(メタデータ)がOracle RMUに提供されます。
次のリストに、3種類のファイルをロードする場合の追加要件を示します。
- テキスト・データ・ファイル
テキスト・データ・ファイル(.unl)をロードするには、Record_Definition修飾子にFormat=Textオプションを指定する必要があります。
次のコマンドでは、テキスト・データ(employees.unl)をmf_personnelデータベースのEMPLOYEES表にロードします。employees.rrdファイルによってemployees.unlのデータのレコード定義が指定されます。
$ RMU/LOAD/RECORD_DEFINITION=(FILE=employees.rrd, FORMAT=TEXT) - _$ mf_personnel EMPLOYEES employees.unl
次のコマンドを発行して、前述の例に適した.rrdファイルを生成できます。
$ RMU/UNLOAD/RECORD_DEFINITION=(FILE=employees.rrd, FORMAT=TEXT) - _$ mf_personnel EMPLOYEES unload.unl
- デリミタ付きテキスト・データ・ファイル
デリミタ付きテキスト・データ・ファイル(.unl)をロードするには、Record_Definition修飾子にFormat=Delimited_Textオプションを指定する必要があります。
次のコマンドでは、デリミタ付きテキスト・データ(employees.unl)をmf_personnelデータベースのEMPLOYEES表にロードします。employees.rrdファイルによって、employees.unlの形式が示されます。
$ RMU/LOAD/RECORD_DEFINITION=(FILE=employees.rrd, - _$ FORMAT=DELIMITED_TEXT, TERMINATOR="#") - _$ mf_personnel EMPLOYEES employees.unl
次のコマンドを発行して、前述の例に適した.rrdファイルを生成できます。
$ RMU/UNLOAD/RECORD_DEFINITION=(FILE=employees.rrd, - _$ FORMAT=DELIMITED_TEXT) mf_personnel EMPLOYEES unload.unl
- バイナリ・データ・ファイル
バイナリ・データ・ファイルをロードするには、ロードするレコードがレコード定義のサイズおよびデータ型の両方と一致する必要があります。レコードはすべて同じ長さで、各レコードでレコード全体にデータが含まれている必要があります。最後のフィールドが文字データで、情報がフィールド長より短い場合、フィールドの残りの部分は空白埋めされます。パック10進形式で格納されたデータを含むフィールドはロードできません。
次のコマンドでは、バイナリ・データ(employees.unl)をmf_personnelデータベースのEMPLOYEES表にロードします。employees.rrdファイルによって、employees.unlの形式が示されます。
$ RMU/LOAD/RECORD_DEFINITION=(FILE=employees.rrd) mf_personnel - _$ EMPLOYEES employees.unl
次のコマンドを発行して、前述の例に適した.rrdファイルを生成できます。
$ RMU/UNLOAD/RECORD_DEFINITION=(FILE=employees.rrd) mf_personnel - _$ EMPLOYEES unload.unl
- データとメタデータの両方を含む特殊構造バイナリ・ファイル
特殊構造バイナリ・ファイル(RMU UnloadコマンドでRecord_Definition修飾子を指定せずに作成)をロードするには、RMU Unloadコマンドで作成されたファイル(.unl)を指定する必要があります。
次のコマンドでは、employees.unlファイルに含まれているバイナリ・データをmf_personnelデータベースのEMPLOYEES表にロードします。レコード定義情報は、.unlバイナリ・ファイルに含まれています。
$ RMU/LOAD MF_PERSONNEL EMPLOYEES employees.unl
この特殊構造ファイルemployees.unlは、次のRMU Unloadコマンドで作成されています。
$ RMU/UNLOAD MF_PERSONNEL EMPLOYEES employees.unl
- セキュリティ監査ジャーナル・ファイル
OpenVMSオペレーティング・システムで保持されているセキュリティ監査ジャーナル・ファイルからレコードをロードするには、セキュリティ監査ジャーナル・レコードが記録されているのと同じデータベースにレコードをロードするか、別のデータベースにレコードをロードするかを決める必要があります。いずれの場合も、レコード定義ファイルを指定する必要はありません。Audit修飾子を使用することで、セキュリティ監査ジャーナル・ファイルのレコード定義であることがOracle RMUに示されます。
次のコマンドでは、mf_personnelデータベースのセキュリティ監査ジャーナル・ファイル(論理名SECURITY_AUDIT)からmf_personnelデータベースのAUDIT_TABLE表にレコードがロードされます。
$ RMU/LOAD/AUDIT MF_PERSONNEL.RDB AUDIT_TABLE - _$ SECURITY_AUDIT
この例では、mf_personnelデータベースのセキュリティ監査ジャーナル・ファイル(論理名SECURITY_AUDIT)から監査データベースのAUDIT_TABLE表にレコードがロードされます。
$ RMU/LOAD/AUDIT=DATABASE_FILE=MF_PERSONNEL.RDB AUDIT.RDB - _$ AUDIT_TABLE SECURITY_AUDIT
セキュリティ監査ジャーナル・レコードのロードとセキュリティ監査ジャーナルのファイル名の詳細は、「使用上の注意」を参照してください。
レコード定義ファイル(.rrd)を指定する場合、レコード定義ファイルとロード先の表のデータベース定義は、指定したフィールドの数および各フィールドのデータ型が一致する必要があります。ロードするデータにデータベースの表定義での指定より多いフィールドが含まれている場合、データはロードできますが、.rrdファイルのフィールド定義にFILLERキーワードを使用して余分なフィールドを示す必要があります。「例」の例15を参照してください。
デフォルトでは、RMU Loadコマンドで指定された表はPROTECTED WRITEとされます。
表1-11に、ロードまたはアンロード操作時に起こるデータ型変換を示します。
表1-11 Oracle Rdbで行われるデータ型変換 元のデータ型 新しいデータ型 TINYINT INTEGER、QUADWORD、SMALLINT、FLOAT、DOUBLE PRECISION、VARCHAR、CHAR SMALLINT INTEGER、QUADWORD、FLOAT、DOUBLE PRECISION、VARCHAR、CHAR INTEGER SMALLINT、QUADWORD、FLOAT、DOUBLE PRECISION、VARCHAR、CHAR QUADWORD SMALLINT、INTEGER、FLOAT、DOUBLE PRECISION、VARCHAR、CHAR FLOAT DOUBLE PRECISION、CHARおよびVARCHAR DOUBLE PRECISION FLOAT、CHARおよびVARCHAR DATE CHARまたはVARCHAR TIME CHARまたはVARCHAR TIMESTAMP CHARまたはVARCHAR INTERVAL CHARまたはVARCHAR CHAR FLOAT、DOUBLE PRECISION、DATE、TIME、TIMESTAMP、INTERVAL、VARCHAR、SMALLINT、INTEGERまたはQUADWORD
これらのデータ型の説明は、『Oracle Rdb SQLリファレンス・マニュアル』を参照してください。
root-file-spec
表のロード先のデータベース・ルート・ファイルのファイル指定。デフォルトのファイル拡張子は.rdbです。table-name
ロードする表の名前またはそのシノニム。Audit修飾子が指定された場合、table-nameパラメータは、セキュリティ監査ジャーナル・レコードのロード先の表の名前です。表がない場合、Audit修飾子を指定したRMU Loadコマンドで表を作成し、ロードします。表がある場合、Audit修飾子を指定したRMU Loadコマンドで表をロードします。
input-file-name
ロードするデータを含むファイルの名前。デフォルトのファイル拡張子は.unlです。Audit修飾子が指定された場合、input-file-nameパラメータは、ロードする監査レコード・データを含むジャーナルの名前です。デフォルトのファイル拡張子は.AUDIT$JOURNALです。セキュリティ監査ジャーナルの名前は、DCL SHOW AUDIT/JOURNALコマンドを使用して確認できます。
Audit[=Database_File=db-name]
データベースのセキュリティ監査レコードを、OpenVMSのセキュリティ監査ジャーナルから次のものへロードできます。
- 監査対象のデータベースの表
Database_Fileオプションを使用せずにAudit修飾子を指定し、セキュリティ監査レコードをroot-file-specで指定したデータベースにロードすることを指定します。- 監査対象のデータベースとは別のデータベースの表
Audit=Database_File=db-name修飾子を指定して、root-file-specコマンド・パラメータで指定したデータベースに対するセキュリティ監査レコードをdb-nameオプション・パラメータで指定したデータベースにロードすることを指定します。
Audit修飾子を指定した場合、FieldsまたはTrigger_Relations修飾子は指定できません。
また、パラレル・ロード操作にAudit修飾子は指定できません。これを試行した場合、Oracle RMUから警告が返され、シングルエグゼキュータ・ロード操作が行われます。
Buffers=n
ロード操作時にデータの格納に使用するデータベース・バッファの数を指定します。値が指定されない場合、データベースのデフォルト値が使用されます。(データベースのデフォルト値は論理名RDM$BIND_BUFFERSで定義されています。論理名が定義されていない場合は、RMU DumpコマンドにHeader修飾子を使用して確認できます。RDM$BIND_BUFFERS論理名が定義されている場合、この値がRMU Dumpコマンドで表示された値に優先します。)ターゲット表に多くの索引または制約が定義されている場合、メモリーにできるだけ多くのデータを格納すると、必要なI/O操作が少なくなります。したがって、デフォルト値より多くのバッファを指定すると、ロード操作のスピードが上がります。データベース・バッファの設定の詳細は、『Oracle Rdb7 Guide to Database Performance and Tuning』を参照してください。
Commit_Every=n
Oracle Rdbでロードされたデータをコミットする頻度を指定します。シングルエグゼキュータ・ロード操作の場合、n個のレコードが格納されるごとにOracle Rdbでデータをコミットします。デフォルトでは、すべてのレコードの格納後にのみコミットします。パラレル・ロード操作の場合、Commit_Every修飾子は、使用される各エグゼキュータ(プロセス)に別々に適用されます。たとえば、5つのパラレル・プロセスが実行されている場合、Commit_Every=2修飾子の指定によって、各プロセスで2レコードを格納した後でOracle RMUでデータがコミットされます。つまり、100万レコードを10個のパラレル・プロセスでロードする場合、Commit_Every=1000修飾子を指定すると、.rujファイルには10,000行のビフォー・イメージ・データが格納されます。
Defer_Index_Updates修飾子を指定し、Commit_Every修飾子に大きな値を指定した場合、必要なメモリーが多くなります。詳細は、Defer_Index_Updates修飾子の説明を参照してください。特定の条件の下では、コミット操作が指定よりも頻繁に行われる場合があります。詳細は、Defer_Index_Updates修飾子の説明を参照してください。
データをコミットする頻度を決定するには、元々のロード操作が失敗した場合に再ロードしてもかまわないレコードの数を決めます。Statistics=On_Commit修飾子を使用すると、各コミット操作でロードされるレコードの数を示すメッセージが返されます。これによって、障害が起きた場合に、どこからロードを再開する必要があるかがわかります。
Place修飾子を指定して障害が起きた場合、最後に正常にコミットされたレコード番号ではなく、その前のコミットの位置からロードを再開します。Place修飾子では、ロードの前に.unlファイルが再編成されるため、ロード操作が失敗したレコードの番号は、元の.unlファイルの番号とは対応しません。
Constraints[=Deferred]
Noconstraints
ロードするデータの制約を評価するかどうか、またそのタイミングを指定します。Constraints修飾子を指定した場合、各レコードがロードされると、制約が評価されます。Noconstraints修飾子を指定した場合、ロード操作時に制約はまったく評価されません。Constraints=Deferred修飾子を指定した場合、入力ファイルからすべてのデータをロードした後で制約が評価されます。デフォルトはConstraints修飾子です。
大抵のロード操作でデフォルトを受け入れることをお薦めします。NoconstraintsおよびConstraints=Deferred修飾子は、ロードのパフォーマンスを最も優先する場合に有用です。データベースに定義されている制約を完全に把握し、入力データについてもよく知っていて、データをロードしても制約に違反しないことがわかっている必要があります。この場合、これらの修飾子を次のように使用します。
- Constraints=Deferred
この修飾子は、データを新しい表にロードする場合のパフォーマンスの向上に特に有用です。ロード操作の完了後、Constraints修飾子を指定してRMU Verifyコマンドを発行することを強くお薦めします。ただし、ロード操作の完了後のRMU Verifyコマンドでは、Constraints修飾子を使用したRMU Loadコマンドと同程度の時間が必要なことに注意してください。つまり、Constraints=Deferred修飾子を指定することによって、制約の検証を行うタイミングを遅らせているにすぎません。- Noconstraints
この修飾子は、Defer_Index_Updates修飾子を使用してパラレル・ロード操作を行う場合に特に有用です。ロード操作の完了後、Constraints修飾子を指定してRMU Verifyコマンドを発行することを強くお薦めします。ただし、Constraints修飾子を指定してRMU Verifyコマンドを発行すると、ロードした行のみではなく、表内のすべての行について制約のチェックが行われることに注意してください。
NoconstraintsまたはConstraints=Deferred修飾子を使用してRMU Loadコマンドを発行する前に、次の点について検討してください。
- ロード操作の前に表にデータが移入されている場合、ロード時に各レコードの制約をチェックする方が、新規レコードのロード後に表全体の制約を検証するよりコストは低くなります。たとえば、現在2,000レコードある表に1つの制約が定義されていて、新たに200レコードをロードするとします。レコードのロード時に制約を検証すると、制約の検証が200回行われます。ロード操作の完了を待って制約を検証すると、制約の検証は2,200レコードについて行われます。
- RMU Verifyコマンドでロード操作時に制約違反が起こったことがわかった場合、そのレコードを突き止め、削除するか、またはデータの整合性が保たれるようデータベースに変更を行う必要があります。これは時間のかかる処理です。
次のすべてが真である状況についても検討します。
- パラレル・ロード操作を行います。
- Constraints修飾子を指定します。
- データのロード先の表には制約が定義されています。
- 表に定義されている制約は遅延制約として定義されています。
- ロード操作時に制約の評価に失敗しました。
前述のような状況では、ロードされた行とロードされていない行は簡単に判別できません。したがって、表に遅延制約が定義されている場合、パラレル・ロード操作にConstraints=Deferred修飾子も指定することをお薦めします。これに従うと、制約に違反するレコードがデータベースに格納されます。ロード操作の完了後、制約に違反するレコードをデータベースから削除できます。
RMU Loadコマンドで制約に違反するデータをデータベースに格納したことがRMU Verifyコマンドでわかった場合に行う処理の例は、第1.65節の例6を参照してください。
Corresponding
.rrdファイルのフィールド名を表の列名とマッチングすることによって、フィールドを.unlファイルから表にロードします。Corresponding修飾子によって、表のアンロード、再編成および再ロードが簡単になります。たとえば、表の列はEMPLOYEE_ID、LAST_NAME、FIRST_NAMEの順で、.unlファイルのデータはEMPLOYEE_ID、FIRST_NAME、LAST_NAMEの順、.rrdファイルにリストされているフィールドはEMPLOYEE_ID、FIRST_NAME、LAST_NAMEの順の場合、Corresponding修飾子を使用することで、.unlファイルのデータを正しくロードできます。(同じタスクを行うのにFields修飾子を使用することもできますが、フィールドの数が多い場合、この方法では冗長な場合があります。)
.unlファイルには、ロード先のデータベースの各フィールドに対するデータが含まれている必要があります。含まれていない場合、Fields修飾子を使用する必要があります。
Corresponding修飾子が省略された場合、RMU Loadコマンドでは.rrdファイルに記述されている列名ではなく、.unlでの順序に基づいてデータベースにデータをロードします。
Corresponding修飾子は、FieldsまたはAudit修飾子とは組み合せて使用できません。
Defer_Index_Updates
Nodefer_Index_Updates
Defer_Index_Updates修飾子では、一意でない索引(記憶領域内でのデータの配置情報を定義するもの以外)をコミット時まで再構築しないよう指定します。この修飾子を使用すると、索引の構築が遅延されない場合よりI/Oとロックの競合が少なくなりますが、ロックの競合があった場合、ロード操作が完全に失敗します。このような場合、ロード操作全体がその前のコミットまでロールバックされ、ロード操作を再度行う必要があります。(レコードの挿入は、入力ファイルの先頭から再開します)。このため、次のすべてが真の場合にのみDefer_Index_Updates修飾子を使用します。
- Noconstraints修飾子を指定します(または制約を削除したか、表に制約が定義されていません)。
- 表からトリガーを削除しました(または表にトリガーが定義されていません)。
- ロード対象の表に他のユーザーがアクセスしていません。
索引の更新を遅延する場合、非常に多くの仮想メモリーが必要なことにも注意してください。必要な仮想メモリーは、次の事項に直接比例します。
- 遅延される索引のIkeyの長さ
- 遅延される索引の数
- Commit_Every修飾子に指定したnの値
次の式を使用して各遅延索引に必要な仮想メモリーの量を推定できます。
- n=Commit_Every修飾子に指定した値
- I= (Ikeyの長さ + 50)
n * (I * number_defered_ikeys)
Nodefer_Index_Updates修飾子がデフォルトです。Nodefer_Index_Updates修飾子を指定した場合(またはデフォルトを受け入れた場合)、ロードする記憶領域内のデータの配置情報を定義する索引と表に定義されている他の索引の両方が、動詞実行時に再構築されます。
Parallel修飾子が指定されている場合、これによって、マネージド・デッドロックが発生します。次に、このようなケースについて説明します。
- Executor_1が索引ノードAを排他モードでロックします。
- Executor_2が索引ノードBを排他モードでロックします。
- Executor_1が索引ノードBのロックを要求します。
- Executor_2が索引ノードAのロックを要求します。
このような場合、Oracle Rdbでエグゼキュータの1つに格納済のデータをコミットするよう指示し、デッドロックを解消します。これによって、デッドロックの状況が解消し、ロード操作が続けられます。
Execute
Noexecute
ExecuteおよびNoexecute修飾子をList_Plan修飾子と組み合せて使用し、生成したプラン・ファイルを実行するかどうかを指定します。Noexecute修飾子では、プラン・ファイルを作成しますが、実行しないよう指定します。Noexecute修飾子を使用するか、Execute修飾子を使用する(またはデフォルトを受け入れる)かにかかわらず、Oracle RMUで指定したRMU Loadコマンドの妥当性チェックが行われます。妥当性チェックでは、指定した表が指定したデータベースにあるか、.rrdファイル(指定した場合)と表の整合性がとれているか、Fields修飾子に指定した列の数が.unlファイルの列の数と一致しているかなどが確認されます。妥当性チェックでは、プロセスとグローバル・ページ割当て制限が十分かなどは確認されません。
デフォルトでは、プラン・ファイルは、List_Plan修飾子を指定してRMU Loadコマンドが発行された場合に実行されます。
Fields=(column-name-list)
表の列をデータベースにロードするよう指定します。複数の列をリストする場合、列名をカンマで区切り、列名のリストをカッコで囲みます。また、列の順序が表に定義されている順序と異なる場合、この修飾子でロードする列の順序を指定します。指定した列の数およびデータ型は、.unlファイルの列の数およびデータ型と一致する必要があります。デフォルトは、表に定義されているすべての列と定義されている順序です。列のリストのかわりにオプション・ファイルを指定し、オプション・ファイルが空の場合、RMU Loadコマンドですべてのフィールドがロードされます。
List_Plan[=output-file]
Oracle RMUでプラン・ファイルを生成し、指定した出力ファイルに書き込むよう指定します。プラン・ファイルは、RMU Loadコマンドラインで指定されたすべての修飾子を含むテキスト・ファイルです。また、エグゼキュータ名(パラレル・ロード操作の場合)、.rujファイルのディレクトリ、例外ファイルおよびPlace_Only修飾子で作成されるファイル(指定した場合)も指定します。プラン・ファイルの生成の前に、無効なプラン・ファイルが作成されないようOracle RMUでOracle RMUコマンドが検証されます。(Noexecute修飾子を指定するかどうかに関係なく、これは真です。)たとえば、次のコマンドは、相いれない修飾子(CorrespondingおよびFields)が指定されているため、無効でエラー・メッセージが返されます。
$ RMU/LOAD/RECORD_DEF=FILE=NAMES.RRD/CORRESPONDING - _$ /FIELDS=(LAST_NAME, FIRST_NAME)/LIST_PLAN=my_plan.plan - _$ MF_PERSONNEL.RDB EMPLOYEES NAMES.UNL %RMU-F-CONFLSWIT, conflicting options CORRESPONDING and FIELDS...
Oracle RMUでRMU Loadコマンドを検証する際に含まれる項目の説明は、Execute修飾子の説明を参照してください。プラン・ファイルの詳細な例と説明は、「例」を参照してください。
特定の構成に適したロード操作を構築する基礎として、生成されたプランを使用できます。出力ファイルをカスタマイズし、RMU Load Planコマンドのパラメータとしてその後のロード操作で使用できます。詳細は、第1.29節を参照してください。
RMU Loadコマンドを発行してロード・プラン・ファイルのみを作成し、ロード・プランを実行しない場合、Noexecute修飾子を指定します。Noexecute修飾子を指定する場合、有効なOracle RMUコマンドを指定する必要があります。
非常に大きくなる可能性のある.unlファイルを作成する前に、プラン・ファイルのプロトタイプを作成する1つの方法は、RMU Loadコマンドラインで、有効なレコード定義(.rrd)ファイルと空の.unlファイルとともにList_Plan修飾子およびNoexecute修飾子を指定することです。.rrdファイルには、Oracle RMUでプラン・ファイルの検証に必要な情報が含まれています。しかし、Noexecute修飾子を指定すると、データがロードされないため、Oracle RMUで.unlファイルはロードされません。ただし、この方法を使用する場合、Fields修飾子を指定できないことに注意してください。(Fields修飾子を指定した場合、Oracle RMUで、Fields修飾子に指定した列の数と.unlファイルで指定した列の数が一致するか確認されます。)
ファイル拡張子を指定しない場合、プラン・ファイルのデフォルトのファイル拡張子は.planです。
Log_Commits
Nolog_Commits
各コミット操作後にメッセージが出力されます。パラレル・ロードの場合、各エグゼキュータのコミット後にメッセージが出力されます。デフォルトはNolog_Commits修飾子で、各コミット操作後にメッセージは出力されません。ただし、Nolog_Commits修飾子では、処理の完了またはエラーの発生後にコミット操作全体について出力されます。
Match_Name=table-name
Nomatch_Name
読み取る表の名前を指定します。SQLで交換ファイルにエクスポートされた表は、データベースに個別にロードできます。RMU Loadコマンドのデフォルトの動作では、アンロード・ファイルの最初の表データのセットを見つけ、ロードします。これが目的の表でない場合、Match_Name修飾子を使用して別の表名を指定できます。table-nameを指定せずにMatch_Name修飾子を使用すると、Oracle RMUで、ロードされる表の名前がソース・データ・ファイル内の表の名前でもあるとみなされます。デフォルトはNomatch_Name修飾子です。
Parallel[=(options)]
パラレル・ロード操作を指定します。パラレル・ロード操作は、セグメント化された文字列を含まず、制約もトリガーも定義されていない大規模なパーティション化された表がある場合に特に効果的です。オプションを使用せずにParallel修飾子を指定した場合、ロード操作に1つのエグゼキュータとそのエグゼキュータ用の4つの通信バッファが割り当てられます。通信バッファは、プロセスとエグゼキュータの通信に使用されます。
追加のエグゼキュータまたは通信バッファ、あるいはその両方を割り当てる必要がある場合、次のオプションのいずれか、または両方を使用します。
- Buffer_Count=n
パラレル・ロード操作で各エグゼキュータに割り当てられる通信バッファの数を指定できます。
Buffers=n修飾子と混同しないでください。Buffers=n修飾子では、ロード操作時に使用するデータベース・バッファの数を指定します。- Executor_Count=n
ロード操作に割り当てられるワーカー・プロセスの数を指定できます。エグゼキュータの数と表のパーティションの数とが同数であることが理想です。表のパーティションの数より多い数のエグゼキュータを割り当てないでください。表がランダムにまたは垂直的にパーティション化されている場合、指定した数に関係なく、Oracle RMUで1つのみのエグゼキュータを作成します。
OpenVMSのDETACH権限を持っている場合、エグゼキュータがデタッチ・プロセスとして作成されます。そうでない場合、エグゼキュータはプロセスのサブプロセスとして作成されます。
各ロード操作の最後に、Oracle RMUでロード操作の各エグゼキュータおよびメイン・プロセスに関するサマリー統計が表示されます。ジョブの最後に統計にリストされる"Idle time"でデータの偏りを確認し、"Early commits"でロックの競合を確認します。
一部のエグゼキュータのアイドル時間が大きい場合、データに偏りがある可能性が高いです。Parallel修飾子でロードするデータは、.unlファイル内でランダムに出現するのが理想です。パラレル・ロード操作を行うときにすでにパーティション順になっているデータでは、各エグゼキュータのアイドル時間が大きくなり、パラレル・ロード操作の利点が薄れます。
サマリー統計には、入力ファイルから読み取られたレコードの数、格納されたデータ・レコードの数および拒否されたデータ・レコードの数もリストされます。大抵の場合、拒否されたデータ・レコードの数に格納されたデータ・レコードの数を加えると、入力ファイルから読み取られたレコードの数と同数になります。ただし、次の状況では、この式は成立しません。
- パラレル・ロード操作が、許可されていない重複レコードのために強制終了されます。
- 例外ファイルを指定しませんでした。
同様に、デリミタ付きロードの場合、入力ファイルのレコードが不適切に区切られていたためにロード操作が強制終了された場合、拒否されたレコードに格納されたレコードを加えた数は、入力ファイルから読み取られたレコードの数と同数になりません。
リスト・データ(セグメント化された文字列)レコードまたはセキュリティ監査レコードのロードには、パラレル・ロード操作は使用できません。パラレル・ロード操作を指定してリスト・データまたはセキュリティ監査レコードをロードすると、Oracle RMUから警告が返され、シングルプロセス(パラレルでない)ロード操作が行われます。
Place
Noplace
格納前にレコードをターゲット・ページ番号でソートします。Place修飾子では、データのロード時にデータベース・キー(dbkey)の順序付けられたセットが自動的に作成され、レコードがdbkeyの順に順次、ページごとに自動的に格納されます。パラレル・ロード操作では、各ワーカー・エグゼキュータでdbkeyの順序付けられたセットが各自作成されます。
RMU Loadコマンドで使用されるワーク・ファイルの数は、RDMS$BIND_SORT_WORKFILES論理名で制御されます。使用可能な値は1〜10(1と10を含む)で、デフォルト値は2です。これらのワーク・ファイルの場所は、SORTWORKn論理名(nは0〜9の数値)を使用してデバイス指定で指定できます。SORT/MERGEの使用の詳細は、OpenVMSのドキュメント・セットを参照してください。Oracle Rdbの論理名の使用の詳細は、『Oracle Rdb7 Guide to Database Performance and Tuning』を参照してください。
ハッシュ索引を使用してレコードが格納された場合、パフォーマンスが大幅に向上します。Commit_Every修飾子をPlace修飾子と組み合せて使用することで、COMMIT文とCOMMIT文との間にロードするレコードの数を指定できます。ソート索引を使用してレコードが格納された場合、パフォーマンスが実際は低下する場合があります。
デフォルトはNoplace修飾子です。
Record_Definition=({File|Path}=name[,options])
データをデータベースにロードする際にRMSレコード定義またはデータ・ディクショナリ・レコード定義を使用するよう指定します。RMSレコード定義ファイルの指定にはFile=nameパラメータを使用し、データ・ディクショナリから抽出されたレコード定義の指定にはPath=nameパラメータを使用します。(データ・ディクショナリのレコード定義にバリアントが含まれている場合、Oracle RMUでこれを抽出できません。)File=nameパラメータのデフォルトのファイル拡張子は.rrdです。.rrdファイルの構文は、Common Dictionary Operator(CDO)インタフェースでデータ・ディクショナリに使用される構文と似ています。行を定義する前に列を定義する必要があります。1つの行には1つの列のみを含めることができます。RMU UnloadコマンドにRecord_Definition修飾子を使用して、サンプル.rrdファイルを作成できます。.rrdファイルのレコード定義と実際のデータが相互に矛盾しないようにする必要があります。Oracle Rdbでは、レコード定義のデータ型とデータが一致するかはチェックされません。.rrdファイルの形式の詳細は、付録Aおよび『Oracle Rdb Guide to Database Design and Definition』を参照してください。
File=nameまたはPath=nameのいずれかを指定する必要があります。
使用可能なオプションは次のとおりです。
- Exception_File=exception-file
ロードできないレコードを、シングルプロセス・ロード操作の場合は1つの例外ファイルに、パラレル・ロード操作の場合は複数の例外ファイルに書き込みます。パラレル・ロード操作のロード・プランを生成する場合、各エグゼキュータに各自の例外ファイルが割り当てられます。この場合、指定したexception-file名に、エグゼキュータごとに異なるファイル拡張子が付けられます。
Oracle RMUでRMSファイルからデータをロードする際、例外ファイルが指定されていると、入力ファイル内の無効なレコードによってRMU Loadコマンドが強制終了されない場合があります。かわりに、Oracle RMUで例外ファイルが作成され、ロードできないレコードをこの例外ファイルに書き込み、残りのレコードのロードが続けられます。この処理は、データの実際の挿入が索引、制約またはトリガー・エラーが原因で無効な場合に発生します。レコードのRMSファイル内の形式が無効な(デリミタがないなど)場合、例外ファイルは使用されず、ロード・プロセスが強制終了されます。
ロード操作の最後に、例外ファイルを使用して問題を修正し、例外ファイルから直接再ロードできます。ロード操作では、ロードできないレコードごとに情報メッセージが出力され、格納されたレコードの数と拒否されたレコードの数のサマリーも出力されます。
ロードできなかったすべてのレコードが、Exception_Fileオプションへの引数として指定されたファイルに書き込まれます。シングルプロセス・ロードの例外ファイルのデフォルトのファイル拡張子は、.unlで、パラレル・ロードのデフォルトの拡張子はEXC_nです。nはOracle RMUによって割り当てられたエグゼキュータ番号に対応します。例外ファイルは、ロードできないレコードがある場合にのみ作成されます。Exception_Fileオプションが指定されていない場合、例外ファイルは作成されず、最初の例外の発生時にロード操作が強制終了されます。
ただし、Defer_Index_Updates修飾子が指定され、制約違反またはロックの競合があった場合、トランザクションのコミット時にロード操作が強制終了されます。
Defer_Index_Updates修飾子が指定されていない場合、制約違反を起こしたレコードが例外ファイルに書き込まれ、残りのレコードのロードが続けられます。- Format=Text
Format=Textオプションを指定した場合、Oracle RMUでロード前にすべてのデータが出力可能なテキストに変換されます。- Formatオプションを指定しない場合、Oracle RMUでは、固定長のバイナリ・フラット・ファイルをロードするものと想定されます。フィールドのデータ型は、.rrdファイルで指定される必要があります。
- Format=(Delimited_Text [,delimiter-options])
Format=Delimited_Textオプションを指定した場合、.rrdファイルはテキスト・フィールドのみを含み、デリミタ付きASCIIテキストを含むファイルの列の最大長を指定します。.rrdファイルで指定された長さよりも長い列値は切り捨てられます。
DATE VMS型は照合可能な時間形式(yyyymmddhhmmsscc)で指定される必要があることに注意してください。たとえば、1993年3月20日は1993032000000000と指定する必要があります。
Format=Delimited_Textオプションを指定しない場合は、デリミタはOracle RMUでデータの一部とみなされます。「例」の例13に、Format=Delimited_Textオプションの例を示します。デリミタ・オプション(とデリミタ・オプションを指定しない場合のデフォルト値)は、次のとおりです。PrefixおよびSuffixデリミタ・オプション以外は、指定する値は一意である必要があることに注意してください。PrefixおよびSuffix値は相互に同じ値でもかまいませんが、他のデリミタ・オプションとは異なる必要があります。Null文字列も一意である必要があります。
- Prefix=string
ASCII入力文字列の列値を開始する接頭辞文字列を指定します。このオプションを省略した場合、列の接頭辞は引用符(")で構成されるものとみなされます。- Separator=string
行の列値を区切る文字列を指定します。このオプションを省略した場合、列の区切り文字はカンマ(,)で構成されるものとみなされます。- Suffix=string
ASCII入力文字列の列値を終了する接尾辞文字列を指定します。このオプションを省略した場合、列の接尾辞は引用符(")で構成されるものとみなされます。- Terminator=string
1行に相当する列値のすべてを終了する行の終端文字を指定します。このオプションを省略した場合、行の終端文字は1行の終わりであるとみなされます。- Null=string
入力レコードにあった場合にNULLとしてデータベースの列に格納される文字列を指定します。このオプションは、Delimited_Textオプションも指定されている場合にのみ有効です。
Nullオプションは、次のいずれかとしてコマンドラインで指定できます。
- 引用符の付いた文字列
- 二重引用符の空のセット("")
- 文字列なし
指定する場合、NULL文字を表す文字列は、Oracle RMUコマンドラインでは引用符を付ける必要がありますが、入力ファイルでは引用符を付けません。空白はNULL文字として指定できません。
レコードの最後の列をNULLに設定する場合、最後のNULLではない列までのデータを指定するだけで済みます。
NULL値の各格納方法の例は、「例」を参照してください。
注意
デリミタ・オプションに指定する各文字列の値は、引用符で囲む必要があります。Oracle RMUは、値を解釈する際にそれらの引用符を除外します。引用符(")をデリミタとして指定する場合は、4つの引用符からなる文字列を指定します。このように指定すると、Oracle RMUは、1つの引用符をデリミタとして使用するよう要求されたものと解釈します。たとえば、Suffix = """"と指定したとします。
その場合、Oracle RMUはこれらの引用符を次のように読み取ります。
- 最初の引用符は文字列から除外されます。
- 2つ目と3つ目の引用符は、1つの引用符(")をデリミタとして使用するリクエストであると解釈されます。
- 4つ目の引用符は除外されます。
この結果、1つの引用符がデリミタとして使用されます。
また、デリミタ文字列の一部として引用符を指定する場合、文字列に含む引用符ごとに2つの引用符を使用する必要があります。たとえば、Suffix = "**""**"と指定すると、Oracle RMUは**"**というデリミタを使用します。
引用符で囲まれた空白のデリミタは無効です。
- Place_Only=sorted-placement-file
入力ファイルをソートし、配置順にソートされた出力ファイルを作成します。
Place_Onlyオプションを使用することで、入力ファイルが、まず配置順にソートされます。その後、結果のファイルをCommit_Every修飾子でロードし、必要な効率が得られます。この修飾子はパラレル・ロード操作で使用しないでください。パラレル・ロード操作は、入力ファイルがソートされていない場合に最適に行われます。
Place_Onlyオプションは、Commit_Every修飾子またはException_Fileオプションと組み合せて使用できません(データがデータベースでソートされません)。ただし、Place_Onlyオプションでは、(データをソートするために)Place修飾子を指定する必要があります。
placement-sorted出力ファイルのデフォルトのファイル拡張子は.unlです。
Nullオプションを(Record_Definition修飾子のFormat=Delimited_Textパラメータに)指定しない場合、ロードする表の行に格納されているNULL値は保持されません。したがって、表にNULL値を保持し、データベース内またはデータベース間でデータを移動する場合、Nullオプションを使用します。
詳細は、第1.63節の例を参照してください。
Rms_Record_Def=({File=name|Path=name}[,options])
Record_Definition修飾子と同義です。Record_Definition修飾子の説明を参照してください。Restricted_Access
NoRestricted_Access
シングル・プロセスでデータをロードし、制限付きアクセスが使用されている場合にのみ最適化が使用可能になります。デフォルトはNorestricted_Accessです。LIST OF BYTE VARYINGデータを含むRMU Unloadファイルからの表をロードする場合、Restricted_Access修飾子によって排他アクセス用にLIST領域が確保されます。これによって、ロード操作時に長いトランザクションによって使用される仮想メモリーが少なくなり、LIST記憶領域に対するスナップショット・ファイルへのI/Oも少なくなります。
Restricted_AccessおよびParallel修飾子は相互に排他的なため、1つのRMU Loadコマンドラインまたはプラン・ファイル内で同時に指定できません。Restricted_Access修飾子を指定してRMU Loadを実行する場合、他のユーザーはデータベースにアタッチできません。
Row_Count=n
Oracle RdbサーバーとRMU Loadプロセスとの間で複数の行をバッファすることを指定します。nのデフォルト値は500行ですが、これは、作業セットのサイズやロードするデータの長さに応じて調整することをお薦めします。行数を増やすと、アンロード操作のCPUコストを低減できる場合があります。リモート・データベースについては、バッファされたデータを大きなネットワーク・パケットにパッケージできるため、データ量が多い場合にはネットワーク・トラフィックを大幅に低減できる可能性があります。nに指定できる最小値は1です。デフォルトの行サイズは、Commit_Every修飾子に指定した値か、または500のいずれか小さい方になります。
Skip=n
Noskip
入力ファイルの最初のnデータ・レコードを無視します。強制終了されたロード操作を再開する場合、この修飾子をCommit_Every修飾子と組み合せて使用します。強制終了されたロード操作では、コミットされたレコードの数を示すメッセージが表示されます。この値をnに使用します。負の値を指定した場合、エラー・メッセージが返されます。ファイル内のレコードの数より大きい数を指定した場合、レコードが格納されていないというエラー・メッセージが返されます。値を指定しない場合、キーワード値が不足しているというエラー・メッセージが返されます。Skip修飾子を使用して強制終了されたパラレル・ロード操作を再開することは、あまり有用ではありません。パラレル・ロードを行うエグゼキュータごとに、コントローラによってレコードがソートされているため、通常、ロード済のレコードと未ロードのレコードの複数セクションが入力ファイルにあります。ロードするデータとコントローラによるソート方法を熟知していないかぎり、強制終了されたパラレル・ロード操作の再開にSkip修飾子を使用すると、あるレコードは2回ロードされ、別のレコードはまったくロードされない可能性があります。
デフォルトはNoskip修飾子です。
Statistics=(stat-opts)
ロード操作の進捗を評価できるよう定期的に、またはトランザクションがコミットされるたびに、あるいはその両方で統計を表示するよう指定します。stat-optsはこの修飾子に指定できるオプションで、Interval=nまたはOn_Commit、あるいはこの両方です。Statistics修飾子を指定した場合、少なくとも1つのオプションを指定する必要があります。
Statistics=(Interval=n)修飾子が指定された場合、n秒ごとにOracle RMUで統計を出力します。nの最小値は1です。
Statistics=(On_Commit)修飾子が指定された場合、トランザクションがコミットされるたびにOracle RMUで統計を出力します。
両方のオプション(Statistics=(Interval=n, On_Commit))を指定した場合、n秒ごと、かつトランザクションがコミットされるたびに統計が表示されます。
表示される統計は次のとおりです。
- 経過時間
- CPU時間
- バッファされたI/O
- 直接I/O
- ページ・フォルト
- 最後のトランザクションがコミットされたときにロードされていたレコードの数
- 現在のトランザクションでここまでにロードされたレコードの数
- Record_Definition=Exception_Fileオプションも指定されている場合、次の統計も表示されます。
- 最後のトランザクションがコミットされたときに拒否されていたレコードの数
- 現在のトランザクションでここまでに拒否されたレコードの数
- Parallel修飾子も指定されている場合、次の統計も表示されます。
- エグゼキュータによって行われた追加コミットの数
ロード操作のハングを避けるために、Oracle RMUでプロセスまたはエグゼキュータに通常より早くトランザクションをコミットするよう指示した場合、追加のコミットが発生します。たとえば、他のエグゼキュータに必要なロックを、あるエグゼキュータが保持し、そのロックがもう必要ない場合、Oracle RMUで最初のエグゼキュータに現在のトランザクションをコミットするよう指示します。エグゼキュータに通常より早くトランザクションをコミットするよう指示することで、競合しているロックが解放され、ロード操作が進みます。- エグゼキュータの総数
- 初期化中、アイドル、終了、ソート中、格納中、コミット中または実行中のエグゼキュータの数
ロード操作のどの時点でも、[Ctrl]+[T]を押して現在の統計を表示できます。
Transaction_Type=share-mode
ロード操作の共有モードを指定します。次の共有モードが使用できます。Batch_Update
Exclusive
Protected
SharedTransaction_Type修飾子を使用する場合、値を指定する必要があります。Transaction_Type修飾子を指定しない場合、デフォルトの共有モードはProtectedです。
パラレル・ロード操作を(Parallel修飾子を使用して)指定し、ロードする表に制約が定義されている場合、Shared共有モードを指定するか、パラレル・ロード操作の開始前に制約を削除するか、Noconstraints修飾子を指定することをお薦めします。詳細は、「使用上の注意」を参照してください。
Trigger_Relations[=(table-name-list)]
Notrigger_Relations
Trigger_Relations修飾子は次の3通りに使用できます。
- Trigger_Relations=(table-name-list)
更新用に確保される表を指定します。この修飾子を使用すると、格納操作でトリガーによって更新される表を明示的にロックできます。複数の表をリストする場合、表名をカンマで区切り、表名のリストをカッコで囲みます。
- Trigger_Relations
表名のリストを省略した場合、トリガーによって更新される表は、必要に応じて自動的にロックされます。これがデフォルトです。- NoTrigger_Relations
ターゲット表のトリガーを無効にします。このオプションでは、ロードされる表に対するDROP権限が必要です。このオプションには表名のリストは指定できません。
パラレル・ロード操作を(Parallel修飾子を使用して)指定し、ロードする表にトリガーが定義されている場合、Shared共有モードを指定するか、パラレル・ロード操作の開始前にトリガーを削除することをお薦めします。詳細は、「使用上の注意」を参照してください。
Trigger_Relations修飾子は、間接ファイル参照と組み合せて使用できます。詳細は、第1.3節を参照してください。
- データベースに対してRMU Loadコマンドを使用するには、データベースのルート・ファイル・アクセス制御リスト(ACL)にRMU$LOAD権限を持っているか、OpenVMSのSYSPRVまたはBYPASS権限を持っている必要があります。関係するデータベース表へのアクセスに対応するOracle Rdb権限も必要です。
- Audit修飾子を指定してRMU Loadコマンドを使用するには、次の両方が必要です。
- セキュリティ監査レコードがロードされるデータベースのルート・ファイルACLにRMU$SECURITY権限
- セキュリティ監査レコードのロード先のデータベースのルート・ファイルACLにRMU$LOAD権限
前述の権限を両方持っていない場合、OpenVMSのSYSPRVまたはBYPASS権限を持っている必要があります。- あるバージョンのOracle Rdbで編成されたデータベースから表をアンロードし、別のバージョンのRdbで編成されたデータベースの同じ表にロードできます。たとえば、Oracle Rdbリリース6.0で作成されたmf_personnelデータベースからEMPLOYEES表をアンロードして、生成された.unlファイルをOracle Rdbリリース7.0データベースにロードすることもできます。同様に、Oracle Rdbリリース7.0で作成されたmf_personnelデータベースからEMPLOYEES表をアンロードして、生成された.unlファイルをOracle Rdbリリース6.1データベースにロードすることもできます。これは、特殊構造バイナリ・ファイル(RMU UnloadコマンドにRecord_Definition修飾子を指定せずに作成)にも当てはまります。別のバージョンからの.unlファイルをロードできる最も古いバージョンはOracle Rdbリリース6.0です。
- 次のリストに、パラレル・ロード操作に関する情報を示します。
- ロードする表に定義されている記憶領域数以下のエグゼキュータを(Parallel修飾子のExecutor_Countオプションに)指定します。
- リスト・データ(セグメント化された文字列)レコードまたはセキュリティ監査レコードのロードには、パラレル・ロード操作は使用できません。パラレル・ロード操作を指定してリスト・データまたはセキュリティ監査レコードをロードすると、Oracle RMUから警告が返され、シングルエグゼキュータ(パラレルでない)ロード操作が行われます。
- 共有モードのトランザクション・タイプを指定するか、Noconstraints修飾子を指定してパラレル・ロード操作時にトリガーを削除することをお薦めします。そうでない場合、ロードする表に定義されている制約およびトリガーによって、パラレル・ロード・エグゼキュータ間でロックの競合が起こることがあります。
- パラレル・ロードとハッシュ索引を使用する場合、ロードの前にデータをソートしないでください。かわりに、RMU LoadコマンドにPlace修飾子を使用して、ロード時にデータをソートします。(Place修飾子は、ソート索引ではなくハッシュ索引に有用です。)
- 次のリストに、セキュリティ監査ジャーナルのロードに関する情報を示します。
- 監査対象のデータベース以外のデータベースにセキュリティ監査ジャーナルをロード
あるデータベースに対して記録されたセキュリティ監査ジャーナルを別のデータベースにロードする場合、監査対象のデータベースをAudit=Database_File修飾子のパラメータとして指定し、セキュリティ監査レコードのロード先のデータベースをOracle RMUコマンドのroot-file-specパラメータに指定します。
たとえば、次の例では、mf_personnelデータベースに対するセキュリティ監査ジャーナルをaudit_dbデータベースのMFP_AUDIT表にロードします。SECURITY_AUDITは、実際のセキュリティ監査ジャーナル・ファイルを指す論理名であることに注意してください。
$ RMU/LOAD/AUDIT=DATABASE_FILE=MF_PERSONNEL AUDIT_DB - _$ MFP_AUDIT SECURITY_AUDIT
前述のRMU Loadコマンドを発行する場合、audit_dbデータベースが存在する必要があります。ただし、RMU Loadコマンドでaudit_dbデータベースにMFP_AUDIT表が作成され、MFP_AUDITデータベースに対して適切な列が定義されます。
つまり、前述のRMU Loadコマンドでaudit_dbデータベースが正しく使用されるには、次のSQL文で最小要件が満たされます。
SQL> CREATE DATABASE FILENAME audit_db.rdb;
Oracle RMUでロードされる監査レコードには、レコードのソース・データベースを示すフィールドがないことに注意してください。したがって、異なるデータベースからの監査レコードを同じ表に混在させることはお薦めしません。そうではなく、異なるデータベースに対する監査情報は別々の表にロードします。- セキュリティ監査ジャーナル・ファイル名
セキュリティ監査ジャーナル・ファイルの名前は、使用しているオペレーティング・システム・ソフトウェアのバージョンとハードウェア・プラットフォームによって次のように異なります。
- リリース6.1以降のOpenVMS Alphaおよびリリース6.0以降のOpenVMS VAXの場合、SYS$MANAGER:SECURITY.AUDIT$JOURNAL
- リリース6.1より前のOpenVMS AlphaおよびV5.5以前のOpenVMS VAXの場合、SYS$MANAGER:SECURITY_AUDIT.AUDIT$JOURNAL
- 監査対象のデータベースにセキュリティ監査ジャーナルをロード
セキュリティ監査ジャーナル・レコードのロード先のOracle Rdbの表を表1-12の「Oracle Rdb列名」列に示す列を使用して定義し、セキュリティ監査ジャーナル・レコードが表に正常にロードされるようにする必要があります。表がない場合、RMU Load Auditコマンドで表1-12の「Oracle Rdb列名」列に示す列を使用して作成します。表には任意の有効な名前を付けることができます。- 表1-12に、Audit修飾子を指定したRMU Loadコマンドで作成される列名をリストします。
表1-12 セキュリティ監査ジャーナル・レコードを格納するデータベース表の列 Oracle Rdb列名 SQLデータ型および長さ AUDIT$EVENT CHAR 16 AUDIT$SYSTEM_NAME CHAR 15 AUDIT$SYSTEM_ID CHAR 12 AUDIT$TIME_STAMP CHAR 48 AUDIT$PROCESS_ID CHAR 12 AUDIT$USER_NAME CHAR 12 AUDIT$TSN CHAR 25 1 AUDIT$OBJECT_NAME CHAR 255 AUDIT$OBJECT_TYPE CHAR 12 AUDIT$OPERATION CHAR 32 AUDIT$DESIRED_ACCESS CHAR 16 AUDIT$SUB_STATUS CHAR 32 AUDIT$FINAL_STATUS CHAR 32 AUDIT$RDB_PRIV CHAR 16 AUDIT$VMS_PRIV CHAR 16 AUDIT$GRANT_IDENT CHAR 192 AUDIT$NEW_ACE CHAR 192 AUDIT$OLD_ACE CHAR 192 AUDIT$RMU_COMMAND CHAR 512
$ RMU/UNLOAD/RECORD_DEFINITION=FILE=STRINGS MIA - "TAB_°¡°abcd°§ABCD°©°ª" - STRINGS.UNL %RMU-I-DATRECUNL, 4 data records unloaded $ RMU LOAD/RECORD_DEFINITION=FILE=STRINGS MIA - "TAB_°¡°abcd°§ABCD°©°ª" - STRINGS.UNL DEFINE FIELD DEC_MCS_CHAR DATATYPE IS TEXT SIZE IS 20. DEFINE FIELD KANJI_CHAR DATATYPE IS TEXT SIZE IS 10 CHARACTERS - CHARACTER SET IS KANJI. DEFINE FIELD HANZI_CHAR DATATYPE IS TEXT SIZE IS 10 CHARACTERS - CHARACTER SET IS HANZI. DEFINE FIELD HANYU_CHAR DATATYPE IS TEXT SIZE IS 10 CHARACTERS - CHARACTER SET IS HANYU. . . . DEFINE RECORD TAB_°¡°abcd°§ABCD°©°ª. %RMU-F-RECDEFSYN, Syntax error in record definition file DEFINE RECORD TAB_''°¡°ABCD°§ABCD°©°ª. |
この問題が起きた場合、レコード定義ファイルを編集し、MCSキャラクタ・セットで表せる名前に変更します。
$ RMU/LOAD/FIELDS=(EMPLOYEE_ID, LAST_NAME) - _$ /RECORD_DEFINITION=(FILE=TEXT_NAMES,EXCEPTION_FILE=FILE.UNL) - _$ corporate_data ADMINISTRATION.PERSONNEL.EMPLOYEES EMP.UNL %RDB-E-BAD_DPB_CONTENT, invalid database parameters in the database parameter block (DPB) %RMU-I-DATRECSTO, 0 data records stored %RMU-I-DATRECREJ, 0 data records rejected. |
マルチスキーマ・データベースを使用する場合、データベース・オブジェクトにSQLストアド名を指定する必要があります。たとえば、corporate_dataデータベースのADMINISTRATION.PERSONNEL.EMPLOYEES表に対応するストアド名を見つけるには、SQL SHOW TABLEコマンドを発行します。
SQL> SHOW TABLE ADMINISTRATION.PERSONNEL.EMPLOYEES Information for table ADMINISTRATION.PERSONNEL.EMPLOYEES Stored name is EMPLOYEES . . . |
表をロードするには、次のRMU Loadコマンドを発行します。
$ RMU/LOAD/FIELDS=(EMPLOYEE_ID, LAST_NAME) - _$ /RECORD_DEFINITION=(FILE=TEXT_NAMES,EXCEPTION_FILE=FILE.UNL) - _$ CORPORATE_DATA EMPLOYEES MY_DATA.UNL %RMU-I-DATRECSTO, 3 data records stored %RMU-I-DATRECREJ, 0 data records rejected. |
Fields修飾子は、間接ファイル参照と組み合せて使用できます。フィールド・リストに間接ファイル参照を使用する場合、DCL SET VERIFYコマンドが使用されていると、参照されたファイルがSYS$OUTPUTに書き込まれます。詳細は、第1.3節を参照してください。
例1このコマンドでは、RMSファイルnames.unlからmf_personnelデータベースに新しく作成されたRETIREES表にデータをロードします。RETIREESのレコード構造はファイルnames.rrdに含まれています。names.unlおよびnames.rrdファイルは、これ以前に実行されたRMU Unloadコマンドで作成されました。アンロード操作では、EMPLOYEES表の列のサブセットから導出されたビューからデータをアンロードしました。
$ RMU/LOAD/RECORD_DEFINITION=FILE=NAMES.RRD - _$ MF_PERSONNEL RETIREES NAMES.UNL
例2
このコマンドでは、mf_personnelデータベースに新たに作成されたRETIREES表にnames.unlからロードする途中で強制終了されたロード操作を再開します。ロードされる列は、EMPLOYEE_ID、LAST_NAMEおよびFIRST_NAMEです。元のロード操作では、25レコードがコミットされています。26番目のレコードから再開されるロード操作では、元の障害の発生箇所に達するまでレコードごとにトランザクションがコミットされます。
$ RMU/LOAD/FIELDS=(EMPLOYEE_ID, LAST_NAME, FIRST_NAME) - _$ /COMMIT_EVERY=1/SKIP=25 MF_PERSONNEL RETIREES NAMES.UNL
例3
この例では、データ・ディクショナリにあるレコード定義を使用して新規の表PENSIONSをmf_personnelデータベースにロードします。
この例では、EMPLOYEES表およびSALARY_HISTORY表の該当する列を組み合せて、まず、一時ビューTEMP_PENSIONSを定義するものとします。データのロード先の永続表PENSIONSも作成する必要があります。
RMU UnloadコマンドにRecord_Definition=File=name修飾子を使用してTEMP_PENSIONSビューをアンロードし、列定義を含む.rrdファイルとTEMP_PENSIONSビューからのデータを含むdata.unlファイルの両方を作成します。CDOプロンプトで@コマンドを使用して、新規レコード定義をpensions.rrdファイルからデータ・ディクショナリにロードします。その後、RMU Loadコマンドを使用してmf_personnelデータベースのPENSIONS表にデータをロードします。
$ RMU/UNLOAD/RECORD_DEFINITION=FILE=PENSIONS.RRD MF_PERSONNEL - _$ TEMP_PENSIONS DATA.UNL $ DICTIONARY OPERATOR Welcome to CDO V7.0 The CDD/Repository V7.0 User Interface Type HELP for help CDO> @PENSIONS.RRD CDO> EXIT $ RMU/LOAD/RECORD_DEFINITION=PATH=PENSIONS MF_PERSONNEL PENSIONS - _$ DATA.UNL
例4
次のコマンドでは、mf_personnelデータベースの監査レコードをセキュリティ監査ジャーナル・ファイルからmf_personnelデータベースのAUDIT_TABLE表にロードします。AUDIT_TABLE表がない場合、Audit修飾子を指定したRMU Loadコマンドで表1-12に示す列を使用して作成されることに注意してください。
$ RMU/LOAD/AUDIT MF_PERSONNEL AUDIT_TABLE - _$ SYS$MANAGER:SECURITY.AUDIT$JOURNAL %RMU-I-DATRECREAD, 12858 data records read from input file. %RMU-I-DATRECSTO, 27 data records stored.
例5
次のコマンドでは、mf_personnelデータベースの監査レコードをセキュリティ監査ジャーナル・ファイルからaudit_dbデータベースのAUDIT_TABLE表にロードします。データベースの作成時にAUDIT_TABLE表は作成されていないことに注意してください。この場合、Audit=Database_File修飾子を指定したRMU Loadコマンドで表1-12に示す列を使用して作成されます。
$ RMU/LOAD/AUDIT=DATABASE_FILE=MF_PERSONNEL AUDIT_DB AUDIT_TABLE - _$ SYS$MANAGER:SECURITY.AUDIT$JOURNAL
例6
この例では、データ・ディクショナリにあるレコード定義を使用して新規の表COLLEGESをmf_personnelデータベースにロードします。各レコードの格納後にコミット操作が行われます。Log_Commits修飾子によって、各コミット操作後にメッセージが出力されます。
$ RMU/LOAD/RECORD_DEFINITION=FILE=COLLEGES.RRD /COMMIT_EVERY=1 - _$ /LOG_COMMIT MF_PERSONNEL COLLEGES RMU.UNL %RMU-I-DATRECSTO, 1 data records stored %RMU-I-DATRECSTO, 2 data records stored %RMU-I-DATRECSTO, 3 data records stored %RMU-I-DATRECSTO, 4 data records stored %RMU-I-DATRECSTO, 4 data records stored $
例7
次の例に、.unlファイルに16文字の照合可能なテキストとして格納されている日付を、RMU Loadコマンドを使用してデータベースにロードする際にVMS DATE形式に変換する方法を示します。(.unlの日付形式はyyyymmddhhmmssccで、VMS DATEの形式はdd-mmm-yyyy:hh:mm:ss.ccです。どちらの場合も、yは年、mは月、dは日付、hは時間、mは分、sは秒、cは100分の1秒です。ただし、.unl形式では、月は整数で表されますが、VMS DATE形式では、月は3文字の文字列で表されます。)
例では、SYS$LANGUAGEはデフォルトのENGLISHとします。
SQL> -- SQL> -- Show the definition of the TEST table, in which the SQL> -- COL1 column is the VMS DATE data type: SQL> -- SQL> SHOW TABLE DATETEST; Columns for table DATETEST: Column Name Data Type Domain ----------- --------- ------ COL1 DATE VMS . . . $ ! $ ! Show the .unl file that will be loaded into the TEST table: $ ! $ TYPE TEST.UNL $ ! 1991060712351212 $ ! $ ! Note that the .rrd file shows a data type of TEXT of 16 $ ! characters. These 16 characters are the number of characters $ ! specified for the date in the test.unl file: $ ! $ TYPE TEST.RRD DEFINE FIELD COL1 DATATYPE IS text size is 16. DEFINE RECORD TEST. COL1 . END TEST RECORD. $ ! $ ! Load the data in test.unl into the DATETEST table: $ ! $ RMU/LOAD/RMS=FILE=TEST.RRD TEST.RDB DATETEST TEST.UNL %RMU-I-DATRECREAD, 1 data records read from input file. %RMU-I-DATRECSTO, 1 data records stored. $ ! $ SQL SQL> ATTACH 'FILENAME TEST'; SQL> SELECT * FROM DATETEST; COL1 7-JUN-1991 12:35:12.12 1 row selected
例8
次の例に、.unlファイルに22文字の照合可能なテキストとして格納されている日付を、RMU Loadコマンドを使用してデータベースにロードする際にTIMESTAMP形式に変換する方法を示します。TIMESTAMP値の正しい形式はyyyy-mm-dd:hh:mm:ss.ccで、y、m、d、h、m、sおよびcは、例7に示す日付と時間の形式と同じ要素を表します。
この例では、格納できないデータをトラップする例外ファイルの使用方法も示します。
$ ! Create a column in the mf_personnel database with a $ ! TIMESTAMP datatype: $ SQL SQL> ATTACH 'FILENAME MF_PERSONNEL.RDB'; SQL> CREATE TABLE NEWTABLE (COL1 TIMESTAMP); SQL> SHOW TABLE (COLUMN) NEWTABLE; Information for table NEWTABLE Columns for table NEWTABLE: Column Name Data Type Domain ----------- --------- ------ COL1 TIMESTAMP(2)
SQL> COMMIT; SQL> EXIT $ ! $ ! Create a .unl file with the data you want to load. Note that $ ! the second value is a valid TIMESTAMP specification, the first $ ! value is not. $ ! $ CREATE TEST.UNL 06-14-1991:12:14:14.14 1991-06-14:12:14:14.14 $ ! $ ! Create an .rrd file that defines the TIMESTAMP field $ ! as a TEXT field: $ ! $ CREATE TEST.RRD DEFINE FIELD COL1 DATATYPE IS TEXT SIZE 22. DEFINE RECORD NEWTABLE. COL1. END NEWTABLE RECORD. $ ! $ ! Attempt to load the data in the .unl file. Oracle RMU returns an $ ! error on the first data record because the date was incorrectly $ ! specified. The first record is written to the exception file, $ ! BAD.DAT. $ ! $ RMU/LOAD/RMS=(FILE=TEST.RRD,EXCEPT=BAD.DAT) MF_PERSONNEL.RDB - _$ NEWTABLE TEST.UNL %RMU-I-LOADERR, Error loading row 1. %RDB-E-CONVERT_ERROR, invalid or unsupported data conversion -COSI-F-IVTIME, invalid date or time %RMU-I-DATRECREAD, 2 data records read from input file. %RMU-I-DATRECSTO, 1 data records stored. %RMU-I-DATRECREJ, 1 data records rejected. $ ! $ ! Type BAD.DAT to view the incorrect data record $ ! $ TYPE BAD.DAT 06-14-1991:12:14:14.14 $ ! $ ! Fetch the data record that stored successfully. $ ! $ SQL SQL> ATTACH 'FILENAME MF_PERSONNEL.RDB'; SQL> SELECT * FROM NEWTABLE; COL1 1991-06-14:12:14:14.14 1 rows selected
例9
RMU Loadコマンドを使用して、入力ファイルとは異なる順にフィールドをデータベースに配置して、データベースの表をロードできます。
jobs.unlファイルの内容は次のとおりです。
000001000000000190001Rdb Demonstrator DEMO
jobs.rrdファイルの内容は次のとおりです。
DEFINE FIELD J_CODE DATATYPE IS TEXT SIZE IS 4. DEFINE FIELD WAGE_CL DATATYPE IS TEXT SIZE IS 1. DEFINE FIELD J_TITLE DATATYPE IS TEXT SIZE IS 20. DEFINE FIELD MIN_SAL DATATYPE IS TEXT SIZE 10. DEFINE FIELD MAX_SAL DATATYPE IS TEXT SIZE 10. DEFINE RECORD JOBS. MIN_SAL. MAX_SAL. WAGE_CL. J_TITLE. J_CODE. END JOBS RECORD.
JOBS表は次のように構成されています。
Columns for table JOBS: Column Name Data Type Domain ----------- --------- ------ JOB_CODE CHAR(4) JOB_CODE_DOM WAGE_CLASS CHAR(1) WAGE_CLASS_DOM JOB_TITLE CHAR(20) JOB_TITLE_DOM MINIMUM_SALARY INTEGER(2) SALARY_DOM MAXIMUM_SALARY INTEGER(2) SALARY_DOM
次の点に注意してください。
- データベースのJOBS表と入力RMSファイルとで、列の順序が異なります。
- .rrdファイル内の名前はデータベース内の名前と異なります。
- 給与のフィールドのデータ型が異なります(Oracle Rdbで変換されます)。
RMSファイルを正しくロードするには、次のコマンドを使用します。
$ RMU/LOAD MF_PERSONNEL JOBS JOBS/RMS=FILE=JOBS - _$ /FIELDS=(MINIMUM_SALARY,MAXIMUM_SALARY,WAGE_CLASS,JOB_TITLE, - _$ JOB_CODE)
Fields修飾子で、JOBS表の列名(.rrdファイルのフィールド名ではなく)をRMSファイルの順に使用することに注意してください。
.rrdファイル内の名前は重要ではありません。Fields修飾子を使用する目的は、RMSファイルの最初のフィールドをJOBS表のMINIMUM_SALARY列に、RMSファイルの2番目のフィールドをJOBS表のMAXIMUM_SALARY列に、その他のフィールドも同様にロードすることです。
結果は次のとおりです。
SQL> SELECT * FROM JOBS WHERE JOB_CODE = 'DEMO'; JOB_CODE WAGE_CLASS JOB_TITLE MINIMUM_SALARY MAXIMUM_SALARY DEMO 1 Rdb Demonstrator $10,000.00 $19,000.00
例10
次の例では、Place修飾子とPlace_Onlyオプションを使用してファイルを配置順にソートし、Commit_Every修飾子を使用してファイルをロードする一連の手順を示します。
$ RMU/LOAD/PLACE - _$ /RECORD_DEFINITION=(FILE=NAMES.RRD,PLACE_ONLY=PLACED_NAMES) - _$ MF_PERSONNEL EMPLOYEES UNLOADED_NAMES.UNL $ RMU/LOAD/RECORD_DEFINITION=(FILE=NAMES.RRD) - _$ /COMMIT_EVERY=30 MF_PERSONNEL - _$ EMPLOYEES PLACED_NAMES.UNL %RMU-I-DATRECREAD, 100 data records read from input file. %RMU-I-DATRECSTO, 100 data records stored.
例11
次の例では、定期的(毎分)に統計を表示するよう要求します。RMSファイルnames.unlからmf_personnelデータベースのEMPLOYEES表にデータをロードします。EMPLOYEESのレコード構造はファイルnames.rrdにあります。names.rrdファイルは、EMPLOYEES表の列のサブセットからデータをアンロードするRMU Unloadコマンドをこれより前に使用して作成されています。
$ RMU/LOAD/STATISTICS=(INTERVAL=60) - _$ /RECORD_DEFINITION=(FILE=NAMES) - _$ /FIELDS=(EMPLOYEE_ID, LAST_NAME) - _$ MF_PERSONNEL EMPLOYEES NAMES.UNL
例12
次の例では、Record_Definition修飾子にException_Fileオプションを使用して、例外レコードを保持するファイルの名前をOracle RMUに示します。レコードが拒否されたことを示す情報メッセージが、Oracle RMUから返されます。
$ RMU/LOAD/FIELDS=(EMPLOYEE_ID, LAST_NAME) - _$ /RECORD_DEFINITION=(FILE=TEXT_NAMES,EXCEPTION_FILE=FILE.UNL) - _$ MF_PERSONNEL EMPLOYEES NAMES.UNL %RMU-I-LOADERR, Error loading row 1. %RDB-E-NO_DUP, index field value already exists; duplicates not allowed for EMPLOYEES_HASH %RMU-I-LOADERR, Error loading row 17. %RDB-E-NO_DUP, index field value already exists; duplicates not allowed for EMPLOYEES_HASH %RMU-I-LOADERR, Error loading row 33. %RDB-E-NO_DUP, index field value already exists; duplicates not allowed for EMPLOYEES_HASH %RMU-I-LOADERR, Error loading row 155. %RDB-E-NO_DUP, index field value already exists; duplicates not allowed for EMPLOYEES_HASH %RMU-I-DATRECREAD, 200 data records read from input file. %RMU-I-DATRECSTO, 196 data records stored. %RMU-I-DATRECREJ, 4 data records rejected.
例13
次の例は、Record_Definition修飾子にFormat=Delimited_Textオプションを使用して入力データをRMU Loadコマンドに指定する場合のデータ形式の例です。このデータをロードするRMU Loadコマンドがこれに続きます。
"99997","ABUSHAKRA","CAROLINE","S","5 CIRCLE STREET","BOX 506", "CHELMSFORD", "MA", "02184", "1960061400000000"# "99996","BRADFORD","LEO","M","4 PLACE STREET","BOX 555", "NASHUA","NH", "03060", "1949051800000000"#
$ RMU/LOAD/FIELDS=(EMPLOYEE_ID, LAST_NAME, FIRST_NAME, - _$ MIDDLE_INITIAL, ADDRESS_DATA_1, ADDRESS_DATA_2, - _$ CITY, STATE, POSTAL_CODE, BIRTHDAY) - _$ /RECORD_DEFINITION=(FILE= NAMES.RRD, - _$ FORMAT=DELIMITED_TEXT, - _$ TERMINATOR="#" ) - _$ MF_PERSONNEL EMPLOYEES NAMES.UNL %RMU-I-DATRECREAD, 2 data records read from input file. %RMU-I-DATRECSTO, 2 data records stored.
例14
次の例は、Record_Definition修飾子にFormat=Textオプションを指定して入力データをRMU Loadコマンドに渡す場合のデータ形式の例です。このデータをロードするRMU Loadコマンドがこれに続きます。
09166Watts Leora F 09190Margolis David M 09187McDonald Lois F
$ RMU/LOAD/FIELDS=(EMPLOYEE_ID, LAST_NAME, FIRST_NAME, SEX) - _$ /RECORD_DEFINITION=(FILE=TEXT_NAMES.RRD, FORMAT=TEXT) - _$ MF_PERSONNEL EMPLOYEES NAMES.UNL %RMU-I-DATRECREAD, 3 data records read from input file. %RMU-I-DATRECSTO, 3 data records stored.
例15
次の例では、mf_personnelデータベースの表定義より多くのフィールドを含むデータ・ファイルをJOBS表にロードするとします。例では、まず、Fields修飾子のリストから余分なフィールドを除外することで、これを試行します。しかし、これによってエラーが返されます。その後、.rrdファイルにFILLERキーワードを使用し、余分なフィールドをロードしないようOracle RMUに指示します。コマンドは正常に実行されます。
JOBS表の表定義は次のとおりです。
Columns for table JOBS: Column Name Data Type Domain ----------- --------- ------ JOB_CODE CHAR(4) JOB_CODE_DOM Primary Key constraint JOBS_PRIMARY_JOB_CODE WAGE_CLASS CHAR(1) WAGE_CLASS_DOM JOB_TITLE CHAR(20) JOB_TITLE_DOM MINIMUM_SALARY INTEGER(2) SALARY_DOM MAXIMUM_SALARY INTEGER(2) SALARY_DOM
ロードするデータの.rrdファイルは次のとおりです(JOBS表に対するmf_personnelデータベース定義にはJOB_STATUSに対応するフィールドがないことに注意してください)。
DEFINE FIELD JOB_CODE DATATYPE IS TEXT SIZE IS 4. DEFINE FIELD WAGE_CLASS DATATYPE IS TEXT SIZE IS 1. DEFINE FIELD JOB_TITLE DATATYPE IS TEXT SIZE IS 20. DEFINE FIELD MINIMUM_SALARY DATATYPE IS TEXT SIZE IS 13. DEFINE FIELD MAXIMUM_SALARY DATATYPE IS TEXT SIZE IS 13. DEFINE FIELD JOB_STATUS DATATYPE IS TEXT SIZE IS 4. DEFINE RECORD JOBS. JOB_CODE . WAGE_CLASS . JOB_TITLE . MINIMUM_SALARY . MAXIMUM_SALARY . JOB_STATUS . END JOBS RECORD.
ロードするデータ・ファイルjobs.unlは次のとおりです。
DBAD4Corp Db Administratr55000.00 95000.00 Old
対応するフィールドがデータベースに定義されているフィールドのみをRMU Loadコマンドで指定して、ファイルをmf_personnelデータベースにロードします。
$ RMU/LOAD MF_PERSONNEL/RMS=(FILE=JOBS.RRD, FORMAT=TEXT) - _$ /FIELDS=(JOB_CODE, WAGE_CLASS, JOB_TITLE, MINIMUM_SALARY, - _$ MAXIMUM_SALARY) JOBS JOBS.UNL %RMU-F-FLDMUSMAT, Specified fields must match in number and datatype with the unloaded data %RMU-I-DATRECSTO, 0 data records stored
データと.rrdファイル、および表に対するデータベース定義の不整合の問題を回避するには、.rrdファイルに次のようにFILLERキーワードを使用します。
DEFINE FIELD JOB_CODE DATATYPE IS TEXT SIZE IS 4. DEFINE FIELD WAGE_CLASS DATATYPE IS TEXT SIZE IS 1. DEFINE FIELD JOB_TITLE DATATYPE IS TEXT SIZE IS 20. DEFINE FIELD MINIMUM_SALARY DATATYPE IS TEXT SIZE IS 13. DEFINE FIELD MAXIMUM_SALARY DATATYPE IS TEXT SIZE IS 13. DEFINE FIELD JOB_STATUS DATATYPE IS TEXT SIZE IS 4 FILLER. <------ DEFINE RECORD JOBS. JOB_CODE . WAGE_CLASS . JOB_TITLE . MINIMUM_SALARY . MAXIMUM_SALARY . JOB_STATUS . END JOBS RECORD.
.rrdファイルが変更されたため、レコードを再度ロードします。
$ RMU/LOAD MF_PERSONNEL/RMS=(FILE=JOBS.RRD, FORMAT=TEXT) - _$ /FIELDS=(JOB_CODE, WAGE_CLASS, JOB_TITLE, MINIMUM_SALARY, - _$ MAXIMUM_SALARY) JOBS JOBS.UNL %RMU-I-DATRECSTO, 1 data records stored.
例16
次の例では、.unlファイル内の引用符のないアスタリスクとして表されるデータは、データベースの対応する列をNULLとするようOracle RMUに示すRecord_Definition修飾子のNull="*"オプションの使用方法を示します。
この例では、.unlファイルの内容の次に、この.unlファイルのロードに使用するRMU Loadコマンド、その次にロードされたデータを示すSQL文からの出力を示します。
"98888","ABUSHAKRA","CAROLINE",*,"5 CIRCLE STREET","BOX 506", "CHELMSFORD", "MA", "02184", "1960061400000000"# "98889","BRADFORD","LEO",*,"4 PLACE STREET","BOX 555", "NASHUA","NH", "03060", "1949051800000000"# $ RMU/LOAD/FIELDS=(EMPLOYEE_ID, LAST_NAME, FIRST_NAME, - _$ MIDDLE_INITIAL, ADDRESS_DATA_1, ADDRESS_DATA_2, - _$ CITY, STATE, POSTAL_CODE, BIRTHDAY) - _$ /RECORD_DEFINITION=(FILE= EMPLOYEES.RRD, - _$ FORMAT=DELIMITED_TEXT, - _$ TERMINATOR="#", - -$ NULL="*" ) - _$ MF_PERSONNEL EMPLOYEES EMPLOYEES.UNL %RMU-I-DATRECREAD, 2 data records read from input file. %RMU-I-DATRECSTO, 2 data records stored. SQL> ATTACH 'FILENAME MF_PERSONNEL.RDB'; SQL> SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID > '98000' cont> AND MIDDLE_INITIAL IS NULL; EMPLOYEE_ID LAST_NAME FIRST_NAME MIDDLE_INITIAL ADDRESS_DATA_1 ADDRESS_DATA_2 CITY STATE POSTAL_CODE SEX BIRTHDAY STATUS_CODE 98888 ABUSHAKRA CAROLINE NULL 5 CIRCLE STREET BOX 506 CHELMSFORD MA 02184 ? 14-Jun-1960 N 98889 BRADFORD LEO NULL 4 PLACE STREET BOX 555 NASHUA NH 03060 ? 18-May-1949 N 2 rows selected
例17
次の例では、.unlファイル内の空の文字列のデータ(間に空白のない2つのカンマとして表される)は、データベースの対応する列をNULLとするようOracle RMUに示すRecord_Definition修飾子のNull=""オプションの使用方法を示します。
この例では、.unlファイルの内容の次に、この.unlファイルのロードに使用するRMU Loadコマンド、その次にロードされたデータを示すSQL文からの出力を示します。
"90021","ABUSHAKRA","CAROLINE","A","5 CIRCLE STREET",, "CHELMSFORD", "MA", "02184", "1960061400000000"# "90015","BRADFORD","LEO","B","4 PLACE STREET",, "NASHUA","NH", "03030", "1949051800000000"# $ RMU/LOAD/FIELDS=(EMPLOYEE_ID, LAST_NAME, FIRST_NAME, - _$ MIDDLE_INITIAL, ADDRESS_DATA_1, ADDRESS_DATA_2, - _$ CITY, STATE, POSTAL_CODE, BIRTHDAY) - _$ /RECORD_DEFINITION=(FILE= EMPLOYEES.RRD, - _$ FORMAT=DELIMITED_TEXT, - _$ TERMINATOR="#", - _$ NULL="") - _$ MF_PERSONNEL EMPLOYEES EMPLOYEES.UNL %RMU-I-DATRECREAD, 2 data records read from input file. %RMU-I-DATRECSTO, 2 data records stored. $ SQL SQL> ATTACH 'FILENAME MF_PERSONNEL.RDB'; SQL> SELECT * FROM EMPLOYEES WHERE ADDRESS_DATA_2 IS NULL; EMPLOYEE_ID LAST_NAME FIRST_NAME MIDDLE_INITIAL ADDRESS_DATA_1 ADDRESS_DATA_2 CITY STATE POSTAL_CODE SEX BIRTHDAY STATUS_CODE 90021 ABUSHAKRA CAROLINE A 5 CIRCLE STREET NULL CHELMSFORD MA 02184 ? 14-Jun-1960 N 90015 BRADFORD LEO B 4 PLACE STREET NULL NASHUA NH 03030 ? 18-May-1949 N 2 rows selected
例18
次の例は、.unlファイル内の空の文字列のデータ(間に空白のない2つのカンマとして表される)は、データベースの対応する列をNULLとするようOracle RMUに示すために、Record_Definition修飾子のNullオプションのデフォルト値を使用すること以外、例17と同じです。
この例では、.unlファイルの内容の次に、この.unlファイルのロードに使用するRMU Loadコマンド、その次にロードされたデータを示すSQL文からの出力を示します。
"90022","ABUSHAKRA","CAROLINE","A","5 CIRCLE STREET",, "CHELMSFORD", "MA", "02184", "1960061400000000"# "90014","BRADFORD","LEO","B","4 PLACE STREET",, "NASHUA","NH", "03030", "1949051800000000"# $ RMU/LOAD/FIELDS=(EMPLOYEE_ID, LAST_NAME, FIRST_NAME, - _$ MIDDLE_INITIAL, ADDRESS_DATA_1, ADDRESS_DATA_2, - _$ CITY, STATE, POSTAL_CODE, BIRTHDAY) - _$ /RECORD_DEFINITION=(FILE= EMPLOYEES.RRD, - _$ FORMAT=DELIMITED_TEXT, - _$ TERMINATOR="#", - _$ NULL) - _$ MF_PERSONNEL EMPLOYEES EMPLOYEES.UNL %RMU-I-DATRECREAD, 2 data records read from input file. %RMU-I-DATRECSTO, 2 data records stored. $ SQL SQL> ATTACH 'FILENAME MF_PERSONNEL.RDB'; SQL> SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID = '90022' OR cont> EMPLOYEE_ID ='90014' AND ADDRESS_DATA_2 IS NULL; EMPLOYEE_ID LAST_NAME FIRST_NAME MIDDLE_INITIAL ADDRESS_DATA_1 ADDRESS_DATA_2 CITY STATE POSTAL_CODE SEX BIRTHDAY STATUS_CODE 90014 BRADFORD LEO B 4 PLACE STREET NULL NASHUA NH 03030 ? 18-May-1949 N 90022 ABUSHAKRA CAROLINE A 5 CIRCLE STREET NULL CHELMSFORD MA 02184 ? 14-Jun-1960 N 2 rows selected
例19
次の例では、.unlファイル内の空の文字列のデータ(間に空白のない2つのカンマとして表される)は、データベースの対応する列をNULLとするようOracle RMUに示すRecord_Definition修飾子のNullオプションの使用方法を示します。また、最初の列に対してのみデータがある場合、残りの列はNULLに設定されます。
この例では、.unlファイルの内容の次に、この.unlファイルのロードに使用するRMU Loadコマンド、その次にロードされたデータを示すSQL文からの出力を示します。
"90026","ABUSHAKRA","CAROLINE","A","5 CIRCLE STREET","BOX 783", "CHELMSFORD","MA", "02184", "1960061400000000" "90011","BRADFORD","LEO",,,, "NASHUA","NH","03030","1949051800000000" "90010" "90009",,,,,,,,,"1966061600000000" $ RMU/LOAD/FIELDS=(EMPLOYEE_ID, LAST_NAME, FIRST_NAME, - _$ MIDDLE_INITIAL, ADDRESS_DATA_1, ADDRESS_DATA_2, - _$ CITY, STATE, POSTAL_CODE, BIRTHDAY) - _$ /RECORD_DEFINITION=(FILE= EMPLOYEES.RRD, - _$ FORMAT=DELIMITED_TEXT, - _$ NULL) - _$ MF_PERSONNEL EMPLOYEES EMPLOYEES.UNL %RMU-I-DATRECREAD, 5 data records read from input file. %RMU-I-DATRECSTO, 5 data records stored. $ SQL SQL> ATTACH 'FILENAME MF_PERSONNEL.RDB'; SQL> SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID ='90026' OR cont> EMPLOYEE_ID BETWEEN '90009' AND '90011'; EMPLOYEE_ID LAST_NAME FIRST_NAME MIDDLE_INITIAL ADDRESS_DATA_1 ADDRESS_DATA_2 CITY STATE POSTAL_CODE SEX BIRTHDAY STATUS_CODE 90009 NULL NULL NULL NULL NULL NULL NULL NULL ? 16-Jun-1966 N 90010 NULL NULL NULL NULL NULL NULL NULL NULL ? NULL N 90011 BRADFORD LEO NULL NULL NULL NASHUA NH 03030 ? 18-May-1949 N 90026 ABUSHAKRA CAROLINE A 5 CIRCLE STREET BOX 783 CHELMSFORD MA NULL ? 14-Jun-1960 N 4 rows selected
例20
次の例では、パラレル・ロード操作を示します。この例では、mf_personnelデータベースのJOB_HISTORY表に3つの記憶領域があるため、3つのエグゼキュータが指定されます。JOB_HISTORY表に制約もトリガーも定義されておらず、このコマンドの実行時に他のデータベース・アクティビティがないことがわかっているため、Defer_Index_Updates修飾子が使用されます。
また、プラン・ファイルが生成されてこのロード操作の指定が取り込まれます。プラン・ファイルの説明は、次の例を参照してください。
このコマンドからの出力にあるpidはプロセスIDであることに注意してください。
$ RMU/LOAD/PARALLEL=(EXEC=3)/DEFER_INDEX_UPDATES mf_personnel.rdb - _$ /RECORD_DEFINITION=(FILE=JOB_HIST,FORMAT=DELIMITED_TEXT, - _$ EXCEPTION_FILE=DISK1:[ERRORS]JOB_HIST.EXC) - _$ /STATISTICS=(INTERVAL=30)/LIST_PLAN=JOB_HISTORY.PLAN - _$ JOB_HISTORY JOB_HIST.UNL %RMU-I-EXECUTORMAP, Executor EXECUTOR_1 (pid: 2941941B) will load storage area EMPIDS_LOW. %RMU-I-EXECUTORMAP, Executor EXECUTOR_2 (pid: 2941F01D) will load storage area EMPIDS_MID. %RMU-I-EXECUTORMAP, Executor EXECUTOR_3 (pid: 2941C81F) will load storage area EMPIDS_OVER. -------------------------------------------------------------------------- ELAPSED: 0 00:00:30.05 CPU: 0:00:01.64 BUFIO: 59 DIRIO: 219 FAULTS: 2670 1640 data records read from input file. 1330 records loaded before last commit. 220 records loaded in current transaction. 0 records rejected before last commit. 0 records rejected in current transaction. 26 early commits by executors. 3 executors: 0 Initializing; 0 Idle; 0 Terminated 0 Sorting; 2 Storing; 1 Committing; 0 Executing -------------------------------------------------------------------------- . . . -------------------------------------------------------------------------- ELAPSED: 0 00:02:30.12 CPU: 0:00:02.94 BUFIO: 103 DIRIO: 227 FAULTS: 267 1 8070 data records read from input file. 7800 records loaded before last commit. 210 records loaded in current transaction. 0 records rejected before last commit. 0 records rejected in current transaction. 139 early commits by executors. 3 executors: 0 Initializing; 0 Idle; 0 Terminated 0 Sorting; 1 Storing; 2 Committing; 0 Executing --------------------------------------------------------------------------- %RMU-I-EXECSTAT0, Statistics for EXECUTOR_1: %RMU-I-EXECSTAT1, Elapsed time: 00:02:45.84 CPU time: 12.95 %RMU-I-EXECSTAT2, Storing time: 00:00:45.99 Rows stored: 2440 %RMU-I-EXECSTAT3, Commit time: 00:01:33.17 Direct I/O: 6623 %RMU-I-EXECSTAT4, Idle time: 00:00:22.34 Early commits: 47 %RMU-I-EXECSTAT0, Statistics for EXECUTOR_2: %RMU-I-EXECSTAT1, Elapsed time: 00:02:48.42 CPU time: 18.10 %RMU-I-EXECSTAT2, Storing time: 00:01:24.98 Rows stored: 4319 %RMU-I-EXECSTAT3, Commit time: 00:01:18.13 Direct I/O: 9621 %RMU-I-EXECSTAT4, Idle time: 00:00:01.03 Early commits: 29 %RMU-I-EXECSTAT0, Statistics for EXECUTOR_3: %RMU-I-EXECSTAT1, Elapsed time: 00:02:46.50 CPU time: 9.78 %RMU-I-EXECSTAT2, Storing time: 00:00:11.12 Rows stored: 2293 %RMU-I-EXECSTAT3, Commit time: 00:02:26.67 Direct I/O: 3101 %RMU-I-EXECSTAT4, Idle time: 00:00:04.14 Early commits: 77 %RMU-I-EXECSTAT5, Main process idle time: 00:02:41.06 %RMU-I-DATRECREAD, 9052 data records read from input file. %RMU-I-DATRECSTO, 9052 data records stored. %RMU-I-DATRECREJ, 0 data records rejected.
例21
次のコマンドは、Noexecute修飾子が指定されていること以外、前述の例と同じです。この修飾子が指定されているため、ロード操作が行われません。ただし、ロード・プラン・ファイルは作成されて、検証されます。
$ RMU/LOAD/PARALLEL=(EXEC=3)/DEFER_INDEX_UPDATES/NOEXECUTE - _$ mf_personnel.rdb - _$ /RECORD_DEFINITION=(FILE=JOB_HIST,FORMAT=DELIMITED_TEXT, - _$ EXCEPTION_FILE=DISK1:[ERRORS]JOB_HIST.EXC) - _$ /STATISTICS=(INTERVAL=30)/LIST_PLAN=JOB_HISTORY.PLAN - _$ JOB_HISTORY JOB_HIST.UNL
例22
次に、前述の例で作成されたプラン・ファイルJOB_HISTORY.PLANの内容を示します。次のコールアウトは、この表示に対応しています。
- Plan Parametersには、RMU Loadコマンドラインで指定したすべてのパラメータと、すべての指定可能なコマンド修飾子が含まれています。
- プラン・ファイル内には、コマンドラインでは指定していないコマンド修飾子が、コメントとして示されることがあります。こうしておくと、今後プラン・ファイルを使用する際に、編集や調整がしやすくなります。
- プラン・ファイル内には、コマンドラインでは指定されていない、デフォルト値を持つコマンド修飾子が、デフォルト値とともに示されることがあります。
- コマンドラインで明示的に指定したコマンド修飾子は、指定したとおりにプラン・ファイルに示されています。
- Executor parametersは、ロード操作に関与したエグゼキュータごとにリストされています。コマンド修飾子同様、コマンドラインで指定した値と、使用可能ではあるが指定されなかった値の両方がこのパラメータのリストに含まれています。
- 例外ファイルの拡張子にエグゼキュータの番号が追加されていることに注意してください。このようなファイルをコマンドラインで指定した場合、エグゼキュータごとに別のファイルがOracle RMUで生成されます。必要に応じて、各例外ファイルを異なるディスクまたはディレクトリに置くようこのプラン・ファイルを編集します。
! Plan created on 20-JUL-1995 by RMU/LOAD. Plan Name = LOAD_PLAN Plan Type = LOAD Plan Parameters:(1) Database Root File = MF_PERSONNEL.RDB; Table Name = JOB_HISTORY Input File = JOB_HIST.UNL ! Fields = <all> (2) Transaction_Type = PROTECTED ! Buffers = <default> Row_Count = 50 (3) ! Skip = <none> NoLog_Commits NoCorresponding Defer_Index_Updates Constraints Parallel NoPlace Statistics = INTERVAL = 30 (4) NoTrigger_Relations Record_Definition_File = JOB_HIST Format = Delimited_Text Prefix = """" Suffix = """" NoNull Separator = "," End Of Line Terminator End Plan Parameters Executor Parameters: (5) Executor Name = EXECUTOR_1 ! Place_Only = <none> Exception_File = DISK1:[DATABASE]JOB_HIST.EXC_1; (6) ! RUJ Directory = <default> Communication Buffers = 4 End Executor Parameters Executor Parameters: Executor Name = EXECUTOR_2 ! Place_Only = <none> Exception_File = DISK1:[DATABASE]JOB_HIST.EXC_2; ! RUJ Directory = <default> Communication Buffers = 4 End Executor Parameters Executor Parameters: Executor Name = EXECUTOR_3 ! Place_Only = <none> Exception_File = DISK1:[DATABASE]JOB_HIST.EXC_3; ! RUJ Directory = <default> Communication Buffers = 4 End Executor Parameters
例23
次の例では、RMU Loadコマンドに対する、複数の異なるデータ型を持つレコード定義ファイル(.rrd)の構造を示します。例の最初の部分に表の定義を示します。2番目の部分に、これらのデータ型に対応する.rrdファイルの取得に使用できるRMU Unloadコマンドを示し、最後の部分に、これらのデータ型に対する.rrdファイルの定義を示します。
SQL> attach 'filename data_types.rdb'; SQL> show table many_types; Information for table MANY_TYPES Columns for table MANY_TYPES: Column Name Data Type Domain ----------- --------- ------ F_ID TINYINT F_CHAR_3 CHAR(3) F_TINYINT TINYINT F_SMALLINT SMALLINT F_INTEGER INTEGER F_BIGINT BIGINT F_NTINYINT TINYINT(1) F_NSMALLINT SMALLINT(2) F_NINTEGER INTEGER(7) F_NBIGINT BIGINT(5) F_REAL REAL F_DOUBLE_PREC DOUBLE PRECISION F_DATE_VMS DATE VMS F_DATE_ANSI DATE ANSI F_VARCHAR VARCHAR(20) F_FLOAT REAL F_DATE DATE VMS F_TIME TIME F_TIMESTAMP TIMESTAMP(2) F_INTERVAL INTERVAL DAY (2) $ RMU/UNLOAD DATA_TYPES.RDB/RECORD_DEF=(FILE=MANY_TYPES.RRD) - _$ MANY_TYPES MANY_TYPES.UNL $ TYPE MANY_TYPES.RRD DEFINE FIELD F_ID DATATYPE IS SIGNED BYTE. DEFINE FIELD F_CHAR_3 DATATYPE IS TEXT SIZE IS 3. DEFINE FIELD F_TINYINT DATATYPE IS SIGNED BYTE. DEFINE FIELD F_SMALLINT DATATYPE IS SIGNED WORD. DEFINE FIELD F_INTEGER DATATYPE IS SIGNED LONGWORD. DEFINE FIELD F_BIGINT DATATYPE IS SIGNED QUADWORD. DEFINE FIELD F_NTINYINT DATATYPE IS SIGNED BYTE SCALE -1. DEFINE FIELD F_NSMALLINT DATATYPE IS SIGNED WORD SCALE -2. DEFINE FIELD F_NINTEGER DATATYPE IS SIGNED LONGWORD SCALE -7. DEFINE FIELD F_NBIGINT DATATYPE IS SIGNED QUADWORD SCALE -5. DEFINE FIELD F_REAL DATATYPE IS F_FLOATING. DEFINE FIELD F_DOUBLE_PREC DATATYPE IS G_FLOATING. DEFINE FIELD F_DATE_VMS DATATYPE IS DATE. DEFINE FIELD F_DATE_ANSI DATATYPE IS DATE ANSI. DEFINE FIELD F_VARCHAR DATATYPE IS TEXT SIZE IS 20. DEFINE FIELD F_FLOAT DATATYPE IS F_FLOATING. DEFINE FIELD F_DATE DATATYPE IS DATE. DEFINE FIELD F_TIME DATATYPE IS TIME. DEFINE FIELD F_TIMESTAMP DATATYPE IS TIMESTAMP SCALE -2. DEFINE FIELD F_INTERVAL DATATYPE IS INTERVAL DAY SIZE IS 2 DIGITS. DEFINE RECORD MANY_TYPES. F_ID . F_CHAR_1 . ... END MANY_TYPES RECORD.
例24
次の例では、SQL EXPORTからの出力を使用してPERSONNELデータベースのコピーをロードするスクリプトの一部を示します。
$! Export the database definition and the data $ sql$ export database filename personnel into pers.rbr; $ $! Create an empty database (use RMU Load to add data) $ sql$ import database from pers.rbr filename copy_pers no data; $ $! Now use load to add the same table $ rmu/load copy_pers /match_name=employees employees pers.rbr %RMU-I-DATRECREAD, 100 data records read from input file. %RMU-I-DATRECSTO, 100 data records stored. $ $ rmu/load copy_pers /match_name job_history pers.rbr %RMU-I-DATRECREAD, 274 data records read from input file. %RMU-I-DATRECSTO, 274 data records stored. $ $ rmu/load copy_pers /match_name salary_history pers.rbr %RMU-I-DATRECREAD, 729 data records read from input file. %RMU-I-DATRECSTO, 729 data records stored. $ . . . $ rmu/load copy_pers /match_name work_status pers.rbr %RMU-I-DATRECREAD, 3 data records read from input file. %RMU-I-DATRECSTO, 3 data records stored.