oracle数据库行锁(锁表)

oracle数据库行锁问题

问题说明:

今天在执行一个简单的delete删除语句时,一直在执行,也不报错,经过盘查,怀疑是表锁主了,无法修改数据
可以执行一下sql来查看

查看问题

--查找oracle中被锁的行 所谓的行锁
SELECT l.session_id      "会话标识符",
       s.SERIAL# 		 "会话序列号",
       l.locked_mode     "锁模式",
       l.oracle_username "数据库名",
       l.os_user_name    "计算机用户名",
       s.machine         "操作系统机器名称(计算机组/名)",
       s.terminal        "计算机名",
       o.object_name     "数据库表名",
       s.program         "操作系统程序名称",
       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#';	
或者
alter system kill session '会话标识符,会话序列号'; 

表字段说明

v$session 表字段说明
More ActionsColumnDatatypeDescription
SADDRRAW(4 | 8)会话地址
SIDNUMBER会话标识符
SERIAL#NUMBER会话序列号。 用于唯一标识会话的对象。 如果会话结束且另一个会话以相同的会话ID开始,则保证会话级命令应用于正确的会话对象。
AUDSIDNUMBER审核会话ID
PADDRRAW(4 | 8)拥有会话的进程的地址
USER#NUMBEROracle用户标识符
USERNAMEVARCHAR2(128)Oracle用户名
COMMANDNUMBER正在进行的命令
OWNERIDNUMBER拥有可迁移会话的用户的标识符; 如果值为2147483644,则列内容无效 对于使用Parallel Slaves的操作,将此值解释为4字节值。 低位2字节表示会话编号,高位字节表示查询协调器的实例ID。
TADDRVARCHAR2(16)事务状态对象的地址
LOCKWAITVARCHAR2(16)会话等待的锁的地址; 如果没有则为NULL
STATUSVARCHAR2(8)会议状况:ACTIVE - 当前正在执行SQL的会话;INACTIVE - 非活动且没有配置限制或尚未超出配置限制的会话;KILLED - 会话标记为已杀死;CACHED - 会话临时缓存以供Oracle * XA使用;SNIPED - 超出某些已配置限制的非活动会话(例如,为资源管理器使用者组指定的资源限制或用户配置文件中指定的idle_time)。 此类会议将不再允许再次活动。
SERVERVARCHAR2(9)服务器类型:专用;共享;伪;POOLED; 没有
SCHEMA#NUMBER架构用户标识符
SCHEMANAMEVARCHAR2(128)架构用户名
OSUSERVARCHAR2(128)操作系统客户端用户名
PROCESSVARCHAR2(24)操作系统客户端进程ID
MACHINEVARCHAR2(64)操作系统机器名称
PORTNUMBER客户端端口号
TERMINALVARCHAR2(30)操作系统终端名称
PROGRAMVARCHAR2(48)操作系统程序名称
TYPEVARCHAR2(10)会话类型
SQL_ADDRESSRAW(48)
SQL_HASH_VALUENUMBER与SQL_ADDRESS一起使用以标识当前正在执行的SQL语句
SQL_IDVARCHAR2(13)当前正在执行的SQL语句的SQL标识符
SQL_CHILD_NUMBERNUMBER当前正在执行的SQL语句的子编号
SQL_EXEC_STARTDATE此会话当前执行的SQL执行开始的时间; 如果SQL_ID为NULL,则为NULL
SQL_EXEC_IDNUMBERSQL执行标识符; 如果SQL_ID为NULL或者尚未启动该SQL的执行,则为NULL(请参阅V $ SQL_MONITOR)
PREV_SQL_ADDRRAW(48)
PREV_HASH_VALUENUMBER与SQL_HASH_VALUE一起使用以标识最后执行的SQL语句
PREV_SQL_IDVARCHAR2(13)执行的最后一个SQL语句的SQL标识符
PREV_CHILD_NUMBERNUMBER执行的最后一个SQL语句的子编号
PREV_EXEC_STARTDATESQL执行开始执行最后一次执行的SQL语句
PREV_EXEC_IDNUMBER上次执行的SQL语句的SQL执行标识符
PLSQL_ENTRY_OBJECT_IDNUMBER堆栈中最顶层PL / SQL子程序的对象ID; 如果堆栈上没有PL / SQL子程序,则为NULL
PLSQL_ENTRY_SUBPROGRAM_IDNUMBER堆栈中最顶层PL / SQL子程序的子程序ID; 如果堆栈上没有PL / SQL子程序,则为NULL
PLSQL_OBJECT_IDNUMBER当前正在执行的PL / SQL子程序的对象ID; 执行SQL时为NULL
PLSQL_SUBPROGRAM_IDNUMBER当前正在执行的PL / SQL对象的子程序ID; 执行SQL时为NULL
MODULEVARCHAR2(64)通过调用DBMS_APPLICATION_INFO.SET_MODULE过程设置的当前正在执行的模块的名称
v$locked_object视图

v$locked_object视图列出当前系统中哪些对象正被锁定,其主要字段说明如下:

字段名称类型说明
XIDUSNNUMBER回滚段号;
XIDSLOTNUMBER槽号;
XIDSQNNUMBER序列号;
OBJECT_IDNUMBER被锁对象标识;
SESSION_IDNUMBER持有锁的会话(SESSION)标识;
ORACLE_USERNAMEVARCHAR2(30)持有该锁的用户的Oracle用户名;
OS_USER_NAMEVARCHAR2(15)持有该锁的用户的操作系统用户名;
PROCESSVARCHAR2(9)操作系统的进程号;
LOCKED_MODENUMBER锁模式,取值同表三中的LMODE;
all_objects(dba_objects) 表字段说明

主要用来管理对象。

COLUMN_NAMEDATA_TYPE描述
EDITION_NAMEVARCHAR2
NAMESPACENUMBER
SECONDARYVARCHAR2
GENERATEDVARCHAR2
TEMPORARYVARCHAR2
STATUSVARCHAR2状态,如valid
TIMESTAMPVARCHAR2时间
LAST_DDL_TIMEDATEddl时间
CREATEDDATE创建时间
OBJECT_TYPEVARCHAR2
DATA_OBJECT_IDNUMBER
OBJECT_IDNUMBER对象id
SUBOBJECT_NAMEVARCHAR2
OBJECT_NAMEVARCHAR2对象名,如表名t_user,库名等
OWNERVARCHAR2用户名

声明:

声明:平时我没事的时候喜欢逛哔哩哔哩,CSDN,微信公众号,这也是我主要的学习来源,如果有需要和您相同的文章,请联系我,谢谢!!!

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值