概述:
1. 回滚段已过时(undo_management = maual),今后都以撤销段为概念(undo_management = auto).
2. 撤销段只能存在于专门针对撤销目的创建的某个表空间内,而回滚段则可以被创建在任何表空间内.
3. 回滚段呆在数据库创建阶段,除了数据字典之外,ORACLE还会在SYSTEM表空间内创建一个过时的回滚段,这个回滚段在数据库创建期间使用,但是决不会在正常运行期间使用.
4. 撤销段的类型命名为TYPE2 UNDO,而回滚段为ROLLBACK,即为TYPE1 UNDO.
5. 一个数据库中可以存在多个撤销表空间,但是在任意给定时刻都只能使用一个撤销表空间.
6. 撤销表空间必须被创建为持久的/本地管理的表空间.
7. 任何一个事务都只能受一个撤销段保护,一个事务生成的撤销数据无法被分配到多个撤销段中,因此撤销段大小可变.如果某个事务填满了自己使用的撤销段,那么ORACLE会自动为该撤销段添加另一个区间,从而使这个事务能继续进行.
--常规查询
select s.BEGIN_TIME,
s.END_TIME,
s.UNDOBLKS, -- 撤销数据量
s.MAXQUERYLEN, -- 最长查询的耗时(sec)
s.SSOLDERRCNT -- 是否存在快照过旧
from v$undostat s
-- 预计所需的UNDO空间大小
select
(
(select max(s.UNDOBLKS)/600*max(s.MAXQUERYLEN) from v$undostat s)
-- 该视图记录是每十分钟一条记录
*
(select value from v$parameter t where t.name='db_block_size')
)/1024/1024/1024 as "预计UNDO空间(GB)"
from dual;
-- 查看事务回滚段的使用情况
select s.SID,
s.SERIAL#,
s.MACHINE,
s.PROGRAM,
t.START_TIME,
t.USED_UBLK,
r.STATUS,
s.USERNAME,
r.segment_name
from v$transaction t, v$session s, dba_rollback_segs r
where t.SES_ADDR = s.SADDR
and t.XIDUSN = r.segment_id
-- 针对某表空间启动撤销保留保证
alter tablespace <tablespace_name> retention guarantee;
-- UNDO自动管理时初始参数中的设置
undo_management=AUTO
undo_tablespace=UNDOTBS1
undo_retention=秒数
注:如果未指定undo_tablespace,则ORACLE会利用SYSTEM表空间来存储回复记录,应避免这种情况发生,否则数据库内容易产生磁盘碎片问题。
-- 建立回复表空间
CREATE UNDO TABLESPACE "UNDOTBS1" DATAFILE '/oradata/undotbs01.dbf' SIZE 5303M REUSE
-- 切换回复表空间
alter system set undo_tablespace='<新的回复表空间名称>'
-- 删除回复表空间
drop tablespace <表空间名>
注:如果表空间内含有其他数据,则无法删除它,需使用:drop tablespace <表空间名> including contents [and datafiles]
-- 回复表空间离线
alter tablespace undotbs1 offline immediate;
1. 回滚段已过时(undo_management = maual),今后都以撤销段为概念(undo_management = auto).
2. 撤销段只能存在于专门针对撤销目的创建的某个表空间内,而回滚段则可以被创建在任何表空间内.
3. 回滚段呆在数据库创建阶段,除了数据字典之外,ORACLE还会在SYSTEM表空间内创建一个过时的回滚段,这个回滚段在数据库创建期间使用,但是决不会在正常运行期间使用.
4. 撤销段的类型命名为TYPE2 UNDO,而回滚段为ROLLBACK,即为TYPE1 UNDO.
5. 一个数据库中可以存在多个撤销表空间,但是在任意给定时刻都只能使用一个撤销表空间.
6. 撤销表空间必须被创建为持久的/本地管理的表空间.
7. 任何一个事务都只能受一个撤销段保护,一个事务生成的撤销数据无法被分配到多个撤销段中,因此撤销段大小可变.如果某个事务填满了自己使用的撤销段,那么ORACLE会自动为该撤销段添加另一个区间,从而使这个事务能继续进行.
--常规查询
select s.BEGIN_TIME,
s.END_TIME,
s.UNDOBLKS, -- 撤销数据量
s.MAXQUERYLEN, -- 最长查询的耗时(sec)
s.SSOLDERRCNT -- 是否存在快照过旧
from v$undostat s
-- 预计所需的UNDO空间大小
select
(
(select max(s.UNDOBLKS)/600*max(s.MAXQUERYLEN) from v$undostat s)
-- 该视图记录是每十分钟一条记录
*
(select value from v$parameter t where t.name='db_block_size')
)/1024/1024/1024 as "预计UNDO空间(GB)"
from dual;
-- 查看事务回滚段的使用情况
select s.SID,
s.SERIAL#,
s.MACHINE,
s.PROGRAM,
t.START_TIME,
t.USED_UBLK,
r.STATUS,
s.USERNAME,
r.segment_name
from v$transaction t, v$session s, dba_rollback_segs r
where t.SES_ADDR = s.SADDR
and t.XIDUSN = r.segment_id
-- 针对某表空间启动撤销保留保证
alter tablespace <tablespace_name> retention guarantee;
-- UNDO自动管理时初始参数中的设置
undo_management=AUTO
undo_tablespace=UNDOTBS1
undo_retention=秒数
注:如果未指定undo_tablespace,则ORACLE会利用SYSTEM表空间来存储回复记录,应避免这种情况发生,否则数据库内容易产生磁盘碎片问题。
-- 建立回复表空间
CREATE UNDO TABLESPACE "UNDOTBS1" DATAFILE '/oradata/undotbs01.dbf' SIZE 5303M REUSE
-- 切换回复表空间
alter system set undo_tablespace='<新的回复表空间名称>'
-- 删除回复表空间
drop tablespace <表空间名>
注:如果表空间内含有其他数据,则无法删除它,需使用:drop tablespace <表空间名> including contents [and datafiles]
-- 回复表空间离线
alter tablespace undotbs1 offline immediate;