oracle 估算undo脚本


摘自老道博客: http://blog.csdn.net/daohengshangqian/article/details/39268609
 
metalink 给出的公式是
UR =undo_retention参数值
UPS = 每秒产生的undo block数量
DBS = undo tablespace block size


10g之前


SELECT (UR * (UPS * DBS)) AS "Bytes" 
   FROM (SELECT value AS UR FROM v$parameter WHERE name = 'undo_retention'), 
        (SELECT undoblks / ((end_time - begin_time) * 86400) AS UPS 
           FROM v$undostat 
          WHERE undoblks = (SELECT MAX(undoblks) FROM v$undostat)), 
        (SELECT block_size AS DBS 
           FROM dba_tablespaces 
          WHERE tablespace_name = 
                (SELECT UPPER(value) 
                   FROM v$parameter 
                  WHERE name = 'undo_tablespace')); 

10g 以后

SELECT (UR * (UPS * DBS)) AS "Bytes" 
  FROM (select max(tuned_undoretention) AS UR from v$undostat), 
       (SELECT undoblks / ((end_time - begin_time) * 86400) AS UPS 
          FROM v$undostat 
         WHERE undoblks = (SELECT MAX(undoblks) FROM v$undostat)), 
       (SELECT block_size AS DBS 
          FROM dba_tablespaces 
         WHERE tablespace_name = 
               (SELECT UPPER(value) 
                  FROM v$parameter 
                 WHERE name = 'undo_tablespace'));  

当然也可以用过DBMS_ADVISOR来获取Oracle关于undo的建议设置,当然不是每次都能获取到建议,相比还是上面提供的脚本比较方便。

下面语句来自于官方文档 稍微做了一点修改

其中123 124是snapshot的ID 需要根据实际做修改。


DECLARE 
   tid    NUMBER; 
   tname  VARCHAR2( 30); 
   oid    NUMBER; 
BEGIN 
   DBMS_ADVISOR.CREATE_TASK('Undo Advisor' , tid, tname, 'Undo Advisor Task' ); 
   DBMS_ADVISOR.CREATE_OBJECT(tname, 'UNDO_TBS' , null, null, null, 'null', oid); 
   DBMS_ADVISOR.SET_TASK_PARAMETER(tname, 'TARGET_OBJECTS' , oid); 
   DBMS_ADVISOR.SET_TASK_PARAMETER(tname, 'START_SNAPSHOT' , 123); 
   DBMS_ADVISOR.SET_TASK_PARAMETER(tname, 'END_SNAPSHOT' , 124); 
   DBMS_ADVISOR.SET_TASK_PARAMETER(tname, 'INSTANCE' , 1); 
   DBMS_ADVISOR.execute_task(tname); 
   DBMS_OUTPUT.put_line( 'select * dba_advisor_log  WHERE TASK_ID ='||tid || ' ;'); 
   DBMS_OUTPUT.put_line( 'select * DBA_ADVISOR_FINDINGS  WHERE TASK_ID ='||tid|| ' ;'); 
   DBMS_OUTPUT.put_line( 'select * DBA_ADVISOR_RECOMMENDATIONS  WHERE TASK_ID ='||tid||' ;'); 
END; 
/  




你可能感兴趣的:(oracle,脚本,估算undo)