1. 首页
  2. IT资讯

测试APPEND INSERT是否产生UNDO信息的过程

D:>sqlplus test/test
SQL*Plus: Release 11.1.0.6.0 – Production on 星期三 06月 29 19:46:41 2016
Copyright (c) 1982, 2007, Oracle.  All rights reserved.

连接到:
Oracle Database 10g Express Edition Release 10.2.0.1.0 – Production
SQL>
SQL> commit;  –提交
提交完成。
SQL> alter system flush buffer_cache;  –清缓冲
系统已更改。
SQL> get undo5
  1  select n.name,v.value from v$sesstat v,v$statname n
  2  where v.statistic#=n.statistic#
  3  and n.name in('undo change vector size','redo size','DBWR undo block writes','redo blocks written')
  4* and v.sid=(select distinct sid from v$mystat) 
  –获取当前会话的('undo change vector size','redo size','DBWR undo block writes','redoblocks written'
SQL> colu name for a30
SQL> /
NAME                                VALUE
—————————— ———-
DBWR undo block writes                  0
redo size                               0
redo blocks written                     0
undo change vector size                 0
SQL> get undo_redo
  1  select * from v$sysstat where name in('DBWR undo block writes',
  2*                                       'redo blocks written')
–获取当前系统的'DBWR undo block writes','redoblocks written'
SQL> /
STATISTIC# NAME                                CLASS      VALUE    STAT_ID
———- —————————— ———- ———- ———-
        75 DBWR undo block writes                  8        214  111270822
       139 redo blocks written                     2       3183 2391431605
SQL>  insert /*+ append*/ into &tab_new select * from &tab_old;   –执行direct path INSERT
输入 tab_new 的值:  bb
输入 tab_old 的值:  aa
原值    1:  insert /*+ append*/ into &tab_new select * from &tab_old
新值    1:  insert /*+ append*/ into bb select * from aa
已创建4行。
SQL>  select XIDUSN,xidslot,xidsqn,ubafil,ubablk,ubasqn,ubarec,USED_UBLK
  2     from v$transaction;  –获取当前事务回滚段
    XIDUSN    XIDSLOT     XIDSQN     UBAFIL     UBABLK     UBASQN     UBAREC
———- ———- ———- ———- ———- ———- ———-
 USED_UBLK
———-
         7          4        196          0          0          0          0
         1

SQL>  select name from v$rollname where usn=&usnn;   –获取当前事务回滚段名
输入 usnn 的值:  7
原值    1:  select name from v$rollname where usn=&usnn
新值    1:  select name from v$rollname where usn=7
NAME
——————————
_SYSSMU7$
SQL>  alter system dump undo header "&un";    –导出当前事务提交前回滚段头信息
输入 un 的值:  _SYSSMU7$
原值    1:  alter system dump undo header "&un"
新值    1:  alter system dump undo header "_SYSSMU7$"
系统已更改。
SQL> COMMIT;  –提交事务
提交完成。
SQL> ALTER SYSTEM FLUSH BUFFER_CACHE;  –刷新缓冲
系统已更改。
SQL> ALTER SYSTEM FLUSH BUFFER_CACHE;  –刷新缓冲
系统已更改。
SQL> GET UNDO5
  1  select n.name,v.value from v$sesstat v,v$statname n
  2  where v.statistic#=n.statistic#
  3  and n.name in('undo change vector size','redo size','DBWR undo block writes','redo blocks written')
  4* and v.sid=(select distinct sid from v$mystat)
–获取事务执行并提交后的'undo change vector size','redo size','DBWR undo block writes','redo blocks written'信息
SQL> /
NAME                                VALUE
—————————— ———-
DBWR undo block writes                  0
redo size                            4264
redo blocks written                     0
undo change vector size              1064
–注意:事务执行前undo change vector size:0,执行direct path INSERT后,其值:1064,前后差值:1064
SQL> GET UNDO_REDO
  1  select * from v$sysstat where name in('DBWR undo block writes',
  2*                                       'redo blocks written')
–获取当前系统DBWR undo block writes','redo blocks written'信息
SQL> /
STATISTIC# NAME                                CLASS      VALUE    STAT_ID
———- —————————— ———- ———- ———-
        75 DBWR undo block writes                  8        216  111270822
       139 redo blocks written                     2       3195 2391431605
–注意:事务执行前DBWR undo block writes:214 ,执行direct path INSERT后,其值:216,前后差值:2
SQL>  alter system dump undo header "&un";    –事务提交后再次导出事务使用回滚段头信息
输入 un 的值:  _SYSSMU7$
原值    1:  alter system dump undo header "&un"
新值    1:  alter system dump undo header "_SYSSMU7$"
系统已更改。
SQL> ALTER SYSTEM DUMP DATAFILE 2 BLOCK MIN 5391 BLOCK MAX 5393; 
–由导出事务提交后回滚段头信息确定,事务提交后xid对应的回滚段数据文件及块号:0x00801510 –>对应文件号(二进制前十位):2 块号(二进制后22位):5392
系统已更改。
SQL> select object_name from dba_objects where object_id=13697;  –由导出回滚段块中,相应事务XID对应的undo信息中,objn=13697,获取此UNDO信息对应的数据库对象为表BB,这正是我们在其上执行direct path INSERT操作的表;
OBJECT_NAME
——————————————————————————–
BB

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8484829/viewspace-2122424/,如需转载,请注明出处,否则将追究法律责任。

主题测试文章,只做测试使用。发布者:深沉的少年,转转请注明出处:http://www.cxybcw.com/184856.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code