我與更新查詢作爲開展有關dept表的更新 -獲取鎖定行的ROWID在Oracle
update dept set dname = initcap(dname) where deptno=20;
正如,我沒有犯過,行鎖將被放置在該行。我想知道從V$LOCK
鎖定的部門表的rowid
。
目前,我無法弄清楚如何得到它。有沒有其他方法?
我與更新查詢作爲開展有關dept表的更新 -獲取鎖定行的ROWID在Oracle
update dept set dname = initcap(dname) where deptno=20;
正如,我沒有犯過,行鎖將被放置在該行。我想知道從V$LOCK
鎖定的部門表的rowid
。
目前,我無法弄清楚如何得到它。有沒有其他方法?
也許你能不能更新之前執行以下語句:
查詢V$LOCKED_OBJECT
的
SELECT ROWID AS RID FROM DEPT WHERE DEPTNO = 20 FOR UPDATE;
率先拿到OBJECT_ID。然後查詢v$open_cursor
得到SQL_TEXT
,使用這個你可以得到ROWIDs。
SQL> select * from t2 where id=1 for update;
ID KEY VALUE
---------- -------------------- --------------------
1 A101 Athens
運行以下commads爲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;
非常感謝Jay ..如果它包含bind(id =:id)值而不是id = 1? –
我模擬了鎖。基本上,我想獲得rowid,如果鎖定是由應用程序(jdbc調用)完成的,並且我不知道rowid。 –
你爲什麼需要這個? – BobC
獲取應用程序鎖定的表的行數。 –