트랜잭션 및 세션 관리 언어
트랜잭션 및 세션 관리를 위한 명령어를 자세히 설명합니다.
트랜잭션 및 세션 관리를 위한 명령어는 알파벳 순으로 나열하고, 각 명령어에 대한 설명과 문법, 예제를 기술합니다. 문법을 설명할 때는 “ SQL 연산”의 형식을 그대로 따르고, 키워드와 문법의 구성요소는 별도의 표로 설명합니다.
ALTER SESSION
실행자가 가지고 있는 세션 환경을 조정합니다. ALTER SESSION으로 변경된 초기화 환경 변수나 세션 환 경 변수는 실행자의 접속이 끊어질 때까지 유효합니다.
참고
현재 세션뿐만 아니라 전체 시스템의 환경을 조정하려면 “ALTER SYSTEM”의 내용을 참고합니다.
ALTER SESSION의 세부 내용은 다음과 같습니다.
문법

특권
아무런 특권을 요구하지 않습니다.
구성요소
alter_session
CLOSE DATABASE LINK
지정한 데이터베이스 링크의 연결을 닫음
데이터베이스 링크를 열어 놓음으로써 발생하는 네트워크 리소스의 낭비를 줄이고 싶을 때 사용함
CLOSE DATABASE LINK를 사용해 명시적으로 연결을 닫지 않으 면 세션이 끊어질 때까지 연결이 열려 있음
dblink_name
데이터베이스 링크의 이름을 명시
SET alter_session_params
초기화 환경 변수나 세션 환경 변수의 값을 바꾸기 위해 사용
변경 한 값은 세션이 유지되는 동안 유효
alter_session_params
CURRENT_SCHEMA
현재 세션의 스키마를 변경
변경 이후 스키마가 지정되지 않은 객 체는 변경한 스키마부터 찾아보게 됨
세션의 스키마가 변경되었다고 해서 세션 사용자가 변경되는 것은 아님
즉, 객체를 찾는 데에는 스키마가 사용되지만 그 객체를 사용할 수 있는가를 검사할 때는 세션 사용자를 기준으로 함
ISOLATION LEVEL
현재 세션이 만드는 트랜잭션의 고립성 수준을 설정
ISOLATION_LEVEL
설정할 수 있는 고립성 수준은 다음과 같음
SERIALIZABLE
READ COMMITTED (기본값)
READ ONLY
SERIALIZABLE
세션에 참가하는 트랜잭션은 SQL-92에 명시된 직렬화된 트랜잭션 고립성 모드(Serializable Transaction Isolation Mode)로 동작
이 모드에서는 직렬화된 트랜잭션이 시작되고 난 후 어떤 로우를 갱신한 다른 트랜잭션이 커밋했을 때 그 로우를 직렬화된 트랜잭션이 DML 문을 사용해 변경하려고 하면 변경이 일어나지 않고 에러가 반환됨
READ COMMITTED
이 모드에서는 어떤 트랜잭션이 로우를 변경하고 커밋하지 않았을 경우 그 로우에 현재 트랜잭션이 DML 문을 사용해 변경하려고 하면 그 로우에 설정된 잠금 때문에 대기하게 됨
READ ONLY
기본적으로 SERIALIZABLE 모드와 똑같이 동작하지만, 데이터를 변경하려고 하면 에러가 반환됨
TIME_ZONE
현재 세션의 시간대를 변경
'[+ l-]hh:mi'은 시와 분으로 표현된 시간대 오프셋을 의미하며, - 12:00~14:00까지의 값을 사용할 수 있음
LOCAL을 설정한 경우 처음 세션이 시작될 때의 시간대를 현재 세션의 시간대로 변경
데이터베이스에서 지원하는 지역 이름을 알고 싶으면 VT_TIMEZONE_NAMES 테이블의 TZNAME 컬럼을 조회하면 됨
param_assignment_clause
세션 초기화 파라미터를 설정
VT_PARAMETER 테이블 또는 VT_PARAMETER 동의어에서 파라미 터를 확인할 수 있음
이중 Dynamic, SESSION 클래스를 가지고 있는 초기화 파라미터만 ALTER SESSION을 사용하여 변경할 수 있음
Dynamic은 서버가 활성 화된 상태에서 변경이 가능
참고로 Static은 $TB_SID.tip 파일에 내용을 설정하기 때문에 서버를 재기동해야만 적용됨
SESSION은 세션별로 변경이 가능
SYSTEM은 세션별로 설정할 수 없고, 데이터베이스 전체에서 함께 사용하는 파라미터를 의미
– param_assignment_clause
param_name
세션 초기화 파라미터의 이름을 명시
param_value
세션 초기화 파라미터의 값을 명시
예제
다음은 ALTER SESSION을 사용해 세션 환경을 변경하는 예입니다.
ALTER SYSTEM
체크포인트 작업을 수행하거나 진행 중인 세션을 중지하는 등의 시스템을 조작하거나, 초기화 파라미터 를 동적으로 변경하는 등 시스템의 속성을 변경할 때 사용합니다.
ALTER SYSTEM의 세부 내용은 다음과 같습니다.
문법


