programing

ORA-02049 문제 해결 및 Oracle 일반 잠금 문제 해결 방법

lastmoon 2023. 6. 21. 22:54
반응형

ORA-02049 문제 해결 및 Oracle 일반 잠금 문제 해결 방법

장기 및/또는 집중적인 거래를 위해 가끔 ORA-02049를 받고 있습니다.겉보기에는 패턴이 없지만 간단한 INSERT에서 발생합니다.

나는 어떤 종류의 정보나 오라클을 어떻게 빼낼 수 있는지 전혀 모르지만, 방법이 있어야만 합니까?로그 오버 잠금 또는 적어도 현재 잠금을 확인할 수 있는 방법?

한 가지 가능한 방법은 다음과 같습니다.INIT.ORA에 대한 매개 변수.distributed_lock_timeout더 큰 값으로그러면 다음을 관찰할 수 있는 시간이 더 길어집니다.v$lock자물쇠가 더 오래 지속될 것이기 때문에 테이블.

이를 자동화하려면 다음 중 하나를 수행할 수 있습니다.

  • 5-10초마다 다음 값을 기록하는 SQL 작업 실행v$lock또는 샌도가 위에서 제공한 쿼리를 테이블로 가져온 다음 분석하여 잠금이 발생한 세션을 확인합니다.

  • 실행 aSTATSPACK또는AWR보고합니다.잠긴 세션은 경과 시간이 길어 표시되므로 식별할 수 있습니다.

v$session3개의 열이 더 있습니다.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

반응형