oracle 事务
事务开始
事务开始于会话的第一条DML语句,一般采用的隐性方式开始。通过视图 v$transaction 来查看。
SQL> select xid from v$transaction
事务结束的几种情况:
1.当你执行DDL语句的时候,按照提交:commit
DDL语句执行:1.commit 2.执行ddl语句 3.commit
事务开始的标识,第一条DML语句(隐式的开启事务),DDL(隐式提交事务)
2.当你执行TCL语句的时候,按照提交:commit
3.当你主动退出命令行的时候,按照提交:commit
4.当你非正常退出的时候,按照回滚:rollback
5.服务器出现故障、数据库崩溃,按照回滚:rollback
6.当发出shutdown immediate;关库,按照回滚:rollback
事务的保存点savepoint
因为有事务才会有锁。
oracle里面锁的分类:DML锁 DDL锁 SYSTEM锁
TX锁(表锁)
TM锁(行锁)
成对出现,行锁每行都可以发生。。
在DML操作的时候,Oracle自动完成加锁。
也可以手工进行加锁
FOR UPDATE 选项
Select * from abc for update; -- 该表及所有行全部上锁
有时候采用手工加锁,或自动加锁,会导致事务等待。
nowait选项--不等待,发现有锁,直接报错
这时候可以进行手工试探:select * from abc for update nowait;--手工试探
wait选项 --等待多少秒,如果之前事务在10秒内被释放,直接加锁,否则报错
死锁:两个会话 四行数据交叉形成 。
双方同时争用对方的资源,就会产生死锁
SQL> select * from abc for update wait 10
ERROR at line 1:
ORA-00060: deadlock detected while waiting for resource。。
查询下
SQL> select sid,SERIAL#,blocking_session,username,event from v$session where
blocking_session_status='VALID';
杀会话进程
SQL> alter system kill session '146,455';
System altered.

浙公网安备 33010602011771号