--查询oracle 数据库的表是否被用户锁定
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#;
--解锁语句,解除session 连接, 引号中的参数是'sid,serial'
ALTER system kill session '60,4111';
--需要注意:解锁需要有相关权限的用户才可以的,这个两个sql都是要在具有dba权限的用户下执行的。
--如果我们在用PLSQL 来修改表的时候尽量不要用select ...for update.来修改表,for update是表级锁,很容易锁表,用rowid---要好一点,rowid是行级锁,只锁定你当前操作的那一行。要么用单独的update 语句 加上where条件,单独修改目标数据
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#;
--解锁语句,解除session 连接, 引号中的参数是'sid,serial'
ALTER system kill session '60,4111';
--需要注意:解锁需要有相关权限的用户才可以的,这个两个sql都是要在具有dba权限的用户下执行的。
--如果我们在用PLSQL 来修改表的时候尽量不要用select ...for update.来修改表,for update是表级锁,很容易锁表,用rowid---要好一点,rowid是行级锁,只锁定你当前操作的那一行。要么用单独的update 语句 加上where条件,单独修改目标数据