修復操作では、破損したユーザー・データまたは破損した索引は修正できません。他のコマンド(RMU Restore、RMU Recover、SQL IMPORT、RMU Loadコマンドなど)を使用し、影響を受けた構造を削除して問題を修正します。
AbmまたはInitialize=Tsns修飾子を使用すると、アフター・イメージ・ジャーナルが無効になります。これらの修飾子を付けてRMU Repairコマンドを発行した後は、データベースをバックアップし、ジャーナル処理を手動で再び有効にしてください。 |
RMU Repairではすべてのタイプの破損が修正できるわけではなく、パフォーマンスが必ず向上するとも限らないため、バックアップ・コピーがない場合やデータベースのコピーをエクスポートしていない場合は、RMU Repairコマンドを使用しないことをお薦めします。修復操作の効果が見られない場合は、そのようなデータベースのバックアップ・コピーに戻ることができます。RMU Repairコマンドは、オフラインでトランザクションのコンテキスト外で実行します。このため、RMU Repairではレコードはデータベースの.aijファイルに書き込まれません。また、修復されたデータベースをRMU Recoverコマンドでロール・フォワードすることはできません。RMU Repairコマンドを使用した後は、データベースのバックアップ・コピーを作成することをお薦めします。修復操作を行うと同じ内容のメッセージが発行されます。また、アフター・イメージ・ジャーナルが有効になっているデータベースに対してこのコマンドを使用した場合には、Oracle RMUによって警告が発行されます。
root-file-spec
破損の修復やパフォーマンスの改善を行うデータベース・ルート・ファイルのファイル指定。
Abm
Noabm
Areas修飾子で指定した領域の論理領域ビットマップ(ABM)ページの再構築を行います。Abm修飾子を指定するとアフター・イメージ・ジャーナルが無効になります。アフター・イメージ・ジャーナルを有効にする場合は、RMU Repairコマンドが完了してからジャーナル処理を明示的に有効化する必要があります。NoAbm修飾子はABMページを再構築しないことを指定します。これがデフォルトです。
All_Segments
Noall_Segments
All_Segments修飾子は、RMU Repairでセグメント文字列のすべてのセグメントを取得することを指定します。Noall_Segments修飾子はRMU Repairでセグメント文字列の最初のセグメントのみを取得することを指定します。指定の領域に格納されているセグメント文字列のリスト記憶域マップに複数の領域が含まれる可能性があると認識している場合は、Noall_Segments修飾子を指定します。たとえば、記憶域マップが次に示すSQLコマンドを使用して作成された場合、Oracle Rdbによって、AREA1がいっぱいになるまですべてのセグメント文字列がAREA1に格納されます。AREA1がいっぱいになると、Oracle Rdbは残りのセグメントをAREA2に書き込みます。AREA2が破損したとします。この場合、AREA1から最初のセグメントを取り出すだけでは十分ではなく、すべてのセグメントを取り出して、セグメント文字列から失われた部分がないかを判別する必要があります。
CREATE STORAGE MAP FOR LIST STORE IN (AREA1, AREA2) FOR (TABLE1) IN RDB$SYSTEM;
Areas修飾子とAll_Segments修飾子の指定は内容が重複するため不要です。All_Segments修飾子を指定すると、セグメント文字列が最初に格納された場所にかかわらず、RMU Repairですべての記憶領域が調べられます。
Areas[={storage-area-list or *}]
データベース内の修復する記憶領域を指定します。記憶領域は名前または領域のID番号で指定できます。デフォルトでは、データベース内のすべての記憶領域が修復されます。複数の記憶領域を指定する場合は、storage-area-listの記憶領域名またはID番号をカンマで区切り、リストをカッコで囲みます。
Checksum
データベース記憶領域のすべてのページを読み取って、各ページのチェックサムが正しいことを確認します。ページのチェックサムが正しくない場合は、正しいチェックサムで置き換えられます。Areas修飾子を使用して、RMU Repairでチェックする記憶領域を指定します。Areas修飾子を指定しないと、すべての記憶領域のすべてのページがチェックされ、正しくない場合は更新されます。
この修飾子は、ユーザーがデータベースにアタッチしていてもしていなくても使用できます。
この修飾子は、Areas修飾子以外の修飾子と使用すると無効になります。
Initialize=initialize-options
Noinitialize
初期化オプションを指定できます。複数のオプションを指定する場合は、オプションをカンマで区切り、オプションのリストをカッコで囲みます。Initialize修飾子には次のオプションを指定できます。
- Free_Pages
Initialize=Free_Pages修飾子によって、選択した記憶領域にデータを含まないデータベース・ページ(統一ページ形式)が初期化されます。Initialize=Free_Pages修飾子を使用すると、RMU Verifyコマンドで検出されたBADPTLAREエラーを修正できます。また、多数の行が削除された表のページを解放できます。デフォルトのNoinitialize修飾子を指定すると、データベース・ページは初期化されません。
Initialize=Free_Pages修飾子を指定してRMU Repairコマンドを発行した後で、1つ以上のRMU-W-ABMBITTERRエラー・メッセージを受け取ることがよくあります。ページの初期化によって新たなABMエラーが生成されることがあるためです。このようなエラーを修正するには、Abm修飾子を指定してRMU Repairコマンドを発行します。(ただし、Initialize=Free_Pages修飾子とAbm修飾子を同じコマンドラインに指定することはできません。)RMU-W-ABMBITTERRエラー・メッセージを無視すると、データベース問合せによって表全体の順次スキャンが行われるときに、余分なI/O操作(受け取ったRMU-W-ABMBITTERRエラーごとに1回ずつ)が実行されます。
統一ページ形式の記憶領域にある表が頻繁に順次アクセスされる場合、順次アクセスのコストは割当て済ページ数によって決まります。表に割り当てられている最大サイズが表の平均サイズを大幅に上回る場合、順次アクセスのコストがきわめて高くなる可能性があります。Initialize=Free_Pages修飾子を指定したRMU Repairコマンドを使用すると、割当て済だが未使用のデータベース・ページを表からパージすることができます。場合によっては、このオプションを使用した後で新しいデータを表に挿入すると、パフォーマンスが低下することがあります。すべてのRepairオプションの場合と同じく、コマンドを実行した後でデータベースのパフォーマンスをテストしてください。コマンドの使用によってパフォーマンスが低下した場合には、Repairコマンドの実行前に作成したバックアップをリストアするように準備しておく必要があります。
空きページの初期化には、Oracle Rdbシステム表へのアクセスが必要です。RDB$SYSTEM記憶領域(システム表が格納されている)が破損していないことが確認できないかぎり、空きページは初期化しないでください。- Larea_Parameters=options-file
このオプションでは、オプション・ファイル(デフォルト・ファイル拡張子.opt)を指定します。これには、論理領域のリストや、領域管理(SPAM)ページを構築する前に領域インベントリ・ページ(AIP)を更新するためにRMU Repairで使用されるパラメータ値が含まれます。
Larea_Parametersのオプション・ファイルに含まれる行は次の形式です。
name [/Areas=name][/Delete][/[No]Thresholds=(n[,n[,n]])[/Length=n][/Type=option]
行にコメントを付けることができます(コメント文字は感嘆符(!))。また、最後にハイフン(-)を付けて行を続けることもできます。
論理領域は名前または識別番号(ID)で指定できます。指定した論理領域はAIPに存在する必要があります。存在しない場合、エラーが生成されます。次にLarea_Parametersのオプションを詳しく説明します。
- Areas=name
指定の記憶領域に存在する論理領域にこの行を限定します。記憶領域は名前またはIDで指定できます。デフォルトでは、名前が一致するすべての論理領域が変更されます。論理領域が存在している記憶領域とは関係ありません。
Areas修飾子を使用して記憶領域のID番号を指定できます。- Delete
論理領域を削除済としてマークするように指定します。
注意
Oracle Rdbメタデータで参照される論理領域を削除すると、データベースが破損します。
- Length=n
Initialize=Lengthオプションで、論理領域インベントリ・エントリに格納するレコード長を指定します。RMU Repairはこの値を使用してSPAMのしきい値を計算します。
表で列の削除や追加が行われても、論理領域インベントリ・エントリに格納されるレコード長は更新されません。このため、新しいレコードの格納に必要な領域を検索するときに効率が悪くなることがあり、SPAMしきい値が適切に設定されません。この問題を解決するには、まず論理領域インベントリ・エントリのレコード長を修正し、RMU Repairコマンドを使用して修正されたSPAMページを生成します。「例」の項の「例2」を参照してください。- Thresholds=(n [,n [,n]])
NoThresholds
このオプションでは、論理領域のSPAMしきい値を指定します。これは、統一ページ形式の記憶領域に存在する論理領域のみに有効です。しきい値を設定しても、混合ページ形式の記憶領域では無視されます。
SPAMしきい値の設定の詳細は、『Oracle Rdb7 Guide to Database Performance and Tuning』を参照してください。
Nothresholdsオプションでは、論理領域のしきい値が無効であることを指定します。- Type=keyword
Typeを指定することにより、AIPのディスク上論理領域タイプを更新できます。Oracle Rdb release 7.0.1よりも前に作成されたデータベースでは、AIPの論理領域タイプ情報は不明です。ただし、RMU Show Statisticsユーティリティはこの情報を利用して、論理領域ごとの情報を表示します。論理領域は、表、Bツリー索引、ハッシュ索引、またはこれらいずれかのパーティションです。
AIPのディスク上論理領域タイプを更新するには、次のようにタイプを指定します。Type=Table
論理領域がデータ表(SQL CREATE TABLE文で作成される)であることを指定します。
Type=Btree
論理領域がBツリー索引(SQL CREATE INDEX TYPE IS SORTED文で作成される)であることを指定します。
Type=Hash
論理領域がハッシュ索引(SQL CREATE INDEX TYPE IS HASHED文で作成される)であることを指定します。
Type=System
論理領域が、ハッシュ・バケットの指定に使用されるシステム・レコードであることを指定します。ユーザーはこのタイプの論理領域を明示的に作成できません。このタイプは、RDB$SYSTEM論理領域では使用しないでください。システム・リレーションが識別されません。
Type=Blob
論理領域がBLOB(LIST OF BYTE VARYING)リポジトリであることを指定します。
論理領域に指定されたタイプのエラー・チェックは行われません。指定したタイプは統計収集に影響しません。また、該当の論理領域の読取りにも影響しません。ただし、タイプが正しくないと、RMU Show Statisticsユーティリティによって誤った統計が報告されます。
- Only_Larea_Type
Initialize=Only_Larea_Typeオプションでは、領域インベントリ・ページ(AIP)の論理領域タイプ・フィールドのみを更新することを指定します。- Snapshots
Snapshotsオプションを使用すると、新しいスナップショット・ファイルを作成して初期化することができます。また、破損したスナップショット領域ページが破損ページ表(CPT)から削除されます。この方法は、なくなって再作成するスナップショットが1つだけの場合は特に、RMU Restoreコマンドで同じことを行うよりもかなり高速に処理されます。デフォルトでは新規ファイルは作成されません。
Initialize=Snapshotsオプションと一緒にConfirmオプションを指定すると(Initialize=Snapshots=Confirm)、RMU Repairコマンドを使用して、初期化だけではなく、スナップショット・ファイルの名前変更、移動、または割当て変更も行うことができます。
これらの操作が必要になるのは、スナップショット・ファイルを含むディスクにハードウェアの問題がある場合や、ハードウェアのアップグレード時にディスクが削除された場合、またはスナップショット・ファイルが大きくなりすぎて縮小が必要な場合です。
Confirmオプションを指定すると、RMU Repairによって、1つ以上のスナップショット・ファイルの名前と割当てを入力するようにプロンプトが表示されます。Areas修飾子を使用する場合、データベース内の変更するスナップショット・ファイルを選択できます。Areas修飾子を使用しないと、データベースのすべてのスナップショット・ファイルが初期化され、各スナップショット・ファイルの代替ファイル名と割当てを入力するためのプロンプトがRMU Repairによって対話的に表示されます。スナップショット・ファイルの新しいファイル名を指定することにより、スナップショット・ファイルの場所を変更できます。スナップショット・ファイルの新しい割当てを指定することにより、スナップショット・ファイルを縮小したり拡大したりすることができます。- Tsns
Initialize=Tsnsオプションは、データベース・トランザクションの状態をリセットします。デフォルトではトランザクションの状態は変更されません。
Initialize=Tsnsオプションを指定するとアフター・イメージ・ジャーナルが無効になります。アフター・イメージ・ジャーナルを有効にする場合は、RMU Repairコマンドが完了してからジャーナル処理を明示的に有効化する必要があります。
この操作が役立つのは、データベース・トランザクション順序番号(TSN)が許可されている最大値に近づいており、TSN値を0に初期化する必要がある場合です。TSN値は、次の10進数形式でquadwordに含まれます。
high longword : low longword
high longwordはユーザーの最大値32768(215)を保持でき、low longwordは最大ユーザー値4,294,967,295(232)を保持できます。high-longwordの一部はOracle Rdbによってオーバーヘッドに使用されます。
TSN値の初期化ではデータベースの各ページの読取りと書込みが必要です。このため、Areas修飾子には意味がありません。Snapshotsオプションを指定しなかった場合も、スナップショット領域の初期化が必要です。
Tsns初期化オプションには次の制約があります。
- Replication Option for Rdbが使用されている場合、すべての送信が完了しないかぎり実行できません。RDB$TRANSFERS表が定義されている場合、RMU Repairによって確認が要求されます。
- このように修復されたデータベースに古いジャーナル・ファイルは適用できません。TSNが初期化された後でアフター・イメージ・ジャーナルを行うには、ジャーナル処理を再び有効にする必要があります。
RMU Repairコマンドが終了したら、業務上可能な範囲でできるだけ早くデータベースで完全なバックアップ操作を実行する必要があります。この操作を行うことで、リストア操作が必要になった場合に、新たにジャーナル処理された変更をリストア対象データベースに適用できるようになります。
Spams
Nospams
Areas修飾子で指定した領域のSPAMページを再構築します。Nospams修飾子を指定すると、SPAMページは再構築されません。RMU Repairコマンドで次のいずれの修飾子も指定しない場合、デフォルトはSpam修飾子です。
- ABM
- Initialize=Free_Pages
- Initialize=Snapshots
- Initialize=Snapshots=Confirm
これらの修飾子のいずれかを使用するとNoSpam修飾子がデフォルトになります。
表で列の削除や追加が行われても、論理領域インベントリ・エントリに格納されるレコード長は更新されません。このため、新しいレコードの格納に必要な領域を検索するときに効率が悪くなることがあり、SPAMしきい値が適切に設定されません。この問題を解決するには、まず論理領域インベントリ・エントリのレコード長を修正し、RMU Repairコマンドを使用して修正されたSPAMページを生成します。「例」の項の「例2」を参照してください。
Tables[=table-list]
RMU Repairでセグメント文字列全体をチェックする表のリストを指定します。表を指定しない場合は、システム表以外のすべての表がチェックされます。(システム表のライトワンス領域にはセグメント文字列は格納されません。)RMU Repairでは、特定の表のセグメント文字列がどの記憶領域に格納されているかは認識されないことに注意してください。このため、デフォルトではすべての表が検索されます。
- データベースに対してRMU Repairコマンドを使用するには、そのデータベースのルート・ファイルのアクセス制御リスト(ACL)にRMU$ALTER権限が必要です。あるいは、OpenVMS SYSPRVまたはBYPASS権限が必要です。
- このコマンドの最適なパフォーマンスを得るには、検出済非同期プリフェッチを有効にします。Oracle Rdbリリース7.0以上では、検出済非同期プリフェッチがデフォルトで有効になっています。データベースの設定を確認するには、Header修飾子を付けてRMU Dumpコマンドを発行します。
検出済非同期プリフェッチが無効になっており、データベースに対して有効にしたくない場合は、次の論理をプロセス・レベルで定義すると、RMU Repair操作に対し検出済非同期プリフェッチを有効化することができます。
$ DEFINE RDM$BIND_DAPF_ENABLED 1 $ DEFINE RDM$BIND_DAPF_DEPTH_BUF_CNT P1
P1は、ユーザー・バッファ・カウントの10〜20パーセントの値です。- Areas修飾子には間接ファイル参照を使用できます。第1.3節を参照してください。
- データベースでRMU Repairコマンドを使用する前に、RMU Backupコマンドを使用してデータベースの全体バックアップ操作を実行することをお薦めします。
- SQL SHOW STORAGE AREA文を使用して、スナップショット(.snp)ファイルの新しい場所を表示し、Header修飾子を付けたRMU Dumpコマンドを使用して新しい割当てを表示します。
- RMU Repairコマンドを使用して新しい.snpファイルの名前を指定するときには注意してください。データベースに対して以前に作成されすでに存在しているファイルの名前を指定すると、指定どおりにそのファイルが初期化されます。
このように誤って稼働中のデータベース・ファイルを初期化した場合は、エラーが修正されるまでそのデータベースを使用しないでください。RMU Restoreコマンドを使用して、RMU Repairコマンドを発行する直前のバックアップ時の状態にデータベースをリストアします。RMU Repairコマンドを発行する前にデータベースをバックアップしなかった場合は、最新のバックアップ・ファイルからデータベースをリストアした後で、.aijファイルからリカバリする必要があります(アフター・イメージ・ジャーナルがデータベースで有効になっていた場合)。
間違った.snpファイルを指定した(たとえば、「例」の項の「例3」ですべての.snpファイル名要求に対してjobs.snpを指定した)場合は、正しい.snpファイル名を指定してRMU Repairコマンドを再発行すると修正できます。
RMU Repairコマンドが終了したら、古い.snpファイルを削除し、RMU Backupコマンドを使用してデータベースの全体バックアップ操作を実行します。
例1次のコマンドは、mf_personnelデータベースのすべての記憶領域についてSPAMページの破損を修復します。Abm修飾子を指定していないため領域ビットマップ(ABM)ページは再構築されません。
$ RMU/REPAIR MF_PERSONNEL
例2
表で列の削除や追加が行われても、論理領域インベントリ・エントリに格納されるレコード長は更新されません。このため、新しいレコードの格納に必要な領域を検索するときに効率が悪くなることがあり、SPAMしきい値が適切に設定されません。この問題を解決するには、まず論理領域インベントリ・エントリのレコード長を修正し、RMU Repairコマンドを使用して修正されたSPAMページを生成します。
たとえば、Departments表がdepartments.rda統一ページ形式記憶領域に格納されており、Budget_Projected列(integerデータ型= 4バイト)が削除されたとします。この削除により、行の長さが47バイトから43バイトに変わりました。記憶領域の要領を効率よく使用するために、fix_departments.optオプション・ファイルでレコード長を小さく(43バイト)指定することができます。
$ CREATE FIX_DEPARTMENTS.OPT DEPARTMENTS /LENGTH=43
次のRMU Repairコマンドは、この論理領域の論理領域インベントリ・エントリに格納するレコード長を指定し、SPAMページを再構築します。
$ RMU/REPAIR/SPAMS/INITIALIZE=LAREA_PARAMETERS=FIX_DEPARTMENTS.OPT - _$ MF_PERSONNEL
例3
次のRMU Repairコマンドは、departments.snpを初期化して名前を変更し、salary_history.snpを初期化して移動し、jobs.snpを初期化、移動および縮小します。
$ RMU/REPAIR/NOSPAMS/INITIALIZE=SNAPSHOTS=CONFIRM - _$ /AREAS=(DEPARTMENTS,JOBS,SALARY_HISTORY) MF_PERSONNEL %RMU-I-FULBACREQ, A full backup of this database should be performed after RMU Repair Area DEPARTMENTS snapshot filename [SQL1:[TEST]DEPARTMENTS.SNP;1]: NEW_DEPT Area DEPARTMENTS snapshot file allocation [10]? Area SALARY_HISTORY snapshot filename [SQL1:[TEST]SALARY_HISTORY.SNP;1]: SQL2:[TEST] Area SALARY_HISTORY snapshot file allocation [10]? Area JOBS snapshot filename [SQL1:[TEST]JOBS.SNP;1]: SQL2:[TEST2] Area JOBS snapshot file allocation [10]? 5
例4
次のRMU Repairコマンドは、EMPIDS_LOW記憶領域の不正確なチェックサムが検出され、正しいチェックサムを表すように更新されます。
$ RMU/REPAIR MF_PERSONNEL.RDB/AREA=EMPIDS_LOW/CHECKSUM
例5
次のコマンドは表のAIPタイプを更新します。
$ RMU/REPAIR MF_PERSONNEL /INITIALIZE=LAREA_PARAMETERS=TABLE.OPT
TABLE.OPTファイルを入力し、ファイルの内容を表示します。
$ TYPE TABLE.OPT EMPLOYEES /TYPE=TABLE
例6
次のコマンドは記憶領域のAIPタイプを更新します。
$ RMU/REPAIR MF_PERSONNEL /INITIALIZE=LAREA_PARAMETERS=AREAS.OPT
AREAS.OPTファイルを入力し、ファイルの内容を表示します。
$ TYPE AREAS.OPT EMPLOYEES /AREA=EMPIDS_OVER /TYPE=TABLE