LOBおよびORA-01555のトラブルシューティング(ドキュメントID 846079.1)

LOBおよびORA-01555のトラブルシューティング(ドキュメントID 846079.1)

に適用されます:

Oracle Databaseのクラウドスキーマサービス-バージョンN / A以降
のOracle DatabaseのExadataエクスプレスクラウドサービス-バージョンN / A以降
のOracle DatabaseのExadataクラウドマシン-バージョンN / A以降
のOracleのクラウドインフラストラクチャ-データベース・サービス-バージョンN / A以降
Oracle Databaseのバックアップサービス-バージョンN / A以降
このドキュメントの情報は、任意のプラットフォームに適用されます。
*** *** - 2016年06 - 8月の妥当性をチェック

目的

この文書では、LOBオブジェクトのORA-01555を解決するためのトラブルシューティングの手順を提供します。また、LOBのORA-01555関連の既知の問題とバグについて説明します。

この記事では解決LOBオブジェクトORA-01555にトラブルシューティングの手順を提供します。また、ORA-01555のエラーに関連付けられているLOBS既知の問題について説明します

トラブルシューティング手順

バックグラウンド

LOBの4つのタイプがあります。   LOBは、4つのタイプがある

CLOB、BLOB、NCLOB - > Oracleに内部に格納された   OracleにCLOB、BLOB、NCLOB->内部メモリを
>外部ストアド- BFILE   BFILE->外部ストレージ

LOBINDEXとLOBSEGMENT - LOBを含むテーブル(CLOB、NCLOBおよびBLOB)はLOB列ごとに2つの追加のディスク・セグメントを作成します。これらは、ディクショナリ・ビューを使用して、LOB属性と一緒に、見ることができます。

二つの追加のディスク・セグメントLOBINDEXとLOBSEGMENTを作成するためのLOB(CLOB、NCLOBおよびBLOB)表当たりのLOB列を含むされます。あなたは、これらおよびLOB属性を表示するディクショナリビューを使用することができます

DBA_LOBS、ALL_LOBSまたはUSER_LOBS

LOB列は、列内のデータを記憶させ以下に詳述しないようにすることができます。インライン型ストレージが許可されているか否かは、ONLY作成時に指定することができます。

LOB列は、以下のデータが格納されて詳細に説明されないことライン内のデータを格納できるようにしてもよいです。ときにあなただけのオンラインストレージを許可するかどうかを指定することができます作成​​します

1.)INLINEのLOB

「STORE AS(行のストレージを有効)」

それは4000バイト程度未満で設けLOBデータはテーブルセグメントに格納されることを可能にします。実際の最大インラインLOBは3964バイトです。インラインLOBSオラクル内の通常の連鎖と行の移行ルールの対象となっています。すなわち:あなたが2Kのブロックサイズでの行の3900バイトのLOBを保存する場合は、行ピースは、2つ以上のブロック全体にチェーンされます。

期間は4000バイト未満であることを条件とする、LOBテーブル部に格納されたデータを可能にします。実際の最大LOBシリーズは3964バイトです。従来のインラインリンクとOracle内の行の移行ルールによって結合LOBS。つまり:あなたはLOBの列に保存されている3900 2Kバイトのブロックサイズ、セクションの行が2つ以上のブロックをリンクした場合。

元に戻すジェネレーション

それらは、通常の行データの一部であるとして、インラインLOBのREDOとUNDOの両方が書かれています。

UNDOとREDO彼らは通常のラインデータの一部であるため、書かれている

2)  OUT。のLOBのLINE

「STORE AS(行の無効ストレージ)」

LOBデータが3964バイトより大きい場合、LOBデータは、LOBセグメント(:アウトラインのIE)に格納されています。3964以下にそのサイズ収縮場合LOBは再びインラインで格納することができることを除いて「行に無効ストレージ」の下に記載したように、ラインLOBの挙動のうち。 

