数据库一致性
时间:2010-12-20 来源:x-i-x
leverage ['levɚridʒ] 1.杠杆作用;杠杆效率 2.手段;力量;影响力
retention [ri'tenʃən] 1.保留;保持 2.记忆力 vying ['vaiiŋ] 1.竞争的;竞赛的
spike [spaik] 阻止;制止;使(计划等)受挫,墙头钉;尖铁,钉鞋
flashback
适用版本:9i以上
作用: 允许用户看到过去某个时间点的实际数据 ,归纳为:1.事务会滚 2.DML/Query一致读 3.数据库恢复 4.flashback
先决条件: 指定时间点的undo数据还存在
重做 UNDO 原理:
undo segment=rollback segment , 由extents 组成,必须存放在专门的表空间:undo tablespace,一个数据库可以有多个undo表空间,同一时间只有一个被激活 (active),undo segment自动收缩和增长,循环的缓冲区。extents可以回绕到segment的最开始的地方,如果没有活动的事务在使用第一个缓冲的话。
在一个事务执行的开始,系统赋予一个undo tablespace,的undo segment,事务过程对表的修改会记录在这里。
undo segment number编号,usn=0,sys,system用户保留使用,
所有的segment归属于sys,每个segment至少有2个extents,
数据字典
V$ROLLNAME---- 当前 active undo segments
DBA_ROLLBACK_SEGS---- system,undo tablespace 里面active (online) 和inactive (offline) undo segments
V$TRANSACTION---- 事务和undo segments 的关系。
V$UNDOSTAT ---- 计算undo表空间的大小
参数:
UNDO_MANAGEMENT 方式MANUAL/ AUTO. alter system set undo_management = manual scope=spfile
UNDO_TABLESPACE 指定名称,同一个时间只有一个,除非指定了新的,旧的空间上面还有活动的事务,将并行直至事务结束。如果undo表空间在创建数 据库的时候未指定,系统默认创建一个命名为SYS_UNDOTBS的空间。alter system set undo_tablespace=undo_batch; AUTOEXTEND 如果undo tablespace’s datafiles没有指定的话,太多任务竞争较小的空间,可能导致失败。如果你能够确定足够的大小,可以关闭,防止有 些用户忽略提交造成巨大空间消耗。 UNDO_RETENTION(秒):
1、先解释下undo_retention
设置undo_retention,保证commit 后的数据在undo segment中保留多长时间。但是并不能保证commit后的undo 信息在undo_retention的时间内一定不被覆写 ,当undo segment不够时,还是会覆盖已commit的undo 信息。
设0,表示自动。
2、如果需要保证在undo_retention时间内undo 信息一定不被覆写的话,可以对undo segment设置RETENTION GUARANTEE。但是这个参数受到 undo_retention和undo size的限制。如果undo size 太小,undo_retention设置太久,设置retention guarantee 时就会报错:
ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS2'
3、设置该参数
alter tablespace undotbs2 retention guarantee;
撤销该参数
alter tablespace undotbs2 retention noguarantee; 三类数据:
Uncommitted undo information 永不覆盖
Committed undo information 可以覆盖
Expired undo information 一旦活动会话要求,可以覆盖
使用:
1.
设定segment名称,跟踪事务。
SQL> set transaction name 'Update clerk salaries';
Transaction set.
SQL> update hr.employees set salary = salary * 1.25
2 where job_id like '%CLERK';
44 rows updated.
SQL> select xid, status, start_time, xidusn seg_num,
2 r.name seg_name
3 from v$transaction t join v$rollname r
4 on t.xidusn = r.usn
5 where t.name = 'Update clerk salaries';
XID STATUS START_TIME SEG_NUM SEG_NAME
-------- --------- ----------------- ------- -------------
02002F00 ACTIVE 08/01/04 16:20:10 2 _SYSSMU2$
9A140000
1 row selected. 2.
读一致
用法:set transaction read only; 发布之后的所有SELECT语句,其结果均为同一个时间点一致,提交之前不能执行DML。只允许以下操作:
SELECT statements without the FOR UPDATE clause
LOCK TABLE
SET ROLE
ALTER SESSION
ALTER SYSTEM
备注:EXP导出数据时,如果CONSISTEN参数设为TRUE,则EXP导出时,会先发布SET TRANSACTION READ ONLY,保证所有导出数据在同一 时间点上的一致性。当然,如果事务频繁,导出的数据量又大,很可能会遭遇ORA-01555错误。由于SET TRANSACTION READ ONLY对SYS用户无效,用 SYS用户导出时CONSISTENT设为TRUE,应该没有效果。
恢复
媒介失败时,可以使用archived 和 online redo log files(和其它表空间一样)恢复,但是必须在MOUNT状态下进行。 回滚
过程:使用undo空间中所有的undo信息,释放事务涉及的行的锁,结束事务。
干预
原因:1.undo表空间不足够给活动的事务 2. 长时间查询为了读一致所需的undo空间不够
提示:
ORA-01650: Unable to extend rollback segment; undo表空间不够
ORA-01555: Snapshot too old 长时间查询undo空间不足
retention [ri'tenʃən] 1.保留;保持 2.记忆力 vying ['vaiiŋ] 1.竞争的;竞赛的
spike [spaik] 阻止;制止;使(计划等)受挫,墙头钉;尖铁,钉鞋
flashback
适用版本:9i以上
作用: 允许用户看到过去某个时间点的实际数据 ,归纳为:1.事务会滚 2.DML/Query一致读 3.数据库恢复 4.flashback
先决条件: 指定时间点的undo数据还存在
重做 UNDO 原理:
undo segment=rollback segment , 由extents 组成,必须存放在专门的表空间:undo tablespace,一个数据库可以有多个undo表空间,同一时间只有一个被激活 (active),undo segment自动收缩和增长,循环的缓冲区。extents可以回绕到segment的最开始的地方,如果没有活动的事务在使用第一个缓冲的话。
在一个事务执行的开始,系统赋予一个undo tablespace,的undo segment,事务过程对表的修改会记录在这里。
undo segment number编号,usn=0,sys,system用户保留使用,
所有的segment归属于sys,每个segment至少有2个extents,
数据字典
V$ROLLNAME---- 当前 active undo segments
DBA_ROLLBACK_SEGS---- system,undo tablespace 里面active (online) 和inactive (offline) undo segments
V$TRANSACTION---- 事务和undo segments 的关系。
V$UNDOSTAT ---- 计算undo表空间的大小
参数:
UNDO_MANAGEMENT 方式MANUAL/ AUTO. alter system set undo_management = manual scope=spfile
UNDO_TABLESPACE 指定名称,同一个时间只有一个,除非指定了新的,旧的空间上面还有活动的事务,将并行直至事务结束。如果undo表空间在创建数 据库的时候未指定,系统默认创建一个命名为SYS_UNDOTBS的空间。alter system set undo_tablespace=undo_batch; AUTOEXTEND 如果undo tablespace’s datafiles没有指定的话,太多任务竞争较小的空间,可能导致失败。如果你能够确定足够的大小,可以关闭,防止有 些用户忽略提交造成巨大空间消耗。 UNDO_RETENTION(秒):
1、先解释下undo_retention
设置undo_retention,保证commit 后的数据在undo segment中保留多长时间。但是并不能保证commit后的undo 信息在undo_retention的时间内一定不被覆写 ,当undo segment不够时,还是会覆盖已commit的undo 信息。
设0,表示自动。
2、如果需要保证在undo_retention时间内undo 信息一定不被覆写的话,可以对undo segment设置RETENTION GUARANTEE。但是这个参数受到 undo_retention和undo size的限制。如果undo size 太小,undo_retention设置太久,设置retention guarantee 时就会报错:
ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS2'
3、设置该参数
alter tablespace undotbs2 retention guarantee;
撤销该参数
alter tablespace undotbs2 retention noguarantee; 三类数据:
Uncommitted undo information 永不覆盖
Committed undo information 可以覆盖
Expired undo information 一旦活动会话要求,可以覆盖
使用:
1.
设定segment名称,跟踪事务。
SQL> set transaction name 'Update clerk salaries';
Transaction set.
SQL> update hr.employees set salary = salary * 1.25
2 where job_id like '%CLERK';
44 rows updated.
SQL> select xid, status, start_time, xidusn seg_num,
2 r.name seg_name
3 from v$transaction t join v$rollname r
4 on t.xidusn = r.usn
5 where t.name = 'Update clerk salaries';
XID STATUS START_TIME SEG_NUM SEG_NAME
-------- --------- ----------------- ------- -------------
02002F00 ACTIVE 08/01/04 16:20:10 2 _SYSSMU2$
9A140000
1 row selected. 2.
读一致
用法:set transaction read only; 发布之后的所有SELECT语句,其结果均为同一个时间点一致,提交之前不能执行DML。只允许以下操作:
SELECT statements without the FOR UPDATE clause
LOCK TABLE
SET ROLE
ALTER SESSION
ALTER SYSTEM
备注:EXP导出数据时,如果CONSISTEN参数设为TRUE,则EXP导出时,会先发布SET TRANSACTION READ ONLY,保证所有导出数据在同一 时间点上的一致性。当然,如果事务频繁,导出的数据量又大,很可能会遭遇ORA-01555错误。由于SET TRANSACTION READ ONLY对SYS用户无效,用 SYS用户导出时CONSISTENT设为TRUE,应该没有效果。
恢复
媒介失败时,可以使用archived 和 online redo log files(和其它表空间一样)恢复,但是必须在MOUNT状态下进行。 回滚
过程:使用undo空间中所有的undo信息,释放事务涉及的行的锁,结束事务。
干预
原因:1.undo表空间不足够给活动的事务 2. 长时间查询为了读一致所需的undo空间不够
提示:
ORA-01650: Unable to extend rollback segment; undo表空间不够
ORA-01555: Snapshot too old 长时间查询undo空间不足
相关阅读 更多 +