Oracle: 보류 중인 트랜잭션이 있는지 확인하려면 어떻게 해야 합니까?
현재 세션에서 커밋되지 않은 INSERT, UPDATE 또는 DELETE 스테이트먼트가 있는지 확인할 방법을 찾고 있습니다.v$lock을 현재 sid와 함께 확인하는 것도 한 가지 방법이지만 v$lock에 대한 읽기 액세스 권한이 필요합니다. 이는 DBA가 v$lock을 부여하지 않으려는 경우에 문제가 됩니다.다른 방법(애플리케이션에 의해 실행된 모든 데이터베이스 명령을 추적하는 것 제외)은 없습니까?
세션에 행이 있는지 확인할 수 있습니다.V$TRANSACTION
(이 뷰에 대한 읽기 권한이 필요한 경우):
SQL> SELECT COUNT(*)
FROM v$transaction t, v$session s, v$mystat m
WHERE t.ses_addr = s.saddr
AND s.sid = m.sid
AND ROWNUM = 1;
COUNT(*)
----------
0
SQL> insert into a values (1);
1 row inserted
SQL> SELECT COUNT(*)
FROM v$transaction t, v$session s, v$mystat m
WHERE t.ses_addr = s.saddr
AND s.sid = m.sid
AND ROWNUM = 1;
COUNT(*)
----------
1
SQL> commit;
Commit complete
SQL> SELECT COUNT(*)
FROM v$transaction t, v$session s, v$mystat m
WHERE t.ses_addr = s.saddr
AND s.sid = m.sid
AND ROWNUM = 1;
COUNT(*)
----------
0
이게 제가 평소에 쓰는 질문입니다.
select s.sid
,s.serial#
,s.username
,s.machine
,s.status
,s.lockwait
,t.used_ublk
,t.used_urec
,t.start_time
from v$transaction t
inner join v$session s on t.addr = s.taddr;
SELECT * FROM V$TRANSACTION
WHERE STATUS='ACTIVE';
참조: http://forums.oracle.com/forums/thread.jspa?threadID=691061
보류 중인 트랜잭션을 확인하려면 아래 쿼리를 사용하십시오.
값이 반환되면 보류 중인 트랜잭션이 있음을 의미합니다.
다음은 쿼리입니다.
select dbms_transaction.step_id from dual
;
참고 자료:
http://www.acehints.com/2011/07/how-to-check-pending-transaction-in.htmlhttp://www.acehints.com/p/site-map.html
또, 이하를 참조해 주세요.
Oracle 트랜잭션에서 커밋되지 않은 작업이 있는지 확인하려면 어떻게 해야 합니까?
Matthew Watson은 RAC에서 사용하도록 수정할 수 있습니다.
select t.inst_id
,s.sid
,s.serial#
,s.username
,s.machine
,s.status
,s.lockwait
,t.used_ublk
,t.used_urec
,t.start_time
from gv$transaction t
inner join gv$session s on t.addr = s.taddr;
가장 쉽고 신뢰할 수 있는 솔루션은 트랜잭션을 시작하고 성공 여부를 확인하는 것입니다.일부 코드가 트랜잭션을 이미 시작했지만 아직 DML을 발행하지 않은 경우 V$TRANSACTION 뷰에는 아무것도 표시되지 않습니다.
다음 예에서는 사용자 정의 응용 프로그램 오류를 발생시키는 예외를 처리합니다.기존 예외 핸들러를 따르려면 SET TRANSACTION을 수행한 후 즉시 COMMIT를 실행 취소하면 됩니다.
DECLARE
transaction_in_progress EXCEPTION;
PRAGMA EXCEPTION_INIT(transaction_in_progress, -1453);
BEGIN
SET TRANSACTION NAME 'CHECK_FOR_TRANSACTION_ALREADY_SET';
COMMIT; -- end transaction
EXCEPTION
WHEN transaction_in_progress THEN
RAISE_APPLICATION_ERROR(-20000,'Transaction is already in progress');
END;
/
언급URL : https://stackoverflow.com/questions/1299694/oracle-how-to-find-out-if-there-is-a-transaction-pending
'programing' 카테고리의 다른 글
create-react-app에서 제공하는 ESLint 사용 안 함 (0) | 2023.03.22 |
---|---|
AngularJS: 한 페이지 응용 프로그램에서 인증을 사용하는 기본 예 (0) | 2023.03.22 |
리액트 컴포넌트에 대해 es6 Import alias 구문을 사용할 수 있습니까? (0) | 2023.03.22 |
임의의 키에 대해 JSON Schema를 어떻게 설계하시겠습니까? (0) | 2023.03.22 |
MongoDB에서 현재 사용하고 있는 DB를 표시하는 명령어? (0) | 2023.03.22 |