LOBデータが3964バイトよりも大きい場合、LOBデータは、LOBセグメントに格納され(すなわち、アウトライン)。ラインLOBと同じで「行の無効化ストレージ」のうち行動、それは3964以下に小型化されている場合以外は、、LOBをインラインで再度格納すること

20バイトのLOBロケータは、この列のLOBセグメント内のLOBの一意の識別子を与える行に格納されています。LOBロケータ・実際にはLOBを構成するすべてのブロック(またはページ)のリストが含まれているLOBインデックスにキーを提供します。

20バイトは、列LOBのLOBセグメントの一意の識別子を提供するLOBロケータ行に格納されています。実際には、LOBロケータ・は、LOB INDEXのためのキーは、キーがLOBの構成のすべてのブロック(またはページ)のリストが含まれてい

LOBは、アウトオブライン格納されている場合、制御データの36と84バイトの「行のストレージを有効」LOB列に行断片にインライン残ります。

36〜84との間のLOB列がLOBバイト場合アウトオブライン「行のストレージを有効」に格納され、制御データは、ライン内にとどまります

元に戻すジェネレーション

UNDO列ロケータとLOB INDEX変更になるために書かれただけです。  UNDO列のみロケータとLOB INDEXが書かれて変化

あなたはOLDページの遺跡と新しいページが作成されたLOBのページを更新すると元に戻すには、ページのバージョンを使用することによって達成されるLOB SEGMENT.Consistent読む内のページのためにIEに生成されます。これは、スペースを無駄に見えることができますが、古いページが再利用および再利用することができます。

LOBセグメントのページには、UNDOを生成しません。使用ページのバージョンを使用すると、LOBページを更新OLDページを保持して、新しいページを作成するときに、読み取り一貫性を達成することができます。これは、スペースの無駄だが、古いページは、リサイクルおよび再利用することができます

トラブルシューティング手順

ORA-1555手段我々はそうLOBセグメント自体に読取り一貫性の問題や破損を示すことができ期待という(lob_id +バージョン)を持っていなかったようになったページ。

私たちは、あなたが命令整合性の問題やLOBセグメント自体を読むことができるように、我々は、(lob_id +バージョンを)期待していなかった到着したページが破損しているとORA-1555の手段

V $ UNDOSTATこれはLOBアンドゥ情報を反映していないので、有用な情報が含まれていません。 

それはLOBアンドゥ情報を反映していないので、V $ UNDOSTATは、有用な情報が含まれていません。

。)破損のチェック。   检查是否损坏

LOBでの報告ばかりORA-01555のプライム理由の一つが破損です。破損の場合には、OR-1555のエラーメッセージは、次の形式になります。

ORA-01555 LOBが損傷しているメインレポートの一つです。損傷が発生した場合、OR-1555、次の形式でエラーメッセージ

ORA-01555:スナップショットが古すぎます:名前のロールバック・セグメント番号「」小さすぎる
ORA-22924:スナップショットが古すぎます

破損したLOBのために、ORA-01555が報告されることがあります。破損の問題を診断するために、以下の注意事項を参照してください。

LOBの損傷ので、ORA-01555が報告されることがあります。診断破損の問題については、以下の注意事項を参照してください。
ORA-01555およびその他のロブ破損を検出するためにどのように表とLOBを、エクスポート中にエラー。[ID 452,341.1]
エクスポートがORA-2354 ORA-1555 ORA-22924とどのようにLOBセグメントの破損を確認することで失敗します?エクスポート・ユーティリティ[ID 833,635.1]を使用して

実行してから次のスクリプトもノートであなたによってできます。   また、ノートから次のスクリプトを実行することができます
にORA-1578 ORA-26040 LOBセグメント-エラー(ドキュメントID 293515.1)を解決するためのスクリプトを

-新しい新しい一時的な破損してみましょうのAPOS ITコール「corrupt_lobs。」のLOBの表1の保存すべてのROWIDを作成します
- 1.すべてのROWIDのLOBの損傷を格納するための新しい一時テーブルを作成します。私たちは、 "corrupt_lobs"それを呼び出す

