暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 锁定会话缺少V $ 会话条目。当v $ locked_object中存在相同

ASKTOM 2020-06-10
791

问题描述

嗨,汤姆,

每当我有疑问时,我都会关注您的帖子。我几乎每次都能找到解决我问题的方法。你的帖子很有帮助。我最近偶然发现了一个问题,并试图找到解决方案。因此写信给你。下面是描述。

昨天甚至更新了一张表
1.首先我更新我的表,但没有提交或回滚Update employee set id=1 where id=2;
2.我查过了v$locked_object我能够看到该表的条目。我复制了会话id。
3.使用该会话id,我可以在v$lock表,但有3个条目,一个条目为我的类型TM的锁定对象,还有两个其他条目与AE和TX。
4.使用这个会话id我调查了v$session并复制了sql id,并在v$sql。但是sql是 “从v $ session中选择 *,其中sid = 37”。不是我第一次执行的更新语句。
5.然后我检查v$sqlarea并搜索了文中的update语句。并得到了sql id
6.使用该sql id我再次在v $ session中搜索但没有条目再次

It will be great help if you can explain this and how to check entry in v$session as i wanted to check row_wait_row# and using this wanted to get row id of the same using dbms_rowid.rowid_create

你能解释一下吗?提前谢谢你。

塔努斯里

专家解答

* 当 * 我运行SQL时,它在V $ SESSION中显示为SQL_ID。

例如

会话1: 从my_big_table中选择计数 (*)
会话2: 从v $ 会话中选择sql_id,其中sid = [会话1]

你会看到正在运行的SQL的SQL_ID。

但是,当查询 (或它正在执行的任何命令) * 完成 * 时,V $ SESSION中的SQL_ID列将为null,因为它现在没有运行任何内容。(或者它可能是一个全新的SQL_ID,因为它已移至运行其他内容)。

But *while* another session is waiting, you can what it is *trying* to get from V$SESSION, 例如

第1场会议:

SQL> create table t as select * from dual;

Table created.

SQL> delete from t;

1 row deleted.
复制


第二场:

SQL> delete from t;

[stuck]


复制


然后我可以看看第二个会话被卡住了

SQL> select * from v$session where sid = 127
  2  @pr
==============================
SADDR                         : 00007FFCD2C230F8
SID                           : 127
SERIAL#                       : 25696
AUDSID                        : 1127778
PADDR                         : 00007FFCD25F2DA0
USER#                         : 107
USERNAME                      : MCDONAC
COMMAND                       : 7
OWNERID                       : 2147483644
TADDR                         : 00007FFCC8AD3B60
LOCKWAIT                      : 00007FFCCD0D10F0
STATUS                        : ACTIVE
SERVER                        : DEDICATED
SCHEMA#                       : 107
SCHEMANAME                    : MCDONAC
OSUSER                        : GTX\hamcdc
PROCESS                       : 25868:16988
MACHINE                       : WORKGROUP\GTX
PORT                          : 60424
TERMINAL                      : GTX
PROGRAM                       : sqlplus.exe
TYPE                          : USER
SQL_ADDRESS                   : 00007FFCAD302680
SQL_HASH_VALUE                : 1063131497
SQL_ID                        : 1hws8f0zpw6b9
SQL_CHILD_NUMBER              : 0
SQL_EXEC_START                : 11-JUN-20
SQL_EXEC_ID                   : 16777217
PREV_SQL_ADDR                 : 00007FFCA6E19D18
PREV_HASH_VALUE               : 3928840931
PREV_SQL_ID                   : 0qq0c4bp2uqr3
PREV_CHILD_NUMBER             : 0
PREV_EXEC_START               : 11-JUN-20
PREV_EXEC_ID                  : 16777230
PLSQL_ENTRY_OBJECT_ID         :
PLSQL_ENTRY_SUBPROGRAM_ID     :
PLSQL_OBJECT_ID               :
PLSQL_SUBPROGRAM_ID           :
MODULE                        : SQL*Plus
MODULE_HASH                   : 3669949024
ACTION                        :
ACTION_HASH                   : 0
CLIENT_INFO                   :
FIXED_TABLE_SEQUENCE          : 386777
===>>  ROW_WAIT_OBJ#                 : 91121
===>>  ROW_WAIT_FILE#                : 64
===>>  ROW_WAIT_BLOCK#               : 59299
===>>  ROW_WAIT_ROW#                 : 0
TOP_LEVEL_CALL#               : 94
LOGON_TIME                    : 11-JUN-20
LAST_CALL_ET                  : 21
PDML_ENABLED                  : NO
FAILOVER_TYPE                 : NONE
FAILOVER_METHOD               : NONE
FAILED_OVER                   : NO
RESOURCE_CONSUMER_GROUP       : OTHER_GROUPS
PDML_STATUS                   : DISABLED
PDDL_STATUS                   : ENABLED
PQ_STATUS                     : ENABLED
CURRENT_QUEUE_DURATION        : 0
CLIENT_IDENTIFIER             :
BLOCKING_SESSION_STATUS       : VALID
BLOCKING_INSTANCE             : 1
BLOCKING_SESSION              : 369
FINAL_BLOCKING_SESSION_STATUS : VALID
FINAL_BLOCKING_INSTANCE       : 1
FINAL_BLOCKING_SESSION        : 369
SEQ#                          : 57
EVENT#                        : 307
EVENT                         : enq: TX - row lock contention
P1TEXT                        : name|mode
P1                            : 1415053318
P1RAW                         : 0000000054580006
P2TEXT                        : usn<<16 | slot
P2                            : 524301
P2RAW                         : 000000000008000D
P3TEXT                        : sequence
P3                            : 19170
P3RAW                         : 0000000000004AE2
WAIT_CLASS_ID                 : 4217450380
WAIT_CLASS#                   : 1
WAIT_CLASS                    : Application
WAIT_TIME                     : 0
SECONDS_IN_WAIT               : 22
STATE                         : WAITING
WAIT_TIME_MICRO               : 21772035
TIME_REMAINING_MICRO          : -1
TIME_SINCE_LAST_WAIT_MICRO    : 0
SERVICE_NAME                  : pdb1
SQL_TRACE                     : DISABLED
SQL_TRACE_WAITS               : FALSE
SQL_TRACE_BINDS               : FALSE
SQL_TRACE_PLAN_STATS          : FIRST EXEC
SESSION_EDITION_ID            : 134
CREATOR_ADDR                  : 00007FFCD25F2DA0
CREATOR_SERIAL#               : 92
ECID                          :
SQL_TRANSLATION_PROFILE_ID    : 0
PGA_TUNABLE_MEM               : 0
SHARD_DDL_STATUS              : DISABLED
CON_ID                        : 3
EXTERNAL_NAME                 : GTX\hamcdc
PLSQL_DEBUGGER_CONNECTED      : FALSE

PL/SQL procedure successfully completed.
复制


但是我不确定您所说的 “删除rowid” 是什么意思。因为即使您从上面的4列中列出了rowid,也无法删除它-因为您也会被阻止。您需要杀死会话 * 持有 * 锁。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论