|
TOP
|
|
锁的基本原理(三)
_utilization as "M_U",initial_allocation as "I_U" from v$resource_limit where resource_name in('transactions','dml_locks'); R_N, C_U, M_U, I_U dml_locks 1 1 1084 transactions 1 1 271 通过上面的参数可以知道dml_locks资源当前使用了1个而且最多的时候也只使用了1个,最大的资源数为1084 transactions同上,通过这个可以判断资源设置是否合理,假如M_U的值等于或者接近于I_U时说明需要增大I_U值因为: 可以获得的TX锁定的总个数由初始化参数transactions决定,而可以获得的TM锁定的个数则由初始化参数dml_locks决定 |
grant select on v_$mystat to hr;
死锁
两个session(以A和C来表示),如果A持有C正在申请的锁定,同时C也持有A正在申请的锁定时,这时发生死锁现象。死锁是典型的“双输”情况,如果任其发展,则会出现A和C这两个session正在执行的事务都无法结束的现象。因此,在
Oracle数据库中,造成死锁的那个DML语句会被撤销。死锁总是由于应用程序设计不合理引起的。
当某个session的事务引起了死锁时,Oracle会自动将阻塞该事务的其他事务中相应的DML语句撤销,而阻塞该事务的其他事务中的其他DML语句并没有撤销。
session 1
select sid from v$mystat where rownum=1;
update employees set last_name=last_name||'a'
where employee_id=100
session 2
select sid from v$mystat where rownum=1;
update employees set last_name=last_name||'b'
where employee_id=101;
session 1
update employees set last_name=last_name||'c' where employee_id=101;
session 2
update employees set last_name=last_name||'d' where employee_id=100;
对HR用户进行解锁和密码设置: SQL> select username,password,account_status from dba_users where username='HR'; USERNAME PASSWORD ------------------------------ ------------------------------ ACCOUNT_STATUS -------------------------------- HR EXPIRED & LOCKED//过期且被锁住的状态 SQL> alter user hr account unlock; User altered. SQL> select username,password,account_status from dba_users where username='HR'; USERNAME PASSWORD ------------------------------ ------------------------------ ACCOUNT_STATUS -------------------------------- HR EXPIRED//此时hr只是过期并没有被锁住 SQL> alter user hr identified hr; alter user hr identified hr * ERROR at line 1: ORA-00924: missing BY keyword SQL> alter user hr identified by hr; User altered. SQL> select username,password,account_status from dba_users where username='HR'; USERNAME PASSWORD ------------------------------ ------------------------------ ACCOUNT_STATUS -------------------------------- HR OPEN//打开状态 SQL> |
|