ヘッダーをスキップ
Oracle Rdb for OpenVMS Oracle RMUリファレンス・マニュアル
リリース7.2
E06177-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

1.28 RMU Loadコマンド

データベースの表にデータをロードします。

RMU Loadコマンドは、次の処理に使用できます。

次の2つの方法のいずれかを使用してデータをロードできます。

デフォルトでは、パラレル・ロード操作は次のように設定されます。

エグゼキュータと通信バッファが設定されると、パラレル・ロード操作は入力ファイルを次のように処理します。

  1. プロセスが入力ファイルの読取りを開始し、入力ファイルの行ごとにターゲット記憶領域を決定します。

  2. プロセスは、データのターゲット記憶領域に割り当てられたエグゼキュータの通信バッファに各行を配置します。

  3. エグゼキュータの最初の通信バッファが一杯になると、ターゲット記憶領域へのデータのロードが開始されます。

  4. 特定のエグゼキュータがデータの最初のバッファのロードを完了する前に、そのエグゼキュータに対する別のデータの準備ができた場合は、そのエグゼキュータの2番目の通信バッファに次のデータが入れられます。

  5. 各エグゼキュータは、他のエグゼキュータと並行してバッファからのデータ・ロードを行います。

  6. プロセスは、入力ファイルからのすべてのデータのソート、割当て、およびロードが終わるまで、データの読取り、ソート、および各エグゼキュータへの割当て(エグゼキュータの通信バッファへのデータ配置)を続けます。

Row_Count修飾子とParallel修飾子(Executor_CountおよびBuffer_Countオプションが使用可能)を使用して、パラレル・ロード操作を細かく調整することもできます。

ロード操作のパフォーマンスを最適化するヒントは、『Oracle Rdb Guide to Database Design and Definition』を参照してください。


形式




説明

RMU Loadコマンドでは、次の5種類のデータ・ファイルを使用できます。セキュリティ監査ジャーナル以外のすべてのファイルの拡張子は.unlです。

特殊構造ファイルおよびセキュリティ監査ジャーナル・ファイル以外では、データ・ファイルをロードするRMU Loadコマンドラインでレコード定義ファイル(.rrd)を指定する必要があります。レコード定義ファイルによって、ロードするデータの説明(メタデータ)がOracle RMUに提供されます。

次のリストに、3種類のファイルをロードする場合の追加要件を示します。

