oracle 估算undo脚本

本文提供了Oracle数据库中UNDO空间需求的估算方法,包括10g之前的版本及之后的不同计算方式,并介绍了如何使用DBMS_ADVISOR来获取Oracle关于UNDO的建议设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


 
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; 
/  




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值