특권
ALTER SYSTEM 시스템 특권을 부여받아야 합니다.
구성요소
– alter_system
CHECKPOINT
Tibero가 체크포인트 작업을 수행하도록 함
체크포인트 작업을 수행하면 버퍼 캐시의 모든 갱신된 디스크 블록이 디스크에 반영됨
체크포인트는 트랜잭션의 커밋 여부와는 무관함
커밋되지 않은 트랜잭션이 변경한 디스크 블록도 디스크에 반영되며, 그렇다고 해도 다른 트랜잭션이 커밋되지 않은 블록을 볼 수는 없음
CHECKPOINT LOCAL
Tibero TAC 환경에서 접속한 노드에 대한 체크포인트 작업을 수행하도록 함
CHECKPOINT GLOBAL
Tibero TAC 환경에서 전체 노드에 대한 체크포인트 작업을 수행하도록 함
FLUSH SHARED_POOL
공유 풀(shared pool)의 내용을 모두 비움
공유 풀에는 데이터 딕셔너리(data dictionary) 정보 등이 들어가며, 현재 사용 중인 정보는 비우지 않음
FLUSH BUFFER_CACHE
버퍼 캐시(buffer cache)의 더티 블록(dirty block)을 디스크에 기록
이때 버퍼 캐시의 더티 블록을 디스크에 기록만 하고, 버퍼 캐시의 블록들을 무효화(invalidation)시키지는 않음
FLUSH REDO_BUFFER
Redo 로그를 강제로 flush
Redo 로그는 트랜잭션을 커밋하지 않더라도 주기적으로 flush되므로 따로 명령을 실행할 필요는 없으나, Redo 로그가 flush된 것을 명시적으로 나타내기 위해 명령을 실행할 수 있음
FLUSH PPC FLUSH PPC ALL FLUSH PP_CACHE FLUSH PP_CACHE ALL
PP 캐시에서 모든 physical plan 정보를 강제로 flush
FLUSH PPC sql_id child_no FLUSH PPC child_no sql_id FLUSH PP_CACHE sql_id child_no FLUSH PP_CACHE child_no sql_id
Physical plan의 sql id와 child number를 명시하면 PP 캐시에서 해당 physical plan 정보를 강제로 flush
FLUSH DDC unsigned_integer
unsigned_integer에 스키마 객체 ID를 명시하면 DD 캐시에서 해당 스키 마 객체 정보를 강제로 flush
시퀀스 정보는 flush하지 않음
FLUSH DDC unsigned_integer LOCAL
TAC 환경일 때 unsigned_integer에 스키마 객체 ID를 명시하면 접속한 노드의 DD 캐시에서 해당 스키마 객체 정보를 강제로 flush
시퀀스 정보는 flush하지 않음
FLUSH DDC unsigned_integer GLOBAL
TAC 환경일 때 unsigned_integer에 스키마 객체 ID를 명시하면 전체 노드의 DD 캐시에서 해당 스키마 객체 정보를 강제로 flush
시퀀스 정보는 flush하지 않음
FLUSH DDC ALL
DD 캐시에서 시퀀스를 제외한 모든 스키마 객체 정보를 강제로 flush
FLUSH DDC ALL LOCAL
TAC 환경일 때 접속한 노드의 DD 캐시에서 시퀀스를 제외한 모든 스키마 객체 정보를 강제로 flush
FLUSH DD_CACHE unsigned_integer
FLUSH DDC unsigned_integer와 동일한 기능
FLUSH DD_CACHE unsigned_integer LOCAL
FLUSH DDC unsigned_integer LOCAL과 동일한 기능
FLUSH DD_CACHE unsigned_integer GLOBAL
FLUSH DDC unsigned_integer GLOBAL과 동일한 기능
FLUSH DD_CACHE ALL
FLUSH DDC ALL과 동일한 기능
FLUSH DD_CACHE ALL LOCAL
FLUSH DDC ALL LOCAL과 동일한 기능
SWITCH LOGFILE
로그 그룹을 교체
로그 버퍼의 모든 내용이 현재의 로그 그룹으로 저장되고, 이후 생성되는 Redo 로그는 다음의 로그 그룹에 저장됨
로그 파일에 대한 자세한 내용은 “Tibero 관리자 안내서”를 참고
SWITCH LOGFILE LOCAL
TAC 환경에서 접속한 노드에 대해서만 Redo 로그 그룹을 교체
SWITCH LOGFILE GLOBAL
TAC 환경에서 전체 노드에 대해 Redo 로그 그룹을 교체
SWITCH FLASHBACK LOG FILE
Flashback 로그 그룹을 교체
Flashback 로그 버퍼의 모든 내용이 현재의 로그 그룹으로 저장되고, 이후 생성되는 Flashback 로그는 다음의 로그 그룹에 저장됨
Flashback 로그 파일에 대한 자세한 내용은 "Tibero 관리자 안내서"를 참고
SWITCH FLASHBACK LOG FILE LOCAL
TAC 환경에서 접속한 노드에 대해서만 Flashback 로그 그룹을 교체
SWITCH FLASHBACK LOG FILE GLOBAL
TAC 환경에서 전체 노드에 대해 Flashback 로그 그룹을 교체
SWITCH SYSLOG
syslog 파일을 교체
현재 사용 중인 syslog 파일을 백업하고 새로운 syslog 파일을 생성
SWITCH SYSLOG LOCAL
TAC 환경에서 접속한 노드에 대해 syslog 파일을 백업하고 새로운 syslog 파일을 생성
SWITCH SYSLOG GLOBAL
TAC 환경에서 전체 노드에 대해 syslog 파일을 백업하고 새로운 syslog 파일을 생성
SWITCH DBMSLOG
dbmslog 파일을 교체
현재 사용 중인 dbmslog 파일을 백업하고 새로운 dbmslog 파일을 생성
SWITCH DBMSLOG LOCAL
TAC 환경에서 접속한 노드에 대해 dbmslog 파일을 백업하고 새로운 dbmslog 파일을 생성
SWITCH DBMSLOG GLOBAL
TAC 환경에서 전체 노드에 대해 dbmslog 파일을 백업하고 새로운 dbmslog 파일을 생성
SWITCH TRACELOG
tracelog 파일을 교체
현재 사용 중인 tracelog 파일을 백업하고 새로운 tracelog 파일을 생성
SWITCH TRACELOG LOCAL
TAC 환경에서 접속한 노드에 대해 tracelog 파일을 백업하고 새로운 tracelog 파일을 생성
SWITCH TRACELOG GLOBAL
TAC 환경에서 전체 노드에 대해 tracelog 파일을 백업하고 새로운 tracelog 파일을 생성
kill_session_clause
세션을 중지시킴
트랜잭션 종료를 기다리지 않고, 마치 접속이 종료된 것처럼 처리
security_clause
컬럼 암호화 등의 보안 기능에 사용하는 보안 지갑(Wallet)을 열고 닫음
LISTENER REMOTE ON
로컬 호스트가 아닌 외부 클라이언트의 네트워크 접속을 허용
LISTENER REMOTE OFF
로컬 호스트가 아닌 외부 클라이언트의 네트워크 접속을 차단
단, 로컬 호스트의 tbdns.tbr 파일에서 IP가 'localhost'라고 설정된 경우에는 해당
그리고 이미 접속된 클라이언트의 접속은 유지됨
LISTENER PARAMETER RELOAD
서버 운영 중에 LSNR_INVITED_IP 또는 LSNR_DENIED_IP의 설정을 변경한 경우 이를 적용
LISTENER ADD PORT port
LISTENER_PORT 이외의 데이터베이스의 접속 포트 port를 추가
LISTENER DELETE PORT port
LISTENER_PORT 이외의 추가된 데이터베이스의 접속 포트 port를 삭제
ARCHIVE LOG archive_log_clause
Current가 아닌 모든 Redo 로그 그룹들에 대한 아카이브 로그를 생성
ARCHIVE LOG archive_log_clause LOCAL
TAC 환경에서 접속한 노드에만 해당되는 Current가 아닌 모든 Redo 로그 그룹들에 대한 아카이브 로그를 생성
ARCHIVE LOG archive_log_clause GLOBAL
TAC 환경에서 전체 노드에 해당되는 Current가 아닌 모든 Redo 로그 그룹들에 대한 아카이브 로그를 생성
ARCHIVE FLASHBACK LOG archive_log_clause
Current가 아닌 모든 Flashback 로그 그룹들에 대한 아카이브 로그를 생성
ARCHIVE FLASHBACK LOG archive_log_clause LOCAL
TAC 환경에서 접속한 노드에만 해당되는 Current가 아닌 모든 Flashback 로그 그룹들에 대한 아카이브 로그를 생성
ARCHIVE FLASHBACK LOG archive_log_clause GLOBAL
TAC 환경에서 전체 노드에 해당되는 Current가 아닌 모든 Flashback 로그 그룹들에 대한 아카이브 로그를 생성
SET param_assignment_clause
시스템 초기화 파라미터를 설정
ENABLE BLOCK CHANGE TRACKING
Block Change Tracking 모드를 활성화
DISABLE BLOCK CHANGE TRACKING
Block Change Tracking 모드를 비활성화
ADD SSVR ip port
TAS 가동 중에 새로운 SSVR을 추가하며 해당 ip 및 port에 맞는 SSVR가 TAS 인스턴스에서 수행됨
kill_session_clause
sess_id
접속을 끊을 세션의 ID
VT_SESSION을 통해 확인할 수 있으며, 해당 세션이 없는 경우 에러가 발생
serial_no
접속을 끊을 세션의 일련번호
VT_SESSION을 통해 확인할 수 있으며, 해당 세션이 없는 경우 에러가 발생
inst_id
접속을 끊을 세션의 인스턴스의 ID
TAC 환경에서 다른 노드의 세션의 접속을 끊을 때에만 입력
GV$SESSION을 통해 확인할 수 있으며, TAC 환경이 아니거나 해당 인 스턴스가 없는 경우 에러가 발생
security_clause
OPEN IDENTIFIED BY 'pass word1'
보안 지갑을 열 때 사용
password1에는 보안 지갑의 패스워드를 입력
패스워드는 보안 지갑을 생성할 때 입력한 것과 같아야 하며, 보안 지갑은 $TB_HOME/bin 디렉터리에 있는 tbwallet_gen 프로그램을 이용하여 생성
OPEN IDENTIFIED BY 'pass word1' MIGRATE USING 'password2'
HSM 장비 사용 환경에서 보안 지갑을 열 때 사용
HSM 장비를 사용하는 경우 HSM 장비의 패스워드 password1과 보안 지갑의 패스워드 password2를 사용하여 보안 지갑을 열 수 있음
CLOSE
보안 지갑을 닫을 때 사용
– archive_log_clause
ALL
아직 아카이브 되지 않은 Redo 로그를 모두 아카이브
현재 사용 중인 Redo 로그는 대상에서 제외됨
로그 파일과 아카이브에 대한 자 세한 내용은 "Tibero 관리자 안내서"를 참고
예제
다음은 ALTER SYSTEM을 사용하여 시스템의 속성을 변경하는 예입니다.
다음은 KILL SESSION을 사용했을 때 해당 세션이 없는 경우 에러가 발생하는 예입니다.
COMMIT
현재 트랜잭션을 종료하고 트랜잭션의 갱신된 내용을 데이터베이스에 반영합니다. 동시에 모든 저장점을 삭제하고 로우에 설정된 잠금을 해제합니다.
COMMIT의 세부 내용은 다음과 같습니다.
문법

