ORA-02049 문제 해결 및 Oracle 일반 잠금 문제 해결 방법
장기 및/또는 집중적인 거래를 위해 가끔 ORA-02049를 받고 있습니다.겉보기에는 패턴이 없지만 간단한 INSERT에서 발생합니다.
나는 어떤 종류의 정보나 오라클을 어떻게 빼낼 수 있는지 전혀 모르지만, 방법이 있어야만 합니까?로그 오버 잠금 또는 적어도 현재 잠금을 확인할 수 있는 방법?
한 가지 가능한 방법은 다음과 같습니다.INIT.ORA
에 대한 매개 변수.distributed_lock_timeout
더 큰 값으로그러면 다음을 관찰할 수 있는 시간이 더 길어집니다.v$lock
자물쇠가 더 오래 지속될 것이기 때문에 테이블.
이를 자동화하려면 다음 중 하나를 수행할 수 있습니다.
5-10초마다 다음 값을 기록하는 SQL 작업 실행
v$lock
또는 샌도가 위에서 제공한 쿼리를 테이블로 가져온 다음 분석하여 잠금이 발생한 세션을 확인합니다.실행 a
STATSPACK
또는AWR
보고합니다.잠긴 세션은 경과 시간이 길어 표시되므로 식별할 수 있습니다.
v$session
3개의 열이 더 있습니다.blocking_instance, blocking_session, blocking_session_status
무엇이 잠겨 있는지 그림을 제공하기 위해 위의 쿼리에 추가할 수 있습니다.
이 쿼리를 사용하여 가능한 차단 잠금을 확인합니다.
SELECT se.username,
NULL,
se.sid,
DECODE( se.command,
0, 'No command',
1, 'CREATE TABLE',
2, 'INSERT',
3, 'SELECT',
4, 'CREATE CLUSTER',
5, 'ALTER CLUSTER',
6, 'UPDATE',
7, 'DELETE',
8, 'DROP CLUSTER',
9, 'CREATE INDEX',
10, 'DROP INDEX',
11, 'ALTER INDEX',
12, 'DROP TABLE',
13, 'CREATE SEQUENCE',
14, 'ALTER SEQUENCE',
15, 'ALTER TABLE',
16, 'DROP SEQUENCE',
17, 'GRANT',
18, 'REVOKE',
19, 'CREATE SYNONYM',
20, 'DROP SYNONYM',
21, 'CREATE VIEW',
22, 'DROP VIEW',
23, 'VALIDATE INDEX',
24, 'CREATE PROCEDURE',
25, 'ALTER PROCEDURE',
26, 'LOCK TABLE',
27, 'NO OPERATION',
28, 'RENAME',
29, 'COMMENT',
30, 'AUDIT',
31, 'NOAUDIT',
32, 'CREATE DATABASE LINK',
33, 'DROP DATABASE LINK',
34, 'CREATE DATABASE',
35, 'ALTER DATABASE',
36, 'CREATE ROLLBACK SEGMENT',
37, 'ALTER ROLLBACK SEGMENT',
38, 'DROP ROLLBACK SEGMENT',
39, 'CREATE TABLESPACE',
40, 'ALTER TABLESPACE',
41, 'DROP TABLESPACE',
42, 'ALTER SESSION',
43, 'ALTER USER',
44, 'COMMIT',
45, 'ROLLBACK',
46, 'SAVEPOINT',
47, 'PL/SQL EXECUTE',
48, 'SET TRANSACTION',
49, 'ALTER SYSTEM SWITCH LOG',
50, 'EXPLAIN',
51, 'CREATE USER',
52, 'CREATE ROLE',
53, 'DROP USER',
54, 'DROP ROLE',
55, 'SET ROLE',
56, 'CREATE SCHEMA',
57, 'CREATE CONTROL FILE',
58, 'ALTER TRACING',
59, 'CREATE TRIGGER',
60, 'ALTER TRIGGER',
61, 'DROP TRIGGER',
62, 'ANALYZE TABLE',
63, 'ANALYZE INDEX',
64, 'ANALYZE CLUSTER',
65, 'CREATE PROFILE',
67, 'DROP PROFILE',
68, 'ALTER PROFILE',
69, 'DROP PROCEDURE',
70, 'ALTER RESOURCE COST',
71, 'CREATE SNAPSHOT LOG',
72, 'ALTER SNAPSHOT LOG',
73, 'DROP SNAPSHOT LOG',
74, 'CREATE SNAPSHOT',
75, 'ALTER SNAPSHOT',
76, 'DROP SNAPSHOT',
79, 'ALTER ROLE',
85, 'TRUNCATE TABLE',
86, 'TRUNCATE CLUSTER',
88, 'ALTER VIEW',
91, 'CREATE FUNCTION',
92, 'ALTER FUNCTION',
93, 'DROP FUNCTION',
94, 'CREATE PACKAGE',
95, 'ALTER PACKAGE',
96, 'DROP PACKAGE',
97, 'CREATE PACKAGE BODY',
98, 'ALTER PACKAGE BODY',
99, 'DROP PACKAGE BODY',
TO_CHAR(se.command) ) command,
DECODE(lo.type,
'MR', 'Media Recovery',
'RT', 'Redo Thread',
'UN', 'User Name',
'TX', 'Transaction',
'TM', 'DML',
'UL', 'PL/SQL User Lock',
'DX', 'Distributed Xaction',
'CF', 'Control File',
'IS', 'Instance State',
'FS', 'File Set',
'IR', 'Instance Recovery',
'ST', 'Disk Space Transaction',
'TS', 'Temp Segment',
'IV', 'Library Cache Invalidation',
'LS', 'Log Start or Switch',
'RW', 'Row Wait',
'SQ', 'Sequence Number',
'TE', 'Extend Table',
'TT', 'Temp Table',
'JQ', 'Job Queue',
lo.type) ltype,
DECODE( lo.lmode,
0, 'NONE', /* Mon Lock equivalent */
1, 'Null Mode', /* N */
2, 'Row-S (SS)', /* L */
3, 'Row-X (SX)', /* R */
4, 'Share (S)', /* S */
5, 'S/Row-X (SSX)', /* C */
6, 'Excl (X)', /* X */
lo.lmode) lmode,
DECODE( lo.request,
0, 'NONE', /* Mon Lock equivalent */
1, 'Null', /* N */
2, 'Row-S (SS)', /* L */
3, 'Row-X (SX)', /* R */
4, 'Share (S)', /* S */
5, 'S/Row-X (SSX)', /* C */
6, 'Excl (X)', /* X */
TO_CHAR(lo.request)) request,
lo.ctime ctime,
DECODE(lo.block,
0, 'No Block',
1, 'Blocking',
2, 'Global',
TO_CHAR(lo.block)) blkothr,
'SYS' owner,
ro.name image
FROM v$lock lo,
v$session se,
v$transaction tr,
v$rollname ro
WHERE se.sid = lo.sid
AND se.taddr = tr.addr(+)
AND tr.xidusn = ro.usn(+)
ORDER BY sid
init.ora에서 SHARED_POOL_SIZE 값을 늘려 보십시오.
실패하면 시도합니다.ALTER SYSTEM FLUSH SHARED_POOL
이것도 보세요.
여기에 설명된 오류를 유발하는 비트맵 인덱스일 수 있습니까?
자, 이것은 어리석은 문제였습니다.
Entity Framework 6.0(6.2로 업그레이드되었지만 변경 사항 없음), Oracle을 사용하고 있습니다.Managed Data Access + Entity Framework 12.2.1100, .NET 4.5.
나는 받고 있었습니다.ORA-02049: timeout: distributed transaction waiting for lock
다음 쿼리를 사용합니다.
update "schemaname"."tablename"
set "DUE_DATE" = :p0
where ("ID" = :p1)
(EF 컨텍스트를 통해).데이터베이스.이벤트 기록).정말 간단한 질문이라 문제가 없을 겁니다.
원격 서버, 로컬 디버거 및 Oracle SQL Developer에서 동일한 로그인을 사용했습니다.동료가 디버깅하는 동안 여러 연결을 모두 없애야 한다고 지적했습니다. ... . . . . .그래서 제 경우 해결책은 동일한 로그인으로 데이터베이스에 여러 번 연결하지 않는 것이었습니다.
언급URL : https://stackoverflow.com/questions/2506411/how-to-troubleshoot-ora-02049-and-lock-problems-in-general-with-oracle
'programing' 카테고리의 다른 글
R에서 라텍스 테이블을 만드는 도구 (0) | 2023.06.21 |
---|---|
git 특정 분기로 푸시 (0) | 2023.06.21 |
read.csv 주의 '따옴표로 묶인 문자열 내의 EOF'가 파일을 완전히 읽지 못하도록 합니다. (0) | 2023.06.21 |
Liquibase를 사용하여 Spring Boot 애플리케이션에서 장치 테스트를 위한 메모리 내 H2 초기화 (0) | 2023.06.21 |
쉼표로 구분된 값으로 가득 찬 막대를 SQL Server IN 함수에 전달 (0) | 2023.06.21 |