oragle gran授权被锁住的情况分析
来源:互联网 发布:js 怎么取数组前10条 编辑:程序博客网 时间:2024/06/04 19:41
一、问题发现
grant select on table1 to user1;
grant select on table2 to user1;
第一个语句能够顺利执行,第二个语句执行不过去,显示一直在执行中,PLSQL显示Executing,只能强行终止。
为什么table1能成功授权,table2不能成功授权,是什么原因引起的呢?
二、问题分析
感觉table2被锁住了。
但是通过以下语句
select * from v$locked_object t1,user_objects t2
where t1.object_id=t2.object_id
未看到有table2被锁住的情况。
查询v$session_wait表看看情况
select * from v$session_wait where sid=203 注203为授权窗口对应的会话。
看出有library cache lock事件。
判断是不是有存储过程或者function调用此table2。
用select * from v$session_wait where event like 'library cache%'查下,里有多少pin和lock
就这一条数据。
用这个查下:
SELECT s.sid,s.SERIAL#, p.kgllkmod "Mode", p.kgllkreq "Req", SPID "OS Process"
FROM v$session_wait w, DBA_KGLLOCK p, v$session s, v$process o
WHERE p.kgllkuse = s.saddr
AND p.kgllkhdl = w.p1raw
and w.event like '%library cache%'
and s.paddr = o.addr
order by p.kgllkmod desc;
FROM v$session_wait w, DBA_KGLLOCK p, v$session s, v$process o
WHERE p.kgllkuse = s.saddr
AND p.kgllkhdl = w.p1raw
and w.event like '%library cache%'
and s.paddr = o.addr
order by p.kgllkmod desc;
发现有个26的会话
查下26会话,正在执行什么操作,是否涉及table2
语句:
select sid,
v$session.username 用户名,
last_call_et 持续时间,
status 状态,
LOCKWAIT 等待锁,
machine 用户电脑名,
logon_time 开始登入时间,
sql_text
from v$session, v$process, v$sqlarea
where paddr = addr
and sql_hash_value = hash_value
and status = 'ACTIVE'
and v$session.username is not null
order by last_call_et desc;
v$session.username 用户名,
last_call_et 持续时间,
status 状态,
LOCKWAIT 等待锁,
machine 用户电脑名,
logon_time 开始登入时间,
sql_text
from v$session, v$process, v$sqlarea
where paddr = addr
and sql_hash_value = hash_value
and status = 'ACTIVE'
and v$session.username is not null
order by last_call_et desc;
未发现26会话对应的sql_text。
先把26kill掉,再试试授权。
kill 报ora 00031错误。
接着到OS里用kill杀,或orakill杀
到OS上KILL后,现在可以授权了。
问题解决。
三、问题总结
1.为什么v$locked_object什么都不显示
v$locked_object显示的是应用级别的重量级锁
像library cache lock/pin是加在library cache中的轻量级锁,肯定你在v$objected_lock里找不到
v$locked_object列出的锁,是针对某个具体对象的,而library cache lock/pin是应该是针对内存指针或区域的锁
library cache lock/pin,已经有点类似于latch了
这两个概念有点不太好理解,大家如果要弄清楚,估计还要花更多的精力查。
可以看看owi
2.DBA_KGLLOCK lists all the locks and pins held on KGL objects (objects in the Kernel Generic Library cache).
是用library cache pin,就必定有library cache lock,但有library cache lock,不一定有library cache pin
3.请看博文《library cache pin和library cache lock(转) 》
- oragle gran授权被锁住的情况分析
- 解除oracle记录被锁住情况
- 当使用sql/plus遇到表被锁住情况,处理
- Oracle数据查看被锁住的用户
- 查询SQLSERVER 被锁住的表
- svn被锁住的解决方式
- RAC查询数据库被锁住的行
- 数据库记录被锁住的处理方法
- oracle杀掉被锁住的进程
- 确定进程被锁住的其他资源
- 授权登录情况下mongodb的恢复
- 分析MySQL的授权许可
- 查表被谁锁住的脚本
- Synchronized锁住的对象
- “锁住对象”的synchronized
- synchronized锁住的是什么
- USB被锁住破解
- 表被锁住
- Using the SDK Headers
- 计算机启动要选择F1或者F2,解决办法
- 为git设置代理
- unix体系结构
- redis sort操作2
- oragle gran授权被锁住的情况分析
- DataTable泛型 互转
- 第8章 JRTPLIB--jvoip的翻译
- MySql中limit子查询的解决办法
- 纵横三国外挂手记(1) 分析篇
- Android RIL 调试分析全记录
- cms系统核心发布提取过程的调整优化
- linux汇编语言简介
- 发现mysql 的一桩怪事