マスター注:トラブルシューティングORA-1548エラー(ドキュメントID 1577988.1)

に適用されます:

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

目的

このトラブルシューティングガイドでは、UNDO表領域を滴下しながら報告ORA-1548エラーを解決するためです。 

報告のため、このトラブルシューティングガイドでORA-1548エラーは、UNDO表領域を削除すると解決しました

主な目的は、データベース管理者を同じに解決する問題と手順の理解を提供することです。それはまた、あなたのOracleサポートでサービスリクエストを上げる前に収集される診断情報を提供します。

主な目的は、問題とその解決手順を理解するために、データベース管理者を有効にすることです。また、あなたから収集するために、Oracleサポート・サービス要求を使用する前に、診断情報を提供します

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

ORA-1548とは何ですか

あなたがアクティブなロールバック・セグメント、すなわち、ロールバック時や死んだトランザクションは、トランザクション・リカバリが必要な存在であるために必要とされるセグメントを含む表領域を削除しようとすると、ORA-1548は、エラーが報告されます。表領域はUNDOセグメントにアクセスするアクティブ(または死んだ)トランザクションをクリアした後にドロップすることができます。トランザクションがロールバックすることができない場合は元に戻すのデータファイルがアクセス可能オフラインかそうでないような問題にも様々な理由により発生する可能性が、元に戻すには、回復を必要とするように。

削除しようとすると(つまり、必要なロールバック・セグメントまたは必要性の存在がトランザクション無効なトランザクションを復元する)アクティブなロールバックテーブルスペースが含まれている、ORA-1548エラーが報告されています。唯一の明確なアクティブ(または非アクティブ)UNDOセグメントにアクセスするためにトランザクションの後、あなたは、テーブルスペースを削除することができます。このようアンドゥ・データ・ファイルなどのトランザクションをロールバックすることはできません、さまざまな理由でアクセスまたはオフライン状態、およびので、この問題が発生する元に戻すを復元する必要がある上にない場合

あなたにはUNDOセグメントを確認することができます  クエリを使用して、使用: あなたはあなたを確認するには、次のクエリを使用することができますUNDOセグメントを使用しています

segment_idに、SEGMENT_NAME、ステータス(「オンライン」、「オフライン」)における状態ではないDBA_ROLLBACK_SEGSからテーブル空間を選択します。

上記のクエリが返す「ONLINE」や「PARTLY AVAILABLE」の場合、それはまだロールバックでトランザクション・エントリが保留されていることを意味します。対応するトランザクションがいずれかのコミットまたはロールバックされるまで待つ必要があります。ステータスが「OFFLINE」になるまで、再度、上記のクエリを繰り返します。ステータス手段死んだトランザクションはまだロールバックする必要があることが存在していること。我々は単にそれを忘れることができる方法は、それがデータベースに論理的な破損を残して、ありません。</ span>を</ span>を

上記のクエリが返す「ONLINE」や「PARTLY AVAILABLE」の場合、それはロールバックトランザクション・エントリ保留中のまだあることを意味しています。あなたは、コミットまたは対応するトランザクションまでロールバックされるのを待つ必要があります。状態が「OFFLINE」になるまで、再クエリを繰り返します。このステータスは、無効なトランザクションがロールバックする必要があることを示しています。私たちは、単にそれは、データベース内の論理的な破損を残して、それを忘れることはできません

Aは、ロールバックに問題があることをステータス意味「RECOVERYニーズ」を。このドキュメントのケース3を参照してください。

ロールバック状態に問題があることを示し「RECOVERYニーズ」が。この場合にはケース3を参照してください。

 ケース1:アクティブまたは死んだトランザクション   UNDOセグメントに存在する。 アクティブなUNDOセグメントまたは無効なトランザクションがあります

1)元に戻すの状態を確認  オンラインまたはオフラインでないセグメント:. UNDOセグメントのチェックではないオンラインまたはオフラインの状態を

選択SEGMENT_NAME、ステータス、DBA_ROLLBACK_SEGSからTABLESPACE_NAMEの状態ではないで( 'ONLINE'、 'OFFLINE');

ステータスを持つセグメントがある場合は「部分的に利用可能な」、それは彼らがまだ保留中のアクティブなトランザクションを持って、トランザクションがコミットまたはロールバックされるまでは、表領域を削除できないことを意味します。死んだトランザクションの場合、あなたは回復が行われるまで待機する必要があります。

「部分的に使用可能な」セグメントの状況がある場合、それは彼らがまだ保留中のトランザクション・アクティビティを持っていることを意味し、することはできません削除するには、テーブルスペース、トランザクションがコミットまたはロールバックされるまで。トランザクションが失敗した場合、リカバリが完了するまで、それは待たなければなりません

