DDL auto commit 비활성화

2023. 4. 30.·Oracle/Administration

Oracle 23c에 DDL 문이 수행하는 auto commit을 비활성화하는 기능이 추가되었습니다.

 

이 기능은 _kql_disable_auto_commit 파라미터와 관련이 있습니다. 이 파라미터를 TRUE로 설정하면 DDL 문 수행 전후에 자동으로 수행되는 커밋이 비활성화됩니다.

-- 1
NAME                     VALUE DEFAULT_VALUE DESCRIPTION
------------------------ ----- ------------- --------------------------------------
_kql_disable_auto_commit FALSE FALSE         Disable DDL auto commit in the session

 

테스트를 위해 아래와 같이 테이블을 생성하겠습니다.

-- 2
DROP TABLE t1 PURGE;
DROP TABLE t2 PURGE;

CREATE TABLE t1 (c1 NUMBER);
CREATE TABLE t2 (c1 NUMBER);

 

아래 예제는 INSERT 문과 ROLLBACK 문 사이에 DDL 문인 TRUNCATE 문을 수행합니다. DDL 문의 자동 커밋에 의해 t1 테이블의 결과가 반환되는 것을 확인할 수 있습니다.

-- 3
TRUNCATE TABLE t1;

INSERT INTO t1 VALUES (1);

TRUNCATE TABLE t2;

ROLLBACK;

SELECT * FROM t1;

C1
--
 1

1개의 행이 선택되었습니다.

 

앞선 예제의 TRUNCATE 문은 내부적으로 아래와 같이 수행됩니다.

-- 4
COMMIT;
TRUNCATE TABLE t2;
COMMIT;

 

_kql_disable_auto_commit 파라미터를 TRUE로 설정하고 예제를 수행하면 DDL 문의 자동 커밋이 비활성화되어 롤백에 의해 t1 테이블의 결과가 반환되지 않는 것을 확인할 수 있습니다.

-- 5
ALTER SESSION SET "_kql_disable_auto_commit" = TRUE;

TRUNCATE TABLE t1;

INSERT INTO t1 VALUES (1);

TRUNCATE TABLE t2;

ROLLBACK;

SELECT * FROM t1;

선택된 레코드가 없습니다.

 

DDL 문의 자동 커밋을 비활성화하고 DDL 문을 2회 이상 수행하면 에러가 발생합니다. 이런 경우 명시적으로 커밋을 수행한 후 DDL 문을 수행해야 합니다.

-- 6
DROP TABLE t1 PURGE;

CREATE TABLE t1 (c1 NUMBER);

ORA-30512: 트랜잭션에 하나 이상 TUNA.T1(를)을 수정할 수 없습니다

COMMIT;

CREATE TABLE t1 (c1 NUMBER);

테이블이 생성되었습니다.
저작자표시 비영리 변경금지 (새창열림)
'Oracle/Administration' 카테고리의 다른 글
  • Asynchronous Global Index Maintenance
  • Precheckable Constraints using JSON SCHEMA
  • 최대 칼럼 수 증가
  • Automatic Transaction Rollback
정희락
정희락
2007년부터 Oracle Database 성능 최적화에 관심을 가져왔습니다. 현재 한국오라클 Engineered Systems Solution Engineering 팀에서 Solution Engineer로 근무하고 있습니다. 이 블로그는 개인적인 연구 목적으로 운영되며 Oracle 사의 공식적인 입장을 대변하지 않습니다.
  • 정희락
    TunA
    정희락
  • 전체
    오늘
    어제
    • 분류 전체보기 (201) N
      • Oracle (173) N
        • SQL (33)
        • PLSQL (10)
        • Performance (74)
        • Administration (37)
        • Installation (3)
        • Utilities (1)
        • JSON (8)
        • Vector (7) N
      • Exadata (15)
      • SQL*Plus (2)
      • Linux (5)
      • Resources (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 도서

    • 불친절한 SQL 프로그래밍
    • 불친절한 PL/SQL 프로그래밍
  • 링크

    • Connor McDonald
    • Frits Hoogland
    • Jonathan Lewis
    • Julian Dontcheff
    • Julian Dyke
    • Kun Sun
    • Maria Colgan
    • Martin Bach
    • Mike Dietrich
    • Tanel Poder
  • 공지사항

  • 인기 글

  • 태그

    12c
    19c
    21c
    23ai
    case study
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
정희락
DDL auto commit 비활성화
상단으로

티스토리툴바