(、err_num番号をcorrupt_rowid ROWIDを)表のcorrupt_lobsを作成します> SQL; 

-メイク表A含むLOB列DESC 2.ザ・ON:
- 2は、上記の表で行われるLOB列が記述が含ま

DESC LOBDATAを

?名前ヌルタイプ
---------- --------- ------------ 
ID NUMBER NOT NULL 
ドキュメントBLOB 

-次PLSQLブロックで実行します
- -以下PLSQLブロック実行

SETに連結OFF 
SET ON SERVEROUTPUTの
DECLAREの
、error_1578例外
error_1555例外; 
error_22922例外、 
error_600例外。
プラグマEXCEPTION_INIT(error_1578、-1578)。
ときerror_600その後、
プラグマEXCEPTION_INIT(error_1555、-1555)。
プラグマEXCEPTION_INIT(error_22922、-22922)。
プラグマEXCEPTION_INIT(error_600、-600)。
n個; 
開始
(ROWID R、LOBDATAから文書を選択する)ループ内cursor_lobため
始まる
N = DBMS_LOB.INSTR(cursor_lob.document、HEXTORAW( '889911')); 
例外
error_1578次いで
corrupt_lobs値(cursor_lob.r、1578)に挿入します。
コミット; 
場合error_1555次いで
corrupt_lobs値(cursor_lob.r、1555)に挿入します。
コミット; 
場合error_22922次いで
corrupt_lobs値(cursor_lob.r、22922)に挿入します。
コミット; 
corrupt_lobs値(cursor_lob.r、600)に挿入します。
コミット; 
エンド; 
エンドループ; 
エンド; 
/ 

-破損したウィルのすべてでザ・エンドのROWID LOBはBEは、新たにテーブルを作成しINTO挿入corrupt_lobs。
すべての最後に、LOBへの損傷を- ROWIDは、新しく作成されたテーブルのdestroy_lobsに挿入されます

-可能な解決策は、その文を使用してのように、影響を受けたLOBで空にするますされるように:
-その後、可能な解決策が影響を受けたのLOBクリアするには、次のステートメントを使用することである

SQL>を更新LOBDATA SETドキュメントEMPTY_BLOB =()
ROWIDに(SELECTはcorrupt_lobsからcorrupt_rowid); 

(使用EMPTY_BLOBためのBLOBとBFILE列、使用EMPTY_CLOBためのCLOBとNCLOB列)
-使用EMPTY_BLOBため(BLOBおよびBFILE列とNCLOB CLOB列の、してください使用EMPTY_CLOB)

-輸出など、ロウでcorrruptedで表なし:
-またはエクスポートテーブルの行は、例えば、損傷を受け

%のEXPDPシステム/マネージャ・ディレクトリ= MY_DIR DUMPFILE = expdp_satc.dmp LOGFILE = expdp_satc.log TABLES = tc.lobdata QUERY = \ "のROWID NOT IN \(\ '<orrupt_rowid> \' \)\"

LOBの破損の可能な回避策として、BASICFILEからコンバートLOBは、次の注意に従ってSECUREFILEします:

可能な解決策のLOBの損傷として、BASICFILE SECUREFILEからLOBに変換され、これらの指示に従ってください

HOW TO ONLINE CONVERT TO / FROM SecureFilesのFROM / TO BasicFileを[ID 728758.1]

LOBのデフォルトタイプとしてSECUREFILEを使用すると、この問題を回避することができます。あなたは以下のように設定することにより、SecureFilesのように作成されるすべてのLOBを強制することができます。

デフォルトのLOB型としてSECUREFILE使用は、この問題を防ぐことができます。あなたはすべての作成のSecureFiles LOBを強制するには、次のように設定することができます

ALTER SYSTEM SET DB_SECUREFILE = FORCE SCOPE = BOTH;

 

DIRECT I / Oを有効にすると、問題を克服し、また起きてからそれを防ぐことができます。これは次のように有効にすることができます。

