スクリプト - 現在の構成を確認し、アンドゥ推奨設定(ドキュメントID 1579035.1)

スクリプト - 現在の[元に戻す]の設定を確認し、推奨する設定をアドバイス(ドキュメントID 1579035.1)

に適用されます:

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

ゴール

 この文書では、現在のアンドゥ構成を確認することを意図しており、前回のワークロードに基づいて勧告を提供しています。オーション

このドキュメントは、現在のアンドゥの設定をチェックし、前回のワークロードに基づいて推奨を提供することを意図しています。

このサンプルコードでは、唯一の診断とトラブルシューティングの目的のために提供され、およびOracleサポートによりサポートされていません。しかし、我々はそれがあなたのために働くことを保証しませんが、内部的にテストされています。あなたが使用する前に、テスト環境でそれを実行していることを確認してください。
提供:このサンプルコードは、唯一の診断とトラブルシューティングに使用され、Oracleのサポートは、このサンプルコードをサポートしていません。しかし、我々はそれがあなたのために動作することを保証することはできません、内部テストされています。使用前に、テスト環境でそれを実行するようにしてください 
データベースのバージョンポスト10gおよび10gより前のための別のスクリプトがあります。適切な勧告を得るために正しいものを実行することを確認してください。SYSユーザーとしてスクリプトを実行することを確認してください。
以前のデータベースのバージョンの後10gおよび10gは異なるスクリプトを持っています。右の助言を得るために、その適切な勧告を確認してください。SYSユーザーとしてスクリプトの実装を確認してください。

溶液

上記のデータベースバージョン10gと、次のスクリプトを使用します。SYSDBAと同じように実行することを確認してください。

10g以上のデータベースでは、次のスクリプトを使用します。同じ操作をSYSDBAで行われていることを確認してください

RDBMSのバージョン10g以上:

SET SERVEROUTPUT ON 
SET LINES 600 
ALTER SESSION SET NLS_DATE_FORMAT = 'DD / MM / YYYY HH24:MI:SS'; 

DECLAREの
    v_analyse_start_timeのDATE:= SYSDATE - 7。
    v_analyse_end_timeのDATE:= SYSDATE; 
    v_cur_dt DATE; 
    v_undo_info_ret BOOLEAN; 
    v_cur_undo_mb NUMBER; 
    v_undo_tbs_name VARCHAR2(100)。
    v_undo_tbs_size NUMBER; 
    v_undo_autoext BOOLEAN; 
    v_undo_retention番号(5)。
    v_undo_guarantee BOOLEAN; 
    v_instance_number NUMBER; 
    v_undo_advisor_advice VARCHAR2(100)。
    v_undo_health_ret NUMBER;
    v_problem VARCHAR2(1000); 
    v_recommendation VARCHAR2(1000); 
    v_rationale VARCHAR2(1000); 
    v_retention NUMBER; 
    v_utbsize NUMBER; 
    v_best_retention NUMBER; 
    v_longest_query NUMBER; 
    v_required_retention NUMBER; 
