特殊構造ファイルのデータは、RMU Loadコマンドを使用しないとリロードできません。RMSファイルのデータは、RMU Loadコマンドを使用するか、DATATRIEVEで提供される代替ユーティリティなどを使用してリロードできます。
RMU Unloadコマンドでは、指定した表またはビューのデータがコピーされ、特殊構造ファイルまたはRMSファイルに配置されます。RMU Unloadコマンドでは、指定した表のデータは削除されないことに注意してください。データのコピーが行われるだけです。RMU Unloadコマンドを使用して次の処理を行うことができます。
- Oracle Rdbデータベースに直接アクセスできないアプリケーションのためにデータを抽出します。
- データのアーカイブ・コピーを作成します。
- 再構築操作を実行します。
- sorted-by句を使用してビューを定義して、ビューをアンロードすることにより、データをソートします。
RMU Unloadコマンドによって作成される特殊構造ファイルには、アンロードされた表のメタデータが含まれます。RMU Unloadコマンドによって作成されるRMSファイルには、データのみが含まれます。メタデータは、データ・ディクショナリか、Record_Definition修飾子で作成される.rrdファイルにあります。RMSファイルを使用するアプリケーションとデータを交換するには、Record_Definition修飾子を指定します。
LIST OF BYTE VARYING(セグメント文字列)データ型はRMSファイルにアンロードできませんが、特殊構造ファイル・タイプにはアンロードできます。
データ型変換は、Oracle Rdbで変換がサポートされる場合のみ有効です。
RMU Unloadコマンドは、読取り専用トランザクションを実行して、アンロードするメタデータとユーザー・データを収集します。これは、排他アクセスを必要としないすべての操作と互換性があります。
root-file-spec
表またはビューをアンロードするデータベースのルート・ファイル指定。デフォルトのファイル拡張子は.rdbです。table-name
アンロードする表またはビューの名前、またはシノニム。output-file-name
出力先ファイル名。デフォルトのファイル拡張子は.unlです。
Allocation=n
生成される出力ファイルを事前に割り当てることができます。デフォルトの割当ては2048ブロックです。ファイルが閉じるときに、実際に使用されているサイズに縮小されます。Allocation修飾子に指定する値が65535未満の場合、その値がExtend_Quantity修飾子の新しい最大値になります。
Buffers=n
アンロード操作で使用されるデータベース・バッファの数を指定します。値を指定しないと、データベースのデフォルト値が使用されます。この修飾子はアンロード操作のパフォーマンスに影響を与えることがありますが、通常は、データベースのデフォルト・バッファ数であれば適切なパフォーマンスが得られます。Commit_Every=n
選択問合せをWITH HOLDカーソルに変えて、データ・ストリームがコミットによって閉じられないようにします。WITH HOLD句の詳細は、『Oracle Rdb SQLリファレンス・マニュアル』を参照してください。Delete_Rows
データベースから行をアンロードした後でOracle Rdbで行を削除することを指定します。この修飾子をCommit_Every修飾子と一緒に使用すると、小数の行を処理できます。制約、トリガーまたは表の保護により、行を削除できない場合、RMU Unload操作は失敗します。Delete_Rows修飾子は、更新不可のビュー、結合を含むビュー、または集計(unionまたはgroup by)を含むビューには使用できません。
Error_Delete
Noerror_Delete
エラー時に、アンロード・ファイルとレコード定義ファイルを削除するかどうかを指定します。デフォルトでは、リカバリ不可能なエラーが発生してアンロード・コマンドの実行が異常終了した場合には、RMU Unloadコマンドがアンロード・ファイルとレコード定義ファイルを削除します。Noerror_Delete修飾子を使用すると、ファイルが保持されます。Delete_Rows修飾子を指定した場合、この修飾子のデフォルトはNoerror_Deleteになります。このデフォルトは、アンロードされた行の一部の削除がコミットされた後で、リカバリ不可能なエラーが発生した場合に、アンロード・ファイルとレコード定義ファイルを使用してデータをリロードするために必要です。アンロード・ファイルが保持されていても、エラーが深刻なため、エラーの検出後にRMUエラー・ハンドラでアンロード・ファイルへのアクセスを継続できない場合には、RMU Loadコマンドを使用してデータをリロードできないことがあります。
Delete_Rows修飾子を指定しない場合、デフォルトはError_Deleteです。
Extend_Quantity=number-blocks
アンロード・ファイル(.unl)を拡張できるサイズ(ブロック)を設定します。number-blocksパラメータの最小値は1、最大値は65535です。Allocation修飾子に65535未満の値を指定した場合は、その値がここに指定できる最大値になります。Extend_Quantity修飾子を指定しない場合、.unlファイルを拡張できるデフォルト・ブロック・サイズは2048ブロックです。
Fields=(column-name-list)
データベースからアンロードする表またはビューの列(1つまたは複数)を指定します。複数の列を指定する場合は、列名をカンマで区切り、列名のリストをカッコで囲みます。列をアンロードする順序が表またはビューに定義されている順序と違う場合には、この修飾子に順序も指定します。表またはビューの構造の変更が役立つのは、データベースを再構築するとき、または異なるメタデータ定義の2つのデータベースの間でデータを移行するときです。デフォルトでは、表またはビューに定義されているすべての列が定義されている順序で処理されます。Flush={Buffer_End|On_Commit}
内部RMSバッファをアンロード・ファイルにいつフラッシュするかを制御します。デフォルトでは、アンロード・ファイルが閉じられるときに、内部RMSファイル・バッファに残っているデータをRMU Unloadコマンドがフラッシュします。Flush修飾子でこの動作を変更できます。Flush修飾子には次のいずれかのオプションを指定する必要があります。
- Buffer_End
Buffer_Endオプションは、各アンロード・バッファがアンロード・ファイルに書き込まれた後で、内部RMSバッファをアンロード・ファイルにフラッシュすることを指定します。- On_Commit
On_Commitオプションは、現在のアンロード・トランザクションがコミットされる直前に、内部RMSバッファをアンロード・ファイルにフラッシュすることを指定します。
Delete_Rows修飾子を指定した場合、この修飾子のデフォルトはFlush=On_Commitになります。このデフォルトは、アンロードされた行の一部の削除がコミットされた後で、リカバリ不可能なエラーが発生した場合に、アンロード・ファイルとレコード定義ファイルを使用してデータをリロードするために必要です。
Delete_Rows修飾子を指定しない場合、デフォルトでは、アンロード・ファイルが閉じられた場合のみレコード定義バッファをフラッシュします。
内部RMSバッファをより頻繁にフラッシュすると、Noerror_Delete修飾子を指定していた場合にエラーが発生しても、アンロード・ファイル・データの損失を回避できます。アンロード・ファイルへのRMS内部バッファのフラッシュを増やすと、RMU Unloadコマンドを完了するまでの時間が長くなることがあります。
Limit_To=n
Nolimit_To
表またはビューからアンロードする行数を制限します。Limit_To修飾子の主な用途は、テスト・データベースにロードするためのデータ・サンプルのアンロードです。デフォルトはNolimit_To修飾子です。Optimize={options}
RMU Unloadコマンドの問合せ最適化を制御します。Optimize修飾子には次の1つ以上のオプションを指定する必要があります。
- Conformance={Optional|Mandatory}
このオプションには2つのキーワード、OptionalまたはMandatoryを指定します。これは、指定した問合せアウトラインの設定よりも優先されます。
対応する問合せアウトラインが無効な場合、Conformance=Mandatoryオプションによって問合せのコンパイルが行われ、RMU Unload操作は停止します。問合せアウトラインは、Using_OutlineまたはName_Asオプションで指定した文字列と一致するか、問合せIDと一致するものです。
デフォルトの動作では、問合せアウトライン内の設定を使用します。問合せアウトラインが見つからないか、問合せアウトラインの使用が無効な場合、このオプションは無視されます。- Fast_First
このオプションは、問合せオプティマイザで、最初の行をすぐに返す戦略を優先するように要求します。かわりに全体の検索時間は長くなる可能性があります。問合せアウトラインが使用される場合は、このオプションは設定よりも優先されません。
このオプションはTotal_Timeオプションと同時に指定することはできません。
注意
RMU Unloadプロセスのこの最適化オプションはお薦めしません。このオプションは、これがデフォルトの動作であった以前のRdbリリースとの下位互換性を保つためにのみ提供しています。
- Name_As=query_name
このオプションには、問合せの名前を指定します。この名前は、Rdbデバッグ・フラグ(論理RDMS$SET_FLAGSを使用して有効にする)の出力に注釈を付けるために使用されます。また、Oracle TRACEによって記録されます。
Using_Outlineオプションを使用しない場合、この名前は問合せアウトライン名としても使用されます。- Selectivity=selectivity-value
このオプションを使用すると、別の選択値を使用するようにOracle Rdb問合せオプティマイザに影響を与えることができます。
Selectivityオプションには次のキーワードを指定します。
- Aggressive --- デフォルトのOracle Rdbの選択に比べて少数の行が選択されると仮定します。
- Sampled --- 問合せでリテラルを使用して、索引に対して予備見積もりを実行します。
- Default --- デフォルトの選択ルールを使用します。
次の例に、Selectivityオプションの使用を示します。
$RMU/UNLOAD/OPTIMIZE=(TOTAL_TIME,SELECTIVITY=SAMPLED) - _$ SALES_DB CUSTOMER_TOP10 TOP10.UNL
このオプションが最も役立つのは、RMU Unlaodコマンドが複雑な述語のビュー定義を参照するときです。- Sequential_Access
このオプションは、この問合せで索引アクセスを無効にするようにリクエストします。厳密にパーティション化された表のビューからのRMU Unloadでは、これが特に役立ちます。厳密なパーティション化は、CREATEまたはALTER STORAGE MAP文のPARTITIONING IS NOT UPDATABLE句で有効になります。検索問合せのみが、表の順次アクセスの際にこのタイプのパーティション最適化を使用します。
このオプションはUsing_Outlineオプションと同時に指定することはできません。- Total_Time
このオプションは、合計時間の最適化をアンロード問合せに適用することをリクエストします。問合せアウトラインが使用される場合は、その設定よりも優先されません。
場合によっては、問合せオプティマイザが最初の行の高速取得よりも全体のパフォーマンスを優先すると、合計時間の最適化によってRMU Unloadコマンドのパフォーマンスが向上することがあります。RMU Unloadプロセスはセット全体をアンロードするため、先頭の数行を早く取得する必要はありません。
このオプションは、Fast_Firstオプションと同時に指定できない場合があります。Optimize修飾子が指定されない場合、Optimize=Total_Timeの動作がRMU Unloadコマンドのデフォルト動作です。- Using_Outline=outline_name
このオプションには、RMU Unloadコマンドで使用される問合せアウトラインの名前を指定します。問合せアウトラインが存在しない場合、名前は無視されます。
このオプションは、Sequential_Accessオプションと同時に指定できない場合があります。
Record_Definition={([No]File|Path)=name,options}
出力ファイルのレコード構造定義を含むRMSファイルを作成します。レコードの記述には、CDOレコードおよびフィールド定義形式を使用します。デフォルトのファイル拡張子は.rrdです。File=nameまたはPath=nameオプションを省略する場合、1つのオプションを指定する必要があります。
この修飾子で生成される.rrdファイルのdate-time構文は、Oracle Rdbリリース6.0で変更されています。これは、.rrdファイルと、Oracle CDD/Repository V6.1でのdate-time構文サポートの互換性を得るために行われました。RMU Unloadコマンドは、旧バージョンのOracle RdbのRecord_Definitionで生成されるdate-time構文と、Oracle Rdbリリース6.0以上において生成される構文の両方を受け入れます。
.rrdファイルの詳細およびこの修飾子で生成されるdate-time構文の詳細は、「付録A」を参照してください。
オプションは次のとおりです。
- Format=(Text)
Format=(Text)オプションを指定すると、Oracle RMUによってすべてのデータが印刷可能なテキストに変換されてからアンロードされます。- Format=XML
Format=XMLオプションを指定すると、出力Record_Definitionファイル・タイプのデフォルトが.DTD(Document Type Definition)になります。出力ファイルのデフォルトは.XMLタイプになります。データ・ファイルの内容は、WebブラウザまたはXMLアプリケーションでの処理に適したXML形式です。
Nofileオプションを使用する場合、あるいはFileまたはPathキーワードを指定しない場合は、DTDがXML出力ファイルに組み込まれます(内部DTD)。FileまたはPathキーワードに出力ファイルを識別する名前を指定すると、そのファイルは外部DTDとしてXMLファイル内から参照されます。
XMLファイルには、データベースの名前と<RMU_ROW>という名前の複数の行がある1つの表が含まれます。各行には各列の値が印刷可能テキストとして含まれます。値がNULLの場合、タグ<NULL/>が示されます。例16にこの動作を示します。
注意
RMU Loadコマンドでは、FORMAT:XMLを使用するデータのロードはサポートされません。
- Format=(Delimited_Text [,delimiter-options])
Format=Delimited_Textオプションを指定すると、Oracle RMUによってすべてのデータにデリミタが適用されてからアンロードされます。
DATE VMS日付は、yyyymmddhhmmssccという、ソート可能な日時書式で出力されます。たとえば、1993年3月20は1993032000000000と出力されます。
Formatオプションを使用しないと、Oracle RMUによってデータが固定長のバイナリ・フラット・ファイルに出力されます。Format=Delimited_Textオプションを使用しないと、指定のVARCHAR(n)文字列の文字数がnよりも少ないときに、文字列がn文字長になるように空白が埋め込まれます。
Delimiterオプション(およびデリミタ・オプションを指定しない場合のデフォルト値)は次のとおりです。
- Prefix=string
ASCII出力ファイルのすべての列値の先頭に付ける接頭辞文字列を指定します。このオプションを省略すると、列の接頭辞は引用符(")になります。- Separator=string
行の列値を区切る文字列を指定します。このオプションを省略すると、列のセパレータはカンマ(,)になります。- Suffix=string
ASCII出力ファイルのすべての列値の末尾に付ける接尾辞文字列を指定します。このオプションを省略すると、列の接尾辞は引用符(")になります。- Terminator=string
1行分のすべての列値の後に付ける、行の終端文字を指定します。このオプションを省略すると、終端文字として行端マーカーが使用されます。- Null=string
NULLがデータベースの列で検出されたときに、NULLとして出力ファイルにアンロードされる文字列を指定します。
Nullオプションは次のいずれかとしてコマンドラインで指定できます。
- 引用符で囲んだ文字列
- 何も囲まない一組の二重引用符("")
- 文字列なし
NULL文字を表す文字列は、Oracle RMUコマンドラインでは引用符で囲む必要があります。NULL文字として空白文字(1つまたは複数)は指定できません。Null値と他のDelimited_Textオプションで同じ文字を使用することはできません。
注意
デリミタ・オプションに指定する各文字列の値は、引用符で囲む必要があります。Oracle RMUは、値を解釈する際にそれらの引用符を除外します。引用符(")をデリミタとして指定する場合は、4つの引用符からなる文字列を指定します。このように指定すると、Oracle RMUは、1つの引用符をデリミタとして使用するよう要求されたものと解釈します。たとえば、Suffix = """"とします。
その場合、Oracle RMUはこれらの引用符を次のように読み取ります。
- 最初の引用符は文字列から除外されます。
- 2つ目と3つ目の引用符は、1つの引用符(")をデリミタとして使用するリクエストであると解釈されます。
- 4つ目の引用符は除外されます。
このようにして1つの引用符がデリミタとして使用されます。
さらに、デリミタ付き文字列の一部として引用符を指定する必要がある場合は、文字列に含める引用符ごとに2つの引用符を使用する必要があります。たとえば、Suffix = "**""**"と指定すると、Oracle RMUは**"**というデリミタを使用します。
- Trim=option
Trim=optionキーワードを指定すると、各出力フィールドの前または後(あるいは両方)から空白が削除されます。オプションとして次の3つのキーワードがあります。
- TRAILING - アンロードされるCHARACTERおよびCHARACTER VARYING(VARCHAR)データから末尾の空白が削除されます。これは、TRIMオプションのみを指定した場合のデフォルト設定です。
- LEADING - アンロードされるCHARACTERおよびCHARACTER VARYING(VARCHAR)データから先頭の空白が削除されます。
- BOTH - 先頭と末尾両方の空白が削除されます。
ロードまたはアンロード操作でRecord_Definition修飾子を使用し、NullオプションをDelimited_Textオプションに指定しない場合、表の行に格納されているNULL値はロードまたはアンロードの際に保持されません。このため、表に格納されているNULL値を保持して、データベース内またはデータベース間でデータを移動する場合は、NullオプションをRecord_Definition修飾子のDelimited_Textオプションに指定します。
Reopen_Count=n
Reopen_Count=n修飾子では、出力ファイルに書き込まれるレコード数を指定できます。レコード数が指定値に到達すると、出力ファイルは再作成されます(つまり、新しいバージョンのファイルが作成されます)。Reopen_Count=n修飾子が有効なのは、Record_DefinitionまたはRms_Record_Def修飾子と一緒に使用する場合のみです。Rms_Record_Def=({File|Path}=name [,options])
Record_Definition修飾子と同じです。Record_Definition修飾子の説明を参照してください。Row_Count=n
Oracle RdbサーバーとRMU Unloadプロセスとの間で複数の行をバッファすることを指定します。nのデフォルト値は500行ですが、これは、作業セットのサイズやアンロードするデータの長さに応じて調整することをお薦めします。行数を増やすと、アンロード操作のCPUコストを低減できる場合があります。リモート・データベースについては、バッファされたデータを大きなネットワーク・パケットにパッケージできるため、データ量が多い場合にはネットワーク・トラフィックを大幅に低減できる可能性があります。nに指定できる最小値は1です。デフォルトの行サイズは、Commit_Every修飾子に指定した値か、または500のいずれか小さい方になります。
Statistics_Interval=seconds
アンロード操作の進捗を確認できるように統計を定期的に表示することを指定します。次のような統計が表示されます。
- 経過時間
- CPU時間
- バッファされたI/O
- 直接I/O
- ページ・フォルト
- 最後のトランザクションのコミット後にアンロードされたレコード数
- 現在のトランザクションでこれまでアンロードされたレコード数
Statistics_Interval修飾子を指定すると、2つ目のパラメータが必要になります。最小値は1です。最初の間隔が経過する前にアンロード操作が正常に終了すると、アンロードされたファイル数に関する情報メッセージのみを受け取ります。最初の間隔が経過する前にアンロード操作が失敗すると、エラー・メッセージとアンロードされたレコード数の統計を受け取ります。
アンロード操作中は、いつでも[Ctrl]と[T]を同時に押して現在の統計を表示できます。
Transaction_Type[=(transaction_mode,options,...)]
トランザクション・モード、分離レベル、およびトランザクションの待機動作を指定できます。次のいずれかのキーワードを使用してトランザクション・モードを制御します。
- Automatic
Transaction_Type=Automaticを指定すると、トランザクション・タイプは、現在のデータベースの設定(スナップショットの有効、遅延または無効、このユーザーで使用可能なトランザクション・モード、データベースのスタンバイ・ステータス)によって変わります。Automaticモードがデフォルトです。- Read_Only
Read_Onlyトランザクションを開始します。- Exclusive
Read_Writeトランザクションを開始し、Exclusive_Readのために表を予約します。- Protected
Read_Writeトランザクションを開始し、Protected_Readのために表を予約します。- Shared
Read_Writeトランザクションを開始し、Shared_Readのために表を予約します。
キーワードIsolation_Level=[option]に次のいずれかのオプションを使用して、トランザクションの分離レベルを指定します。
- Read_Committed
- Repeatable_Read
- Serializable。Serializableはデフォルト設定です。
トランザクション分離レベルの詳細は、『Oracle Rdb SQLリファレンス・マニュアル』のSET TRANSACTION文の説明を参照してください。
次のいずれかのキーワードを使用して待機設定を指定します。
- Wait
ロックされたリソースが使用可能になるまで永続的に待機します。Waitはデフォルトの動作です。- Wait=n
nに指定する値は、トランザクション・ロック・タイムアウト間隔です。この値を指定すると、Oracle Rdbはn秒間待機した後で、待機とRMU Unloadセッションを強制終了します。待機タイムアウト間隔を0に指定すると、Nowaitの指定と同じになります。- Nowait
ロックされたリソースが使用可能になるのを待機しません。
Virtual_Fields=[No]Automatic,[No]Computed_By]
Novirtual_Fields
Virtual_Fields修飾子を使用して、AUTOMATICまたはCOMPUTED BYフィールドを実際のデータとしてアンロードします。この修飾子を使用することで、計算値を別のアプリケーションに送信することができます。また、この修飾子を使用すると、表のUNIONであるビュー、または複数の表の列で構成されるビューを介したアンロードも許可されます。たとえば、2つの表EMPLOYEESおよびRETIRED_EMPLOYEESがある場合、ビューALL_EMPLOYEES(EMPLOYEES表とRETIRED_EMPLOYEES表のUNION)をアンロードできます。Novirtual_Fields修飾子はデフォルトです。Virtual_Fields=(Noautomatic,Nocomputed_By)修飾子と同じです。
Virtual_Fields修飾子をキーワードなしで指定すると、表のCOMPUTED BYおよびAUTOMATIC列と計算されたVIEW列を含むすべてのフィールドがアンロードされます。
Virtual_Fields=(Automatic,Nocomputed_By)修飾子またはVirtual_Fields=Nocomputed_By修飾子を指定すると、データはAutomaticフィールドのみからアンロードされます。Virtual_Fields=(Noautomatic,Computed_By)修飾子またはVirtual_Fields=Noautomatic修飾子を指定すると、データはComputed_Byフィールドのみからアンロードされます。
- データベースに対してRMU Unloadコマンドを使用するには、そのデータベースのルート・ファイルのアクセス制御リスト(ACL)にRMU$UNLOAD権限が必要です。あるいは、OpenVMS SYSPRVまたはBYPASS権限が必要です。アンロードする表またはビューのSQL SELECT権限も必要です。
- RMU Unloadコマンドのチュートリアル情報は、『Oracle Rdb Guide to Database Design and Definition』を参照してください。
- このコマンドの最適なパフォーマンスを得るには、検出済非同期プリフェッチを有効にします。Oracle Rdbリリース7.0以上では、検出済非同期プリフェッチがデフォルトで有効になっています。データベースの設定を確認するには、Header修飾子を付けてRMU Dumpコマンドを発行します。
検出済非同期プリフェッチが無効になっており、データベースに対して有効にしたくない場合は、次の論理をプロセス・レベルで定義すると、Oracle RMU操作に対して検出済非同期プリフェッチ有効化することができます。
$ DEFINE RDM$BIND_DAPF_ENABLED 1 $ DEFINE RDM$BIND_DAPF_DEPTH_BUF_CNT P1
P1は、ユーザー・バッファ・カウントの10〜20パーセントの値です。- あるバージョンのOracle Rdbの構造を備えたデータベースから表をアンロードして、別のバージョンのOracle 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データベースにロードすることもできます。これは特殊構造バイナリ・ファイル(Record_Definition修飾子なしのRMU Unloadコマンドで作成される)でも同じです。別バージョンの.unlファイルをロードできる最も古いバージョンは、Oracle Rdbリリース6.0です。
- Fields修飾子は間接ファイル参照と一緒に使用できます。Fields修飾子をフィールド・リストの間接ファイル参照と一緒に使用すると、DCL SET VERIFYコマンドを使用した場合に、参照ファイルがSYS$OUTPUTに書き込まれます。詳細は、第1.3節を参照してください。
- RMU Unloadコマンドで作成された特殊構造の.unlファイルの内容を表示するには、RMU Dump Exportコマンドを使用します。
- ロードまたはアンロード操作でNULLインジケータを保持するには、Record_Definition修飾子でNullオプションを使用します。Record_Definition修飾子をNullオプションなしで使用すると、すべてのNULL値が0で置き換えられます。このために、computed-by列で予期しない結果が生成されることになります。
- Oracle RMUでは、システム表をアンロードすることはできません。
- RMU Unloadコマンドによって、キャラクタ・セット情報が識別されます。表をアンロードするとき、RMU Unloadによってキャラクタ・セットの情報がレコード定義ファイルに送られます。
- レコード定義ファイルが作成されるとき、RMU Unloadコマンドでは、デリミタ付き識別子を認めることにより表名と列名のすべての小文字が保持されます。デリミタ付き識別子は、引用符("")で囲んだユーザー指定名です。
デフォルトでは、RMU Unloadによって、指定した表名または列(フィールド)名がすべて大文字に変更されます。小文字を保持するには、デリミタ付き識別子を使用します。つまり、名前を引用符で囲みます。次の例では、RMU Unloadによって、"Last_Name"と"Employees"の大文字と小文字が保持されます。
$ RMU/UNLOAD/FIELDS=("Last_name",FIRST_NAME) TEST "Employees" TEST.UNL
注意
データ・ディクショナリでは、大文字と小文字の識別子の違いは保持されません。デリミタ付き識別子を使用する場合は、大文字と小文字の違いを除いて重複するオブジェクトがレコード定義に含まれないことを確かめる必要があります。たとえば、データ・ディクショナリでは、デリミタ付き識別子"Employee_ID"と"EMPLOYEE_ID"が同じ名前とみなされます。
- Oracle RMUでは、マルチスキーマのネーミング規則はサポートされていません。指定するとエラーが返されます。次に例を示します。
$ RMU/UNLOAD CORPORATE_DATA ADMINISTRATION.PERSONNEL.EMPLOYEES - _$ OUTPUT.UNL %RMU-E-OUTFILDEL, Fatal error, output file deleted -RMU-F-RELNOTFND, Relation (ADMINISTRATION.PERSONNEL.EMPLOYEES) not found
マルチスキーマ・データベースを使用する場合、データベース・オブジェクトに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 Unloadコマンドを発行します。
$ RMU/UNLOAD CORPORATE_DATA EMPLOYEES OUTPUT.UNL
- Transaction_Type修飾子を省略すると、データベースに対してRead_Onlyトランザクションが開始します。この動作は、以前のRdbリリースとの下位互換性を保つために提供されています。トランザクション・モードを指定せずにTransaction_Type修飾子が指定された場合、デフォルト値のAutomaticが使用されます。
- データベースでスナップショットが無効な場合、Oracle RdbのデフォルトはREAD WRITE ISOLATION LEVEL SERIALIZABLEトランザクションになります。Transaction_Type=(Automatic)またはTransaction_Type=(Shared,Isolation_Level=Read_Committed)を指定すると、ロックが減少することがあります。
- 表またはビューを表すのにシノニムを使用した場合、RMU Unloadコマンドはシノニムをベース・オブジェクトに変換し、実表またはビューが指定された場合と同じようにデータを処理します。そのため、その表のメタデータを含むアンロード交換ファイル(.UNL)やレコード定義ファイル(.RRD)では、実表またはビューが指定され、シノニム名は使用されません。そのメタデータが別のデータベースに対して使用される場合は、Match_Name修飾子を使用して、RMUのロード・プロセス中にその名前がオーバーライドされるようにしてください(必要であれば)。
例1次のコマンドは、EMPLOYEE_ID列とLAST_NAME列の値をmf_personnelデータベースのEMPLOYEES表からアンロードします。データはnames.unlに格納されます。
$ RMU/UNLOAD - _$ /FIELDS=(EMPLOYEE_ID, LAST_NAME) - _$ MF_PERSONNEL EMPLOYEES NAMES.UNL %RMU-I-DATRECUNL, 100 data records unloaded.
例2
次のコマンドは、EMPLOYEES表をmf_personnelデータベースからアンロードし、データをRMSファイルnames.unlに格納します。names.rrdファイルには、names.unlのデータのレコード構造定義が含まれます。
$ RMU/UNLOAD/RECORD_DEFINITION=FILE=NAMES.RRD MF_PERSONNEL - _$ EMPLOYEES NAMES.UNL %RMU-I-DATRECUNL, 100 data records unloaded.
例3
次のコマンドは、EMPLOYEE_ID列とLAST_NAME列の値をmf_personnelデータベースのEMPLOYEES表からアンロードし、デリミタのデフォルト値を受け入れます。これは、names.unlファイルの表示によって示されています。
$ RMU/UNLOAD/FIELDS=(EMPLOYEE_ID, LAST_NAME) - -$ /RECORD_DEFINITION=(FILE=NAMES, FORMAT=DELIMITED_TEXT) - -$ MF_PERSONNEL EMPLOYEES NAMES.UNL %RMU-I-DATRECUNL, 100 data records unloaded. $ ! $ ! TYPE the names.unl file to see the effect of the RMU Unload $ ! command. $ ! $ TYPE NAMES.UNL "00164","Toliver " "00165","Smith " "00166","Dietrich " "00167","Kilpatrick " "00168","Nash " . . .
例4
次のコマンドは、EMPLOYEE_ID列とLAST_NAME列の値をmf_personnelデータベースのEMPLOYEES表からアンロードし、各列の最初と最後を示す文字列(接頭辞文字列と接尾辞文字列)としてアスタリスク(*)記号を指定します。
$ RMU/UNLOAD/FIELDS=(EMPLOYEE_ID, LAST_NAME) - _$ /RECORD_DEFINITION=(FILE=NAMES, - _$ FORMAT=DELIMITED_TEXT, SUFFIX="*", - _$ PREFIX="*") - _$ MF_PERSONNEL EMPLOYEES NAMES.UNL %RMU-I-DATRECUNL, 100 data records unloaded. $ ! $ ! TYPE the names.unl file to see the effect of the RMU Unload $ ! command. $ ! $ TYPE NAMES.UNL *00164*,*Toliver * *00165*,*Smith * *00166*,*Dietrich * *00167*,*Kilpatrick * *00168*,*Nash * *00169*,*Gray * *00170*,*Wood * *00171*,*D'Amico * . . .
例5
次のコマンドは、mf_personnelデータベースのEMPLOYEES表のすべての列の値をアンロードし、Record_Definition修飾子にFormat=Textオプションを指定します。Oracle RMUによって、すべてのデータが印刷可能なテキストに変換されます。これは、text_output.unlファイルの表示によって確認できます。
$ RMU/UNLOAD/RECORD_DEFINITION=(FILE=TEXT_RECORD,FORMAT=TEXT) - _$ MF_PERSONNEL EMPLOYEES TEXT_OUTPUT %RMU-I-DATRECUNL, 100 data records unloaded. $ ! $ ! TYPE the text_output.unl file to see the effect of the RMU Unload $ ! command. $ ! $ TYPE TEXT_OUTPUT.UNL 00164Toliver Alvin A146 Parnell Place Chocorua NH03817M19470328000000001 00165Smith Terry D120 Tenby Dr. Chocorua NH03817M19540515000000002 00166Dietrich Rick 19 Union Square Boscawen NH03301M19540320000000001 . . .
例6
次のコマンドは、EMPLOYEE_ID列とLAST_NAME列の値をmf_personnelデータベースのEMPLOYEES表からアンロードし、統計を2秒間隔で端末に表示するようにリクエストします。
$ RMU/UNLOAD/FIELDS=(EMPLOYEE_ID, LAST_NAME) - _$ /STATISTICS_INTERVAL=2 - _$ MF_PERSONNEL EMPLOYEES NAMES.UNL
--------------------------------------------------------------------------- ELAPSED:0 00:00:02.16 CPU: 0:00:00.26 BUFIO: 13 DIRIO: 57 FAULTS: 598 0 records unloaded. --------------------------------------------------------------------------- --------------------------------------------------------------------------- ELAPSED:0 00:00:04.32 CPU: 0:00:00.68 BUFIO: 18 DIRIO: 102 FAULTS: 2121 0 records unloaded. --------------------------------------------------------------------------- --------------------------------------------------------------------------- ELAPSED:0 00:00:06.32 CPU: 0:00:00.92 BUFIO: 31 DIRIO: 158 FAULTS: 2483 39 records unloaded. --------------------------------------------------------------------------- %RMU-I-DATRECUNL, 100 data records unloaded. $
例7
次の例は、次の手順を使用してEMPLOYEES表のデータのサブセットをアンロードします。
- マサチューセッツ州に住む従業員のみを含む、EMPLOYEES表の一時ビューを作成します。
- RMU Unloadコマンドを使用してこのビューのデータをアンロードします。
- 一時ビューを削除します。
$ SQL SQL> ATTACH 'FILENAME MF_PERSONNEL'; SQL> CREATE VIEW MA_EMPLOYEES cont> (EMPLOYEE_ID, cont> LAST_NAME, cont> FIRST_NAME, cont> MIDDLE_INITIAL, cont> STATE, cont> STATUS_CODE) cont> AS SELECT cont> E.EMPLOYEE_ID, cont> E.LAST_NAME, cont> E.FIRST_NAME, cont> E.MIDDLE_INITIAL, cont> E.STATE, cont> E.STATUS_CODE cont> FROM EMPLOYEES E cont> WHERE E.STATE='MA'; SQL> COMMIT; SQL> EXIT; $ RMU/UNLOAD/RECORD_DEFINITION=(FILE=MA_EMPLOYEES,FORMAT=DELIMITED_TEXT) - _$ MF_PERSONNEL MA_EMPLOYEES MA_EMPLOYEES.UNL %RMU-I-DATRECUNL, 9 data records unloaded. $ SQL SQL> ATTACH 'FILENAME MF_PERSONNEL'; SQL> DROP VIEW MA_EMPLOYEES; SQL> COMMIT;
例8
次の例では、NullオプションをRecord_Definition修飾子のDelimited_Textオプションに指定しないかぎり、空白列のNULL値が保持されなことを示します。
$ SQL SQL> ATTACH 'FILENAME MF_PERSONNEL'; SQL> -- SQL> -- Create the NULL_DATE table: SQL> CREATE TABLE NULL_DATE cont> (COL1 VARCHAR(5), cont> DATE1 DATE, cont> COL2 VARCHAR(5)); SQL> -- SQL> -- Store a row that does not include a value for the DATE1 SQL> -- column of the NULL_DATE table: SQL> INSERT INTO NULL_DATE cont> (COL1, COL2) cont> VALUES ('first','last'); 1 row inserted SQL> -- SQL> COMMIT; SQL> -- SQL> -- The previous SQL INSERT statement causes a null value to SQL> -- be stored in NULL_DATE: SQL> SELECT * FROM NULL_DATE; COL1 DATE1 COL2 first NULL last 1 row selected SQL> -- SQL> DISCONNECT DEFAULT; SQL> EXIT; $ ! $ ! In the following RMU Unload command, the Record_Definition $ ! qualifier is used to unload the row with the NULL value, but $ ! the Null option is not specified: $ RMU/UNLOAD/RECORD_DEFINITION=(FILE=NULL_DATE,FORMAT=DELIMITED_TEXT) - _$ MF_PERSONNEL NULL_DATE NULL_DATE %RMU-I-DATRECUNL, 1 data records unloaded. $ ! $ ! The null_date.unl file created by the previous unload $ ! operation does not preserve the NULL value in the DATE1 column. $ ! Instead, the Oracle Rdb default date value is used: $ TYPE NULL_DATE.UNL "first","1858111700000000","last" $ ! $ ! This time, unload the row in NULL_DATE with the Null option to $ ! the Record_Definition qualifier: $ RMU/UNLOAD MF_PERSONNEL NULL_DATE NULL_DATE - _$ /RECORD_DEFINITION=(FILE=NULL_DATE.RRD, FORMAT=DELIMITED_TEXT, NULL="*") %RMU-I-DATRECUNL, 1 data records unloaded. $ ! $ TYPE NULL_DATE.UNL "first",*,"last " $ SQL SQL> ATTACH 'FILENAME MF_PERSONNEL'; SQL> -- SQL> -- Delete the existing row from NULL_DATE: SQL> DELETE FROM NULL_DATE; 1 row deleted SQL> -- SQL> COMMIT; SQL> EXIT; $ ! $ ! Load the row that was unloaded back into the table, $ ! using the null_date.unl file created by the $ ! previous RMU Unload command: $ RMU/LOAD MF_PERSONNEL /RECORD_DEFINITION=(FILE=NULL_DATE.RRD, - _$ FORMAT=DELIMITED_TEXT, NULL="*") NULL_DATE NULL_DATE %RMU-I-DATRECREAD, 1 data records read from input file. %RMU-I-DATRECSTO, 1 data records stored. $ ! $ SQL SQL> ATTACH 'FILENAME MF_PERSONNEL'; SQL> -- SQL> -- Display the row stored in NULL_DATE. SQL> -- The NULL value stored in the data row SQL> -- was preserved by the load and unload operations: SQL> SELECT * FROM NULL_DATE; COL1 DATE1 COL2 first NULL last 1 row selected
例9
次の例では、Record_Definition修飾子のNull=""オプションの使用方法を示します。これによって、.unlファイルで空文字列(間に空白のない2つのカンマで表される)となっているデータには、データベース内に対応する列がありNULLとしてフラグされていることをOracle RMUに知らせます。
この例の前半では、.unlファイルの内容と、.unlファイルをロードするために使用するRMU Loadコマンドを示します。.unlファイルの各レコードの終端文字はシャープ記号(#)です。この例の後半では、データをアンロードし、NULLとフラグされた列を出力ファイル内ではアスタリスクで表すことを指定します。
"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. $ ! $ ! Unload this data first without specifying the Null option: $ RMU/UNLOAD/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="#") - _$ MF_PERSONNEL EMPLOYEES EMPLOYEES.UNL %RMU-I-DATRECUNL, 102 data records unloaded. $ ! $ ! The ADDRESS_DATA_2 field appears as a quoted string: $ TYPE EMPLOYEES.UNL . . . "90021","ABUSHAKRA ","CAROLINE ","A","5 CIRCLE STREET "," ","CHELMSFORD ","MA","02184","1960061400000000"# $ ! $ ! Now unload the data with the Null option specified: $ RMU/UNLOAD/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-DATRECUNL, 102 data records unloaded. $ ! $ ! The value for ADDRESS_DATA_2 appears as an asterisk: $ ! $ TYPE EMPLOYEES.UNL . . . "90021","ABUSHAKRA ","CAROLINE ","A","5 CIRCLE STREET ",*, "CHELMSFORD ","MA","02184","1960061400000000"#
例10
次の例は、RMU Unloadコマンドでトランザクションを指定します。これは、SQLコマンドSET TRANSACTION READ WRITE WAIT 36 RESERVING table1 FOR SHARED READと同じです。
$ RMU/UNLOAD- /TRANSACTION_TYPE=(SHARED,ISOLATION=REPEAT,WAIT=36)- SAMPLE.RDB- TABLE1- TABLE.DAT
例11
次の例は、以前のリリースでのデフォルト・トランザクション・スタイルであるオプションを指定します。
$ RMU/UNLOAD- /TRANSACTION_TYPE=(READ_ONLY,ISOLATION_LEVEL=SERIALIZABLE)- SAMPLE.RDB- TABLE1- TABLE1.DAT
例12
データベースの現在のスナップショット設定が遅延に設定されている場合は、分離レベルをRead_Committedにして読取り/書込みトランザクションを開始した方が効率がよい場合があります。これを行うと、トランザクションがすぐに開始され(読取り専用トランザクションはストールする可能性がある)、選択した分離レベルによって行のロックが最小限に保たれます。
$ RMU/UNLOAD- /TRANSACTION_TYPE=(SHARED_READ,ISOLATION=READ_COMMITTED)- SAMPLE.RDB- TABLE1- TABLE1.DAT
トランザクション・タイプとしてAutomaticを使用すると、様々なデータベース設定に適応します。
$ RMU/UNLOAD- /TRANSACTION_TYPE=(AUTOMATIC)- SAMPLE.RDB- TABLE1- TABLE1.DAT
例13
次の例は、フラグSTRATEGYとITEM_LISTの出力を示します。これにより、Optimize修飾子によって、順次アクセスの使用が指定されたこと、デフォルトのオプティマイザ・プリファレンスとしてTotal_Timeの使用が設定されたことが示されます。
$ DEFINE RDMS$SET_FLAGS "STRATEGY,ITEM_LIST" $ RMU/UNLOAD/OPTIMIZE=SEQUENTIAL_ACCESS PERSONNEL EMPLOYEES E.DAT . . . ~H Request Information Item List: (len=11) 0000 (00000) RDB$K_SET_REQ_OPT_PREF "0" 0005 (00005) RDB$K_SET_REQ_OPT_SEQ "1" 000A (00010) RDB$K_INFO_END Get Retrieval sequentially of relation EMPLOYEES %RMU-I-DATRECUNL, 100 data records unloaded.
例14
AUTOMATIC列は表のINSERT操作やUPDATE操作の際に評価されます。たとえば、AUTOMATIC列に、最後の操作のタイムスタンプが記録されることがあります。表を再編成している場合、データをアンロードし、記憶域マップと表の索引を再作成してからリロードする必要があることがあります。ただし、古い監査データは同じであることが必要です。
通常、RMU UnloadコマンドではAUTOMATICとマークされた列はアンロードされません。Virtual_Fields修飾子にキーワードAutomaticを付けて使用し、この動作をリクエストする必要があります。
$ rmu/unload/virtual_fields=(automatic) payroll_db people people.unl
データベースの再構築の後で、データをリロードできます。ターゲット列もAUTOMATICと定義されている場合、RMU Loadプロセスではそれらの列には書き込まれません。Virtual_Fields修飾子にキーワードAutomaticを付けて使用し、このアクションをリクエストする必要があります。
$ rmu/load/virtual_fields=(automatic) payroll_db people people.unl
例15
この例は、Delete_Rows修飾子の動作を示します。まず、表の行数を表示するためにSQLを使用します。RMU UnloadコマンドによってファイルPEOPLE.COLUMNSが確認されます(SYS$OUTPUTに書き込まれます)。
$ define sql$database db$:scratch $ sql$ select count (*) from people; 100 1 row selected $ rmu/unload/fields="@people.columns" - sql$database - /record_definition=(file:people,format:delimited) - /delete_rows - people - people2.dat EMPLOYEE_ID LAST_NAME FIRST_NAME MIDDLE_INITIAL SEX BIRTHDAY %RMU-I-DATRECERA, 100 data records erased. %RMU-I-DATRECUNL, 100 data records unloaded.
その後の問合せが、行が削除されたことを示します。
$ sql$ select count (*) from people; 0 1 row selected
例16
次の例は、XMLサポートに対応するRMU Unloadコマンド・オプションの出力を示します。この例で示す2つのファイルは、次のRMU Unloadコマンドによって作成されます。
$ rmu/unload - /record_def=(format=xml,file=work_status) - mf_personnel - work_status - work_status.xml Output WORK_STATUS.DTD file <?xml version="1.0"?> <!-- RMU Unload for Oracle Rdb V7.1-00 --> <!-- Generated: 16-MAR-2001 22:26:47.30 --> <!ELEMENT WORK_STATUS (RMU_ROW*)> <!ELEMENT RMU_ROW ( STATUS_CODE, STATUS_NAME, STATUS_TYPE )> <!ELEMENT STATUS_CODE (#PCDATA)> <!ELEMENT STATUS_NAME (#PCDATA)> <!ELEMENT STATUS_TYPE (#PCDATA)> <!ELEMENT NULL (EMPTY)> Output WORK_STATUS.XML file <?xml version="1.0"?> <!-- RMU Unload for Oracle Rdb V7.1-00 --> <!-- Generated: 16-MAR-2001 22:26:47.85 --> <!DOCTYPE WORK_STATUS SYSTEM "work_status.dtd"> <WORK_STATUS> <RMU_ROW> <STATUS_CODE>0</STATUS_CODE> <STATUS_NAME>INACTIVE</STATUS_NAME> <STATUS_TYPE>RECORD EXPIRED</STATUS_TYPE> </RMU_ROW> <RMU_ROW> <STATUS_CODE>1</STATUS_CODE> <STATUS_NAME>ACTIVE </STATUS_NAME> <STATUS_TYPE>FULL TIME </STATUS_TYPE> </RMU_ROW> <RMU_ROW> <STATUS_CODE>2</STATUS_CODE> <STATUS_NAME>ACTIVE </STATUS_NAME> <STATUS_TYPE>PART TIME </STATUS_TYPE> </RMU_ROW> </WORK_STATUS> <!-- 3 rows unloaded -->
例17
次の例では、Flush=On_Commit修飾子を指定した場合、Commit_Every修飾子の値はRow_Count値と等しいかその倍数であることが必要なことを示します。内部RMSバッファがアンロード・ファイルにフラッシュされた後でアンロード・トランザクションのコミットが行われるためです。これにより、エラーが発生してもデータの損失が防がれます。
$RMU/UNLOAD/ROW_COUNT=5/COMMIT_EVERY=2/FLUSH=ON_COMMIT MF_PERSONNEL - _$ EMPLOYEES EMPLOYEES %RMU-F-DELROWCOM, For DELETE_ROWS or FLUSH=ON_COMMIT the COMMIT_EVERY value must equal or be a multiple of the ROW_COUNT value. The COMMIT_EVERY value of 2 is not equal to or a multiple of the ROW_COUNT value of 5. %RMU-F-FTL_UNL, Fatal error for UNLOAD operation at 27-Oct-2005 08:55:14.06
例18
次の例では、Noerror_Delete修飾子を指定するとアンロード・ファイルとレコード定義ファイルがエラー時に削除されないこと、Error_Delete修飾子を指定するとこれらのファイルがエラー時に削除されることを示します。エラーが発生したときにアンロード・ファイルが空であれば削除されます。
$RMU/UNLOAD/NOERROR_DELETE/ROW_ACOUNT=50/COMMIT_EVERY=50 MF_PERSONNEL - _$ EMPLOYEES EMPLOYEES.UNL %RMU-E-OUTFILNOTDEL, Fatal error, the output file is not deleted but may not be useable, 50 records have been unloaded. -COSI-F-WRITERR, write error -RMS-F-FUL, device full (insufficient space for allocation) $RMU/UNLOAD/ERROR_DELETE/ROW_COUNT=50/COMMIT_EVERY=50 MF_PERSONNEL - _$ EMPLOYEES EMPLOYEES.UNL %RMU-E-OUTFILDEL, Fatal error, output file deleted -COSI-F-WRITERR, write error -RMS-F-FUL, device full (insufficient space for allocation)