update一条语句的来龙去脉(一)

2014-11-24 14:31:50 · 作者: · 浏览: 0
update一条语句的来龙去脉
在翻电脑资料的时候看到了如下一个图,随即兴致盎然的在一次研究了一下内部过程。
容易混淆的知识点:
uba=0x00800055.02de.3f
0x00800055代表数据的前镜像
seq:代表是顺序号
3f,是undo记录的开始地址(irb信息)
xid=0x0006.018.000036ce
该事务指向6号回滚段,slot好为0x17,wrap#为36ce
xid=undo.segment.number+transaction.table.slot.number+wrap;
dba:包含这个事务的前镜像的数据块地址:转换为二进制,然后转换为前22为块后10数据文件号
bdba:0x00405c5a 记录了更改数据块的地址。
session 1:
首先切换一下redo,保证新产生的redo条目存在于干净的redo file中:
SQL> alter system switch logfile;
System altered.
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
1 1 364 52428800 512 1 NO CURRENT 5294094 24-OCT-13 2.8147E+14
2 1 362 52428800 512 1 YES INACTIVE 5293624 24-OCT-13 5294000 24-OCT-13
3 1 363 52428800 512 1 YES ACTIVE 5294000 24-OCT-13 5294094 24-OCT-13
SQL> conn rhys/amy
Connected.
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7500 AMY CLERK 7902 17-DEC-80 800 20
7499 amy 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
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
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.
更新一条数据:
SQL> update emp set ename='Rhys' where empno=7500;
1 row updated.
查看当前用户信息:
SQL> select sid,serial#,username from v$session where username='RHYS';
SID SERIAL# USERNAME
---------- ---------- ------------------------------
1 7 RHYS
SQL>
session 2:
在另一个会话中转储redo file内容:
SQL> set linesize 200
SQL> col name for a60
SQL> alter system dump logfile '/opt/app/oracle/oradata/RHYS/redo01.log';
SQL> col value for a60
SQL> r
1* select * from v$diag_info where name='Default Trace File'
INST_ID NAME VALUE
---------- ------------------------------------------------------------ ------------------------------------------------------------
1 Default Trace File /opt/app/oracle/diag/rdbms/rhys/RHYS/trace/RHY