Oracle锁表

ORACLE中查看当前系统中锁表情况

select * from v$locked_object 

查看被锁的表

SELECT l.session_id sid,
s.serial#,
l.locked_mode 锁模式,
l.oracle_username 登录用户,
l.os_user_name 机器用户名,
s.machine 机器名,
s.terminal 终端用户名,
o.object_name 被锁对象名,
s.logon_time 登录数据库时间
FROM v$locked_object l, all_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
ORDER BY sid, s.serial#;

解除锁(杀掉进程会话)

alter system kill session 'sid,serial#'
/**报“标记要终止的会话”时进行的操作**/

--查询进程的spid
select b.spid,a.osuser,b.program 
from v$session a,v$process b where a.paddr=b.addr  and a.sid= 

--登录服务器切到根用户root
kill -9 xxxx  /*xxxx为查询到的spid*/

查询正在执行的SQL

SELECT b.sid oracleID,
b.username 用户名,
b.serial#,
paddr,
sql_text 正在执行的SQL,
b.machine 计算机名称
FROM v$process a, v$session b, v$sqlarea c
WHERE a.addr = b.paddr
AND b.sql_hash_value = c.hash_value
SELECT b.inst_id, b.sid oracleID,
b.username 登录ORACLE用户名,
b.serial#,
spid 操作系统ID,
paddr,
sql_text 正在执行的SQL,
sql_fulltext,
b.machine 计算机名,
b.event,
'alter system kill session '''||b.sid||','||b.serial#||''';' 
FROM gv$process a, gv$session b, gv$sql c
WHERE a.addr = b.paddr
AND b.sql_hash_value = c.hash_value
AND a.inst_id=1 AND b.inst_id=1 AND c.inst_id=1
AND b.status = 'ACTIVE'
### Oracle 数据库中的原因及解决方案 #### 1. **的基本原理** 在Oracle数据库中,“”是一种保护机制,用于维护事务的一致性和隔离性。当某个会话对特定的或行执行修改操作(如 `INSERT`、`UPDATE` 或 `DELETE`),Oracle会在这些资源上施加定,防止其他会话在同一时间对其进行更改[^1]。 #### 2. **的主要原因** 以下是可能导致的一些常见场景: - 当前有未提交的事物正在占用某些或记录。 - 长时间运行的大规模更新或删除语句未能及时释放。 - 用户意外终止了某项正在进行的操作,但并未清理残留的状态。 - 应用程序设计缺陷导致死现象发生。 #### 3. **检测当前存在的情况** 为了找出谁持有以及哪些对象受到影响,可以通过查询动态视图获取相关信息: ```sql SELECT s.sid, s.serial#, o.object_name, l.locked_mode FROM v$locked_object l JOIN dba_objects o ON l.object_id = o.object_id JOIN v$session s ON l.session_id = s.sid; ``` 这段脚本能够返回所有被定的对象名称连同对应的会话ID等细节信息[^2]。 #### 4. **解除的方法** 一旦确认了具体的定源之后,就可以采取相应措施解决问题: ##### 方法一:手动杀死阻塞进程 如果确定某个特定SID造成了不必要的干扰,则可以直接将其关闭从而立即消除影响: ```bash ALTER SYSTEM KILL SESSION 'sid,serial#'; ``` 注意这里的单引号内需填入前面查出来的实际数值[^3]。 ##### 方法二:定期监控与预防策略实施 建立完善的运维体系非常重要,包括但不限于设立合理的超时限制、优化索引结构减少全扫描几率等方面工作都能有效降低出现此类状况的可能性。 #### 5. **避免未来再次发生的建议** - 教育开发者遵循良好的编程习惯,确保每次变更完成后都尽快commit或者rollback; - 对于耗时较长的任务考虑分批处理而非一次性加载全部数据; - 利用分区技术分散热点区域压力; --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值