DIRECT I / Oは、問題を解決することができます有効にして、それが起こってから防ぐために。あなたは、次の方法でそれを有効にすることができます

SYSTEM = DIRECTIO SET FILESYSTEMIO_OPTIONS ALTERのSCOPE = SPFILE;   

-あなたはCANまたはSET FILESYSTEMIO_OPTIONS = I / O-非同期の両方とダイレクトを有効にするには、SETALL 
-またはあなたが非同期およびIダイレクト/ Oの有効化するFILESYSTEMIO_OPTIONS = SETALLを設定することができます

SHUTDOWN IMMEDIATE 

STARTUPを

B。)に関する問題リテンション/ PCTVERSIONの

PCTVERSIONとRETENTION

PCTVERSIONは、LOBデータの古いコピーの再利用に影響を与えます。これは、一貫性のある読み取りを実行する能力に影響を与えます。(PCTVERSIONが小さすぎるため)セッションはLOBの古いバージョンを使用しようとしていると、そのバージョンが上書きされた場合、ユーザーは通常、エラーが表示されます。

LOBデータの古いコピーをリサイクルのPCTVERSIONへの影響。これは、一貫性のある読み取りを実行する能力に影響を与えます。セッションが(PCTVERSION小さすぎるので)LOB OLDバージョンを使用しようとすると、バージョン覆われている場合、ユーザーは通常、次のエラーが表示されます

ORA-01555:スナップショットが古すぎます:名前のロールバック・セグメント番号「」小さすぎる
ORA-22924:スナップショットが古すぎます

 

PCTVERSIONは、使用されているOLDページを防止し、代わりに拡張するセグメントを強制することができます。PCTVERSIONパラメータは、バージョンデータを保持するために割り当てられなければならないLOBセグメントの割合を制御するために使用されます。適用される内部ファッジ要因があるようPCTVERSIONは、スペースの正確な割合であることを期待してはいけません。PCTVERSIONは、以前に使用され、現在保持が好まれます。

PCTVERSIONは、使用OLDページを防ぎ、延長期間を強制することができます。データのバージョンを保持するPCTVERSIONパーセントの制御パラメータLOBセグメントが割り当てられなければなりません。PCTVERSIONは、内部ファッジ係数の適用ので、正確にスペースの割合です期待しないでください。今PCTVERSION、最初の選択肢の保持の以前の使用

あるいはRETENTIONパラメーターは、どのくらいの時間(秒)のLOBアンドゥが保持されるべきかを決定するために使用されます。あなたは明示的にRETENTIONパラメータの値を設定することはできません。UNDO_RETENTIONパラメータによって決定してLOBのバージョンを保持するための時間。RETENTIONパラメータの使用方法は、自動UNDO管理モードでサポートされています。

さらに、RETENTIONパラメータは、(秒)ロブアンドゥを保持する期間を決定するために使用されなければなりません。あなたは明示的にRETENTIONパラメータの値を設定することはできません。LOBの保持時間は、UNDO_RETENTIONパラメータのバージョンによって決定されます。唯一の「自動UNDO管理」モードで使用RETENTIONパラメータをサポートしています。

PCTVERSIONまたはRETENTIONの値は非常に大きな数に設定されていた場合やLOBセグメント上のクエリは比較的短い場合には、セグメントの大部分は、古いロブのバージョンを保持するのに無駄にすることができます。ケースでは、これらの値が低い、ORA-01555が期待されます。LOB記憶域句は、RETENTIONまたはPCTVERSIONではなく、両方を指定することができます。

非常に大きな値にPCTVERSIONまたは値保持セットは、問い合わせのLOBセグメントが比較的短い場合には、古いLOBのバージョンを保持するセグメントの多くの廃棄物であってもよい場合。これらの値が低い場合は、ORA-01555を使用する必要があります。保持LOB記憶域句は、両方ではなく、指定したり、PCTVERSIONすることができます。

