【oracle11g,13】表空间管理2:undo表空间管理(调优),闪回原理(二)

2014-11-24 09:08:40 · 作者: · 浏览: 4
128 64 ONLINE _SYSSMU10_148416192$ PUBLIC UNDOTBS 3 128 64 ONLINE
11 rows selected.
例2:查询undo段的状态,xacts为1时表示活跃。 SQL> select a.* ,b.extents,b.writes,b.xacts,b.waits from v$rollname a,v$rollstat b where a.usn = b.usn;
USN NAME EXTENTS WRITES XACTS WAITS ---------- ------------------------------ ---------- ---------- ---------- ---------- 0 SYSTEM 6 5312 0 0 1 _SYSSMU1_548815$ 38 124956 0 0 2 _SYSSMU2_4162303249$ 39 118264 0 0 3 _SYSSMU3_1137786205$ 37 274520 0 0 4 _SYSSMU4_1264943161$ 5 366954 0 0 5 _SYSSMU5_1041434215$ 43 247250 0 0 6 _SYSSMU6_2715111370$ 5 657760 0 0 7 _SYSSMU7_1539595696$ 38 276818 0 0 8 _SYSSMU8_1799925899$ 43 394868 0 0 9 _SYSSMU9_3367637386$ 37 265512 0 0 10 _SYSSMU10_148416192$ 33 230560 0 0
11 rows selected.
SQL> delete from scott.emp;
14 rows deleted.

SQL> select a.* ,b.extents,b.writes,b.xacts,b.waits from v$rollname a,v$rollstat b where a.usn = b.usn;
USN NAME EXTENTS WRITES XACTS WAITS ---------- ------------------------------ ---------- ---------- ---------- ---------- 0 SYSTEM 6 5312 0 0 1 _SYSSMU1_548815$ 38 124956 0 0 2 _SYSSMU2_4162303249$ 39 120798 1 0 3 _SYSSMU3_1137786205$ 37 274520 0 0 4 _SYSSMU4_1264943161$ 5 366954 0 0 5 _SYSSMU5_1041434215$ 43 247250 0 0 6 _SYSSMU6_2715111370$ 5 657760 0 0 7 _SYSSMU7_1539595696$ 38 276818 0 0 8 _SYSSMU8_1799925899$ 43 394868 0 0 9 _SYSSMU9_3367637386$ 37 265650 0 0 10 _SYSSMU10_148416192$ 33 230560 0 0
11 rows selected.
例3:查询当前活跃的undo段 col username for a5; col name for a10; col status for a6; select a.username,a.sid,a.serial#,b.xidusn,b.xidslot,b.status,c.usn,c.name,d.extents,d.xacts from v$session a,v$transaction b,v$rollname c,v$rollstat d where a.saddr=b.ses_addr and b.xidusn=c.usn and c.usn=d.usn; USERN SID SERIAL# XIDUSN XIDSLOT STATUS USN NAME EXTENTS XACTS ----- ---------- ---------- ---------- ---------- ------ ---------- --------------------- ---------- ---------- SYS 1 5 2 24 ACTIVE 2 _SYSSMU2_4162303249$ 39 1

②. v$session 查看用户建立的session v$transaction 当前事务 v$rollname 回滚段的名称 v$rollstat 回滚段的状态
四.undo和redo区别:
undo redo 内容: dml造成的数据的变化 记录所有数据的改变 目的: 为了撤销回滚事务 为了重现并恢复数据 方向 回滚 前滚 位置 undo段 redo日志 实质 关系事务是否完成 记录所有数据变化
五. undo_retention参数和ora-01555 错误
1.ora-01555 错误 快照过旧snapshot too old。 发生错误的原因: 在进行非常复杂的查询时,如果数据块被修改了,查询时要构建一致性读,当这个查询语句执行到一半的时候事务被提交了,而此时数据库特别繁忙(由于undo空间过小,事务量过大,过于频繁的提交inactive可以被覆盖),导致undo段中的修改前的镜像数据已经被覆盖,不能构建一致性读块,会报ora-01555错误。
解决ora-01555错误: 扩大undo表空间,设置undo_retention足够长。
2.undo_retention参数:设置undo数据的保护时间。 设置了undo_retention参数为90分钟,数据块事务提交之后,仍能保存至少90分钟。
如果undo表空间没空间了,优先覆盖undo段中expire的数据块。但如果空间还不足然后即使没到undo_retention设置的时间也会被覆盖。
#如果想在undo_retention设置的时间内不被覆盖,执行: SQL> alter tablespace undotbs retention guarantee; 但是前提是undo表空间足够大,才能设置retention guarantee。否则是dml操作会失败。
注意: 在生成库上如果有足够的空间,可以将undo空间设的足够大, undo_retention参数的值尽量长。 在undo扩展时,会产生等待事件。 sys@BJDB>select tablespace_name, contents, retention from dba_tablespaces;
TABLESPACE_NAME CONTENTS RETENTION ------------------------------ --------- ----------- SYSTEM PERMANENT NOT APPLY SYSAUX PERMANENT NOT APPLY TEMPTS1 TEMPORARY NOT APPLY USERS PERMANENT NOT APPLY SMALL_UNDO UNDO NOGUARANTEE NEWTS PERMANENT NOT APPLY

六.undo段状态:

1.undo段状态:

#查看回滚段的状态: SQL> col segment_name for a10 SQL> col status for a10; SQL> select segment_name,extent_id,file_id,blocks,bytes/1024 k,status from dba_undo_extents;
SEGMENT_NA EXTENT_ID FILE_ID BLOCKS K STATUS ---------- ---------- ---------- ---------- -----