文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>事务和锁(二)

事务和锁(二)

时间:2010-09-06  来源:ztz8652

命名事务

可以使用set transaction name 语句为事务指定名称。使用命名事务不仅可以增加程序的可读性,而且可以根据名称对长时间运行的事务进行检测,也可以在日志中根据名称了解事务的工作情况。

下面是一个使用命名事务的实例:

declare

   idcard varchar2(50):=’110123aadx9’;

begin

  set transaction name ‘inserttransaction’;

--插入员工记录

insert into hrman.employees values(100,’小李’,’男’,’职员’,3600,idcard,5);

end;

/

运行上面的脚本后,执行下面的select语句,可以查看命名事务的基本信息:

select addr,status,start_time,name from v$transacton where name=’inserttransaction’;

 

嵌套事务和自治事务

Oracle支持嵌套事务,即在一个事务还没有结束时又开始了另一个事务。嵌套事务的内层事务需要定义为自治事务。所谓自治事务即指可以独立对本事务进行提交,但并不影响外层事务,换言之,在自治事务中执行提交操作后,外层事务没有被提交。同样,在外层事务中执行回滚操作也不影响到内层的自治事务。

使用下面的语句可以声明当前事务为自治事务:

pragma autonomous_tansaction;

 

查看死锁信息

使用v$locked_object试图可以查看当前存在的死锁信息,它的字段属性如表:

字段名                                         数据类型                说明

XIDUSN                                     NUMBER             回滚段号

XIDSLOT                                    NUMBER             槽号

XIDSQN                                    NUMBER            序列号

OBJECT_ID                                NUMBER             被锁定的数据库对象的编号

SESSION_ID                               NUMBER             持有锁的会话编号

ORACLE_USERNAME                   VARCHAR2(30)     oracle用户名

OS_USER_NAME                        VARCHAR2(30)      操作系统用户名

PROCESS                                  VARCHAR2(12)      操作系统进程编号

LOCKED_MODE                          NUMBER               锁模式

    可以将v$locked_object视图与v$session视图、v$sqltext视图执行连接查询,查看锁对象的基本信息、会话信息和SQL语句信息等,代码如下:

          select t2.username,t2.sid,t2.serial#,t2.logon_time,t3.sql_text

                from v$locked_object t1,v$session t2,v$sqltext t3

                     where t1.session_id=t2.sid and t2.sql_address=t3.address

                     order by t2.logon_time;

查看被阻塞的会话信息

使用dba_waiters视图可以查看当前被阻塞的会话信息,它的字段属性如表:

字段名                         数据类型                         说明

waiting_session            number                      等待资源的会话

holding_session           number                      持有资源的会话

lock_type                    varchar2(26)               锁类型

mode_held                  varchar2(40)               持有资源的模式

mode_requested          varchar2(40)               请求资源的模式

lock_id1                      varchar2(30)                锁1的ID

os_user_name             varchar2(30)                操作系统用户名

process                       varchar2(12)                操作系统进程编号

locked_mode                number                       锁模式

 

查看死锁中占用资源的会话信息

使用DBA_BLOCKERS视图可以查看死锁中占用资源的会话信息,这些会话并不等待被锁定的资源,但却持有另一个会话等待的数据库对象上的锁。

视图DBA_BLOCKERES包含一个NUMBER类型的字段HOLDING_SESSION,表示持有锁的会话ID。可以通过v$session视图查看该会话的具体信息。

 

通过结束会话方式接触死锁

如果希望立即解除当前的死锁,释放被锁定的数据库对象,可以使用alter system kill session 语句结束死锁会话,语法如下:

     alter system kill session ‘sid,serial#’;

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载