pl sql transactions commit
COMMIT, ROLLBACK 및 SAVEPOINTS 문의 예를 통해 PL SQL 트랜잭션에 대해 알아보십시오.
이 기사에서는 계속해서 PL / SQL 시리즈 . 에서 PL SQL 패키지 튜토리얼에서 패키지, 장점, 사양 및 구조에 대해 배웠습니다.
여기서는 PL SQL 트랜잭션과 그 특성을 살펴 보겠습니다. PL SQL 트랜잭션과 관련된 COMMIT, ROLLBACK, SAVEPOINTS 등과 같은 일부 PL / SQL 문에 대해 설명합니다.
PL SQL의 LOCK TABLe 및 AUTOCOMMIT 문에 대해서도 알아 봅니다.
토론부터 시작하겠습니다 !!
학습 내용 :
PL SQL 트랜잭션
여러 SQL 문이있는 데이터베이스에서 작업의 원자 구성 요소를 트랜잭션이라고합니다. SQL 문의 영향을받는 변경 사항이 있으면이를 커밋하거나 (데이터베이스에 대한 무제한 업데이트) 롤백 (데이터베이스에 대한 업데이트 취소) 할 수 있으므로 원 자성이라고합니다.
SQL 문을 커밋해야합니다. 그렇지 않으면 롤백 할 수 있으며 SQL 문이 수행해야했던 모든 수정은 실행 취소 된 상태로 유지됩니다. PL / SQL 프로그램이 트랜잭션 도중에 중단되면 데이터베이스에 영향을주지 않고 원래 상태로 복원됩니다.
COMMIT 및 ROLLBACK은 데이터베이스에 대한 변경 사항이 영구적이거나 실행 취소된다는 사실을 처리합니다. SAVEPOINT 문은 트랜잭션 처리의 현재 위치를 가리 킵니다.
트랜잭션 처리 시작
모든 거래에는 시작과 종료가 있습니다.
다음 사건은 거래 시작을 표시합니다.
- 데이터베이스에 연결 한 후 첫 번째 SQL 문이 실행됩니다.
- 이전 SQL 문이 완료된 후 새 SQL 문이 실행됩니다.
트랜잭션 처리 종료
각 PL / SQL 프로그램에는 COMMIT 또는 ROLLBACK 문이 있어야합니다. 트랜잭션 후 COMMIT 또는 ROLLBACK을 사용해야하는지 여부는 프로그래밍 논리에만 의존합니다.
COMMIT 또는 ROLLBACK 문을 사용하지 않는 경우 데이터베이스의 최종 상태는 호스트 환경에 따라 다릅니다. 예를 들면 SQL * PLUS 환경에서 PL / SQL 코드 블록에 COMMIT 또는 ROLLBACK 문이없는 경우 데이터베이스 상태는 그 직후에 실행되는 코드 블록에 따라 달라집니다.
Oracle 환경에서 데이터 정의 또는 데이터 제어 쿼리를 실행 한 후 COMMIT 문을 포함하거나 DISCONNECT, EXIT 또는 QUIT 명령을 실행하면 트랜잭션이 커밋됩니다. 또한 ROLLBACK 문을 포함하면 트랜잭션이 취소됩니다.
따라서 다음 시나리오로 인해 트랜잭션이 종료 될 수 있습니다.
- ROLLBACK 또는 COMMIT 문이 실행됩니다.
- DDL 쿼리 ( 예를 들면 a table creation statement)가 실행되고 COMMIT가 기본적으로 실행됩니다.
- DCL 쿼리 ( 예를 들면 GRANT 문)이 실행되고 COMMIT가 기본적으로 실행됩니다.
- 사용자가 데이터베이스 연결을 종료합니다.
- 사용자는 EXIT 문을 실행하여 SQL * PLUS에서 나오면 COMMIT가 기본적으로 실행됩니다.
- SQL * PLUS에서 비정상적인 종료가 발생하고 ROLLBACK이 기본적으로 실행됩니다.
- DML 쿼리가 성공적으로 실행되지 않고 ROLLBACK이 기본적으로 실행되어 데이터베이스를 원래 상태로 되돌립니다.
영구적 인 변경을위한 COMMIT
COMMIT 문은 현재 트랜잭션을 종료하고 트랜잭션에 의해 수행 된대로 영구적으로 수정할 수 있습니다. COMMIT가 실행되면 수정 된 데이터를 확보 할 수 있습니다.
COMMIT 문이 실행되면 테이블의 영향을받는 모든 행이 잠금에서 해제됩니다. 또한 SAVEPOINT를 제거하는 데 도움이됩니다. COMMIT 문은 선택적으로 코드 가독성을 향상시키기 위해서만 추가되는 WORK 문 (COMMIT WORK)과 함께 제공 될 수 있습니다.
COMMIT시 트랜잭션이 실패하고 트랜잭션 상태를 알 수없는 경우 PL / SQL 코드의 COMMENT 텍스트는 트랜잭션 ID와 함께 데이터 사전에 저장됩니다.
트랜잭션 COMMIT 구문 :
COMMIT;
TEACHERS라는 테이블을 고려해 보겠습니다.
아래에 주어진 SQL 문을 사용하여 TEACHERS 테이블을 만들었습니다.
CREATE TABLE TEACHERS ( CODE INT NOT NULL, SUBJECT VARCHAR (15) NOT NULL, NAME VARCHAR (15) NOT NULL, PRIMARY KEY (CODE) );
이 테이블에 값을 삽입 한 후 다음과 같은 방법으로 트랜잭션을 커밋합니다.
INSERT INTO TEACHERS VALUES (1, 'SELENIUM', 'TOM'); INSERT INTO TEACHERS VALUES (2, 'UFT', 'SAM'); INSERT INTO TEACHERS VALUES (3, 'JMETERE', 'TONK'); COMMIT;
다음으로 아래 쿼리가 실행됩니다.
SELECT * FROM TEACHERS;
산출:
변경 사항을 취소하려면 ROLLBACK
현재 트랜잭션이 ROLLBACK 문으로 종료되면 트랜잭션에서 발생해야하는 모든 수정 사항이 취소됩니다.
ROLLBACK 문에는 다음과 같은 기능이 있습니다.
- 데이터베이스는 테이블에서 중요한 행을 실수로 삭제 한 경우 ROLLBACK 문을 사용하여 원래 상태로 복원됩니다.
- SQL 문의 실행 실패로 이어진 예외가 발생하는 경우 ROLLBACK 문을 사용하면 수정 조치를 취할 수있는 프로그램의 시작 지점으로 이동할 수 있습니다.
- COMMIT 문없이 데이터베이스에 대한 업데이트는 ROLLBACK 문으로 취소 할 수 있습니다.
트랜잭션 ROLLBACK 구문 :
ROLLBACK;
SAVEPOINT를 사용한 트랜잭션 ROLLBACK 구문 :
ROLLBACK (TO SAVEPOINT );
여기, save_n SAVEPOINT의 이름입니다.
앞서 만든 TEACHERS 테이블을 고려해 보겠습니다.
ROLLBACK을 사용한 코드 구현 :
DELETE FROM TEACHERS WHERE CODE= 3; ROLLBACK;
다음으로 아래 쿼리가 실행됩니다.
SELECT * FROM TEACHERS;
위 코드의 출력은 다음과 같아야합니다.
위 코드에서는 CODE가 3 인 교사의 기록을 삭제하는 DELETE 문을 실행했지만 ROLLBACK 문으로 인해 데이터베이스에 영향을주지 않고 삭제가되지 않는다.
부분 변경 사항을 되돌리기위한 SAVEPOINT
SAVEPOINT는 현재 트랜잭션 처리 지점에 이름과 ID를 제공합니다. 일반적으로 ROLLBACK 문과 연결됩니다. 이를 통해 전체 트랜잭션을 건드리지 않고 트랜잭션의 일부 섹션을 되돌릴 수 있습니다.
SAVEPOINT에 ROLLBACK을 적용하면 특정 SAVEPOINT 다음에 포함 된 모든 SAVEPOINT가 제거됩니다. 즉, 세 개의 SAVEPOINT를 표시하고 두 번째 SAVEPOINT에 ROLLBACK을 적용하면 세 번째 SAVEPOINT가 자동으로 삭제됩니다.
COMMIT 또는 ROLLBACK 문은 모든 SAVEPOINTS를 삭제합니다. SAVEPOINT에 주어진 이름은 선언되지 않은 식별자이며 트랜잭션 내에서 여러 번 다시 적용될 수 있습니다. 거래 내에서 SAVEPOINT가 이전 위치에서 현재 위치로 이동합니다.
SAVEPOINT에 적용된 ROLLBACK은 트랜잭션의 진행중인 부분에만 영향을줍니다. 따라서 SAVEPOINT는 유효성 검사 지점을 배치하여 긴 트랜잭션을 작은 섹션으로 분할하는 데 도움이됩니다.
트랜잭션 SAVEPOINT의 구문 :
SAVEPOINT ;
여기, save_n SAVEPOINT의 이름입니다.
이전에 만든 TEACHERS 테이블을 다시 고려해 보겠습니다.
ROLLBACK WITH SAVEPOINT의 코드 구현 :
INSERT INTO TEACHERS VALUES (4, 'CYPRESS', 'MICHEAL'); SAVEPOINT s; INSERT INTO TEACHERS VALUES (5, 'PYTHON', 'STEVE'); INSERT INTO TEACHERS VALUES (6, 'PYTEST', 'ARNOLD'); ROLLBACK TO s; INSERT INTO TEACHERS VALUES (7, 'PROTRACTOR', 'FANNY'); COMMIT;
다음으로 아래 쿼리가 실행됩니다.
SELECT * FROM TEACHERS;
위 코드의 출력은 다음과 같아야합니다.
위 코드에서 SAVEPOINT로 ROLLBACK 후 에스 적용되면 두 개의 행만 삽입됩니다 (예 : 각각 CODE 4 및 7을 사용하는 교사). 코드 1, 2, 3의 교사가 테이블 생성 중에 추가되었습니다.
PL / SQL의 잠금 테이블
PL / SQL의 LOCK 문을 사용하면 잠금 모드에서 전체 데이터베이스를 잠글 수 있습니다. 이것은 우리가 테이블에 대한 액세스를 공유할지 또는 허용하지 않을지를 결정합니다.
잠금 테이블의 예를 들어 보겠습니다.
LOCK TABLE teachers IN ROW SHARE MODE NOWAIT;
위의 쿼리는 행 공유 모드에서 TEACHERS 테이블을 잠급니다. 행 공유 모드는 테이블에 대한 동시 사용 권한을 제공합니다. 사용자가 개별 용도로 전체 테이블을 잠글 수는 없습니다. COMMIT 또는 ROLLBACK 실행 후 테이블 잠금이 해제됩니다. NOWAIT 키워드는 잠금이 해제 될 때까지 데이터베이스가 대기 할 수 없음을 언급하는 데 사용됩니다.
잠금 모드는 테이블에 적용 할 수있는 다른 잠금을 결정하는 데 중요합니다.
PL / SQL에서 사용할 수있는 몇 가지 LOCK 모드에 대해 설명하겠습니다.
Sl. 아니 | 잠금 모드 | 목적 |
---|---|---|
1 | 행 공유 | 여러 사용자가 동시에 테이블을 사용할 수 있습니다. 그러나 사용자는 독점 사용을 위해 전체 테이블을 잠글 수 없습니다. |
두 | 행 독점 | 여러 사용자가 동시에 테이블을 사용할 수 있습니다. 그러나 사용자는 공유 모드에서 독점 사용을 위해 전체 테이블을 잠글 수 없습니다. |
삼 | 공유 업데이트 | 여러 사용자가 동시에 테이블을 사용할 수 있습니다. 그러나 사용자는 독점 사용을 위해 전체 테이블을 잠글 수 없습니다. |
4 | 공유 | 이를 통해 테이블에서 동시에 여러 쿼리를 실행할 수 있습니다. 그러나 사용자는 잠긴 테이블을 수정할 수 없습니다. |
5 | 행 독점 공유 | 테이블에 대한 읽기 전용 액세스 권한이있는 사용자에게 허용됩니다. 테이블을 수정하거나 공유 모드에서 테이블을 잠글 수 없습니다. |
6 | 독특한 | 잠긴 테이블에서만 쿼리를 실행할 수 있습니다. |
PL / SQL의 자동 트랜잭션 제어
INSERT 또는 DELETE 문이 실행될 때마다 기본적으로 COMMIT 문이 실행되도록 구성 할 수 있습니다. 이는 AUTOCOMMIT 환경 변수를 ON으로 설정하여 수행됩니다.
통사론:
SET AUTOCOMMIT ON;
다시 말하지만, AUTOCOMMIT 환경 변수를 OFF로 설정하여 해제 할 수 있습니다.
통사론:
SET AUTOCOMMIT OFF;
자주 묻는 질문과 답변
Q # 1) PL SQL의 트랜잭션은 무엇입니까?
대답: 트랜잭션은 원자 단위로 작동하는 SQL 데이터 계산 문 그룹입니다. 모든 트랜잭션은 본질적으로 원자 적이며 커밋되거나 롤백됩니다.
소프트웨어 테스트의 테스트 유형
Q # 2) PL SQL에서 COMMIT는 무엇입니까?
대답: COMMIT 문은 현재 트랜잭션에 의해 데이터베이스를 영구적으로 변경하는 데 사용됩니다. 데이터베이스에 대한 수정 사항이 사용자에게 표시됩니다.
Q # 3) 거래는 어떻게 종료하나요?
대답: 트랜잭션은 COMMIT 또는 ROLLBACK 문으로 명시 적으로 종료됩니다. DML 문이 실행 된 후 무조건 종료 될 수도 있습니다.
Q # 4) 트리거에서 커밋 할 수 있습니까?
대답: 예, 트리거 트랜잭션이 부모 트랜잭션에서 독립형 인 경우에만 트리거에서 커밋 할 수 있습니다.
Q # 5) SELECT는 트랜잭션입니까?
대답: 예, SELECT는 트랜잭션의 모든 특성을 가진 트랜잭션입니다.
Q # 6) Oracle에서 트랜잭션을 롤백하려면 어떻게합니까?
대답: Oracle에서 트랜잭션을 롤백하려면 ROLLBACK 문을 실행해야합니다. 트랜잭션에 의해 데이터베이스에 적용된 모든 변경 사항을 취소하고 원래 상태로 복원합니다.
결론
이 자습서에서는 PL SQL 트랜잭션 관리에 필수적인 PL SQL 트랜잭션의 몇 가지 기본 개념을 자세히 설명했습니다. 아래에 나열된 다음 주제를 다루었습니다.
- 트랜잭션.
- 트랜잭션에서 COMMIT 사용.
- 트랜잭션에서 ROLLBACK이란 무엇입니까?
- 트랜잭션에서 SAVEPOINT와 함께 ROLLBACK 사용.
- 잠금 테이블.
추천 도서
- 예제가있는 초보자를위한 PL SQL 자습서 | PL / SQL이란?
- Oracle 데이터베이스 애플리케이션 개발 : Oracle SQL 및 PL / SQL
- PL SQL 패키지 : Oracle PL / SQL 패키지 자습서 (예제 포함)
- SQL 대 MySQL 대 SQL Server의 차이점 (예제 포함)
- PL SQL 날짜 / 시간 형식 : PL / SQL의 날짜 및 시간 함수
- 예제를 사용한 PL SQL 예외 처리에 대한 완전한 가이드
- SQL과 NoSQL의 정확한 차이점 및 NoSQL 및 SQL 사용시기 파악
- Oracle Database Tutorial-Oracle Database 란 무엇입니까?