にロックされた行のROWIDを取得する - 私がコミットしていない、として私のように更新クエリでdept表に更新しております神託
update dept set dname = initcap(dname) where deptno=20;
、行ロックは、行に配置されます。私はV$LOCK
からロックされたdeptテーブルのrowid
を見つけたいと思っています。
現在、私はそれを取得する方法を見つけることができません。他の方法はありますか?
にロックされた行のROWIDを取得する - 私がコミットしていない、として私のように更新クエリでdept表に更新しております神託
update dept set dname = initcap(dname) where deptno=20;
、行ロックは、行に配置されます。私はV$LOCK
からロックされたdeptテーブルのrowid
を見つけたいと思っています。
現在、私はそれを取得する方法を見つけることができません。他の方法はありますか?
アップデートする前に、おそらくあなたは、次の文を実行できます。クエリの
SELECT ROWID AS RID FROM DEPT WHERE DEPTNO = 20 FOR UPDATE;
まず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
を実行し、次のcommads Oracleは、ロックされた行を追跡しません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
として。ブロックされた行がある場合は、次に示すように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..Id = 1ではなくbind(id =:id)の値が入っていれば? –
私はロックをシミュレートしました。基本的には、ロックがアプリケーション(jdbc呼び出し)によって行われ、私がROWIDを認識していない場合、ROWIDを取得したいと思います。 –
なぜこれが必要ですか? – BobC
アプリケーションによってロックされたテーブルのrowsidsを取得します。 –