oracle undo表空间该如何估算,设计多大合适?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle undo表空间该如何估算,设计多大合适?相关的知识,希望对你有一定的参考价值。
搜集推荐信息如下:UNDO表空间用于存放UNDO数据,当执行DML操作时,oracle会将这些操作的旧数据写入到UNDO段,以保证可以
回滚或者一致读等.
oracle undo表空间
undo表空间用于存放undo数据,当执行DML操作(insert、update、delete)时,oracle会将这些操作的
旧数据写入到undo段。
undo数据的作用
1.回退事务
当执行DML操作修改数据后,旧数据被存放在undo段中。只要数据为提交、回滚段未写满或者回滚段为超
时的情况下,旧数据都能被回滚回来。
2.读一致性
通过DML操作后的数据没有提交之前,其他用户读取的数据都是回滚段里面的旧数据。
使用undo参数
1.undo_management
该初始化参数用于指定undo数据的管理方式。如果要使用自动管理模式,必须设置为auto,如果使用手工
管理模式必须设置该参数为manual,使用自动管理模式时,oracle会使用undo表空间管理,使用手工管理
模式时,oracle会使用回滚段管理undo数据。需要注意,使用自动管理模式时,如果没有配置初始化参数
UNDO_TABLESPACE,oracle会自动选择第一个可用的UNDO表空间存放UNDO数据,如果没有可用的UNDO表空
间,oracle会使用SYSTEM回滚段存放UNDO记录,并在ALTER文件中记载警告。
2,UNDO_TABLESPACE
该初始化参数用于指定例程所要使用的UNDO表空间,使用自动UNDO管理模式时,通过配置该参数可以指定例
程所要使用的UNDO表空间.
在RAC(Real Application Cluster)结构中,因为一个UNDO表空间不能由多个例程同时使用,所有必须为每
个例程配置一个独立的UNDO表空间.
3,UNDO_RETENTION
该初始化参数用于控制UNDO数据的最大保留时间,其默认值为900秒,从9i开始,通过配置该初始化参数,可
以指定undo数据的保留时间,从而确定倒叙查询特征(Flashback Query)可以查看到的最早时间点.
手工管理回滚段的规划:
SQL> show parameter undo;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
SQL> show parameter transactions;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
transactions integer 187 ----------系统准备支持的事
务连接数量。
transactions_per_rollback_segment integer 5 --------------每个回滚段支持的事务
连接数量。回滚段数=187/5
SQL> show parameter rollback;
NAME TYPE VALUE
------------------------------------ ----------- ----------
fast_start_parallel_rollback string LOW
rollback_segments string ----------------------设置回滚段的数量
transactions_per_rollback_segment integer 5
设置多个undo表空间放在不同磁盘上可以均衡i/o,减少文件争用,提高性能。 参考技术A UndoSpace = UR * (UPS * DBS)
UR:undo_retention值
UPS:每秒产生的undo数据块数
DBS:db_block_size
undo表空间大小:
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'));
如有帮助请采纳本回答被提问者和网友采纳
oracle undo表空间被删除,数据库无法启动,请问如何恢复
工程师发现undo表空间使用率到了100%,在网上随便参考了一个方法就干了(开始状态数据库是联机的),结果数据库无法启动了。操作步骤为
1、先在数据库里把undo表空间offline;
2、停止数据库;
3、后又在系统中把文件rm掉;
4、startup mount;
5、alter database datafile '/u01/app/oracle/oradata/orcl/undotbs01.dbf' offline drop;
6、alter database open; 到这一步时报错:ORA-01092: ORACLE instance terminated. Disconnection forced
然后,现在要解决的话,需要先把undo tablespace设置成手动,启动数据库,创建新的undo tablespace。把新的设置成默认的。
假设你的库现在是mounted状态
1 创建PFILE(如果已有就是更新)
SQL>create pfile from spfile;
2 关闭数据库
SQL>shutdown immediate
3 在你的$ORACLE_HOME/dbs目录下面找个叫做
init<数据库>.ora的文件,把其中有undo_management=AUTO的一行改成
undo_management=MANUAL
如果没有就在文件末尾填一行
4 以sysdba身份连接数据库
SQL>connect "/ as sysdba"
用刚才改过的文件启动数据库
SQL> startup pfile=<刚才的文件全路径和名字>
这步是最关键的,如果成功,后面就没问题了
5 drop掉原来的表空间
SQL> drop tablespace <原来的undo表空间名字> including contents;
6 创建新的undo表空间
SQL> create UNDO tablespace undotbs2 datafile '/u01/app/oracle/oradata/orcl/undotbs02.dbf' size 100M autoextend on;
7 关闭数据库,
SQL>shutdown immediate
在开始那个init文件里设置UNDO_MANAGEMENT=AUTO
和 UNDO_TABLESPACE=UNDOTBS2
8 再做一次第四步
9 更新spfile
SQL>create spfile from pfile;
10 关闭数据库,正常重新启动
SQL>shutdown immediate
SQL>startup
11 去网上教你删undo那个地方骂它。非常想当然的做法。没有任何理由这么做
12 让你的工程师去学oracle 培训
以上步骤的中的第5步可能会出问题。我不确认。。。 但是即使第5步不成功,问题应该也不大 参考技术A undo表空间使用到了100%,也不至于要删掉吧。把数据文件设置成自动扩展就是了
undo表空间是循环使用的。
不清楚你数据库目前的状态,版本,参数设置不好回答 参考技术B 你真强悍,undo表空间满了,你把它删了能够解决问题啊。。undo表空间都给删除了当然报错了。重新创建一个吧。。你的表空间使用率要高的话,可以适当的把undo_retention 调的大一点。10g的默认的是,900.不知道你的是什么版本。 参考技术C PRM-DUL 可以直接从Oracle .DBF数据文件中抽取出表的数据。
Oracle DBA神器:PRM灾难恢复工具,Schema级别数据恢复。PRM For Oracle Database – schema级别oracle数据库数据恢复特性 ,PRM即ParnassusData Recovery Manager是企业级别Oracle数据库灾难恢复工具。PRM可以在无备份的情况下恢复被truncated掉的表,也可以恢复无法打开的Oracle数据库(Alter Database Open失败)中的数据。
以上是关于oracle undo表空间该如何估算,设计多大合适?的主要内容,如果未能解决你的问题,请参考以下文章