レコード定義ファイル(.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のセキュリティ監査ジャーナルから次のものへロードできます。

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修飾子は、ロードのパフォーマンスを最も優先する場合に有用です。データベースに定義されている制約を完全に把握し、入力データについてもよく知っていて、データをロードしても制約に違反しないことがわかっている必要があります。この場合、これらの修飾子を次のように使用します。

NoconstraintsまたはConstraints=Deferred修飾子を使用してRMU Loadコマンドを発行する前に、次の点について検討してください。

次のすべてが真である状況についても検討します。

前述のような状況では、ロードされた行とロードされていない行は簡単に判別できません。したがって、表に遅延制約が定義されている場合、パラレル・ロード操作に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修飾子を使用します。

索引の更新を遅延する場合、非常に多くの仮想メモリーが必要なことにも注意してください。必要な仮想メモリーは、次の事項に直接比例します。

次の式を使用して各遅延索引に必要な仮想メモリーの量を推定できます。


n * (I * number_defered_ikeys)

Nodefer_Index_Updates修飾子がデフォルトです。Nodefer_Index_Updates修飾子を指定した場合(またはデフォルトを受け入れた場合)、ロードする記憶領域内のデータの配置情報を定義する索引と表に定義されている他の索引の両方が、動詞実行時に再構築されます。

Parallel修飾子が指定されている場合、これによって、マネージド・デッドロックが発生します。次に、このようなケースについて説明します。

このような場合、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つの通信バッファが割り当てられます。通信バッファは、プロセスとエグゼキュータの通信に使用されます。

追加のエグゼキュータまたは通信バッファ、あるいはその両方を割り当てる必要がある場合、次のオプションのいずれか、または両方を使用します。

各ロード操作の最後に、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のいずれかを指定する必要があります。

使用可能なオプションは次のとおりです。


使用上の注意


1リリース7.0より前のOracle Rdbでは、RDBVMS$TSNのデータ型と長さはCHAR 12です。

  • ASCIIテキスト形式で格納されている日付は、RMU LoadコマンドでVMS DATEデータ型に変換できます。「例」の例7を参照してください。この変換を示しています。

  • ロードまたはアンロード操作でNULLインジケータを保持するには、Record_Definition修飾子を使用する際にNullオプションを指定します。Nullオプションを指定せずにRecord_Definition修飾子を使用すると、RMU LoadコマンドですべてのNULL値がゼロに置き換えられます。これによって、COMPUTED BY列の結果が予期しないものになる場合があります。

  • RMU Loadコマンドが、閉じたデータベースに発行されると、他のユーザーがデータベースにアタッチできない状態でコマンドが実行されます。

  • RMU Loadコマンドでは、キャラクタ・セットの情報が認識されます。表をロードする場合、RMU Loadコマンドで列の正しいサイズがキャラクタ・セットに基づくことが認識されます。たとえば、CHAR (10) CHARACTER SET KANJIとして定義されている列は20オクテット使用することがRMU Loadコマンドで認識されます。

  • デフォルトでは、指定した表または列の名前がRMU Loadコマンドで大文字に変更されます。小文字のままにするには、デリミタ付き識別子を使用します。つまり、名前を引用符("")で囲みます。

  • データベースでDEC Multinational Character Set(MCS)以外のキャラクタ・セットを表およびドメイン名に使用する場合、またはそのようなキャラクタ・セットからの名前を使用するようレコード定義ファイルを編集した場合、RMU Loadコマンドが失敗し、次の例に示すエラーが返されます。


    $ 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キャラクタ・セットで表せる名前に変更します。

  • Oracle RMUでは、マルチスキーマのネーミング規則はサポートされていません。指定するとエラーが返されます。次に例を示します。


    $ 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節を参照してください。

  • Transaction_Type=Batch_Update修飾子は、複数のエグゼキュータ(Executor_Countが1より大きい)に使用できません。

  • RMU Loadプロシージャでは、システム・ドメインを参照する表のロードがサポートされます。

  • 表またはビューを表すのにシノニムを使用した場合、RMU Loadコマンドはシノニムをベース・オブジェクトに変換し、実表またはビューが指定された場合と同じようにデータを処理します。そのため、その表のメタデータを含むアンロード交換ファイル(.UNL)やレコード定義ファイル(.RRD)では、実表またはビューが指定され、シノニム名は使用されません。そのメタデータが別のデータベースに対して使用される場合は、Match_Name修飾子を使用して、RMUのロード・プロセス中にその名前がオーバーライドされるようにしてください(必要であれば)。


    例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の内容を示します。次のコールアウトは、この表示に対応しています。

    1. Plan Parametersには、RMU Loadコマンドラインで指定したすべてのパラメータと、すべての指定可能なコマンド修飾子が含まれています。

    2. プラン・ファイル内には、コマンドラインでは指定していないコマンド修飾子が、コメントとして示されることがあります。こうしておくと、今後プラン・ファイルを使用する際に、編集や調整がしやすくなります。

    3. プラン・ファイル内には、コマンドラインでは指定されていない、デフォルト値を持つコマンド修飾子が、デフォルト値とともに示されることがあります。

    4. コマンドラインで明示的に指定したコマンド修飾子は、指定したとおりにプラン・ファイルに示されています。

    5. Executor parametersは、ロード操作に関与したエグゼキュータごとにリストされています。コマンド修飾子同様、コマンドラインで指定した値と、使用可能ではあるが指定されなかった値の両方がこのパラメータのリストに含まれています。

    6. 例外ファイルの拡張子にエグゼキュータの番号が追加されていることに注意してください。このようなファイルをコマンドラインで指定した場合、エグゼキュータごとに別のファイルが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.