DBA必学:Oracle库缓存
2008-01-16 12:41:06 来源:WEB开发网如何解决库缓存给您制造的麻烦
库缓存中偶尔会为我们带来的麻烦通常来自于各种锁以及随之而来的由锁机制引发的以下等待事件:
库缓存加载锁:用户端碰到这种锁等待事件是因为有其他用户端对该对象使用了该锁,因此后来的用户端必须等待先前的用户端将锁释放出来为止。
库缓存锁:此类锁使某用户端能够享有对某对象的单独访问权,并阻止其他用户端的访问,例如在两个用户端想要同时编译某段相同的代码时。
库缓存pin:出现库缓存pin等待事件意味着有其他会话以不兼容模式锁定了该PIN。
不管库缓存中出现了哪种类型的等待事件,想要确定哪些会话在等待以及在等待的是什么资源,可以通过V$SESSION_WAIT视图查询进行诊断。例如,如果想要找出那些在等待“库缓存pin”的会话,可以执行以下的查询语句。对于一个库缓存pin来说,该查询的关键部分是P1RAW字段,该字段给出了阻塞特定会话的对象的句柄地址。对于其他类型的等待事件,您可以参考Oracle数据库的说明文档,找出对应于等待中的某对象或资源的P值。
以下是引用片段:
SELECTsid,event,p1raw
FROMsys.v_$session_wait
WHEREevent='librarycachepin'
ANDstate='WAITING';
然后我们可以执行以下的查询来找出正在等待哪些库缓存对象:
以下是引用片段:
SELECTkglnaownASowner,kglnaobjasObject
FROMsys.x$kglob
WHEREkglhdadr='&P1RAW';
要找出那些正在等待某个对象的用户,可以使用DBA_WAITERS视图并执行以下查询。这是一个非常简单的查询,却可以很巧妙的找出阻塞的会话,也就是查找与上面从V$SESSION_WAIT查询中找出的会话相匹配的等待会话,然后看看返回的holding_session结果。我们还可以看到在被阻塞的会话之后还有多少其他会话在等待中。如果有很多等待会话,那你就需要迅速采取行动了。
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
赞助商链接