append HINT 的对事务的影响

使用append hint 可以减少redo信息的产生,可以较快的插入数据,数据迁移。
但是使用了append 后,会阻塞其他session对TABLE 的DML操作。
在append操作完毕之后要尽快提交或者rollback。
下面的测试例子:
准备数据:
create table test as select * from dba_objects;
1) 在session-A 中,执行
insert /*+ append */ into  test select * from dba_objects;
2) 再开始一个session,命名为session-B ,执行
SQL> update test set object_id = 300;
session在等待。。
3) 这时回到session-A 的界面,查看等待内容。
SQL> select * from v$lock
  2  where type='TM';

ADDR             KADDR                   SID TYPE          ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
---------------- ---------------- ---------- ------ ---------- ---------- ---------- ---------- ---------- ----------
070000004ED1ECA8 070000004ED1ECD0         20 TM         369448          0          6          0        359          1
070000004ED1EBD8 070000004ED1EC00         33 TM         369448          0          0          3        333          0

SQL> select * from dba_waiters;

WAITING_SESSION HOLDING_SESSION LOCK_TYPE                                                                      MODE_HELD                                                                                                                MODE_REQUESTED                                                                                                             LOCK_ID1   LOCK_ID2
--------------- --------------- ------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------ ---------- ----------
             33              20 DML                                                                            Exclusive                                                                                                                Row-X (SX)                                                                                                                   369448          0

可以看到session 20 是执行append操作的session,拥有的Exclusive Lock, 而session 33 在申请 Row-X ,而Lock级别是不兼容的。故导致session 33 等待。
看到append操作是要获得排他锁,导致对该TABLE 的DML操作无法正常进行。
解决办法是执行append操作的session提交或者回顾session。

提示: DBA_WAITERS的视图,需要运行 $ORACLE_HOME/rdbms/admin/catblock.sql 脚本得到。

当然了,有了DBA_WAITERS的视图,可以通过utllockt.sql 获得lock的层级关系图。

 

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

转载于:http://blog.itpub.net/40239/viewspace-573312/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值