我正在使用更新查询执行dept表更新为 -
update dept set dname = initcap(dname) where deptno=20;
因为,我还没有提交,行锁会放在行上。我想找出rowid
锁定的部门表V$LOCK
。
目前,我无法弄清楚如何获得它。还有其他办法吗?
答案 0 :(得分:0)
也许您可以在更新之前执行以下语句:
SELECT ROWID AS RID FROM DEPT WHERE DEPTNO = 20 FOR UPDATE;
答案 1 :(得分:0)
首先查询V$LOCKED_OBJECT
以获取object_id。然后查询v$open_cursor
以获取SQL_TEXT
,使用此功能可以获得ROWID。
SQL> select * from t2 where id=1 for update;
ID KEY VALUE
---------- -------------------- --------------------
1 A101 Athens
将以下逗号作为SYSDBA
SQL> select session_id, object_id from v$locked_object;
SESSION_ID OBJECT_ID
---------- ----------
1724 213690
SQL> select user_name, sql_text from v$open_cursor where sid=1724;
USER_NAME SQL_TEXT
--------- ------------------------------------------------------------
JAY insert into sys.aud$( sessionid,entryid,statement,ntimestamp
JAY select * from t2 where id=1 for update
SQL> select rowid from jay.t2 where id=1;
ROWID
------------------
AAA0K6AAEAAAACsAAA
Oracle不会跟踪锁定的行。如果有阻塞的行,那么您可以获得如下所示的rowid。
SQL> select dbms_rowid.ROWID_CREATE(1,s.ROW_WAIT_OBJ#,s.ROW_WAIT_FILE#,s.ROW_WAIT_BLOCK#,s.ROW_WAIT_ROW#) rid from v$session s join v$locked_object lo on s.ROW_WAIT_OBJ#=lo.object_id;