2.デッド・トランザクションをチェックするには、次の   トランザクションを確認するには、無効

 KTUXEUSN、KTUXESLT、KTUXESQN、KTUXESTA、KTUXECFL、KTUXESIZを選択
 Xから$ ktuxe
 どこKTUXESTA = 'ACTIVE' とKTUXECFL = 'DEAD';

あなたは、カラム使用してリカバリを監視することができ   KTUXESIZを。これは、回復進むにつれて減少します。 あなたは、カラムKTUXESIZモニターの回復を使用することができます。リカバリでは、これが削減されます

トランザクションが回復したら、あなたができる   UNDO表領域をドロップしようとしたトランザクションを回復した後、あなたは、UNDO表領域を削除してみてくださいすることができます

ケース2:によって保持されたUNDOセグメント   死ん分散トランザクションは、 分散トランザクションが保持している無効な UNDOセグメントを

この場合、問題が死ん分散トランザクションによって引き起こされます。私たちは、UNDO表領域をドロップしようとする前に死んで分散トランザクションをクリアする必要があります。

この場合、問題は、無効な分散トランザクションによって引き起こされます。UNDO表領域を削除しようとする前に、我々は、無効な分散トランザクションをクリアする必要があります

上の任意のアクティブなトランザクションをチェックするために、 ロールバック・セグメント:  アクティブなトランザクションのロールバック・セグメントを確認するには、次の操作を行います

SELECT KTUXEUSN、KTUXESLT、KTUXESQN、/ *トランザクションID * /
KTUXESTAステータス、
KTUXECFLフラグ
Xから$ ktuxe
!WHERE ktuxesta = 'INACTIVE';

「準備」などのステータス表示された場合、これがコミットまたはロールバックする必要がある分散トランザクション、ある意味します。

ステータスが「準備」の場合、それは分散トランザクションがバックをコミットまたはロールバックされなければならないことを意味し

。B  あなたによっては疑問がある取引を確認するには、次のクエリで使用することができます。  あなたがチェック疑い取引に次のクエリを使用することができます

LOCAL_TRAN_ID、GLOBAL_TRAN_ID、STATE、MIXEDを選択、DBA_2PC_PENDING FROM#をCOMMIT;

SELECT LOCAL_TRAN_ID、IN_OUT、DATABASE、DBA_2PC_NEIGHBORSからインターフェイス。

この時点では、クリーンアップにdba_2pcエントリに対応せずにトランザクションを分散しています

この時点で、あなたは、分散トランザクションに対応するエントリをdba_2pcクリアする必要があります

問い合わせOracleサポートは一本鎖dba_2pc取引をきれいにしてください

本鎖dba_2pcをクリアするには、Oracleサポート・サービスに連絡してください

これらのトランザクションがクリアされたら、ORA-1548エラーに遭遇することなく、UNDO表領域をドロップすることができるはずです。

これらの問題をクリアした後は、ORA-1548エラーに遭遇することなくUNDO表領域を削除することができるはずです

ケース3:回復UNDOセグメントが必要です   UNDOセグメントを 使用すると、回復する必要がある場合

 UNDOセグメントのステータスを確認 UNDOセグメントの状態を確認

選択SEGMENT_NAME、ステータス、DBA_ROLLBACK_SEGSからTABLESPACE_NAMEの状態ではないで( 'ONLINE'、 'OFFLINE');

「リカバリが必要」などの元に戻すセグメントステータス表示された場合UNDOセグメントを回復するために、ドキュメントを参照してください

UNDOセグメントのステータスは「リカバリが必要」である場合は、アンドゥを回復するために文書セグメントを参照してください。