10gでは、私たちは、LOBの作成または変更時にUNDO_RETENTIONの現在の設定以外のLOBの保持のための実際の設定を制御することはできません。静的であるように思われるよう停止およびデータベースを起動して設定を変更しません。UNDO_RETENTIONが変更された場合、その保持に接続されたLOBは場合もされていない変更されているものとします。

10gでは、LOBの作成または変更に加えて、現在の設定UNDO_RETENTIONは、我々は実際の設定の保持が他のLOBを制御することはできません。停止し、静的であるように思われるので、データベースには、設定を変更しません開始。場合、予約の葉に接続されたときにUNDO_RETENTIONの変更が変わることはないと仮定

ロブは再びPCTVERSIONとRETENTIONの背中にRETENTIONから変更されている場合は、LOBの保持が更新されます。

あなたがPCTVERSIONとRETENTIONからロブを変更した場合は、再度RETENTIONを返し、ロブ保持を更新されます

11gでは、我々は、ユーザーが保持を指定することができ   、各LOBセグメントのために。 11gでは、我々は、ユーザが各セグメントのLOBの保持時間を指定することができます

注563470.1  UNDO_RETENTIONが変更されたときにロブの保持は変更しません

NOTE 2175438.1  SECUREFILE LOBセグメントの保持を変更する方法 

C。)その他のチェック

BLOB / CLOBがNOCACHEある場合はキャッシュを作ることはできますか影響はありません場合は、確認してください。

BLOB / CLOBがNOCACHEある場合は、CACHE便利か無効かどうかを確認します

D。)バグ

D.1)  BUG 5636728  - LOBの破損/縮小操作の後に読んだのLOB ORA-1555
として確認バージョンが影響を受けて- 10.2.0.3

説明

縮小後ORA-1555 / ORA-22924エラーで失敗することがありLOBを選択する記憶領域のローのLOB列を有効にします。

この問題は、中に固定されています。

Windowsプラットフォーム上の10.2.0.2パッチ14
Windowsプラットフォーム上の10.2.0.2パッチ15
Windowsプラットフォーム上の10.2.0.3パッチ9
10.2.0.4(サーバパッチセット)
11.1.0.6(ベースリリース)

D.2)   バグ5212539  - NOCACHEのLOB(ORA-1555 / ORA-22924)のLOB破損

影響を受けて確認したバージョン

9.2.0.6
9.2.0.7
10.1.0.4
10.1.0.5の
10.2.0.1の
10.2.0.2の

説明:

LOBをCACHEオプションを使用せずにASSM表領域に作成されている場合、LOBの破損がロールフォワードセーブポイントへのロールバックは、同じトランザクションで2 LOBへの書き込みの間に行われた場合(スタンバイまたは次の回復の)中に発生することができます。制約違反が暗黙文レベルのロールバックを引き起こす発生した場合、セーブポイントにロールバックは、例えば、起こり得ます。主にデータが破損していないが、REDOストリームは、セーブポイントへのロールバックによって回復するために間違った情報が含まれています。

LOB列にアクセスするときLOBの破損は、通常、ORA-1555エラーとして表示することができます。

この問題は、中に固定されています。

9.2.0.8(サーバーパッチ・セット)
Windowsプラットフォーム上の10.2.0.2パッチ10
10.2.0.3(サーバパッチ・セット)

D.3)

@ E。)追加情報

REFERENCES

注:452341.1  - ORA-01555およびその他のエラー表とLOBをエクスポートながら、ロブ破損を検出する方法。
注:66431.1  - LOBS -ストレージ、やり直しやパフォーマンスの問題の
注:833635.1  -エクスポートはエラーORA-2354 ORA-1555 ORA-22924で失敗し、どのようにエクスポート・ユーティリティの使用方法の確認LOBセグメント破損する
注:728758.1  - HOW TO ONLINEのCONVERT TO / FROM / TO BasicFileをFROMのSecureFiles

おすすめ

転載: www.cnblogs.com/zylong-sys/p/11962175.html