Posted by dbtan on 十二月 29th, 2009 使用ERRORSTATCK进行错误跟踪:
ERRORSTACK是Oracle提供的接口,用于诊断Oracle的错误信息。诊断事件可以在Session级设置,也可以在系统级设置,通常如果要诊断全局错误,最好在系统级设置。设置了ERRORSTACK事件之后,Oracle会将出错时的信息记入跟踪文件中,然后再出现错误时就可以通过跟踪文件进行错误诊断和排查了。
继续上篇日志的测试,尝试通过ERRORSTACK事件来跟踪ORA-01555错误:
sys@TQGZS> alter system set events '1555 trace name ERRORSTACK level 4';
System altered.
scott@TQGZS> sel
... ...
<阅读全文>
Posted by dbtan on 十二月 29th, 2009 Oracle 9i闪回查询的新特性:
从Oracle 9i开始,Oracle开始提供闪回查询特性(flashback query),允许将回滚段中的数据进行闪回。通过这个例子来看一下这个从Oracle 9i开始提供的新特性。
先查询一下当前数据库的SCN:
sys@TQGZS> select dbms_flashback.get_system_change_number scn from dual;
SCN
----------
6369465
在SCOTT用户下更新雇员号为7698,7782,7788的工资为4000:
scott@TQGZS> update emp set sal=4000 where empno in (7698,7782,7788);
... ...
<阅读全文>
Posted by dbtan on 十二月 28th, 2009 回滚机制的深入研究:
如果大家有兴趣深入了解一下回滚段的机制,那么请跟随我将前面的例子进一步深化。
1. 从DML更新事务开始:
重新来看这个更新语句:
sys@TQGZS11G> conn scott/tiger
Connected.
scott@TQGZS11G> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- --------------- --------------- ---------- --------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10
14 rows selected.
scott@TQGZS11G> update emp set sal=4000 where empno=7788;
1 row updated.
先不提交这个事务,在另外窗口新口Session,使用SYS用户查询相关信息,进行进一步分析研究。
2.获得事务信息:
从事务表中可以获得关于这个事务的信息,该事务位于6号回滚段(XIDUSN),在6号回滚段上,该事务位于第0号事务槽(XIDSLOT):
sys@TQGZS11G> select xidusn,xidslot,xidsqn,ubablk,ubafil,ubarec from v$transaction;
XIDUSN XIDSLOT XIDSQN UBABLK UBAFIL UBAREC
---------- ---------- ---------- ---------- ---------- ----------
6 0 898 20650 3 23
从V$ROLLSTAT视图中也可以获得事务信息,XACTS字段代表的是活动事务的数量,同样看到该事务位于6号回滚段:
sys@TQGZS11G> select usn,writes,rssize,xacts,hwmsize,shrinks,wraps from v$rollstat;
USN WRITES RSSIZE XACTS HWMSIZE SHRINKS WRAPS
---------- ---------- ---------- ---------- ---------- ---------- ----------
0 5408 385024 0 385024 0 0
1 35358 52617216 0 52617216 0 0
2 59510 2285568 0 2285568 0 1
3 26232 61530112 0 61530112 0 0
4 46336 2220032 0 2220032 0 0
5 27252 38723584 0 38723584 0 0
6 23784 31580160 1 31580160 0 0
7 26116 3268608 0 3268608 0 0
8 29098 40689664 0 40689664 0 0
9 27214 1236992 0 1236992 0 0
10 31534 2285568 0 2285568 0 0
11 rows selected.
阅读全文 »
Posted by dbtan on 十二月 28th, 2009 Oracle 11g UNDO表空间备份增强:
前面提到,由于UNDO表空间在恢复时不可缺少,所以在进行备份时必须备份该表空间,但是一旦事务提交,修改被确认,则该事务的前镜像被标记为INACTIVE,其中的信息在恢复时也就不会被用到,如果在备份时能够跳过这些数据,则备份UNDO表空间的效率就可以大大提高。
在Oracle Database 11g中,Oracle引入了一个新的特性RMAN UNDO备份优化。在RMAN备份UNDO表空间时,提交事务的UNDO信息将不备份,这个特性随RMAN强制启用。在测试中,一个395MB的UNDO表空间备份文件的大小仅为10.06M:
sys@TQGZS11G> select file#,name,ceil(bytes/1024/1024) MB,status from v$datafile;
... ...
<阅读全文>
Posted by dbtan on 十二月 28th, 2009 Oracle 10g In Memory Undo新特性:
通过以前的介绍,可知道Undo的管理方式和常规的数据管理方式是相同的,当进行数据修改时,会在Buffer中创建前镜像,同时会记录相应的Redo,然后这些Undo数据同样会写出到UNDO SEGMENT上,当进行一致性读或回滚时,可能会产生大量的consistent gets和physical reads。注意到这里,Undo会产生Redo信息,又会写UNDO SEGMENT,进而又可能产生大量读取I/O,这些都是资源密集型操作。如果能够缩减Undo在这些环节的Redo与Undo写出,那么显然就可以极大地提升数据库性能,减少资源的消耗和使用。
从Oracle 10g开始,Oracle在数据库中引入了In Memory Undo(可以被缩写为IMU)的新技术,使用这一技术,数据库会
... ...
<阅读全文>
Recent Comments