ドロップUNDO表領域にできませんでしたUNDOセグメントは、回復ニーズにあるので(ドキュメントID 1295294.1

ケース4 :.場合、イベント10513がされる  設定の場合、設定されたイベント10513

 イベント場合は、アラート・ログ・ファイルを確認してください   10513が設定されている。 イベント10513は、アラート・ログ・ファイルをチェックした場合

イベント=「10513トレース名コンテキスト永遠に、レベル2」

これは次のように動的に設定することができます:  動的に設定します

SQL> ORADEBUG setorapid <SMONのOracleのPID>
永遠SQL> ORADEBUGイベント10513トレース名コンテキスト、レベル2

イベント10513が設定されている場合、SMONからのトランザクション・リカバリは無効となりUNDOセグメントステータス文句を言わないの変更になります。イベントが設定されているのであれば、イベントを削除した後、データベースを再起動し、デッド・トランザクションの回復を監視します。

あなたがイベント10513を設定した場合、取引は無効となりますSMON回復から行われるので、UNDOセグメントのステータスは変更されません。あなたは、イベントを設定する場合は、イベントを削除し、トランザクション無効の回復を監視した後、そのため、データベースを再起動してください。

INIT.ORAからイベントを削除し、インスタンスを再起動してください。それが動的に設定されている場合は、それを通りオフにすることができます:  

INIT.ORAからイベントを削除し、インスタンスを再起動してください。ダイナミック設定されている場合、それは閉じることができます

SQL> ORADEBUG setorapid <SMONのOracleのPID>
SQL> ORADEBUGイベント10513トレース名コンテキストオフ

イベントがリセットされたら、使用してtrasaction回復の進行状況を監視することができます:

リセットイベントの後、あなたは回復進捗業務を監視するために、次の方法を使用することができます

KTUXEUSN、KTUXESLT、KTUXESQN、KTUXESTA、KTUXECFL、KTUXESIZを選択
 Xから$ ktuxe
 どこKTUXESTA = 'ACTIVE' とKTUXECFL = 'DEAD';

あなたは、列KTUXESIZを使用してリカバリを監視することができます。これは、回復進むにつれて減少します。

あなたは、列KTUXESIZモニターの回復を使用することができます。リカバリでは、これが削減されます

ケース5:フラッシュバック・データ・アーカイバ(FBDA)が有効になっている  启用フラッシュバック・データ・アーカイバ(FBDA)时

 いくつかのトランザクションがフラッシュバックのためにアーカイブする必要がありようにマークされているので、UNDO表領域のドロップ操作がブロックされています。

 いくつかのトランザクションがフラッシュバック・アーカイブとしてマークされなければならないので、そのUNDO表領域の削除がブロックされています

五$データベースから1.チェックCURRENT_SCN後に追跡された表の更新  、更新トラッキングテーブルを、V $データベースCURRENT_SCNからチェックされています

パラメータ2. UNDO_TABLESPACEを変更しない   DOはパラメータのUNDO_TABLESPACEを変更しません

sys_fba_barrierscnから3. barrierscn;   barrierscn sys_fba_barrierscnから選択

このSCNは、SCNより大きくなるまで待つステップ1で、   このステップのように1より大きいSCN SCNです

barrierscnが大きくなる後FBDAは、トランザクションテーブル拡張を更新できるように、4、1より多くの分を待ちます

大きなbarrierscn後、トランザクションはテーブル拡張FBDAを更新できるようにすることを、ちょっと待って

5.次に、UNDO_TABLESPACEを変更し、古いドロップものを。   そして、UNDO_TABLESPACEを変更し、古いを削除します

ステップ3では、FBDAはしばらくsys_fba_barrierscnを更新します。 あなたは待ちたくない場合は、最速の方法は、インスタンスを再起動されます。

ステップ3では、FBDAは、時間の経過とともに更新さsys_fba_barrierscn。あなたは待ちたくない場合は、最速の方法は、インスタンスを再起動することです

ケース6:フラッシュバック・データ・アーカイバ(FBDA)は、過去に有効になっていました。  过去已启用フラッシュバック・データ・アーカイバ(FBDA)

この場合も、元に戻すには、フラッシュバックのためにアーカイブする持っているマーク。FBAとの取引で使用されるエクステントは、アーカイバがアンドゥを採掘し、フラッシュバック・アーカイブの履歴を記録する履歴が記録されるまでこれらのエクステントを再利用することができないとして、テーブルを有効にするまで、「アクティブ」と見なされる「オン」ビット。

この場合も、マークがフラッシュバック・アーカイブを取り消さなければなりません。FBAは、エクステント会社の使用はアーカイブが取り消されるまで、「アクティブ」とみなされ、レコードがレコード内のこれらのエクステントので、これまでに、履歴テーブルのフラッシュバック・アーカイブを有効に発見されている「オン」にビット歴史は前に回復することはできません

インスタンス・パラメータ「_disable_flashback_archiver」が設定されている場合、FBDAのprocesssは、これらのアンドゥエクステントを開始し、従って習慣処理する習慣。

あなたは、インスタンス・パラメータ「_disable_flashback_archiver」を設定した場合、FBDAプロセスが開始されませんので、これらのアンドゥ範囲を処理しません。

確認するには:  検証を

SQL> SELECT a.ksppinm "パラメータ"、
            b.ksppstvl「セッションバリュー」、
            c.ksppstvl「インスタンス値」
     sys.x $ ksppi A、sys.x $ ksppcv B、sys.x $ ksppsv Cからの
     WHERE a.indx = b.indx
     AND a.indx = c.indx
     AND a.ksppinm LIKE '%回想%';

 

これは、リセットする必要がありますし、インスタンスがなければなりません   再起動する。 リセットする必要があり、そして例を再起動する必要があります

SQL> ALTER SYSTEM SET "_disable_flashback_archiver" = 0 SCOPE = SPFILE;

そして、インスタンスを再起動してください。これがデフォルト値にパラメータを返します。

そして、インスタンスを再起動してください。これがデフォルト値にパラメータを復元します

おすすめ

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