구성요소
WORK
SQL 표준과 호환성을 위해 허용된 문법
생략하더라도 동작 및 결과에는 어떠한 영향도 없음
FORCE
특정 트랜잭션을 강제로 커밋할 때 사용
CORRUPT_XID
트랜잭션 복구를 실패한 트랜잭션을 강제로 커밋
트랜잭션 복구를 실패한 트랜잭션은 동적 뷰 V$CORRUPT_XID로 조회할 수 있음
단, 강제로 커밋된 트랜잭션은 복구되지 않으므로 데이터 일관성이 보장되지 않음
CORRUPT_XID_ALL
트랜잭션 복구를 실패한 경우 실패한 모든 트랜잭션을 강제로 커밋
단, 강제로 커밋된 트랜잭션은 복구되지 않으므로 데이터 일관성이 보장되지 않음
tx_id_literal
XA에서 지연된 트랜잭션을 처리할 때 사용
DBA_2PC_PENDING 뷰의 LOCAL_TRAN_ID 컬럼에 해당하는 값을 입력
작은따옴표(')를 사용하는 것을 유의함
예제
다음은 COMMIT을 실행하는 예입니다.
존재하지 않는 트랜잭션을 지정하면, 다음과 같은 에러가 발생합니다.
LOCK TABLE
하나 이상의 테이블, 테이블 파티션, 테이블 서브파티션을 특정 모드로 잠근다. DML 수행 등으로 인한 자 동 잠김보다 상위 모드로 적용되며, 작업 수행 중 다른 사용자의 테이블에 대한 접근을 금지하거나 허용할 수 있습니다. 잠긴 테이블은 트랜잭션을 커밋하거나 롤백할 때까지 풀리지 않습니다. 테이블을 조회하는 작업은 테이블 잠금을 필요로하지 않으므로, 테이블을 잠그더라도 다른 사용자의 테이블 조회를 막지 않습니다.
LOCK TABLE의 세부 내용은 다음과 같습니다.
문법

특권
사용자의 스키마에 있는 테이블을 잠그기 위해서는 별다른 특권이 필요하지 않다. 단, 다른 사용자의 스 키마에 있는 테이블을 잠그기 위해서는 LOCK ANY TABLE 시스템 특권이 있어야 합니다.
구성요소
– lock_table
schema
잠글 테이블을 포함하고 있는 스키마의 이름
생략하면 현재 사용 자의 스키마로 인식됨
table, view
잠글 테이블 또는 뷰의 이름
partition_ext_clause
잠글 파티션 또는 서브파티션을 지정
lockmode MODE
잠글 모드를 설정
NOWAIT
다른 사용자가 먼저 테이블을 잠그고 있어서 테이블을 잠글 수 없는 경 우 기다리지 않고 곧바로 실패하도록 설정
WAIT integer
다른 사용자가 먼저 테이블을 잠그고 있어서 테이블을 잠글 수 없는 경우 일정한 시간만큼 기다림
지정된 시간(초)이 초과하면 실패
- partition_ext_clause
partition
잠글 테이블 파티션의 이름
subpartition
잠글 테이블 서브파티션의 이름
- lockmode
ROW SHARE
테이블에 대한 동시 접근을 허용하지만 배타적 접근을 허용하지 않음
ROW EXCLUSIVE
ROW SHARE와 같지만 SHARE 모드로 잠그는 것도 허용하지 않음
UPDATE, INSERT, DELETE를 수행할 때 자동으로 설정되는 모드
SHARE
동시 조회는 가능하지만 테이블 수정은 허용하지 않
SHARE ROW EXCLUSIVE
전체 테이블을 조회할 때 사용
다른 사용자가 테이블을 조회하는 것은 허용하지만 SHARE 모드로 테이블을 잠그거나 테이블을 수정하는 것은 허용하지 않음
EXCLUSIVE
테이블 조회는 가능하지만 테이블에 대한 다른 모든 동작은 허용하지 않음
예제
다음은 LOCK TABLE을 사용해 테이블을 잠그는 예입니다.
ROLLBACK
현재 트랜잭션을 종료하고 트랜잭션에서 갱신된 내용을 모두 취소합니다. 동시에, 모든 저장점을 삭제하고 로우에 설정된 잠금을 해제합니다.
ROLLBACK의 세부 내용은 다음과 같습니다.
문법

구성요소
WORK
SQL 표준과 호환성을 위해 허용된 문법
생략하더라도 동작 및 결과에는 어떠한 영향도 없음
SAVEPOINT
특정 저장점까지만 롤백을 하고자 할 때 사용
지정되지 않은 저장점을 명시하면, 에러가 발생
저장점의 이름은 대소문자를 구분하지 않음
savept_name
저장점의 이름을 명시
FORCE
특정 트랜잭션을 강제로 롤백할 때 사용
tx_id_literal
XA에서 지연된 트랜잭션을 처리할 때 사용
DBA_2PC_PENDING 뷰의 LOCAL_TRAN_ID 컬럼에 해당하는 값을 입력
작은따옴표(' ')를 사용하는 것을 유의
예제
다음은 SAVEPOINT로 저장점을 지정하고, ROLLBACK을 사용해 지정된 저장점까지 롤백하는 예입니다.
다음은 존재하지 않는 트랜잭션을 지정했을 때 발생하는 에러입니다.
SAVEPOINT
현재 트랜잭션에 저장점을 설정합니다. 부분 롤백을 수행하기 위해서는 반드시 저장점을 미리 설정해야 한 다. 저장점 설정은 트랜잭션의 실행에 전혀 영향을 주지 않습니다.
SAVEPOINT의 세부 내용은 다음과 같습니다.
문법

구성요소
savept_name
저장점의 이름은 현재 트랜잭션에서 유일해야 함
만약 같은 트랜잭션에서 이전에 설정한 저장점의 이름과 동일한 저장점을 설정 하면, 이전의 저장점은 제거됨
저장점의 이름은 대소문자를 구분하지 않음
예제
다음은 SAVEPOINT를 사용해 저장점을 설정하는 예입니다.
SET ROLE
사용자에게 할당된 역할을 활성화하거나 비활성화합니다.
참고
역할을 생성, 변경, 제거하기 위해서는 “CREATE ROLE”, “ALTER ROLE”, “DROPROLE”의 내용을 참고합니다.
역할에 특권을 부여하거나 회수하기 위해서는 “GRANT”, “REVOKE”의 내용을 참고합니다.
SET ROLE의 세부 내용은 다음과 같습니다.
문법

특권
활성화 또는 비활성화하려는 역할은 해당 사용자에게 이미 사용이 허가된 역할이어야 합니다.
구성요소
role_name
부여받은 역할 중에서 활성화하려는 역할을 나열
이곳에 포함되지 않은 역 할은 자동으로 비활성화됨
IDENTIFIED BY
패스워드가 설정된 경우에는 해당 역할을 사용하려고 할 때 해당 패스워드를 입력해야 함
역할에 패스워드를 설정하는 방법은 ALTER ROLE과 CREATE ROLE을 참고
ALL
부여받은 모든 역할을 사용할 수 있도록 설정
단, 사용할 수 있는 역할 중에 패스워드가 설정된 역할이 있으면 해당 역할을 EXCEPT 절로 제외하지 않는 이상 ALL 절을 이용해 사용할 수 있게 설정할 수 없음
EXCEPT
ALL 절을 사용해 부여받은 모든 역할을 사용할 수 있도록 설정하려고 할 때 설정 에서 제외할 역할이 포함됨
즉, EXCEPT 절에 나열한 역할을 제외하고는 다 른 모든 역할을 사용할 수 있게 설정됨
예제
다음은 사용자에게 역할을 할당하고, 할당된 역할을 SET ROLE을 사용해 활성화하는 예입니다.
위의 예를 보면, 역할 A, B, C, D, E를 생성하는데, 그 중 역할 D와 역할 E는 패스워드를 설정하여 생성 하였다. 패스워드가 설정되지 않은 역할 A, B, C는 아무런 제약 없이 사용할 수 있지만, 패스워드가 설 정된 역할 D와 E는 IDENTIFIED BY 절을 사용하여 패스워드를 입력해야만 사용할 수 있습니다.
또한, 마지 막 SET ROLE 문장을 보면 역할 A, B를 제외한 C, D, E만 사용할 수 있게 설정했으므로, 기존에 사용할 수 있게 설정되었던 역할 A, B가 사용할 수 없는 상태로 설정이 변경된 것을 볼 수 있습니다.
다음은 EXCEPT를 사용하는 예입니다.
위의 예에서, 역할 D, E는 패스워드가 설정되어 있습니다. ALL 절에서는 패스워드를 입력할 방법이 없으므 로, ALL 절을 이용해서는 역할 D, E를 사용할 수 있게 설정할 수 없습니다. 패스워드를 사용하는 역할을 EXCEPT 절을 이용하여 제외하면, 제외되고 남은 나머지 역할을 ALL 절을 이용하여 사용할 수 있게 설 정할 수 있습니다.
SET TRANSACTION
현재 트랜잭션의 고립성 수준이나 이름을 설정합니다. 이 명령어는 현재 트랜잭션에서 실행하는 최초의 문 장이어야 합니다.
SET TRANSACTION의 세부 내용은 다음과 같습니다.
문법

구성요소
ISOLATION LEVEL 또는 ISOLATION_LEVEL
ISOLATION LEVEL 문으로 트랜잭션의 고립성을 설정할 수 있음
설정할 수 있는 고립성 수준은 다음과 같음 – SERIALIZABLE – READ COMMITTED (기본값) – READ ONLY
SERIALIZABLE
세션에 참가하는 트랜잭션은 SQL-92에 명시된 직렬화된 트랜잭션 고립성 모드(Serializable Transaction Isolation Mode) 로 동작
이 모드에서는 직렬화된 트랜잭션이 시작되고 난 후 어떤 로우를 갱신한 다른 트랜잭션이 커밋했을 때 그 로우를 직렬화된 트랜잭션이 DML 문을 사용해 변경하려고 하면 변경이 일어나지 않고 에러가 반환됨
READ COMMITTED
이 모드에서는 어떤 트랜잭션이 로우를 변경하고 커밋하지 않았을 경우 그 로우에 현재 트랜잭션이 DML 문을 사용해 변경하려고 하면 그 로우에 설정된 잠금 때문에 대기하게 됨
READ ONLY
기본적으로 SERIALIZABLE 모드와 똑같이 동작하지만, 데이터를 변경하려고 하면 에러가 반환됨
NAME
NAME 문으로 트랜잭션의 이름을 설정할 수 있음(기본값: NULL)
트랜잭션 이름은 V$TRANSACTION 을 조회해 보면 알 수 있음
transaction_name
설정할 트랜잭션의 이름
예제
다음은 현재 트랜잭션을 READ COMMITTED로 설정한 후 동적 뷰 V$TRANSACTION을 조회하는 예입니다.
위와 같이 SET TRANSACTION 문은 트랜잭션 최초의 문장이어야 하며, 그렇지 않은 경우 에러가 발생 합니다.
다음과 같이 트랜잭션의 이름을 설정할 수도 있습니다.
Last updated

