oracle数据库管理从入门到精通——何明著
Oracle学习笔记,原书摘抄重点加上自己实验内容
1.什么是还原段
当某个进程修改数据时,oracle首先将它的原始值存入一个还原段中。一个事务只能将他全部的还原数据存放在同一个还原段中,并行事务可以写同一个还原段。
1.1还原段目的
- 事务回滚(rollback)
- 读一致性(其他用户不能看到其他未提交的事务修改的数据,一个语句在执行期间所看到的数据是静止的)
- 事务恢复(回滚所有未提交的变化,要完全恢复回滚段必须受到联机重做日志文件保护)
1.2oracle并行写测试
开启一个sql窗口发起update事务A未commit,新开窗口发起update事务B会一直执行直到前一个事务commit。A未提交时,B查询出来的数据为A未修改的原数据
1.3还原段类型
- system 仅为系统表空间中的对边变化所用
- non-system 为其他表空间中的对象使用,当一个数据库具有多个表空间时就需要至少一个手动的非系统还原段或一个自动管理的还原表空间
- 私有还原段:为一个实例所用
- 公有还原段:为任何一个实例所用
- deferred 延迟还原段(由系统管理)
2.还原段的管理
2.1还原段的自动管理
spfile中的参数
undo_management #静态参数只能在参数文件中修改
undo_tablespace #动态参数可以通过alter system set undo_tablespace=undotable
2.2还原表空间的创建与维护
2.2.1创建
CREATE UNDO TABLESPACE jinlian_undo
DATAFILE 'E:\orcltest\oradata\ORCL\DATAFILE\jinlian_undo.DBF'
SIZE 20M
2.2.2查看还原表空间
SELECT tablespace_name,status,CONTENTS FROM Dba_Tablespaces WHERE CONTENTS='UNDO'
- 还原表空间维护
alter tablespace
rename
add datafile
datafile [online|offline]
begin backup
end backup
--增加数据文件(默认文件不自动扩展)
ALTER TABLESPACE jinlian_undo ADD DATAFILE 'E:\orcltest\oradata\ORCL\DATAFILE\jinlian2_undo.DBF' SIZE 25M;
--让表空间自动扩展(设置数据文件自动扩展)
ALTER DATABASE DATAFILE 'E:\orcltest\oradata\ORCL\DATAFILE\jinlian_undo.DBF' AUTOEXTEND ON
--查看还原表空间参数信息
SELECT * FROM v$parameter WHERE NAME LIKE '%undo%'
--删除还原段OS中的文件不会被删除
drop tablespace jinlian_undo;
2.2.3自动还原数据管理
- undo_retention
§ 该参数决定还原数据在提交后保存的时间单位:秒。这是一个动态参数
§ ALTER SYSTEM SET undo_retention=900
该参数是为了保证读一致性,如果一个查询语句发起了事务A,A之后DML的事务B修改了A所查询的数据并做了提交,A事务需要找到DML的B事务提交前的数据,该数据就是从还原段读取的,若还原段保留的时间不够,该数据可能会被新的数据清除,A要检索当时的数据就会发生snapshot too old错误(所需快照太老)。
- 表空间的RETENTION GUARANTEE|NOGUARANTEE(动态参数)
还原表空间的retention属性
Oracle默认不会100%保留设定的undo_retention时间内的数据需要设置还原表空间的retention属性
查看还原表空间属性( dba_Tablespaces)
SELECT tablespace_name,RETENTION,CONTENTS FROM Dba_Tablespaces WHERE tablespace_name LIKE 'U%'
让oracle在undo_retention时间内100%保证读一致
ALTER TABLESPACE UNDOTBS1 RETENTION GUARANTEE;
该模式下,当新的事务需要还原段而没有空闲还原段时该事务会执行失败
该模式是为了保证长时间的查询(如统计)事务的读一致性,应当根据业务需要对资源进行调度
改回oracle默认模式
ALTER TABLESPACE UNDOTBS1 RETENTION NOGUARANTEE;
2.3还原表空间的相关字典表
2.3.1查看还原表空间的参数信息
show parameter undo
2.3.2回滚数据追踪
- v$undostat
回滚数据的追踪大致思路为通过以下语句,找到undoblks较大的时间段,通过v$sql等视图确定问题语句或操作从而排查出产生大量还原数据问题原因,以求找到合理的解决方案。
SELECT to_char(begin_time,'HH:MM:SS')END_TIME,to_char(end_time,'HH:MM:SS')begin_time,undoblks FROM v$undostat
undoblks 为消耗的还原数据块的总数
maxquerylen 该时间段中所执行的最长的查询(秒为单位)
2.3.3相关数据字典
SELECT * FROM v$rollname;
SELECT * FROM v$rollstat;
SELECT * FROM v$session;
SELECT * FROM v$transaction;
SELECT * FROM Dba_Rollback_Segs;
2.3.4临时还原数据
此特性为12C的特性,临时表存于临时表空间常驻内存
会话一级开启临时还原功能
ALTER SESSION SET temp_undo_enable=TRUE;
在数据库一级开启临时还原功能
ALTER SYSTEM SET temp_undo_enable=TRUE;
查看参数
show parameter temp_undo
SELECT * FROM v$tempundostat