BEGIN 
    デュアルからv_cur_dtに選択SYSDATEを。
    DBMS_OUTPUT.PUT_LINE(CHR(9))。
    DBMS_OUTPUT.PUT_LINE( ' -アンドゥ分析で開始しました:' || v_cur_dt || ' - '); 
    DBMS_OUTPUT.PUT_LINE( '--------------------------------------------- ----- '); 

    v_undo_info_ret:= DBMS_UNDO_ADV.UNDO_INFO(v_undo_tbs_name、v_undo_tbs_size、v_undo_autoext、v_undo_retention、v_undo_guarantee)。
    選択合計(バイト)/ / 1024×1024 v_cur_undo_mbにテーブル空間= v_undo_tbs_name DBA_DATA_FILESから。

    DBMS_OUTPUT.PUT_LINE(「注:以下の分析は、期間中にデータベース・ワークロードに基づいています- 」)。
    DBMS_OUTPUT.PUT_LINE( '開始時間:' || v_analyse_start_time)。
    DBMS_OUTPUT.PUT_LINE( '終了時間:' || v_analyse_end_time)。
    
    DBMS_OUTPUT.PUT_LINE(CHR(9))。
    DBMS_OUTPUT.PUT_LINE( '現在のアンドゥの設定'); 
    DBMS_OUTPUT.PUT_LINE( '--------------------------'); 
    DBMS_OUTPUT.PUT_LINE(RPAD( '現在のUNDO表領域'、55)|| ':' 
    DBMS_OUTPUT.PUT_LINE(RPAD( '現在のUNDO表領域のサイズ(データ・ファイルのサイズ)'、55)|| ':' || || v_cur_undo_mb 'M');
    DBMS_OUTPUT.PUT_LINE(RPAD( '現在のUNDO表領域のサイズ(自動拡張を考える)'、55)|| ':' || || v_undo_tbs_size 'M'); 
    V_UNDO_AUTOEXTはTHEN IF 
        ; DBMS_OUTPUT.PUT_LINE( 'ON' RPAD(55)|| 'のUNDO表領域のAUTOEXTENDは')  
    ELSE 
        DBMS_OUTPUT.PUT_LINE(RPAD(55)|| 'のUNDO表領域のAUTOEXTENDである' ':OFF')。  
    END IF; 
    DBMS_OUTPUT.PUT_LINE(RPAD( '現在のUNDO保存'、55)|| ':' || v_undo_retention)。

    THEN v_undo_guarantee IF 
        「(DBMS_OUTPUT.PUT_LINE(RPAD 
    ELSE
        DBMS_OUTPUT.PUT_LINE(RPAD( 'UNDO保証に設定されている'、55)|| 'FALSE'); 
    v_undo_health_ret:= dbms_undo_adv.undo_health(v_analyse_start_time、v_analyse_end_time、v_problem、v_recommendation、v_rationale、
    END IF; 
    DBMS_OUTPUT.PUT_LINE(CHR(9))。

    V $ INSTANCE FROM INTOのv_instance_number INSTANCE_NUMBER選択します。

    DBMS_OUTPUT.PUT_LINE( 'UNDOアドバイザの概要'); 
    DBMS_OUTPUT.PUT_LINE( '--------------------------'); 

    v_undo_advisor_advice:= dbms_undo_adv.undo_advisor(v_analyse_start_time、v_analyse_end_time、v_instance_number)。
    DBMS_OUTPUT.PUT_LINE(v_undo_advisor_advice)。

    DBMS_OUTPUT.PUT_LINE(CHR(9))。
    DBMS_OUTPUT.PUT_LINE( 'UNDO領域勧告'); 
    DBMS_OUTPUT.PUT_LINE( '-------------------------'); 

    v_undo_health_ret> 0 THEN IF 
        DBMS_OUTPUT.PUT_LINE( '最小勧告:' || v_recommendation)。
        DBMS_OUTPUT.PUT_LINE(「理由」|| v_rationale);
        DBMS_OUTPUT.PUT_LINE( '推奨UNDO表領域のサイズ:' || || v_utbsize 'M'); 
    ELSE 
        DBMS_OUTPUT.PUT_LINE(「割り当てられたUNDO領域は、現在のワークロードのために十分です。」); 
    END IF; 
    
    デュアルFROM v_best_retentionにSELECT dbms_undo_adv.best_possible_retention(v_analyse_start_time、v_analyse_end_time)。
    デュアルFROM v_longest_queryにSELECT dbms_undo_adv.longest_query(v_analyse_start_time、v_analyse_end_time)。
    デュアルFROM v_required_retentionにSELECT dbms_undo_adv.required_retention(v_analyse_start_time、v_analyse_end_time)。

    DBMS_OUTPUT.PUT_LINE(CHR(9))。
    DBMS_OUTPUT.PUT_LINE( '保持勧告');
    DBMS_OUTPUT.PUT_LINE( '------------------------');
    DBMS_OUTPUT.PUT_LINE( ':' RPAD(||)、60 '現在の設定で可能な限り最高の保持がある' || v_best_retention || '秒'); 
    DBMS_OUTPUT.PUT_LINE(RPAD(60)|| 'の最長実行中のクエリ走った' ':' || v_longest_query || '秒'); 
    DBMS_OUTPUT.PUT_LINE( ':' RPAD(||)、60 '回避エラーのために必要なUNDO保持がある' || v_required_retention || '秒'); 

終わり; 
/

サンプル出力

-元に戻すの分析はで開始:30/08/2013 11時08分40秒- 
--------------------------------- ----------------- 
注:以下の分析は、期間中にデータベース・ワークロードに基づいています- 
時間を開始します:23/08/2013午前11時08分40秒
終了時間:30 / 08/2013午前11時08分40秒

現在の[元に戻す]の設定
-------------------------- 
現在のUNDO表領域:UNDOTBS2 
現在のUNDO表領域のサイズ(データ・ファイルのサイズになりました):20M 
現在のUNDO表領域のサイズ(自動拡張を検討):20M 
AUTOEXTEND UNDO表領域のためには、次のとおりです。ON 
現在のUNDO保存:900 
FALSE:UNDO保証がに設定されています

UNDOアドバイザの概要
--------------------------- 
検索1:UNDO表領域が圧力下にあります。提言1:26メガバイトまでのサイズのUNDO表領域

UNDO領域勧告
------------------------- 
26メガバイトに表領域を元に戻すサイズ:最小推奨
理由:増加のアンドゥ表領域のサイズをその実行時間の長いクエリが失敗しませんので、
推奨UNDO表領域サイズ:26M 

保持勧告を
------------------------ 
現在の設定で可能な限り最高の保持があります:9171秒
のための最長実行中のクエリRAN:2543秒
UNDO保存は、エラーを回避するために必要である:2543秒

PL / SQLプロシージャが正常に完了しました。

RDBMSのバージョン9iおよび下記

スクリプト

9iおよび以下の場合は、ダウンロードしてください   スクリプト  undo_analyse9i.sqlを。

--undo_analyse9i.sql 

SET SERVEROUTPUT ON 
SET LINES 600 
ALTER SESSION SET NLS_DATE_FORMAT = 'DD / MM / YYYY HH24:MI:SS'と、

DECLAREの
	v_begin_timeのVARCHAR2(30)。
	v_end_timeのVARCHAR2(30)。
	v_max_qry_len番号。
	v_unto_tbs VARCHAR2(100)。
	v_cur_undo_ret数; 
	v_cur_undo_mb数; 
	v_undo_autoext VARCHAR2(5)。
	v_cur_dt日付; 
	v_recommended_undo_mb数; 
	v_analyse_start_time日付; 
	v_analyse_end_time日付; 
BEGIN 
	選択SYSDATEを
	v_cur_dtに
	デュアルから。

	デュアルからv_cur_dtにSYSDATEを選択します。
	DBMS_OUTPUT.PUT_LINE(CHR(10))。
	DBMS_OUTPUT.PUT_LINE( '--------------------------------------------- ----- '); 
	DBMS_OUTPUT.PUT_LINE( ' -アンドゥ分析で開始しました:' || v_cur_dt || ' - '); 
	DBMS_OUTPUT.PUT_LINE( '--------------------------------------------- ----- '); 

	SELECT BEGIN_TIME、v_analyse_start_timeにEND_TIME、v_analyse_end_time 
	五$ FROM UNDOSTAT undoblks =(SELECT MAX UNDOSTAT五$ FROM(undoblks)); 
	
	DBMS_OUTPUT.PUT_LINE(「注:以下の分析は、期間中のピークデータベースのワークロードに基づいています- 」); 
	DBMS_OUTPUT.PUT_LINE( '開始時間:' || v_analyse_start_time)。
	DBMS_OUTPUT.PUT_LINE( '終了時間:' || v_analyse_end_time)。
	

	選択分(BEGIN_TIME)、MAX(END_TIME)v_begin_timeに、五$ UNDOSTATからv_end_time。
	UNDOSTATのV $からv_max_qry_lenに最大(MAXQUERYLEN)を選択します。	
	五$パラメータからv_cur_undo_retに値を選択する場所名=「UNDO_RETENTION」; 
	五$パラメータからv_unto_tbsに値を選択する場所名=「UNDO_TABLESPACE」; 

	SELECT ROUND((UR *(UPS * DBS))/ 1024分の1024)
	v_recommended_undo_mb INTO 
	FROM 
	  (選択最大(MAXQUERYLEN)UR 
		のV $からUNDOSTAT)、
	  (SELECT undoblks /((END_TIME-BEGIN_TIME)* 86400)AS UPS 
	   からV $ UNDOSTAT 
	   undoblks = WHERE 
		   (SELECT MAX(undoblks)
			のV $ FROM UNDOSTAT))は、
	  (BLOCK_SIZE AS DBSを選択
	   DBA_TABLESPACES FROM 
	   WHERE TABLESPACE_NAME = 
		   (SELECT UPPER(値)
			のV $パラメータから
			WHERE名= 'UNDO_TABLESPACE')); 
	

	選択合計(バイト)/ / 1024 1024 v_cur_undo_mbにテーブル空間= v_unto_tbs DBA_DATA_FILESから。
								
	SELECT CASE(SELECT COUNT(*)DBA_DATA_FILESから
				テーブル空間= v_unto_tbs 
				と自動拡張= 'YES')
				0 THEN 'OFF' 
				ELSE 'ON' END 
	v_undo_autoextに
	デュアルから。

	DBMS_OUTPUT.PUT_LINE(CHR(10))。
	DBMS_OUTPUT.PUT_LINE( '----'); 
	DBMS_OUTPUT.PUT_LINE(RPAD( '最長でのクエリを実行している走った:'、40)|| ':' || v_max_qry_len || '秒'); 
	DBMS_OUTPUT.PUT_LINE(RPAD( '現在のUNDO保存は'、40)|| ':' 
	DBMS_OUTPUT.PUT_LINE(RPAD( '現在のUNDO表領域のサイズが'、40)|| '' || v_cur_undo_mb || 'M')。
	DBMS_OUTPUT.PUT_LINE(RPAD(||)、40 'のUNDO表領域のサイズのAUTOEXTENDである' '' || v_undo_autoext)。
	DBMS_OUTPUT.PUT_LINE( '----'); 
	DBMS_OUTPUT.PUT_LINE(RPAD(40)|| 'アンドゥ保持推奨である' '' || TO_CHAR(v_max_qry_len + 1)|| '秒')。
	DBMS_OUTPUT.PUT_LINE(RPAD( '推奨のUNDO表領域のサイズである'、40)|| '' || v_recommended_undo_mb || 'M')。

	デュアルからv_cur_dtにSYSDATEを選択します。
	DBMS_OUTPUT.PUT_LINE(CHR(10))。
	DBMS_OUTPUT.PUT_LINE( '--------------------------------------------- ------- '); 
	DBMS_OUTPUT.PUT_LINE(」 - 元に戻すの分析はで完了: '|| v_cur_dt || ' - ');
	DBMS_OUTPUT.PUT_LINE( '--------------------------------------------- ------- '); 
	
終わり; 
/

サンプル出力

-------------------------------------------------- 
-元に戻すの分析はで開始:28/08/2013午前11時03分23秒- 
--------------------------------- ----------------- 
注:以下の分析は、期間中のピークデータベースのワークロードに基づいています- 
時間を開始します:27/08/2013夜9時56分36秒
終了時間:27 / 08/2013年午後09時06分36秒


---- 
最長でのクエリRANを実行している:1368秒
現在のUNDO保存は次のとおりです。900秒
現在のUNDO表領域のサイズは、次のとおりです。10M 
たUNDO表領域のサイズのためのAUTOEXTENDは次のとおりです。ON 
---- 
推奨する元に戻します保持は次のとおりです。1369秒
表領域サイズUNDO推奨です:43M


-------------------------------------------------- - 
-アンドゥ分析がで完了:28/08/2013 11時03分23秒- 
------------------------------- --------------------- 

PL / SQLプロシージャが正常に完了しました。

REFERENCES

注:877613.1  - AUM共通の分析/診断スクリプト
注:1580225.1  - UNDOアドバイザとは何で、どのようにDBMS_UNDO_ADVパッケージを介してそれを使用します

おすすめ

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