您的位置:首页 > 数据库 > Oracle

oracle 估算undo脚本

2015-08-24 10:48 716 查看


摘自老道博客: 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;
/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: