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 ActionsColumn | Datatype | Description |
|---|---|---|
| SADDR | RAW(4 | 8) | 会话地址 |
| SID | NUMBER | 会话标识符 |
| SERIAL# | NUMBER | 会话序列号。 用于唯一标识会话的对象。 如果会话结束且另一个会话以相同的会话ID开始,则保证会话级命令应用于正确的会话对象。 |
| AUDSID | NUMBER | 审核会话ID |
| PADDR | RAW(4 | 8) | 拥有会话的进程的地址 |
| USER# | NUMBER | Oracle用户标识符 |
| USERNAME | VARCHAR2(128) | Oracle用户名 |
| COMMAND | NUMBER | 正在进行的命令 |
| OWNERID | NUMBER | 拥有可迁移会话的用户的标识符; 如果值为2147483644,则列内容无效 对于使用Parallel Slaves的操作,将此值解释为4字节值。 低位2字节表示会话编号,高位字节表示查询协调器的实例ID。 |
| TADDR | VARCHAR2(16) | 事务状态对象的地址 |
| LOCKWAIT | VARCHAR2(16) | 会话等待的锁的地址; 如果没有则为NULL |
| STATUS | VARCHAR2(8) | 会议状况:ACTIVE - 当前正在执行SQL的会话;INACTIVE - 非活动且没有配置限制或尚未超出配置限制的会话;KILLED - 会话标记为已杀死;CACHED - 会话临时缓存以供Oracle * XA使用;SNIPED - 超出某些已配置限制的非活动会话(例如,为资源管理器使用者组指定的资源限制或用户配置文件中指定的idle_time)。 此类会议将不再允许再次活动。 |
| SERVER | VARCHAR2(9) | 服务器类型:专用;共享;伪;POOLED; 没有 |
| SCHEMA# | NUMBER | 架构用户标识符 |
| SCHEMANAME | VARCHAR2(128) | 架构用户名 |
| OSUSER | VARCHAR2(128) | 操作系统客户端用户名 |
| PROCESS | VARCHAR2(24) | 操作系统客户端进程ID |
| MACHINE | VARCHAR2(64) | 操作系统机器名称 |
| PORT | NUMBER | 客户端端口号 |
| TERMINAL | VARCHAR2(30) | 操作系统终端名称 |
| PROGRAM | VARCHAR2(48) | 操作系统程序名称 |
| TYPE | VARCHAR2(10) | 会话类型 |
| SQL_ADDRESS | RAW(4 | 8) |
| SQL_HASH_VALUE | NUMBER | 与SQL_ADDRESS一起使用以标识当前正在执行的SQL语句 |
| SQL_ID | VARCHAR2(13) | 当前正在执行的SQL语句的SQL标识符 |
| SQL_CHILD_NUMBER | NUMBER | 当前正在执行的SQL语句的子编号 |
| SQL_EXEC_START | DATE | 此会话当前执行的SQL执行开始的时间; 如果SQL_ID为NULL,则为NULL |
| SQL_EXEC_ID | NUMBER | SQL执行标识符; 如果SQL_ID为NULL或者尚未启动该SQL的执行,则为NULL(请参阅V $ SQL_MONITOR) |
| PREV_SQL_ADDR | RAW(4 | 8) |
| PREV_HASH_VALUE | NUMBER | 与SQL_HASH_VALUE一起使用以标识最后执行的SQL语句 |
| PREV_SQL_ID | VARCHAR2(13) | 执行的最后一个SQL语句的SQL标识符 |
| PREV_CHILD_NUMBER | NUMBER | 执行的最后一个SQL语句的子编号 |
| PREV_EXEC_START | DATE | SQL执行开始执行最后一次执行的SQL语句 |
| PREV_EXEC_ID | NUMBER | 上次执行的SQL语句的SQL执行标识符 |
| PLSQL_ENTRY_OBJECT_ID | NUMBER | 堆栈中最顶层PL / SQL子程序的对象ID; 如果堆栈上没有PL / SQL子程序,则为NULL |
| PLSQL_ENTRY_SUBPROGRAM_ID | NUMBER | 堆栈中最顶层PL / SQL子程序的子程序ID; 如果堆栈上没有PL / SQL子程序,则为NULL |
| PLSQL_OBJECT_ID | NUMBER | 当前正在执行的PL / SQL子程序的对象ID; 执行SQL时为NULL |
| PLSQL_SUBPROGRAM_ID | NUMBER | 当前正在执行的PL / SQL对象的子程序ID; 执行SQL时为NULL |
| MODULE | VARCHAR2(64) | 通过调用DBMS_APPLICATION_INFO.SET_MODULE过程设置的当前正在执行的模块的名称 |
v$locked_object视图
v$locked_object视图列出当前系统中哪些对象正被锁定,其主要字段说明如下:
| 字段名称 | 类型 | 说明 |
|---|---|---|
| XIDUSN | NUMBER | 回滚段号; |
| XIDSLOT | NUMBER | 槽号; |
| XIDSQN | NUMBER | 序列号; |
| OBJECT_ID | NUMBER | 被锁对象标识; |
| SESSION_ID | NUMBER | 持有锁的会话(SESSION)标识; |
| ORACLE_USERNAME | VARCHAR2(30) | 持有该锁的用户的Oracle用户名; |
| OS_USER_NAME | VARCHAR2(15) | 持有该锁的用户的操作系统用户名; |
| PROCESS | VARCHAR2(9) | 操作系统的进程号; |
| LOCKED_MODE | NUMBER | 锁模式,取值同表三中的LMODE; |
all_objects(dba_objects) 表字段说明
主要用来管理对象。
| COLUMN_NAME | DATA_TYPE | 描述 |
|---|---|---|
| EDITION_NAME | VARCHAR2 | |
| NAMESPACE | NUMBER | |
| SECONDARY | VARCHAR2 | |
| GENERATED | VARCHAR2 | |
| TEMPORARY | VARCHAR2 | |
| STATUS | VARCHAR2 | 状态,如valid |
| TIMESTAMP | VARCHAR2 | 时间 |
| LAST_DDL_TIME | DATE | ddl时间 |
| CREATED | DATE | 创建时间 |
| OBJECT_TYPE | VARCHAR2 | |
| DATA_OBJECT_ID | NUMBER | |
| OBJECT_ID | NUMBER | 对象id |
| SUBOBJECT_NAME | VARCHAR2 | |
| OBJECT_NAME | VARCHAR2 | 对象名,如表名t_user,库名等 |
| OWNER | VARCHAR2 | 用户名 |
声明:
声明:平时我没事的时候喜欢逛哔哩哔哩,CSDN,微信公众号,这也是我主要的学习来源,如果有需要和您相同的文章,请联系我,谢谢!!!
版权声明:本文为weixin_46237429原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。