ALTER AUDIT POLICY
기능
Audit policy 객체에 감사 대상을 추가하거나 삭제한다.
구문
<alter audit policy statement> ::=
ALTER AUDIT POLICY policy_name
{ <add_audit_option> | <drop_audit_option> }
;
<add_audit_option> ::=
ADD { <privilege_audit_clause> | <role_audit_clause> | <action_audit_clause> } [, ...]
<drop_audit_option> ::=
DROP { <privilege_audit_clause> | <role_audit_clause> | <action_audit_clause> } [, ...]
<privilege_audit_clause> ::=
PRIVILEGES <database_privilege> [, ...]
<role_audit_clause> ::=
ROLES <role_name> [, ...]
<action_audit_clause> ::=
ACTIONS { <object_action_audit> | <system_action_audit> } [, ...]
<object_action_audit> ::=
ALL ON [schema_name.]object_name
| <object_action> ON [schema_name.]object_name
<system_action_audit> ::=
ALL
| <system_action>사용 범위 및 접근 권한
<alter audit policy statement> 구문을 수행하려면 사용자에게 AUDIT SYSTEM ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
policy_name
변경할 audit policy 객체의 이름이다.
<add_audit_option>
Audit policy에 감사대상을 추가한다.
<drop_audit_option>
Audit policy 감사대상에서 삭제한다.
<privilege_audit_clause>
자세한 내용은 CREATE AUDIT POLICY를 참조한다.
<role_audit_clause>
자세한 내용은 CREATE AUDIT POLICY를 참조한다.
<action_audit_clause>
자세한 내용은 CREATE AUDIT POLICY를 참조한다.
설명
이미 활성화된 audit policy를 변경할 수 있지만 기존 session에는 영향을 미치지 않고 새로 생성되는 session에만 영향을 미친다.
다음과 같이 ALL 옵션을 DROP 할 경우, 모든 action이 삭제되는 것이 아니라 해당 ALL 옵션만 삭제된다.
CREATE AUDIT POLICY p1
ACTIONS ALL ON u1.t1,
SELECT ON u1.t1;
ALTER AUDIT POLICY p1 DROP
ACTIONS ALL ON u1.t1;사용 예
다음은 audit policy에 새로운 audit option을 추가하는 예이다.
ALTER AUDIT POLICY policy_dml
ADD ACTIONS SELECT ON u1.t1;다음은 audit policy에서 audit option을 삭제하는 예이다.
ALTER AUDIT POLICY policy_dml
DROP ACTIONS SELECT ON u1.t1;호환성
SQL 표준에는 audit policy가 없다.
참조
관련 내용은 다음을 참조한다.
Audit policy 객체 관리
Audit policy 활성화/ 비활성화
Audit trail 조회: AUDIT_TRAIL
Audit trail 삭제: ALTER DATABASE CLEAR AUDIT TRAIL
ALTER CLUSTER GROUP name ADD MEMBER
기능
Cluster group에 cluster member를 추가한다.
구문
<alter cluster group add member statement> ::=
ALTER CLUSTER GROUP group_name ADD
<cluster member definition> [, ...]
;
<cluster member definition> ::=
CLUSTER MEMBER member_name <connection attribute> [<member position>]
<connection attribute> ::=
HOST 'address' PORT port_no
<member position> ::=
POSITION DEFAULT
| POSITION MAX
| POSITION number사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter cluster group add member statement> 구문을 수행하려면 사용자에게 ADMINISTRATION ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
group_name
Cluster group의 이름이다.
<cluster member definition>
Cluster group에 포함될 cluster member를 정의한다. Cluster group은 최대 32 개의 cluster member를 포함할 수 있다.
member_name
Cluster member의 이름이다. Cluster member의 이름은 해당 member의 database를 생성할 때 정의한 member의 이름과 동일해야 한다. 동일한 cluster group, cluster member 이름이 존재하지 않아야 한다. 이름의 길이가 128 바이트보다 작아야 한다.
Cluster member의 start-up 단계가 GLOBAL OPEN이어야 한다.
<connection attribute>
Cluster member간 통신을 위한 연결 정보를 정의한다. <connection attribute>는 해당 member의 database를 생성할 때 정의한 HOST, PORT와 동일해야 한다. HOST와 PORT 조합은 cluster system 내에서 유일해야 한다.
HOST 'address'는 host name 또는 IPv4 주소를 사용한다. Host name을 사용할 경우 시스템의 첫 번째 IPv4 주소를 사용한다.
PORT port_no는 1024 ~ 49151 범위의 값이어야 한다.
<member position>
Cluster member의 position number를 지정한다.
POSITION DEFAULT
시스템이 자동으로 position number를 지정한다.
POSITION MAX
빈 position number가 있더라도 새로운 member position number를 지정한다.
가장 큰 member position 보다 큰 값을 지정한다.
POSITION number
number에 해당하는 position number를 지정한다.
해당 position number는 cluster system 내에서 고유해야 한다.
해당 position number는 비어있는 position number이면서 가장 큰 position number와 같거나 작아야 한다.
생략할 경우, 기본값은 POSITION DEFAULT 이다.
Cluster member의 member_position 정보는 DBA_CLUSTER view를 통해 조회할 수 있다.
SELECT member_name, member_id, member_position FROM dba_cluster;
예를 들어 다음과 같은 position number가 사용되고 있는 경우,
G1N1: 0
G1N2: 1
G2N2: 3
G3N2: 5
각 옵션에 따라, 다음과 같은 값을 지정한다.
POSITION DEFAULT
비어있는 값인 2를 지정한다.
POSITION MAX
새로운 position number 값인 6을 지정한다.
POSITION 3
중복되므로 error 이다.
POSITION 4
position number 4를 지정한다.
설명
<alter cluster group add member statement> 구문은 table들의 shard를 재배치하지 않는다. 추가된 cluster member에 shard를 재배치하려면 다음 구문을 수행해야 한다.
사용 예
다음은 cluster group에 두 개의 cluster member를 추가하는 예이다.
gSQL>
ALTER CLUSTER GROUP g1 ADD
CLUSTER MEMBER g1n3 HOST '192.168.0.13' PORT 10130,
CLUSTER MEMBER g1n4 HOST '192.168.0.14' PORT 10140
;
Cluster Group altered.다음은 비어있는 member position을 cluster member position으로 지정하는 예이다.
ALTER CLUSTER GROUP g2 ADD
CLUSTER MEMBER g2n1 HOST '192.168.0.21' PORT 10210 POSITION 4
;호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER CLUSTER GROUP name OFFLINE MEMBER
기능
Cluster group의 cluster member를 offline 상태로 변경한다.
구문
<alter cluster group offline member statement> ::=
ALTER CLUSTER GROUP group_name OFFLINE CLUSTER MEMBER member_name
;사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter cluster group offline member statement> 구문을 수행하려면 사용자에게 ADMINISTRATION ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
group_name
Cluster group의 이름이다.
member_name
Cluster member의 이름이다. Cluster member는 group_name의 cluster group에 포함돼 있어야 한다. Cluster member가 inactive 상태여야 한다.
설명
Inactive 상태인 cluster member를 offline 시킨다.
<alter cluster group offline member statement> 구문은 table들의 shard를 재배치하지 않는다.
사용 예
Inactive 상태가 아닌 cluster member를 offline으로 변경하려 하면 다음과 같은 오류가 발생한다.
gSQL> ALTER CLUSTER GROUP g1 OFFLINE CLUSTER MEMBER g1n2; ERR-42000(16417): active member 'G1N2' cannot be offlined
다음은 특정 cluster member를 offline 상태로 변경하는 예이다.
gSQL>
ALTER CLUSTER GROUP g1 OFFLINE
CLUSTER MEMBER g1n3
;
Cluster Group altered.호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER CLUSTER LOCATION
기능
Cluster location 정보를 수정한다.
구문
<alter cluster location statement> ::=
ALTER CLUSTER LOCATION member_name
<cluster connection attribute>
;
<cluster connection attribute> ::
HOST 'address' PORT port_no사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter cluster location statement> 구문을 수행하려면 사용자에게 ADMINISTRATION ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
member_name
Cluster member의 이름이다. 등록된 cluster location 정보에 동일한 cluster member 이름이 존재해야 한다. 이름의 길이가 128 바이트보다 작아야 한다.
<cluster connection attribute>
Cluster member 간 통신을 위한 연결 정보를 정의한다. HOST와 PORT 조합은 cluster system 내에서 유일해야 한다.
HOST 'address'는 host name 또는 IPv4 주소를 사용한다. Host name을 사용할 경우 시스템의 첫 번째 IPv4 주소를 사용한다.
PORT port_no는 1024 ~ 49151 범위의 값이어야 한다.
설명
만약 cluster location의 접속 정보가 변경될 경우에는 cluster member를 제거하거나 재생성할 필요없이 ALTER CLUSTER LOCATION을 이용하여 접속 정보를 변경할 수 있다.
사용 예
gSQL>
ALTER CLUSTER LOCATION g1n2
HOST '192.168.0.12' PORT 10120
;
Location altered.호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER DATABASE ADD LOGFILE
기능
데이터베이스에 로그파일 그룹 또는 로그파일 멤버를 추가한다.
구문
<alter database add logfile statement> ::=
<add logfile member statement>
| <add logfile group statement>
;
<add logfile member statement> ::=
ALTER DATABASE ADD LOGFILE MEMBER <add logfile clause> [, ...] TO
<group clause>
<add logfile group statement> ::=
ALTER DATABASE ADD LOGFILE <group clause> ( 'logfile_name' )
<size clause> [ REUSE ]
<group clause> ::=
GROUP integer
<add logfile clause> ::=
'logfile_name' [ REUSE ]
<size clause> ::=
integer [ M | G ]사용 범위 및 접근 권한
<alter database add logfile statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<alter database add logfile statement>
데이터베이스는 MOUNT 상태여야 한다.
<add logfile member statement>
기존의 로그파일 그룹에 로그 멤버를 추가한다.
<add logfile clause>
'logfile_name'은 로그파일 그룹에 추가할 로그파일 멤버의 파일이름이다.
파일이 존재하지 않으면 새로운 파일을 생성한다.
'logfile_name'의 길이는 1024 바이트보다 작아야 한다.
<group clause>
데이터베이스에 추가할 로그파일 그룹의 식별자를 지정한다.
integer는 존재하는 로그파일 그룹의 식별자여야 한다.
integer에 해당하는 식별자가 존재하지 않을 경우에는 에러가 발생한다.
<add logfile group statement>
새로운 로그파일 그룹을 추가한다.
CURRENT 로그파일 그룹의 다음 그룹으로 추가된다.
<group clause>
데이터베이스에 추가할 로그파일 그룹의 식별자를 지정한다.
integer는 존재하지 않는 로그파일 그룹 식별자여야 한다.
integer에 해당하는 식별자가 존재할 경우 에러가 발생한다.
<size clause>
파일의 크기는 최소 20 MB ~ 최대 120 GB 까지 지정할 수 있다.
파일의 크기는 로그버퍼 (redo log buffer)의 크기와 지연로그버퍼 (pending log buffer) 크기의 합보다 커야 한다.
만약 logfile_name이 이미 존재하고 REUSE 옵션을 사용한 경우, 로그파일 그룹 내의 다른 멤버와 크기가 동일하다면 기존 로그파일을 재사용한다.
설명
새로운 로그파일 그룹 및 로그 멤버가 추가되는 경우 controlfile에 저장되므로 향후 controlfile 손상에 대비해 controlfile을 백업하는 것을 권장한다.
사용 예
다음은 기존 로그파일인 GROUP 3에 두 개의 로그파일 멤버를 추가하는 예이다.
ALTER DATABASE ADD LOGFILE MEMBER 'logfile1.log', 'logfile2.log' TO GROUP 3;
다음은 로그파일 크기가 100 M이고 로그파일 이름이 'logfile1.log'인 새로운 로그파일 GROUP 4를 데이터베이스에 추가하는 예이다.
ALTER DATABASE ADD LOGFILE GROUP 4 ( 'logfile1.log' ) SIZE 100M;
로그 그룹을 추가할 때는 한 개의 로그파일을 사용해야 하고 이미 존재하는 그룹에 다수의 로그 파일을 멤버로 추가할 수 있다.
호환성
SQL 표준은 ALTER DATABASE 구문을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER DATABASE ARCHIVELOG
기능
데이터베이스의 온라인 로그파일 archive 설정을 변경한다.
구문
<alter database archivelog statement> ::=
ALTER DATABASE { ARCHIVELOG | NOARCHIVELOG }
;사용 범위 및 접근 권한
<alter database archivelog statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<alter database archivelog statement>
데이터베이스가 MOUNT 상태여야 한다.
ARCHIVELOG
온라인 로그파일을 archive 한다.
NOARCHIVELOG
온라인 로그파일을 archive 하지 않는다.
설명
Database를 백업하고 백업을 이용해 복구 (media recovery)하려면 시스템이 ARCHIVELOG 모드로 운용되어야 한다.
사용 예
다음은 데이터베이스를 archive 모드로 설정하는 예이다.
ALTER DATABASE ARCHIVELOG;
호환성
SQL 표준은 ALTER DATABASE 구문을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER DATABASE BACKUP
기능
전체 데이터베이스를 백업한다.
백업 가능한 대상에는 데이터 파일 (datafile)과 제어 파일 (control file)이 있으며 그중 데이터 파일은 전체 백업 (full backup)과 증분 백업 (incremental backup) 방식으로 백업 가능하다.
구문
<alter database backup statement> ::=
<database begin backup statement>
| <database end backup statement>
| <database incremental backup statement>
| <database controlfile backup statement>
;
<database begin backup statement> ::=
ALTER DATABASE BEGIN BACKUP [ AT <domain name> ]
;
<database end backup statement> ::=
ALTER DATABASE END BACKUP [ AT <domain name> ]
;
<database incremental backup statement> ::=
ALTER DATABASE BACKUP INCREMENTAL
<incremental backup option> [ FORMAT 'format string' ]
[ PIECE integer ] [ <parallel clause> ] [ AT <domain name> ];
<incremental backup option> ::=
LEVEL integer [ CUMULATIVE | DIFFERENTIAL ]
<database controlfile backup statement> ::=
ALTER DATABASE BACKUP CONTROLFILE TO 'target_name'
[ AT <domain name> ] ;
<parallel clause> ::=
NOPARALLEL
| PARALLEL [ integer ]사용 범위 및 접근 권한
<alter database backup statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<database begin backup clause>
데이터베이스를 전체 백업이 가능한 상태로 설정한다.
데이터베이스에서 생성되어 사용 중인 ONLINE 상태의 모든 테이블스페이스를 전체 백업이 가능한 상태로 설정한다.
데이터베이스는 OPEN 상태여야 하고 ARCHIVELOG 모드로 운영되어야 한다.
BEGIN BACKUP이 시작된 이후에는 다음과 같이 데이터 파일에 쓰기를 요구하는 연산들은 수행할 수 없다.
SHUTDOWN NORMAL
OFFLINE/ DROP TABLESPACE
ADD/ DROP DATAFILE
전체 백업의 상태가 ACTIVE인 상태에서 인스턴스가 비정상 종료될 경우, 다시 시작할 때 미디어 복구를 요구할 수도 있다.
<database end backup clause>
데이터베이스를 전체 백업 불가능한 상태로 설정한다.
데이터베이스에서 생성되어 사용 중인 ONLINE 상태의 모든 테이블스페이스를 백업 불가능한 상태로 설정한다.
데이터베이스는 OPEN 상태여야 하고, ARCHIVELOG 모드로 운영되어야 한다.
<database incremental backup statement>
데이터베이스 증분 백업을 수행한다.
데이터베이스는 OPEN 상태여야 하고, ARCHIVELOG로 운영되어야 한다.
<incremental backup option>
'integer'는 0 ~ 4 까지 지정할 수 있다.
LEVEL 0은 CUMULATIVE나 DIFFERENTIAL을 지정할 수 없다.
CUMULATIVE | DIFFERENTIAL
CUMULATIVE
'integer'가 n이면 가장 최근에 LEVEL 0 ~ LEVEL n-1까지 백업한 이후 변경된 모든 페이지들을 백업한다.
DIFFERENTIAL
'integer'가 n이면 가장 최근에 LEVEL 0 ~ LEVEL n까지 백업한 이후 변경된 모든 페이지들을 백업한다.
생략하면 DIFFERENTIAL이 기본으로 지정된다.
FORMAT 'format string'
backup 파일 이름의 형식을 지정한다.
'format string' 내에 format specifier 를 사용할 수 있다.
FORMAT 을 지정하지 않은 경우는 'database_D%T_T%t_L%l_Q%q_P%p.inc' 를 format string 으로 사용한다.
format specifier
%d: 데이터베이스 시그니쳐
%q: 백업 순차 번호
%l: 백업 레벨
%t: 시간(HHMMSS)
%m: 클러스터 멤버 이름
%g: 클러스터 그룹 이름
%D: 요일(DD)
%M: 월(MM)
%p: 백업 파일의 조각(Piece) 번호
%T: 날짜(YYYYMMDD)
%Y: 년(YYYY)
%%: Percent(%) 문자
PIECE integer
분할될 백업 파일의 개수를 지정한다.
'format string' 에 %p 가 포함되어 있지 않으면 지정된 integer 값은 무시하고 1 값을 갖는다.
<parallel clause>
백업시 사용할 thread의 개수를 지정한다.
NOPARALLEL
병렬로 백업을 수행하지 않는다.
PARALLEL [integer]
병렬로 백업을 수행한다.
integer는 1부터 사용할 수 있으며 최대값은 64이다.
integer가 생략된 경우는 1이다.
명시하지 않을 경우, 기본값은 NOPARALLEL이다.
대상 datafile 의 총 개수가 integer 보다 작은 경우는 datafile 개수만큼 병렬로 수행한다.
PIECE 의 개수가 병렬 개수보다 작은 경우는 PIECE 개수 만큼 병렬로 처리한다.
<database controlfile backup statement>
제어 파일 (controlfile)을 백업한다.
'target_name'의 이름은 1024 바이트보다 작아야 한다.
'target_name'이 이미 존재하는 경우 연산에 실패한다.
데이터베이스는 OPEN 상태여야 하고, ARCHIVELOG로 운영되고 있어야 한다.
GOLDILOCKS에서 관리하는 'target_name' 길이는 최대 1024 바이트이지만, OS마다 최대로 허용하는 파일 이름 길이가 다르기 때문에, 실제 생성가능한 'target_name'의 길이는 1024 바이트보다 작을 수 있다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
Database의 datafile과 controlfile을 백업한다. BEGIN BACKUP을 수행한 후, OS의 파일 복사 기능을 사용해 datafile들을 복사하고, END BACKUP을 수행하여 전체 백업을 완료한다. 한편, 증분 백업 파일은 하나의 명령어로 BACKUP_DIR_1 property에 설정된 경로에 생성된다.
사용 예
다음은 전체 백업 상태를 ACTIVE로 설정하는 예이다.
ALTER DATABASE BEGIN BACkUP;
다음은 전체 백업 상태를 INACTIVE로 설정하는 예이다.
ALTER DATABASE END BACkUP;
다음은 DIFFERENTIAL을 사용하여 LEVEL 1의 증분 백업을 수행하는 예이다.
ALTER DATABASE BACKUP INCREMENTAL LEVEL 1 DIFFERENTIAL;
다음은 controlfile에 대해 'controlfile.bak' 백업 파일을 만드는 예이다. 절대 경로가 포함되지 않은 경우, LOG_DIR property에 설정된 경로에 백업 파일을 생성한다.
ALTER DATABASE BACKUP CONTROLFILE TO 'controlfile.bak';
다음은 네 개의 thread로 증분 백업을 수행하는 예로써 날짜와 조각 번호로 구성된 네 개의 backup 파일이 만들어진다.
ALTER DATABASE BACKUP INCREMENTAL LEVEL 0 FORMAT 'backup_%T_%p' PIECE 4 PARALLEL 4;
호환성
SQL 표준은 ALTER DATABASE 구문을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER DATABASE CLEAR AUDIT TRAIL
기능
Audit policy 적용으로 인해 누적된 audit record를 삭제 (purge)한다.
구문
<clear audit trail statement> ::=
ALTER DATABASE CLEAR AUDIT TRAIL
[ AT <domain name> ]
;사용 범위 및 접근 권한
<clear audit trail statement> 구문을 수행하려면 사용자에게 AUDIT SYSTEM ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
Audit policy를 활성화하면 시간이 지남에 따라 audit trail이 계속 커진다. Audit trail을 구성하는 테이블들은 MEM_AUX_TBS 테이블스페이스에 저장되는데 audit trail이 계속 커지지 않도록 해야 한다.
Audit Trail 저장
필요에 따라 audit trail 을 저장하려면 다음과 같은 절차에 따라 저장한 후에 audit trail을 삭제해야 한다.
최초로 수행할 때
CREATE TABLE backup_audit_trail AS SELECT * FROM AUDIT_TRAIL; COMMIT;
반복해서 수행할 때
INSERT INTO backup_audit_trail SELECT * FROM AUDIT_TRAIL; COMMIT;
Audit trail을 삭제할 때
ALTER DATABASE CLEAR AUDIT TRAIL;
사용 예
다음 구문을 사용하여 audit trail을 삭제 (purge)한다.
ALTER DATABASE CLEAR AUDIT TRAIL;
호환성
SQL 표준에는 audit policy가 없다.
참조
관련 내용은 다음을 참조한다.
Audit policy 객체 관리
Audit policy 활성화/ 비활성화
Audit trail 조회: AUDIT_TRAIL
Audit trail 삭제: ALTER DATABASE CLEAR AUDIT TRAIL
ALTER DATABASE CLEAR PASSWORD HISTORY
기능
Profile 적용에 따라 누적된 사용자의 비밀번호 변경 이력을 삭제한다.
구문
<clear password history statement> ::=
ALTER DATABASE CLEAR PASSWORD HISTORY
[ AT <domain name> ]
;사용 범위 및 접근 권한
<clear password history statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
User에 profile을 적용할 때 PASSWORD_REUSE_MAX, PASSWORD_REUSE_TIME의 정책에 따라 사용자의 비밀번호 변경이력이 누적된다.
PASSWORD_REUSE_MAX | PASSWORD_REUSE_TIME | 변경 이력 관리 |
|---|---|---|
value | value | Value 범위 내의 변경 이력만 관리하고 범위를 벗어난 변경 이력은 자동으로 삭제한다. |
value | UNLIMITED | 모든 변경 이력을 검사해야 하므로 변경 이력을 누적할 뿐 제거하지 않는다. |
UNLIMITED | value | 모든 변경 이력을 검사해야 하므로 변경 이력을 누적할 뿐 제거하지 않는다. |
UNLIMITED | UNLIMITED | 변경 이력을 검사하지 않으므로 관리도 하지 않는다. |
<clear password history statement> 구문은 누적된 사용자 비밀번호 변경이력을 삭제한다.
사용 예
다음은 <clear password history statement> 구문을 수행하는 예이다.
gSQL> ALTER DATABASE CLEAR PASSWORD HISTORY; Database altered. gSQL> COMMIT; Commit complete.
호환성
SQL 표준은 ALTER DATABASE 구문을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER DATABASE DATAFILE AUTOEXTEND
기능
디스크 테이블스페이스 데이터 파일의 자동 확장 속성을 변경한다. 자동 확장 속성을 ON으로 변경하면 확장시킬 크기와 데이터 파일의 최대 크기도 변경할 수 있다.
구문
<alter database datafile autoextend statement> ::=
ALTER DATABASE DATAFILE datafile_name <autoextend clause>
[ AT <domain name> ]
;
<autoextend clause>
AUTOEXTEND { ON [ <next size clause> ] [ <max size clause> ] | OFF }
<next size clause>
NEXT <size clause>
<max size clause>
MAXSIZE { <size clause> | UNLIMITED }사용 범위 및 접근 권한
<alter database datafile autoextend statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
데이터 파일 자동 확장 속성은 디스크 테이블스페이스에 한해서만 변경할 수 있다.
datafile_name
변경할 데이터 파일의 이름을 지정한다.
<autoextend clause>
자동 확장 속성을 ON 또는 OFF로 설정한다. ON으로 설정하면 자동 확장 크기와 데이터 파일의 최대 크기를 지정할 수 있다.
<next size clause>
현재 사용 중인 데이터 파일에 더 이상 사용할 공간이 없을 때 확장할 크기를 지정한다.
<max size clause>
데이터 파일이 확장될 수 있는 최대 크기를 지정한다.
설명
각 구문별 사용 규칙을 참조한다.
사용 예
다음은 데이터파일의 자동 확장 속성과 자동 확장 크기, 데이터 파일 크기를 변경하는 예이다.
gSQL> ALTER DATABASE DATAFILE 'DISK_TBS.dbf' AUTOEXTEND OFF; Database altered. gSQL> ALTER DATABASE DATAFILE 'DISK_TBS.dbf' AUTOEXTEND ON; Database altered. gSQL> ALTER DATABASE DATAFILE 'DISK_TBS.dbf' AUTOEXTEND ON NEXT 20M; Database altered. gSQL> ALTER DATABASE DATAFILE 'DISK_TBS.dbf' AUTOEXTEND ON MAXSIZE 1G; Database altered. gSQL> ALTER DATABASE DATAFILE 'DISK_TBS.dbf' AUTOEXTEND ON 20M MAXSIZE 1G; Database altered.
호환성
SQL 표준에서는 데이터 파일에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 CREATE DISK DATA TABLESPACE를 참조한다.
ALTER DATABASE DELETE BACKUP
기능
증분 백업 (incremental backup)의 백업 정보와 백업 파일을 삭제한다. Database의 모든 증분 백업을 삭제하거나, 더 이상 쓸모 없는 백업 (obsolete backup)을 선택해서 삭제할 수 있다.
구문
<alter database delete backup statement> ::=
ALTER DATABASE DELETE <delete backup list option>
BACKUP LIST [ <including backup file option> ]
[ AT <domain name> ]
;
<delete backup list option> ::=
OBSOLETE
| ALL
<including backup file option> ::=
INCLUDING BACKUP FILES사용 범위 및 접근 권한
<alter database delete backup statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<alter database delete backup statement>
데이터베이스가 MOUNT 또는 OPEN 상태여야 한다.
<delete backup list option>
기존 증분 백업들 중에서 삭제할 대상을 선정한다.
OBSOLETE: 가장 최근의 데이터베이스 'LEVEL 0' 백업 이전에 백업한 데이터베이스 또는 테이블스페이스 백업본들을 삭제 대상으로 선정한다.
ALL: 전체 증분 백업들을 삭제 대상으로 선정한다.
<including backup file option>
생략되면 백업 정보만 제어 파일에서 삭제한다.
백업 정보뿐만 아니라 백업 파일들도 함께 삭제한다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
OBSOLETE 증분 백업 삭제는 가장 최근의 LEVEL 0 데이터베이스 백업 이전의 증분 백업을 삭제한다. 즉, LEVEL 0이 아닌 증분 백업을 수행할 때는 이전에 수행한 증분 백업을 포함하는 증분 백업이 있더라도 삭제하지 않는다. 왜냐하면 증분 백업을 이용한 불완전 복구를 수행할 때 사용될 수 있기 때문이다.
증분 백업을 삭제할 때 백업 파일까지 함께 삭제하면 증분 백업 정보를 포함하는 백업된 controlfile을 이용하더라도 복구를 수행할 수 없으므로 주의해야 한다.
사용 예
다음은 기존 모든 증분 백업들의 백업정보와 백업파일들을 삭제하는 예이다.
ALTER DATABASE DELETE ALL BACKUP LIST INCLUING BACKUP FILES;
호환성
SQL 표준은 ALTER DATABASE 구문을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER DATABASE DISABLE CHANGE TRACKING
기능
디스크 테이블스페이스의 데이터 변경 사항 추적 기능을 비활성화 한다.
구문
<alter database disable change tracking statement> ::=
ALTER DATABASE DISABLE CHANGE TRACKING
[ AT <domain name> ]
;사용 범위 및 접근 권한
<alter database disable change tracking statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
데이터베이스가 MOUNT 또는 OPEN 상태여야 한다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
디스크 테이블스페이스에 대한 증분 백업 수행 시, 백업 대상 페이지 관리 기능을 비활성화 한다.
CHANGE TRACKING을 비활성화하면, 디스크 테이블스페이스에 대한 증분 백업 수행 시 백업 대상을 판단하기 위해 모든 페이지를 스캔해야 한다. 이로 인해 백업 수행 시간이 길어지고, 결과적으로 서비스에 영향을 줄 수 있으므로 주의해야 한다.
사용 예
다음은 CHANGE TRACKING 을 비활성화 하는 예이다.
ALTER DATABASE DISABLE CHANGE TRACKING;
호환성
SQL 표준은 ALTER DATABASE 구문을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER DATABASE DROP INACTIVE CLUSTER MEMBERS
기능
모든 inactive cluster member들을 제거한다.
구문
<alter database drop inactive members statement> ::=
ALTER DATABASE DROP [ FORCE | NO FORCE ] INACTIVE CLUSTER MEMBERS
;사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter database drop inactive cluster members statement> 구문을 수행하려면 사용자에게 ADMINISTRATION ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
[ FORCE | NO FORCE ]
FORCE
데이터 유실될 수 있는 경우에도 inactive cluster member들을 제거한다.
NO FORCE
데이터가 유실될 수 있는 경우에는 inactive cluster member들을 제거할 수 없다.
기본값은 NO FORCE 이다.
설명
모든 inactive cluster member들을 제거한다.
Cluster member의 inactive 상태는 cluster system과 연결되어 있지 않은 상태로서 다음과 같은 상황에서 발생한다.
운영 중인 cluster system에서 해당 cluster member에 장애가 발생한 경우
해당 cluster member를 구동하지 않고 cluster system의 start-up을 시도한 경우
단, cluster member를 제거할 때 table의 shard가 유실되는 경우에는 inactive cluster member를 제거할 수 없다.
또한, cluster member를 제거할 때 데이터가 유실될 수 있는 경우에는 inactive cluster member를 제거할 수 없다. 제거하려는 inactive cluster member에 속해 있는 table이나 shard의 replica가 해당 cluster group의 다른 멤버들보다 최신 데이터를 가지고 있지 않다는 보장이 있어야 데이터 유실을 방지할 수 있다. 따라서 cloned table의 경우에는 cluster 전체에, sharded table의 경우에는 같은 cluster group에 적어도 하나의 online 멤버가 존재할 경우에 inactive cluster member 제거를 허용한다.
단, cluster group에 online 상태인 cluster member가 없고 inactive cluster member로 인해 서비스가 불가능한 경우에는 데이터 유실을 감수하면서 FORCE 옵션을 통해 inactive cluster member를 제거할 수 있다.
<alter database drop inactive members statement> 구문은 모든 inactive cluster member들이 더 이상 cluster system에 포함될 수 없는 경우에 사용하는 것이 바람직하다.
사용 예
다음은 <alter database drop inactive members statement> 구문을 수행하는 예이다.
gSQL> ALTER DATABASE DROP INACTIVE CLUSTER MEMBERS; Database altered.
호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 ALTER SYSTEM JOIN DATABASE 를 참조한다.
ALTER DATABASE DROP LOGFILE
기능
데이터베이스에 존재하는 로그파일 그룹이나 멤버를 제거한다.
구문
<alter database drop logfile statement> ::=
<drop logfile group statement>
| <drop logfile member statement>
;
<drop logfile group statement> ::=
ALTER DATABASE DROP LOGFILE <group clause>
<group clause> ::=
GROUP integer
<drop logfile member statement> ::=
ALTER DATABASE DROP LOGFILE MEMBER <logfile_list>
<logfile_list> ::=
'logfile_name'
| <logfile_list> , 'logfile_name'사용 범위 및 접근 권한
<alter database drop logfile statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<alter database drop logfile statement>
데이터베이스는 MOUNT 상태여야 한다. 제거하려는 로그파일이 CURRENT 또는 ACTIVE 상태일 때는 에러가 발생한다. 제거한 후에 최소 네 개의 로그파일 그룹이 남아 있어야 한다.
<drop logfile group statement>
기존의 로그파일 그룹을 제거한다.
<group clause>
제거할 로그파일 그룹을 지정한다.
integer는 존재하는 로그파일의 식별자여야 한다.
integer가 존재하지 않을 경우 에러가 발생한다.
<drop logfile member statement>
기존의 로그파일 멤버들을 제거한다.
<logfile_list>
제거할 로그파일 멤버의 목록이다.
'logfile_name'은 존재하는 이름이어야 한다.
'logfile_name'이 존재하지 않을 경우 에러가 발생한다.
설명
각 구문별 사용 규칙을 참조한다.
사용 예
다음은 기존 로그파일인 GROUP 3을 제거하는 예이다.
ALTER DATABASE DROP LOGFILE GROUP 3;
다음은 기존 로그파일인 GROUP 3에서 'logfile1.log'와 'logfile2.log'를 제거하는 예이다.
ALTER DATABASE DROP LOGFILE MEMBER 'logfile1.log', 'logfile2.log';
호환성
SQL 표준에서는 ALTER DATABASE 구문을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER DATABASE DROP OFFLINE SEGMENTS
기능
모든 테이블에 대해서 오프라인 된 shard들의 세그먼트를 삭제한다.
구문
<alter database drop offline segments statement> ::=
ALTER DATABASE DROP OFFLINE SEGMENTS
;사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter database drop offline segments statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
설명
모든 테이블에 대해서 오프라인 된 shard들의 세그먼트를 삭제하는데 inactive cluster member가 있어도 수행할 수 있다.
Cluster member의 inactive 상태는 cluster system과 연결되어 있지 않은 상태로서 다음과 같은 상황에서 발생한다.
운영 중인 cluster system에서 해당 cluster member에 장애가 발생한 경우
해당 cluster member를 구동하지 않고 cluster system의 start-up을 시도한 경우
<alter database drop offline segments statement>는 각 테이블마다 <alter table drop offline segments statement>를 수행하며 다음과 같은 질의의 합과 동치이다.
ALTER TABLE t1 DROP OFFLINE SEGMENTS; COMMIT; ALTER TABLE t2 DROP OFFLINE SEGMENTS; COMMIT; ALTER TABLE t3 DROP OFFLINE SEGMENTS; COMMIT; ... ALTER TABLE tn DROP OFFLINE SEGMENTS; COMMIT;
<alter database drop offline segments statement>는 특정 테이블에서 에러가 발생하더라도 종료되지 않고 다음 테이블에 대해 계속 진행되며 다음과 같은 경고와 함께 성공한다.
gSQL> ALTER DATABASE DROP OFFLINE SEGMENTS; ERR-42000(16553): of the total '5' tables, '1' tables failed to drop offline segments Database altered.
위 에러 메시지는 다섯 개의 테이블 중에서 한 개의 테이블이 실패했다는 의미이다.
이후 에러에 대해 적절한 조치를 취한 후 <alter database drop offline segments statement> 구문을 다시 수행하면 실패했던 테이블에 대해서만 해당 구문이 다시 수행된다.
에러에 대한 자세한 내용은 구문을 수행한 멤버의 시스템 트레이스 로그 (system.trc)를 참조한다.
사용 예
다음은 <alter database drop offline segments statement> 구문을 수행하는 예이다.
gSQL> ALTER DATABASE DROP OFFLINE SEGMENTS; Database altered.
호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 ALTER TABLE name DROP OFFLINE SEGMENTS를 참조한다.
ALTER DATABASE DROP UNUSABLE SEGMENTS
기능
데이터베이스에 존재하는 모든 테이블 중, 오프라인 상태인 replica들의 unusable 세그먼트를 삭제한다.
구문
<alter database drop unusable segments statement> ::=
ALTER DATABASE DROP UNUSABLE SEGMENTS
;사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter database drop unusable segments statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
설명
<alter database drop unusable segments statement>는 각 테이블에 대해 <alter table drop unusable segments statement>를 수행하며, 이는 아래 질의들을 모두 수행한 것과 동일한 효과를 갖는다.
ALTER TABLE t1 DROP UNUSABLE SEGMENTS; COMMIT; ALTER TABLE t2 DROP UNUSABLE SEGMENTS; COMMIT; ALTER TABLE t3 DROP UNUSABLE SEGMENTS; COMMIT; ... ALTER TABLE tn DROP UNUSABLE SEGMENTS; COMMIT;
<alter database drop unusable segments statement>는 특정 테이블에서 에러가 발생하더라도 종료되지 않고 다음 테이블에 대해 계속 진행되며 다음과 같은 경고와 함께 성공한다.
gSQL> ALTER DATABASE DROP UNUSABLE SEGMENTS; ERR-42000(16553): of the total '5' tables, '1' tables failed to drop offline segments Database altered.
위 에러 메시지는 다섯 개의 테이블 중에서 한 개의 테이블이 실패했다는 의미이다.
이후 에러에 대해 적절한 조치를 취한 후 <alter database drop unusable segments statement> 구문을 다시 수행하면 실패했던 테이블에 대해서만 해당 구문이 적용된다.
에러에 대한 자세한 내용은 구문을 수행한 멤버의 시스템 트레이스 로그 (system.trc)를 참조한다.
이 구문은 inactive member가 있어도 수행할 수 있다.
사용 예
다음은 <alter database drop unusable segments statement> 구문을 수행하는 예이다.
gSQL> ALTER DATABASE DROP UNUSABLE SEGMENTS; Database altered.
호환성
SQL 표준에서는 unusable 세그먼트에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 ALTER TABLE name DROP UNUSABLE SEGMENTS를 참조한다.
ALTER DATABASE ENABLE CHANGE TRACKING
기능
디스크 테이블스페이스의 데이터 변경 사항 추적 기능을 활성화 한다.
구문
<alter database enable change tracking statement> ::=
ALTER DATABASE ENABLE CHANGE TRACKING
[ USING FILE 'file_name' REUSE ]
[ AT <domain name> ]
;사용 범위 및 접근 권한
<alter database enable change tracking statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<alter database enable change tracking statement>
데이터베이스가 MOUNT 또는 OPEN 상태여야 한다. CHANGE TRACKING 기능은 비활성화된 상태여야 한다.
USING FILE 'file_name'
CHANGE TRACKING을 활성화할 때 'file_name'으로 지정된 파일을 사용한다.
파일을 지정하지 않으면, CHANGE_TRACKING_FILE 프로퍼티에 설정된 파일 이름을 사용한다.
'file_name'
'file_name' 이 절대 경로가 아닐 경우, SYSTEM_TABLESPACE_DIR 프로퍼티에 설정된 경로와 합쳐진 경로를 따른다.
REUSE
파일이 이미 존재할 경우 REUSE 절을 사용한다.
파일이 존재하지 않을 경우에는 새로운 파일을 생성한다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
디스크 테이블스페이스에 대한 증분 백업 수행 시, 백업 대상 페이지 관리 기능을 활성화 한다.
사용 예
다음은 CHANGE TRACKING 을 활성화 하는 예이다.
ALTER DATABASE ENABLE CHANGE TRACKING;
호환성
SQL 표준은 ALTER DATABASE 구문을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER DATABASE MOVE SHARD
기능
특정 cluster group의 모든 table들의 shard를 다른 cluster group으로 재배치한다.
구문
<alter database move shard statement> ::=
ALTER DATABASE MOVE SHARD FROM CLUSTER GROUP src_cluster_group
TO CLUSTER GROUP dest_cluster_group
[ ONLINE | OFFLINE ]
[ LOGGING | NOLOGGING ]
[ <scan partition> ]
[ <parallel clause> ]
;
<scan partition> ::=
SCAN PARTITION integer
<parallel clause> ::=
NOPARALLEL
| PARALLEL [ integer ]사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter database move shard statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
src_cluster_group
테이블의 shard를 이동할 cluster group 이다.
dest_cluster_group
테이블의 shard를 이동시킬 target cluster group이다.
[ ONLINE | OFFLINE ]
테이블의 shard를 재배치할 때 DML을 허용할지 여부를 결정한다.
ONLINE
INSERT, UPDATE, DELETE를 허용한다.
OFFLINE
INSERT, UPDATE, DELETE를 허용하지 않는다.
생략할 경우, 기본값은 ONLINE 이다.
[ LOGGING | NOLOGGING ]
테이블의 shard를 재배치할 때, 테이블 동기화 과정에서 기록되는 로그의 양을 지정한다.
LOGGING
테이블 동기화 과정에서 모든 로그를 기록한다.
NOLOGGING
테이블 동기화 과정에서 최소한의 로그만 기록한다.
생략할 경우, 기본값은 LOGGING 이다.
NOLOGGING 옵션을 사용하면 redo log가 기록되지 않는다. 따라서 move shard 수행 후 서버가 비정상적으로 종료되면 해당 테이블은 unusable 상태가 된다. 이를 방지하려면 move shard 수행 후 CHECKPOINT 구문을 실행해야 한다.
<scan partition>
Shard의 partition 개수를 지정한다.
partition 개수 만큼 shard를 분할하여 원격 서버에 재배치 한다.
integer는 0부터 사용할 수 있으며 최대값은 1000이다.
생략할 경우, ONLINE_DDL_SCAN_PARTITION 프로퍼티를 따른다.
integer가 parallel integer 보다 작은 경우에는 parallel integer와 같은 값으로 보정된다.
<parallel clause>
테이블 재배치에 사용할 thread의 개수를 지정한다.
NOPARALLEL
테이블을 병렬로 재배치하지 않는다.
PARALLEL [integer]
테이블을 병렬로 재배치한다.
integer는 0부터 사용할 수 있으며 최대값은 64이다.
integer가 생략된 경우는 0이다.
integer가 0인 경우에는 시스템이 최적값을 결정한다.
설명
다음과 같은 구문을 사용하여 cluster member와 cluster group을 추가할 때 table들의 shard는 재배치하지 않는다.
Cluster group과 cluster member를 추가할 때 재배치되지 않은 모든 테이블들의 shard를 재배치하려면 <alter database rebalance statement> 구문을 수행한다.
Shard를 재배치하지 않은 테이블들에 대해 <alter database move shard statement> 구문을 수행하는 것은 다음과 같은 의미이다.
ALTER TABLE t1 MOVE SHARD FROM CLUSTER GROUP src_group TO CLUSTER GROUP dest_group; COMMIT; ALTER TABLE t2 MOVE SHARD FROM CLUSTER GROUP src_group TO CLUSTER GROUP dest_group; COMMIT; ALTER TABLE t3 MOVE SHARD FROM CLUSTER GROUP src_group TO CLUSTER GROUP dest_group; COMMIT; ... ... ALTER TABLE t_n MOVE SHARD FROM CLUSTER GROUP src_group TO CLUSTER GROUP dest_group; COMMIT;
CLONED 테이블이거나 CLUSTER WIDE로 설정된 테이블을 제외한 모든 테이블들을 위와 같이 수행한다. 특정 테이블이 shard 재배치에 실패하더라도 <alter database move shard statement> 구문은 계속 진행되고 shard 재배치에 성공한 테이블을 rollback 하지 않는다.
따라서 에러에 대해 적절한 조치를 취한 후 <alter database move shard statement> 구문을 다시 수행하면 이미 shard 재배치에 성공한 테이블들은 재배치 대상에 포함되지 않으며, 재배치가 필요한 테이블들의 shard만 재배치한다.
사용 예
다음은 <alter database move shard statement> 구문을 수행하는 예이다.
gSQL> ALTER DATABASE MOVE SHARD FROM CLUSTER GROUP G1 TO CLUSTER GROUP G2; Database altered.
호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER DATABASE OFFLINE INACTIVE CLUSTER MEMBERS
기능
모든 inactive cluster member들을 offline 상태로 변경한다. 즉, 해당 cluster member들에 대한 shard map을 offline 상태로 변경한다.
구문
<alter database offline inactive cluster members statement> ::=
ALTER DATABASE OFFLINE INACTIVE CLUSTER MEMBERS
;사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter database offline inactive cluster members statement> 구문을 수행하려면 사용자에게 ADMINISTRATION ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
모든 inactive cluster member들을 offline 상태로 변경한다.
Cluster member의 inactive 상태는 cluster system과 연결되어 있지 않은 상태로서 다음과 같은 상황에서 발생한다.
운영 중인 cluster system에서 해당 cluster member에 장애가 발생한 경우
해당 cluster member를 구동하지 않고 cluster system의 start-up을 시도한 경우
설명
<alter database offline inactive members statement> 구문은 모든 inactive cluster member들이 더 이상 cluster system에 포함될 수 없는 경우에 사용하는 것이 바람직하다.
Inactive cluster member가 cluster system에 참여할 수 있으면 ALTER SYSTEM JOIN DATABASE 구문을 수행하여 cluster system에 포함시킨다.
Offline 상태로 변경된 cluster member는 join 후에 다음 구문을 사용하여 online 상태로 다시 변경할 수 있다
사용 예
gSQL> ALTER DATABASE OFFLINE INACTIVE CLUSTER MEMBERS;
호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER DATABASE REBALANCE
기능
모든 table들의 shard를 재배치한다.
구문
<alter database rebalance statement> ::=
ALTER DATABASE REBALANCE
[ ONLINE | OFFLINE ]
[ LOGGING | NOLOGGING ]
[ <scan partition> ]
[ <parallel clause> ]
;
<scan partition> ::=
SCAN PARTITION integer
<parallel clause> ::=
NOPARALLEL
| PARALLEL [ integer ]사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter database rebalance statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
[ ONLINE | OFFLINE ]
테이블의 shard를 재배치할 때 DML을 허용할지 여부를 결정한다.
ONLINE
INSERT, UPDATE, DELETE를 허용한다.
OFFLINE
INSERT, UPDATE, DELETE를 허용하지 않는다.
생략할 경우, 기본값은 ONLINE 이다.
[ LOGGING | NOLOGGING ]
테이블의 shard를 재배치할 때, 테이블 동기화 과정에서 기록되는 로그의 양을 지정한다.
LOGGING
테이블 동기화 과정에서 모든 로그를 기록한다.
NOLOGGING
테이블 동기화 과정에서 최소한의 로그만 기록한다.
생략할 경우, 기본값은 LOGGING 이다.
NOLOGGING 옵션을 사용하면 redo log가 기록되지 않는다. 따라서 rebalance 수행 후 서버가 비정상적으로 종료되면 해당 테이블은 unusable 상태가 된다. 이를 방지하려면 rebalance 수행 후 CHECKPOINT 구문을 실행해야 한다.
<scan partition>
shard의 partition 개수를 지정한다.
partition 개수 만큼 shard를 분할하여 원격 서버에 재배치 한다.
integer는 0부터 사용할 수 있으며 최대값은 1000이다.
생략할 경우, ONLINE_DDL_SCAN_PARTITION 프로퍼티를 따른다.
integer가 parallel integer 보다 작은 경우에는 parallel integer와 같은 값으로 보정된다.
<parallel clause>
테이블 재배치에 사용할 thread의 개수를 지정한다.
NOPARALLEL
테이블을 병렬로 재배치하지 않는다.
PARALLEL [integer]
테이블을 병렬로 재배치한다.
integer는 0부터 사용할 수 있으며 최대값은 64이다.
integer가 생략된 경우는 0이다.
integer가 0인 경우에는 시스템이 최적값을 결정한다.
설명
다음과 같은 구문을 사용하여 cluster member, cluster group을 추가할 때 table들의 shard를 재배치하지 않는다.
추가된 cluster group과 cluster member에 재배치하지 않은 모든 테이블들의 shard를 재배치하기 위해 <alter database rebalance statement> 구문을 수행한다.
Shard를 재배치하지 않은 테이블들에 대해 <alter database rebalance statement> 구문을 수행하는 것은 다음과 같은 의미이다.
ALTER TABLE t1 REBALANCE; COMMIT; ALTER TABLE t2 REBALANCE; COMMIT; ALTER TABLE t3 REBALANCE; COMMIT; ... ... ALTER TABLE t_n REBALANCE; COMMIT;
특정 테이블의 shard 재배치에 실패하더라도 <alter database rebalance statement> 구문은 계속 진행되며 shard 재배치에 성공한 테이블을 rollback 하지 않는다.
따라서 에러에 대해 적절한 조치를 취한 후 <alter database rebalance statement> 구문을 재수행할 경우 이미 shard 재배치에 성공한 테이블들은 재배치 대상에 포함되지 않으며, 재배치가 필요한 테이블들의 shard만 재배치한다.
사용 예
다음은 <alter database rebalance statement> 구문을 수행하는 예이다.
gSQL> ALTER DATABASE REBALANCE; Database altered.
호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 ALTER TABLE name REBALANCE를 참조한다.
ALTER DATABASE REBALANCE EXCLUDE CLUSTER GROUP
기능
특정 cluster group에 shard가 포함되지 않도록 모든 테이블의 shard를 재배치한다.
구문
<alter database rebalance exclude cluster group statement> ::=
ALTER DATABASE REBALANCE EXCLUDE CLUSTER GROUP cluster_group_name
[ ONLINE | OFFLINE ]
[ LOGGING | NOLOGGING ]
[ <scan partition> ]
[ <parallel clause> ]
;
<scan partition> ::=
SCAN PARTITION integer
<parallel clause> ::=
NOPARALLEL
| PARALLEL [ integer ]사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter database rebalance exclude cluster group statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
cluster_group_name
테이블들의 shard를 포함하지 않는 cluster group의 이름이다. 지정한 cluster group이 유일한 cluster group인 경우 구문을 수행할 수 없다.
[ ONLINE | OFFLINE ]
테이블의 shard를 재배치할 때 DML을 허용할지 여부를 결정한다.
ONLINE
INSERT, UPDATE, DELETE를 허용한다.
OFFLINE
INSERT, UPDATE, DELETE를 허용하지 않는다.
생략할 경우, 기본값은 ONLINE 이다.
[ LOGGING | NOLOGGING ]
테이블의 shard를 재배치할 때, 테이블 동기화 과정에서 기록되는 로그의 양을 지정한다.
LOGGING
테이블 동기화 과정에서 모든 로그를 기록한다.
NOLOGGING
테이블 동기화 과정에서 최소한의 로그만 기록한다.
생략할 경우, 기본값은 LOGGING 이다.
NOLOGGING 옵션을 사용하면 redo log가 기록되지 않는다. 따라서 rebalance 수행 후 서버가 비정상적으로 종료되면 해당 테이블은 unusable 상태가 된다. 이를 방지하려면 rebalance 수행 후 CHECKPOINT 구문을 실행해야 한다.
<scan partition>
shard의 partition 개수를 지정한다.
partition 개수 만큼 shard를 분할하여 원격 서버에 재배치 한다.
integer는 0부터 사용할 수 있으며 최대값은 1000이다.
생략할 경우, ONLINE_DDL_SCAN_PARTITION 프로퍼티를 따른다.
integer가 parallel integer 보다 작은 경우에는 parallel integer와 같은 값으로 보정된다.
<parallel clause>
테이블 재배치에 사용할 thread의 개수를 지정한다.
NOPARALLEL
테이블을 병렬로 재배치하지 않는다.
PARALLEL [integer]
테이블을 병렬로 재배치한다.
integer는 0부터 사용할 수 있으며 최대값은 64이다.
integer가 생략된 경우는 0이다.
integer가 0인 경우에는 시스템이 최적값을 결정한다.
설명
DROP CLUSTER GROUP 구문을 사용하여 cluster group을 제거하려면 해당 cluster group에 shard가 존재하지 않아야 한다.
해당 cluster group이 shard를 포함하지 않도록 하기 위해 <alter database rebalance exclude cluster group statement> 구문을 수행한다. 해당 cluster group의 shard를 포함한 테이블들에 대해 <alter database rebalance exclude cluster group statement> 구문을 수행하는 것은 다음과 같은 의미이다.
ALTER TABLE t1 REBALANCE EXCLUDE CLUSTER GROUP g3; COMMIT; ALTER TABLE t2 REBALANCE EXCLUDE CLUSTER GROUP g3; COMMIT; ALTER TABLE t3 REBALANCE EXCLUDE CLUSTER GROUP g3; COMMIT; ... ... ALTER TABLE t_n REBALANCE EXCLUDE CLUSTER GROUP g3; COMMIT;
저장 공간 부족 등으로 인해 <alter database rebalance exclude cluster group statement> 구문이 실패한 경우, shard 배제에 성공한 테이블은 rollback 하지 않는다.
따라서 에러에 대해 적절한 조치를 취한 후 <alter database rebalance exclude cluster group statement> 구문을 다시 수행하면 이미 shard 배제에 성공한 테이블들은 재배치 대상에 포함되지 않으며, 재배치가 필요한 테이블들의 shard만 배제하고 재배치한다.
사용 예
다음은 <alter database rebalance exclude cluster group statement> 구문을 수행하는 예이다.
gSQL> ALTER DATABASE REBALANCE EXCLUDE CLUSTER GROUP g3; Database altered.
호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER DATABASE RECOVER
기능
온라인/ archive log file을 사용하여 데이터베이스 내의 전체 데이터파일 (datafile) 또는 일부 데이터파일을 복구한다.
구문
<alter database recover statement> ::=
<complete database recover statement>
| <datafile recover statement>
| <complete tablespace recover statement>
| <incomplete database recover statement>
;
<complete database recover statement> ::=
ALTER DATABASE RECOVER [<recovery slaves clause>]
<datafile recover statement> ::=
ALTER DATABASE RECOVER DATAFILE
<datafile recovery clause>
[ <recovery slaves clause> ]
[ AT <domain name> ]
<datafile recovery clause> ::=
<datafile recovery object> [, ...]
<datafile recovery object> ::=
'datafile_name' [<recovery using backup option>] [recovery corruption option>]
<recovery using backup option> ::=
USING BACKUP 'backup_datafile_name'
<recovery corruption option> ::=
CORRUPTION
<complete tablespace recover statement> ::=
ALTER DATABASE RECOVER TABLESPACE tablespace_name
[ <recovery slaves clause> ]
[ AT <domain name> ]
<incomplete database recover statement> ::=
<batch incomplete recovery statement>
| <interactive incomplete recovery statement>
;
<batch incomplete recovery statement> ::=
ALTER DATABASE RECOVER <until clause> [<recovery slaves clause>]
<until clause> ::=
UNTIL CHANGE integer
| UNTIL CHANGE SCN scn_format
| UNTIL TIME datetime_format
<using backup controlfile option> ::=
USING BACKUP CONTROLFILE
<interactive incomplete recovery statement> ::=
ALTER DATABASE <incomplete recovery option>
<incomplete recovery option> ::=
BEGIN INCOMPLETE RECOVERY [<recovery slaves clause>]
| END INCOMPLETE RECOVERY
| RECOVER 'logfile name'
| RECOVER AUTOMATICALLY
| RECOVER SUGGESTION
;
<datafile recovery clause> ::=
<datafile recovery object> [, ...]
<recovery slaves clause> ::=
NOPARALLEL
| PARALLEL [integer]사용 범위 및 접근 권한
<alter database recover statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<complete database recover statement>
온라인 및 archive 로그파일을 이용하여 데이터베이스의 데이터 파일들을 최신상태로 복구한다.
ONLINE 상태의 모든 테이블스페이스를 복구한다.
데이터베이스는 MOUNT 상태여야하고, ARCHIVELOG 모드여야 한다.
필요한 archive log file이 존재하지 않으면 실패한다.
<datafile recover statement>
Immediate option으로 offline 된 tablespace의 datafile, backup 된 datafile 또는 backup 도중에 장애가 발생하여 archive logfile을 이용한 복구가 필요한 tablespace의 datafile들을 최신 상태로 복구한다.
Datafile은 MOUNT phase 또는 OPEN phase에서 복구할 수 있다.
OPEN phase에서의 복구는 OFFLINE 상태의 tablespace의 datafile만 가능하고, MOUNT phase에서의 복구는 ONLINE/ OFFLINE 상태의 datafile 모두 가능하다.
필요한 archive logfile이 존재하지 않으면 복구에 실패한다.
<datafile recovery clause>
복구할 한 개 이상의 datafile object list를 기술한다.
<datafile recovery object>
복구할 datafile 이름과 복구 옵션을 설정한다.
<recovery using backup option>
복구할 datafile의 backup datafile 이름을 설정한다.
<recovery corruption option>
복구할 datafile에서 corrupt 된 page만 복구할지 여부를 설정한다.
<complete tablespace recover statement>
테이블스페이스의 데이터 파일들을 최신 상태로 복구한다.
테이블스페이스를 복구하려면 데이터베이스가 MOUNT 또는 OPEN 상태여야 한다.
OPEN 상태에서의 복구는 OFFLINE 상태의 테이블스페이스만 가능하고, MOUNT 상태에서의 복구는 ONLINE/ OFFLINE 상태의 테이블스페이스 모두 가능하다.
필요한 archive log file이 존재하지 않으면 복구에 실패한다.
다음과 같은 경우에는 테이블스페이스 복구 연산이 필요하다.
IMMEDIATE 로 OFFLINE 된 테이블스페이스
백업된 데이터 파일을 이용해야 하는 경우
전체 백업중 장애가 발생한 경우
<incomplete database recover statement>
<batch incomplete database recover statement>
온라인 및 archive log file을 이용하여 데이터베이스의 데이터 파일들을 최신상태가 아닌 특정 시점까지 일괄 복구한다.
ONLINE 상태의 모든 테이블스페이스를 복구한다.
데이터베이스는 MOUNT 상태여야하고, ARCHIVELOG 모드여야 한다.
불완전 복구될 시점 이후의 데이터가 존재하는 데이터 파일을 이용하면 실패한다.
불완전 복구가 완료되면 반드시 RESETLOGS로 데이터베이스를 OPEN 해야 한다.
<until clause>
불완전 복구될 특정 시점이다.
UNTIL CHANGE: 로그 단위로 불완전 복구 시점을 지정한다.
UNTIL CHANGE SCN: SCN 단위로 불완전 복구 시점을 지정한다.
UNTIL TIME: datetime 단위로 불완전 복구 시점을 지정한다.
scn_format
불완전 복구 완료 scn을 'gcn.dcn.lcn' format으로 표시한다.
gcn: global change number(BIGINT)
dcn: domain change number(BIGINT)
lcn: local change number(BIGINT)
gcn과 dcn은 클러스터 환경에서만 유효하다.
gcn은 BIGINT type만 사용할 수 있다.
dcn과 lcn은 BIGINT type과 '*'를 사용할 수 있으며, '*'는 infinite를 의미한다.
dcn이 BIGINT인 경우, lcn은 null을 사용할 수 없고, BIGINT type 또는 '*'를 사용해야 한다.
dcn이 '*' 인 경우, lcn은 반드시 null 이어야 한다.
datetime_format
불완전 복구 완료 시각을 'YYYY-MM-DD HH24:MI:SS[.[FF6]]' format으로 표시한다.
YYYY: 년
MM: 월
DD: 일
HH24: 시간
MI: 분
SS: 초
FF6: 밀리초
<interactive incomplete database recover statement>
온라인 및 archive log file을 이용하여 데이터베이스의 데이터 파일들을 최신상태가 아닌 특정 시점까지 사용자와 대화식으로 복구한다.
ONLINE 상태의 모든 테이블스페이스를 복구한다.
데이터베이스는 MOUNT 상태여야하고, ARCHIVELOG 모드여야 한다.
불완전 복구될 특정 시점 이후 데이터가 존재하는 데이터 파일을 이용하면 실패한다.
불완전 복구가 완료되면 반드시 RESETLOGS로 데이터베이스를 OPEN 해야 한다.
<incomplete recovery option>
로그 파일 단위로 대화식 불완전 복구를 수행하기 위한 옵션이다.
BEGIN INCOMPLETE RECOVERY: 불완전 복구를 시작한다.
END INCOMPLETE RECOVERY: 불완전 복구를 종료한다.
RECOVER 'logfile name': 복구를 수행할 로그 파일을 사용자가 직접 설정한다.
RECOVER AUTOMATICALLY: 복구 가능한 모든 archive log file을 복구한다.
RECOVER SUGGESTION: 시스템이 추천한 복구를 위해 필요한 archive log file을 복구한다.
<recovery slaves clause>
병렬 복구에 참여하는 slave 개수를 지정한다. 만약 <recovery slaves clause>가 생략된 경우에는 RECOVERY_SLAVES 프로퍼티에 설정된 값을 따른다.
NOPARALLEL
Slave thread 없이 master thread 만으로 복구를 수행한다.
PARALLEL [integer]
병렬로 복구를 수행한다.
integer는 0부터 사용할 수 있으며 최대값은 64이다.
integer가 생략된 경우에는 RECOVERY_SLAVES 프로퍼티에 설정된 값을 따른다.
integer가 0인 경우는 NOPARALLEL과 같다.
불완전 복구의 BEGIN INCOMPLETE RECOVERY를 수행할 때 <recovery slaves clause>가 지정된 경우에는 이후 RECOVER 구문에서 BEGIN INCOMPLETE RECOVERY를 수행할 때 지정된 값을 사용하여 데이터베이스를 병렬 복구한다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
데이터베이스 불완전 복구는 복구 완료 시점을 한 번에 찾아내기 어려우므로 여러 번 수행하여 원하는 복구 시점을 찾아야 한다. 그런데 불완전 복구가 완료된 후 RESETLOGS 옵션으로 데이터베이스를 기동하면 새로운 데이터베이스가 되기 때문에 archive log file과 온라인 redo log file에 대한 복사본을 만든 후에 불완전 복구를 여러 번 수행해야 한다.
사용 예
다음은 전체 데이터베이스를 완전 복구하는 예이다.
ALTER DATABASE RECOVER;
다음은 데이터 파일을 복구하는 예이다.
ALTER DATABASE RECOVER DATAFILE 'test.dbf';
다음은 테이블스페이스를 복구하는 예이다.
ALTER DATABASE RECOVER TABLESPACE test_tbs;
다음은 LSN이 11123인 지점까지 전체 데이터베이스를 불완전 복구하는 예이다.
ALTER DATABASE RECOVER UNTIL CHANGE 11123;
다음은 SCN 이 '100.10.1000', '100.10.*', '100.*'인 지점까지 전체 데이터베이스를 불완전 복구하는 예이다.
ALTER DATABASE RECOVER UNTIL SCN '100.10.1000';
'*'는 infinite를 의미한다. dcn이 '*' 로 설정된 경우, 지정된 gcn 보다 크지 않은 모든 log를 복구한다. lcn이 '*' 로 설정된 경우, 지정된 gcn과 dcn 보다 크지 않은 모든 log를 복구한다.
ALTER DATABASE RECOVER UNTIL SCN '100.10.1000'; ALTER DATABASE RECOVER UNTIL SCN '100.10.*'; ALTER DATABASE RECOVER UNTIL SCN '100.*';
다음은 datetime 이 '2026-03-09 16:38:35.148078'인 지점까지 전체 데이터베이스를 불완전 복구하는 예이다.
ALTER DATABASE RECOVER UNTIL TIME '2026-03-09 16:38:35.148078';
다음은 복구 가능한 archive log file까지만 복구하는 대화식 불완전 복구의 예이다.
ALTER DATABASE BEGIN INCOMPLETE RECOVERY; ALTER DATABASE RECOVER AUTOMATICALLY; ALTER DATABASE END INCOMPLETE RECOVERY;
호환성
SQL 표준에서는 ALTER DATABASE 구문을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER DATABASE REGISTER
기능
복구 불가능한 세그먼트를 데이터베이스에 등록한다.
구문
<alter database register statement> ::=
ALTER DATABASE REGISTER IRRECOVERALBE SEGMENT
<segment physical identifier list>
;
<segment physical identifier list> ::=
integer
| <segment physical identifier list> , integer사용 범위 및 접근 권한
<alter database register statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<alter database register statement>
복구 불가능한 세그먼트를 데이터베이스에 등록한다. 해당 구문은 백업이 존재하지 않고 데이터베이스를 복구할 수 없는 경우, 세그먼트를 더 이상 사용하지 않는다는 가정하에 사용될 수 있다.
데이터베이스가 MOUNT 상태여야 한다.
등록된 세그먼트 식별자 목록은 재시작할 때 초기화된다.
서버 재시작에 성공하면 등록된 세그먼트들이 'UNUSABLE' 상태가 되는데 해당 세그먼트들은 반드시 삭제해야 한다.
<segment physical identifier list>
복구 불가능한 세그먼트의 식별자 목록이다. • Integer: 8 바이트 정수형의 세그먼트 식별자
설명
서버를 비정상 종료하고 재시작할 때 데이터베이스를 복구하는데, 이 때 이전 서비스 단계에서 디스크에 반영되지 못한 페이지들을 복구하기 위해서 REDO 로그들을 이용해 페이지를 다시 수행한다.
REDO 연산을 수행하는 중에 예상하지 못한 실패가 발생한 경우, 이를 무시하고 복구하기 위해 사용될 수 있다.
사용 예
다음은 4028679323648을 식별자로 갖는 세그먼트 복구를 포기하는 예이다.
ALTER DATABASE REGISTER IRRECOVERABLE SEGMENT 4028679323648;
호환성
SQL 표준에서는 ALTER DATABASE 구문을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER DATABASE RENAME CHANGE TRACKING FILE
기능
Change tracking 파일의 이름을 변경한다.
구문
<rename change tracking file statement> ::=
ALTER DATABASE RENAME CHANGE TRACKING FILE 'file_name'
;사용 범위 및 접근 권한
<rename change tracking file statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<rename change tracking file statement>
데이터베이스가 MOUNT 상태여야 한다.
Change tracking 이 활성화되어 있는 상태여야 한다.
'file_name'
Change tracking 파일의 이름을 지정한다.
절대 경로가 아니라면 SYSTEM_TABLESPACE_DIR 프로퍼티와 병합된 경로를 따른다.
설명
각 구문별 사용 규칙을 참조한다.
사용 예
다음은 change tracking 파일의 이름을 변경하는 예이다.
gSQL> ALTER DATABASE RENAME CHANGE TRACKING FILE 'new_change_tracking.ctf'; Database altered.
호환성
SQL 표준에서는 ALTER DATABASE 구문을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER DATABASE RENAME GLOBAL TRANSACTION LOGFILE
기능
데이터베이스에서 글로벌 트랜잭션 로그파일의 이름을 수정한다.
구문
<alter database rename global transaction logfile statement> ::=
ALTER DATABASE RENAME GLOBAL TRANSACTION LOGFILE <source_clause>
TO <target_clause>
;
<source_clause> ::= <logfile_list>
<target_clause> ::= <logfile_list>
<logfile_list> ::=
'logfile_name'
| <logfile_list>, 'logfile_name'사용 범위 및 접근 권한
<alter database rename global transaction logfile statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<alter database rename global transaction logfile statement>
데이터베이스는 MOUNT 상태여야 한다.
source_clause
데이터베이스에서 수정될 글로벌 트랜잭션 로그파일 목록이다.
target_clause
데이터베이스에서 수정될 글로벌 트랜잭션 로그파일 목록이다.
파일이 존재하지 않을 경우 에러가 발생한다.
경로를 포함한 이름의 길이는 1024 바이트보다 작아야 한다.
설명
각 구문별 사용 규칙을 참조한다.
사용 예
다음은 글로벌 트랜잭션 로그파일을 변경하는 예이다.
ALTER DATABASE RENAME GLOBAL TRANSACTION LOGFILE 'org_commit_0.log', 'org_commit_1.log' TO 'new_commit_0.log', 'new_commit_1.log';
호환성
SQL 표준에서는 ALTER DATABASE 구문을 정의하지 않고 있다.
참조
관련 내용은 ALTER DATABASE RENAME LOGFILE을 참조한다.
ALTER DATABASE RENAME LOGFILE
기능
데이터베이스에서 로그파일의 이름을 수정한다.
구문
<alter database rename logfile statement> ::=
ALTER DATABASE RENAME LOGFILE <logfile_list> TO <logfile_list>
;
<logfile_list> ::=
'logfile_name'
| <logfile_list> , 'logfile_name'사용 범위 및 접근 권한
<alter database rename logfile statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<alter database rename logfile statement>
데이터베이스는 MOUNT 상태여야 한다.
FROM <logfile_list>
데이터베이스에서 수정할 로그파일들의 이름 목록이다.
TO <logfile_list>
데이터베이스에서 수정될 로그파일들의 이름 목록이다.
<logfile_list>는 존재하는 파일이어야 한다.
파일이 존재하지 않을 경우 에러가 발생한다.
설명
각 구문별 사용 규칙을 참조한다.
사용 예
다음은 기존 로그파일 'logfile.log'를 'newlogfile.log'로 변경하는 예이다.
ALTER DATABASE RENAME LOGFILE 'logfile.log' TO 'newlogfile.log';
호환성
SQL 표준에서는 ALTER DATABASE 구문을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER DATABASE RESET LOCAL CLUSTER MEMBER
기능
Local cluster member에서 tablespace 객체를 제외한 부분을 database 생성 시점으로 초기화한다.
구문
<alter database reset local cluster member statement> ::=
ALTER DATABASE RESET LOCAL CLUSTER MEMBER
;사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
Start-up 과정 중 LOCAL OPEN 단계에서 수행할 수 있다.
<alter database reset local cluster member statement> 구문을 수행하려면 사용자에게 ADMINISTRATION ON DATABASE 권한이 있어야 한다.
설명
Local cluster member에서 tablespace 객체를 제외한 부분을 database 생성 시점으로 초기화한다. Tablespace 객체를 제외하고 사용자가 생성한 모든 객체를 제거한다.
<alter database reset local cluster member statement> 구문은 inactive cluster member를 초기화하고, 새로운 cluster member를 cluster system에 참여시키기 위해 사용한다. Cluster system과 연결이 끊긴 inactive cluster member들은 다음과 같이 처리할 수 있다.
Cluster system에 다시 참여할 수 있는 경우, JOIN 구문을 이용하여 참여시킨다.
Cluster system에 다시 참여할 수 없는 경우, DROP 구문을 이용하여 cluster system에서 제외한다.
이 때, cluster system에서 제외된 cluster member에 해당하는 장비는 다음 두 가지 방법으로 재사용할 수 있다.
방법 1: Local cluster member의 database를 다시 생성한다.
방법 2: <alter database reset local cluster member statement> 구문을 이용해 local cluster member를 초기화한다.
방법 2는 방법 1보다 tablespace를 재생성하는 비용을 줄일 수 있다.
사용 예
다음은 cluster system에서 제외된 local cluster member를 LOCAL OPEN 단계까지 구동한 후, <alter database reset local cluster member statement> 구문을 이용해 초기화하는 예이다.
gSQL> \startup nomount Startup success gSQL> ALTER SYSTEM MOUNT DATABASE; System altered. gSQL> ALTER SYSTEM OPEN LOCAL DATABASE; System altered. gSQL> ALTER DATABASE RESET LOCAL CLUSTER MEMBER; Database altered.
호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER DATABASE RESTORE
기능
증분 백업을 이용하여 데이터베이스 또는 테이블스페이스 내의 데이터 파일들을 복원한다.
구문
<alter database restore statement> ::=
<database restore statement>
| <tablespace restore statement>
| <controlfile restore statement>
;
<database restore statement> ::=
ALTER DATABASE RESTORE [ <until clause> ] [ <parallel clause> ]
<until clause> ::=
UNTIL CHANGE integer
<tablespace restore statement> ::=
ALTER DATABASE RESTORE TABLESPACE tablespace_name
[ <parallel clause> ] [ AT <domain name> ]
<parallel clause> ::=
NOPARALLEL
| PARALLEL [ integer ]
<controlfile restore statement> ::=
ALTER DATABASE RESTORE CONTROLFILE FROM 'file_name'사용 범위 및 접근 권한
alter database restore statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<database restore statement>
증분 백업을 사용하여 데이터베이스 내의 데이터 파일들을 복원한다. 데이터베이스가 MOUNT 상태여야 한다.
<tablespace restore statement>
증분 백업을 사용하여 테이블스페이스 내의 데이터 파일들을 복원한다.
데이터베이스가 MOUNT 또는 OPEN 상태여야 한다.
OPEN 상태에서는 OFFLINE 상태의 테이블스페이스만 복원할 수 있고, MOUNT 상태에서는 ONLINE/ OFFLINE 상태의 테이블스페이스 모두 복원할 수 있다.
<parallel clause>
복원시 사용할 thread의 개수를 지정한다.
NOPARALLEL
병렬로 복원을 수행하지 않는다.
PARALLEL [integer]
병렬로 복원을 수행한다.
integer는 1부터 사용할 수 있으며 최대값은 64이다.
integer가 생략된 경우는 1이다.
명시하지 않을 경우, 기본값은 NOPARALLEL이다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
<controlfile restore statement>
'file_name'을 사용하여 제어파일을 복원한다.
데이터베이스가 NOMOUNT 상태여야 한다.
'file_name'은 절대 경로를 권장하지만, 만약 상대 경로를 기술한 경우에는 <GOLDILOCKS_HOME>/wal/'file_name'을 이용한다.
설명
전체 백업을 이용한 데이터 파일 복원은 OS 복사 명령으로 백업된 파일을 직접 데이터 파일 경로에 복사하는 방법이다. 증분 백업을 이용한 데이터 파일 복원은 삭제된 데이터 파일이나 이전 데이터 파일들만 복원한다.
사용 예
다음은 증분 백업을 사용하여 데이터베이스를 복원하는 예이다.
ALTER DATABASE RESTORE;
다음은 증분 백업을 사용하여 테이블스페이스를 복원하는 예이다.
ALTER DATABASE RESTORE TABLESPACE test_tbs;
다음은 LSN이 11123보다 작은 증분 백업만 사용하여 데이터베이스를 복원하는 예이다.
ALTER DATABASE RESTORE UNTIL CHANGE 11123;
다음은 controlfile.bak을 사용하여 제어파일을 복원하는 예이다.
ALTER DATABASE RESTORE CONTROLFILE FROM 'controlfile.bak'
다음은 네 개의 thread로 database를 복원하는 예이다.
ALTER DATABASE RESTORE PARALLEL 4;
호환성
SQL 표준에서는 ALTER DATABASE 구문을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER DATABASE SYNCHRONIZE
기능
모든 테이블의 shard들과 시퀀스들을 원격으로 동기화한다.
구문
<alter database synchronize statement> ::=
ALTER DATABASE SYNCHRONIZE
[ <synchronize target> ]
[ ONLINE | OFFLINE ]
[ LOGGING | NOLOGGING ]
[ <scan partition> ]
[ <parallel clause> ]
;
<synchronize target> ::=
TABLE
| SEQUENCE
| TABLE AND SEQUENCE
| SEQUENCE AND TABLE
<scan partition> ::=
SCAN PARTITION integer
<parallel clause> ::=
NOPARALLEL
| PARALLEL [ integer ]사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter database synchronize statement> 구문을 수행하려면 사용자에게 ALTER DATABASE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<synchronize target>
동기화 대상 객체를 지정한다.
TABLE
테이블 객체를 동기화한다.
SEQUENCE
시퀀스 객체를 동기화한다.
TABLE AND SEQUENCE 또는 SEQUENCE AND TABLE
테이블과 시퀀스 객체를 동기화한다.
생략할 경우, 기본값은 TABLE AND SEQUENCE 이다.
[ ONLINE | OFFLINE ]
동기화 수행시 DML을 허용할지 여부를 결정한다
ONLINE
INSERT, UPDATE, DELETE를 허용한다.
OFFLINE
INSERT, UPDATE, DELETE를 허용하지 않는다.
생략할 경우, 기본값은 ONLINE 이다.
[ LOGGING | NOLOGGING ]
테이블 동기화 과정에서 기록되는 로그의 양을 지정한다.
LOGGING
테이블 동기화 과정에서 모든 로그를 기록한다.
NOLOGGING
테이블 동기화 과정에서 최소한의 로그만 기록한다.
생략할 경우, 기본값은 LOGGING 이다.
NOLOGGING 옵션을 사용하면 redo log가 기록되지 않는다. 따라서 move shard 수행 후 서버가 비정상적으로 종료되면 해당 테이블은 unusable 상태가 된다. 이를 방지하려면 synchronize 수행 후 CHECKPOINT 구문을 실행해야 한다.
<scan partition>
shard의 partition 개수를 지정한다.
partition 개수 만큼 shard를 분할하여 원격 서버와 동기화 한다.
integer는 0부터 사용할 수 있으며 최대값은 1000이다.
생략할 경우, ONLINE_DDL_SCAN_PARTITION 프로퍼티를 따른다.
integer가 parallel integer 보다 작은 경우에는 parallel integer와 같은 값으로 보정된다.
<synchronize target>에 SEQUENCE만 지정될 경우, 이는 무시된다.
<parallel clause>
테이블을 동기화할 때 사용할 thread 개수를 지정한다.
NOPARALLEL
테이블을 병렬로 동기화하지 않는다.
PARALLEL [integer]
테이블을 병렬로 동기화한다.
integer는 0부터 사용할 수 있으며 최대값은 64이다.
integer가 생략된 경우는 0이다.
integer가 0인 경우에는 시스템이 최적값을 결정한다.
<synchronize target>에 SEQUENCE만 지정될 경우, 이는 무시된다.
설명
기존에 배치되어 있는 모든 오프라인된 shard와 시퀀스들을 동기화하고 온라인으로 변경한다. ALTER DATABASE REBALANCE와는 달리 inactive cluster member가 있어도 수행할 수 있다.
Cluster member의 inactive 상태는 cluster system과 연결되어 있지 않은 상태로서 다음과 같은 상황에서 발생한다.
운영 중인 cluster system에서 해당 cluster member에 장애가 발생한 경우
해당 cluster member를 구동하지 않고 cluster system의 start-up을 시도한 경우
<alter database synchronize statement>는 각 테이블마다 <alter table synchronize statement>를 수행하며 다음과 같은 질의의 합과 동치이다.
ALTER TABLE t1 SYNCHRONIZE; COMMIT; ALTER TABLE t2 SYNCHRONIZE; COMMIT; ALTER TABLE t3 SYNCHRONIZE; COMMIT; ... ALTER TABLE tn SYNCHRONIZE; COMMIT;
<alter database synchronize statement>는 특정 테이블을 동기화하는 도중에 에러가 발생하더라도 종료하지 않고 다음 테이블의 동기화를 진행하며 다음과 같은 경고와 함께 성공한다.
gSQL> ALTER DATABASE SYNCHRONIZE; ERR-42000(16555): of the total '5' tables, '1' tables failed to synchronize Database altered.
위 에러 메시지는 다섯 개의 테이블 중에서 한 개의 테이블이 실패했다는 의미이다.
이후 에러에 대해 적절한 조치를 취한 후 <alter database synchronize statement> 구문을 다시 수행하면 실패했던 테이블에 대해서만 진행된다.
자세한 에러는 구문을 수행한 멤버의 시스템 트레이스 로그(system.trc)를 참조한다.
사용 예
다음은 <alter database synchronize statement> 구문을 수행하는 예이다.
gSQL> ALTER DATABASE SYNCHRONIZE; Database altered.
호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER INDEX
기능
인덱스 정의를 변경한다.
구문
<alter index statement> ::=
<alter index physical attribute statement>
| <rename index statement>
| <aging index statement>
| <rebuild index statement>
| <index coalesce statement>
| <alter index enforcement>
;사용 범위 및 접근 권한
<alter index statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
인덱스의 소유자
인덱스가 속한 테이블의 소유자
인덱스가 속한 테이블에 대해 CONTROL TABLE ON TABLE
인덱스가 속한 스키마에 대해 (ALTER INDEX 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY INDEX ON DATABASE
구문 규칙 및 파라미터
<alter index physical attribute statement>
인덱스의 물리적 속성을 변경한다. 자세한 내용은 ALTER INDEX name STORAGE 구문을 참조한다.
<rename index statement>
인덱스 이름을 변경한다. 자세한 내용은 ALTER INDEX name RENAME TO 구문을 참조한다.
<aging index statement>
인덱스의 빈 페이지를 삭제한다. 자세한 내용은 ALTER INDEX name AGING 구문을 참조한다.
<rebuild index statement>
인덱스를 재구축한다. 자세한 내용은 ALTER INDEX name REBUILD 구문을 참조한다.
<index coalesce statement>
인덱스 단편화를 제거한다. 자세한 내용은 ALTER INDEX name COALESCE 구문을 참조한다.
<alter index enforcement>
인덱스를 활성화 또는 비활성화 한다. 자세한 내용은 ALTER INDEX name ENABLE/DISABLE 구문을 참조한다.
설명
각 세부 구문의 설명을 참조한다.
사용 예
각 세부 구문의 사용 예를 참조한다.
호환성
SQL 표준에서는 인덱스에 대한 개념을 다루지 않고 있다.
ALTER INDEX name AGING
기능
인덱스의 빈 페이지를 삭제한다. DML과 동시에 수행할 수 있다.
구문
<aging index statement> ::=
ALTER INDEX index_name AGING
[ AT <domain name> ]
;사용 범위 및 접근 권한
<aging index statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
인덱스의 소유자
인덱스가 속한 테이블의 소유자
인덱스가 속한 테이블에 대해 CONTROL TABLE ON TABLE
인덱스가 속한 스키마에 대해 (ALTER INDEX 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY INDEX ON DATABASE
구문 규칙 및 파라미터
index_name
대상 인덱스의 이름이다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
해당 구문은 인덱스 페이지들 중에 모든 키가 삭제된 페이지들을 세그먼트로 반납한다. Aging은 논리적 삭제와 물리적 삭제라는 두 단계로 진행된다. 논리적 삭제는 인덱스에서 페이지를 지칭하는 연결을 끊는 작업인데 페이지의 마지막 키를 삭제할 당시의 SCN이 시스템의 agable SCN보다 작을 때 이 작업이 수행된다. 이 후 물리적 삭제가 이루어지는데 논리적으로 삭제할 때의 SCN이 시스템의 agable SCN 보다 작을 때 이 작업이 수행된다.
만약 시스템의 agable SCN이 증가하지 않으면 인덱스 AGING 구문이 성공하더라도 빈 페이지가 삭제되지 않을 수 있다.
사용 예
다음은 인덱스를 aging 하는 예이다.
gSQL> select index_name, empty_blocks from user_indexes where index_name = 'T1X'; INDEX_NAME EMPTY_BLOCKS ---------- ------------ T1X 2 1 row selected. gSQL> alter index t1x aging; Index altered. gSQL> select index_name, empty_blocks from user_indexes where index_name = 'T1X'; INDEX_NAME EMPTY_BLOCKS ---------- ------------ T1X 0 1 row selected.
호환성
SQL 표준은 인덱스에 대한 개념을 다루지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER INDEX name COALESCE
기능
인덱스의 인접한 leaf page들을 병합하여 인덱스의 사용 공간을 줄인다. DML과 동시에 수행할 수 있다.
구문
<index coalesce statement> ::=
ALTER INDEX index_name COALESCE
[ AT <domain name> ]
;사용 범위 및 접근 권한
<index coalesce statement> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.
인덱스의 소유자
인덱스가 속한 테이블의 소유자
인덱스가 속한 테이블에 대해 CONTROL TABLE ON TABLE
인덱스가 속한 스키마에 대해 (ALTER INDEX 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY INDEX ON DATABASE
인덱스가 생성될 테이블스페이스에 대해 다음 권한 중 하나가 있어야 한다.
해당 테이블스페이스에 대해 CREATE OBJECT ON TABLESPACE
USAGE TABLESPACE ON DATABASE
구문 규칙 및 파라미터
index_name
대상 인덱스의 이름이다. 스키마 이름을 명시할 수 있으며, 생략할 경우 사용자의 기본 스키마 이름이 사용된다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
Index coalesce
leaf 페이지들을 순차적으로 탐색하여 병합 가능한 페이지들을 병합하고, 제거된 페이지들을 세그먼트로 반환한다.
UPDATE/ DELETE 등으로 인해 발생한 leaf 페이지의 단편화 문제를 해결할 수 있다.
유효하지 않은 shard와 관련된 key들을 제거하고 shard sequence 제한을 풀어준다.
인접한 leaf 페이지들이 병합 가능한 경우에만 동작하므로 단편화 정도가 낮은 상태에서는 효과가 없을 수 있다.
인덱스의 단편화 정도가 심한 경우 INDEX REBUILD보다 더 오래 걸릴 수 있다.
INDEX REBUILD | INDEX COALESCE | |
|---|---|---|
인덱스 속성 변경 | 가능 | 불가능 |
테이블스페이스 이동 | 가능 | 불가능 |
테이블 잠금 | 필요 | 불필요 |
수행을 위한 추가 공간 | 필요 | 불필요 |
트리 높이 감소 | 가능 | 불가능 |
사용 예
gsql> ALTER INDEX T1X COALESCE; Index altered.
호환성
SQL 표준은 인덱스에 대한 개념을 다루지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER INDEX name ENABLE/DISABLE
기능
인덱스를 활성화 또는 비활성화 한다.
구문
<alter index enforcement> ::=
ALTER INDEX index_name <index enforcement>
;
<index enforcement> ::=
{ ENABLE | ENFORCED }
| { DISABLE | NOT ENFORCED }사용 범위 및 접근 권한
<alter index enforcement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
인덱스의 소유자
인덱스가 속한 테이블의 소유자
인덱스가 속한 테이블에 대해 CONTROL TABLE ON TABLE
인덱스가 속한 스키마에 대해 (ALTER INDEX 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY INDEX ON DATABASE
구문 규칙 및 파라미터
index_name
대상 인덱스의 이름이다. 스키마 이름을 명시할 수 있으며, 생략할 경우 사용자의 기본 스키마 이름이 사용된다.
<index enforcement>
ENABLE 과 ENFORCED 는 동일한 의미이다. DISABLE 과 NOT ENFORCED 는 동일한 의미이다.
ENABLE
Index 를 구축하고 활성화한다.
DISABLE
Index 를 비활성화한다.
Index 가 사용하던 extent 를 모두 반납한다.
DML과 SELECT 에서 해당 index 를 사용하지 않는다.
설명
Key constraint를 구성하기 위해 생성한 index 는 ALTER CONSTRAINT 구문을 사용하여 관리해야 한다.
CREATE TABLE t1 ( pk INTEGER PRIMARY KEY );
COMMIT;
gSQL> \desc t1
COLUMN_NAME TYPE IS_NULLABLE
----------- ------------ -----------
PK NUMBER(10,0) FALSE
INDEX_NAME TABLESPACE_NAME INDEX_TYPE IS_UNIQUE COLUMNS
-------------------- --------------- ---------- --------- -------
T1_PRIMARY_KEY_INDEX MEM_TEMP_TBS BTREE TRUE PK
CONSTRAINT_NAME CONSTRAINT_TYPE ASSOCIATED_INDEX COLUMNS
--------------- --------------- -------------------- -------
T1_PRIMARY_KEY PRIMARY KEY T1_PRIMARY_KEY_INDEX PK
gSQL> ALTER INDEX T1_PRIMARY_KEY_INDEX DISABLE;
ERR-42000(16050): cannot modify index used for enforcement of unique/primary/foreign key :
ALTER INDEX T1_PRIMARY_KEY_INDEX DISABLE
*
ERROR at line 1:
gSQL> ALTER TABLE t1 ALTER CONSTRAINT t1_primary_key NOT ENFORCED;
Table altered.사용 예
인덱스를 비활성화한다.
CREATE TABLE t1 ( c1 INTEGER ); CREATE INDEX idx1 ON t1(c1); gSQL> ALTER INDEX idx1 DISABLE; Index altered.
호환성
SQL 표준은 인덱스에 대한 개념을 다루지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER INDEX name REBUILD
기능
인덱스를 재구축한다.
구문
<rebuild index statement> ::=
ALTER INDEX index_name REBUILD
[ ONLINE | OFFLINE ]
[ <index attributes> [...] ]
[ TABLESPACE tablespace_name ]
[ AT <domain name> ]
;
<index attributes> ::=
<physical attribute clause>
| STORAGE ( <segment attr clause> [...] )
| <parallel clause>
<physical attribute clause> ::=
PCTFREE integer
| INITRANS integer
| MAXTRANS integer
<segment attr clause> ::=
INITIAL <size_clause>
| NEXT <size_clause>
<size clause> ::=
integer [ K | M | G | T ]
<parallel clause> ::=
NOPARALLEL
| PARALLEL [ integer ]사용 범위 및 접근 권한
<rebuild index statement> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.
인덱스의 소유자
인덱스가 속한 테이블의 소유자
인덱스가 속한 테이블에 대해 CONTROL TABLE ON TABLE
인덱스가 속한 스키마에 대해 (ALTER INDEX 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY INDEX ON DATABASE
인덱스가 생성될 테이블스페이스에 대해 다음 권한 중 하나가 있어야 한다.
해당 테이블스페이스에 대해 CREATE OBJECT ON TABLESPACE
USAGE TABLESPACE ON DATABASE
구문 규칙 및 파라미터
index_name
대상 인덱스의 이름이다. 스키마 이름을 명시할 수 있으며, 생략할 경우 사용자의 기본 스키마 이름이 사용된다.
[ ONLINE | OFFLINE ]
인덱스를 재구축할 때, 해당 테이블에 DML을 허용할지 여부를 결정한다.
ONLINE
INSERT, UPDATE, DELETE를 허용한다.
OFFLINE
INSERT, UPDATE, DELETE를 허용하지 않는다.
생략할 경우, 기본값은 ONLINE이다.
<physical attribute clause>
인덱스의 물리적 속성 정보를 정의한다.
PCTFREE integer
정의
페이지 내 key 삽입으로 인한 페이지 분할 빈도를 조절하기 위해 예약된 공간이다.
0에서 99까지의 값을 사용할 수 있다.
생략할 경우, 기존 인덱스에 설정된 값을 사용한다.
INITRANS integer
정의
페이지에 동시 접근할 수 있는 초기 트랜잭션의 개수이다.
인덱스에 접근하는 사용자의 수가 적을 경우에는 INITRANS를 낮게 설정하고, 동시에 접근하는 사용자가 많을 경우에는 INITRANS를 높게 설정한다.
필요한 경우 설정된 MAXTRANS까지 자동으로 늘어난다.
1 부터 32 까지의 값을 사용할 수 있다.
생략할 경우, 기존 인덱스에 설정된 값을 사용한다.
MAXTRANS integer
정의
페이지에 동시 접근할 수 있는 트랜잭션의 최대 개수이다.
1 부터 32 까지의 값을 사용할 수 있다.
생략할 경우, 기존 인덱스에 설정된 값을 사용한다.
<segment attr clause>
인덱스가 저장될 공간에 대한 정보를 기술한다.
INITIAL integer
정의
인덱스를 생성할 때 초기에 할당할 물리적 공간의 크기를 기술한다.
integer 값이 EXTENT 두 개 이하인 경우, extent 두 개 크기로 설정된다.
integer 값이 EXTENT 두 개 보다 큰 경우, TABLESPACE의 EXTENT 크기에 맞춰 (aligned) 설정된다.
최소값은 1이고 최대값은 시스템 환경에 따라 다르다.
생략할 경우, 기존 인덱스에 설정된 값을 사용한다.
NEXT integer
정의
인덱스에 물리적 공간을 추가할 경우 할당할 물리적 공간의 크기를 기술한다.
이 크기는 테이블이 속하는 TABLESPACE의 EXTENT 크기에 align 되어 사용된다. (예: EXT크기가 8192 bytes일 경우 'NEXT 100'은 실제 8192 bytes로 작동한다.)
NEXT는 현재 인덱스가 사용할 수 있는 남은 공간의 크기 (MAXEXTENTS의 크기에서 현재 사용하고 있는 공간의 크기를 뺀 크기)에 따라 다음과 같이 작동한다.
- 남은 공간의 크기가 0인 경우 더 이상 공간을 확장하지 못한다.
- 남은 공간의 크기가 0보다 크고 NEXT보다 작은 경우 남은 공간의 크기만큼 할당한다.
- 남은 공간의 크기가 NEXT 보다 클 경우 NEXT의 크기만큼 할당한다.
최소값은 1이고 최대값은 시스템 환경에 따라 다르다.
생략할 경우, 기존 인덱스에 설정된 값을 사용한다.
<size clause>
파일의 바이트 크기를 명시한다. (단위를 기술하지 않을 경우 bytes이다.)
K: Kilobytes
M: Megabytes
G: Gigabytes
T: Terabytes
NOPARALLEL | PARALLEL [ integer ]
인덱스가 재구축되는 동안 사용될 thread의 개수를 지정한다.
NOPARALLEL
인덱스를 병렬로 재구축하지 않는다.
PARALLEL [integer]
인덱스를 병렬로 재구축한다.
integer가 생략되거나 0으로 지정된 경우에는 INDEX_BUILD_PARALLEL_FACTOR 프로퍼티를 따른다.
integer는 0부터 사용할 수 있으며 최대값은 64이다.
만약 integer나 프로퍼티의 값이 0인 경우에는 시스템이 최적값을 결정한다.
명시하지 않을 경우, 기본값은 NOPARALLEL이다.
TABLESPACE tablespace_name
인덱스가 재구축될 tablespace의 이름을 지정한다.
tablespace_name을 지정할 경우
tablespace_name이 data tablespace면 LOGGING 인덱스로 재구축된다.
tablespace_name이 temporary tablespace 또는 nologging tablespace면 NOLOGGING 인덱스로 재구축된다.
TABLESPACE 절을 생략할 경우, 기존 인덱스의 tablespace로 설정된다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다. <index attributes> 와 함께 사용할 수 없다.
설명
인덱스 단편화 제거
인덱스에 DML이 빈번하게 수행되는 경우, 인덱스 페이지에 단편화가 발생할 수 있다. 유효한 데이터에 비해 트리가 지나치게 커진 경우, 인덱스 용량은 커지고 성능은 하락한다. 이 경우 인덱스를 재구축하면 인덱스 페이지의 단편화를 해결하여 인덱스 용량을 줄이고 인덱스의 성능을 회복할 수 있다.
인덱스의 테이블스페이스 변경
기존에 생성된 인덱스의 테이블스페이스를 변경할 수 있다.
단, 테이블스페이스의 TEMPORARY 여부에 따라 로깅 여부를 적절하게 설정해주어야 한다.
인덱스의 로깅 설정 변경
LOGGING 인덱스로 변경하려면, data tablespace를 TABLESPACE 옵션에 지정해줘야 한다.
NOLOGGING 인덱스로 변경하려면, temporary tablespace 또는 nologging tablespace를 TABLESPACE 옵션에 지정해줘야 한다.
유효하지 않은 shard 관련 key들을 제거
Shard가 변경되는 작업을 수행한 경우, 변경되기 전 shard와 관련된 key들이 인덱스에 남아있을 수 있다. 이것들을 제거하지 않고 쌓아두면 shard sequence exceed 에러가 발생할 수 있다. 이 문제는 shard가 빈번하게 변경되는 경우에 발생하는데, 인덱스를 재구축하는 방식으로 해결할 수 있다.
사용 예
다음은 인덱스의 로깅 설정과 테이블스페이스를 변경하는 예이다.
gsql> SELECT INDEX_NAME, TABLESPACE_NAME FROM INDEXES AS IDX, TABLESPACES AS TBS WHERE IDX.TABLESPACE_ID = TBS.TABLESPACE_ID AND IDX.INDEX_NAME = 'T1X'; INDEX_NAME TABLESPACE_NAME ---------- --------------- T1X MEM_TEMP_TBS 1 row selected. gsql> ALTER INDEX T1X REBUILD TABLESPACE MEM_DATA_TBS; SELECT INDEX_NAME, TABLESPACE_NAME FROM INDEXES AS IDX, TABLESPACES AS TBS WHERE IDX.TABLESPACE_ID = TBS.TABLESPACE_ID AND IDX.INDEX_NAME = 'T1X'; INDEX_NAME TABLESPACE_NAME ---------- --------------- T1X MEM_DATA_TBS 1 row selected.
호환성
SQL 표준은 인덱스에 대한 개념을 다루지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER INDEX name RENAME TO
기능
인덱스의 이름을 변경한다.
구문
<rename index statement> ::=
ALTER INDEX index_name
RENAME TO new_index_name
;사용 범위 및 접근 권한
<rename index statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
인덱스의 소유자
인덱스가 속한 테이블의 소유자
인덱스가 속한 테이블에 대해 CONTROL TABLE ON TABLE
인덱스가 속한 스키마에 대해 (ALTER INDEX 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY INDEX ON DATABASE
구문 규칙 및 파라미터
index_name
대상 인덱스의 이름이다. 스키마 이름을 기술할 수 없으며, 기존 인덱스와 동일한 스키마 이름을 갖는다.
new_index_name
새로운 인덱스의 이름이며 스키마 내에서 유일한 인덱스 이름이어야 한다.
설명
각 구문별 사용 규칙을 참조한다.
사용 예
다음은 인덱스의 이름을 변경하는 예이다.
gSQL> ALTER INDEX t1_idx1 RENAME TO idx_t1_id; Index altered.
호환성
SQL 표준은 인덱스에 대한 개념을 다루지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER INDEX name STORAGE
기능
인덱스의 물리적 속성을 변경한다.
구문
<alter index physical attribute statement> ::=
ALTER INDEX index_name
| <physical attribute clause>
| [ STORAGE ( <segment attr clause> [...] ) ]
;
<physical attribute clause> ::=
PCTFREE integer
| INITRANS integer
| MAXTRANS integer
<segment attr clause> ::=
INITIAL <size_clause>
| NEXT <size_clause>
<size clause> ::=
integer [ K | M | G | T ]사용 범위 및 접근 권한
<alter index physical attribute statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
인덱스의 소유자
인덱스가 속한 테이블의 소유자
인덱스가 속한 테이블에 대해 CONTROL TABLE ON TABLE
인덱스가 속한 스키마에 대해 (ALTER INDEX 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY INDEX ON DATABASE
구문 규칙 및 파라미터
index_name
대상 인덱스의 이름이다.
<physical attribute clause>
인덱스의 물리적 속성 정보를 정의한다.
PCTFREE integer
정의
페이지 내에 key 삽입으로 인한 페이지 분할 빈도를 조절하기 위해 예약된 공간이다.
인덱스 bottom-up 빌드시에만 적용된다.
0 에서 99 까지의 값을 사용할 수 있다.
생략할 경우, 기본값은 DEFAULT_INDEX_PCTFREE property에 설정된 값을 사용한다.
INITRANS integer
정의
페이지에 동시 접근할 수 있는 초기 트랜잭션의 개수이다.
인덱스에 접근하는 사용자의 수가 적을 경우에는 INITRANS를 낮게 설정하고, 동시에 접근하는 사용자가 많을 경우에는 INITRANS를 높게 설정한다.
필요한 경우 설정된 MAXTRANS까지 자동으로 늘어난다.
1 부터 32 까지의 값을 사용할 수 있다.
생략할 경우, 기본값은 4 이다.
MAXTRANS integer
정의
페이지에 동시 접근할 수 있는 트랜잭션의 최대 개수이다.
1 부터 32 까지의 값을 사용할 수 있다.
생략할 경우, 기본값은 8 이다.
<segment attr clause>
인덱스가 저장될 공간에 대한 정보를 기술한다.
INITIAL integer
정의
인덱스를 생성할 때 초기에 할당할 물리적 공간의 크기를 기술한다.
integer 값이 EXTENT 두 개 이하인 경우, extent 두 개 크기로 설정된다.
integer 값이 EXTENT 두 개 보다 큰 경우, TABLESPACE의 EXTENT 크기에 맞춰 (aligned) 설정된다.
인덱스 bottom-up 빌드시에만 적용된다.
최소값은 1이고 최대값은 시스템 환경에 따라 다르다.
NEXT integer
정의
인덱스의 물리적 공간을 추가할 경우 할당할 물리적 공간의 크기를 기술한다.
이 크기는 테이블이 속하는 TABLESPACE의 EXTENT 크기에 align 되어 사용된다. (예: EXT 크기가 8192 bytes일 경우 'NEXT 100'은 실제 8192 bytes로 동작한다.)
NEXT는 현재 인덱스가 사용할 수 있는 남은 공간의 크기 (MAXEXTENTS의 크기에서 현재 사용하고 있는 공간의 크기를 뺀 크기)에 따라 아래와 같이 동작한다.
- 남은 공간의 크기가 0인 경우 더 이상 공간을 확장하지 못한다.
- 남은 공간의 크기가 0보다 크고 NEXT보다 작은 경우 남은 공간의 크기만큼 할당한다.
- 남은 공간의 크기가 NEXT 보다 클 경우 NEXT의 크기만큼 할당한다.
최소값은 1이고 최대값은 시스템 환경에 따라 다르다.
<size clause>
파일의 바이트 크기를 명시한다. (단위를 기술하지 않을 경우 bytes이다.)
K: kilobytes
M: megabytes
G: gigabytes
T: terabytes
설명
각 구문별 사용 규칙을 참조한다.
사용 예
다음은 인덱스의 물리적 속성을 변경하는 예이다.
gSQL> ALTER INDEX idx_t1_id PCTFREE 10 INITRANS 4 MAXTRANS 8; Index altered.
호환성
SQL 표준은 인덱스에 대한 개념을 다루지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER PROFILE
기능
비밀번호 관리 방법을 변경한다.
구문
<alter profile statement> ::=
ALTER PROFILE profile_name LIMIT
{ <password_parameters>, ...}
;
<password parameters> ::=
FAILED_LOGIN_ATTEMPTS { integer | UNLIMITED | DEFAULT }
| PASSWORD_LOCK_TIME { password_parameter_number_interval | UNLIMITED | DEFAULT }
| PASSWORD_LIFE_TIME { password_parameter_number_interval | UNLIMITED | DEFAULT }
| PASSWORD_GRACE_TIME { password_parameter_number_interval | UNLIMITED | DEFAULT }
| PASSWORD_REUSE_MAX { integer | UNLIMITED | DEFAULT }
| PASSWORD_REUSE_TIME { password_parameter_number_interval | UNLIMITED | DEFAULT }
| PASSWORD_VERIFY_FUNCTION { <verify_policy> | NULL | DEFAULT }
<verify_policy> ::=
KISA_VERIFY_FUNCTION
| ORA12C_VERIFY_FUNCTION
| ORA12C_STRONG_VERIFY_FUNCTION
| VERIFY_FUNCTION_11G
| VERIFY_FUNCTION
<password_parameter_number_interval> ::=
integer
| integer / integer사용 범위 및 접근 권한
<alter profile statement> 구문을 수행하려면 사용자에게 ALTER PROFILE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
profile_name
변경할 profile의 이름이다.
FAILED_LOGIN_ATTEMPTS
로그인 연속 실패 허용 횟수를 설정한다. 자세한 내용은 CREATE PROFILE 구문을 참조한다.
PASSWORD_LOCK_TIME
로그인에 연속적으로 실패한 후에 계정이 잠기는 기간 (day)을 설정한다. 자세한 내용은 CREATE PROFILE 구문을 참조한다.
PASSWORD_LIFE_TIME
비밀번호의 유효 기간 (day)을 설정한다. 자세한 내용은 CREATE PROFILE 구문을 참조한다.
PASSWORD_GRACE_TIME
PASSWORD_LIFE_TIME 이후에 로그인 할 때 비밀번호 만료를 유예하는 기간을 설정한다. 자세한 내용은 CREATE PROFILE 구문을 참조한다.
PASSWORD_REUSE_MAX
이전 비밀번호를 재사용하려 할 때 재사용할 수 없는 최근 비밀번호 개수를 명시한다. 자세한 내용은 CREATE PROFILE 구문을 참조한다.
PASSWORD_REUSE_TIME
이전 비밀번호를 재사용하기 위해 필요한 경과 기간을 명시한다. 자세한 내용은 CREATE PROFILE 구문을 참조한다.
PASSWORD_VERIFY_FUNCTION
비밀번호 복잡도 검증 방법을 설정한다. 자세한 내용은 CREATE PROFILE 구문을 참조한다.
사용 예
다음은 계정 잠금을 제어하기 위해 profile을 변경하는 예이다.
gSQL> ALTER PROFILE prof1 LIMIT
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME 3;
Profile altered.
gSQL> COMMIT;
Commit complete.다음은 비밀번호 만료를 제어하기 위해 profile을 변경하는 예이다
gSQL> ALTER PROFILE prof1 LIMIT
PASSWORD_LIFE_TIME 90
PASSWORD_GRACE_TIME 7;
Profile altered.
gSQL> COMMIT;
Commit complete.다음은 비밀번호 재사용 여부를 제어하기 위해 profile을 변경하는 예이다.
gSQL> ALTER PROFILE prof1 LIMIT
PASSWORD_REUSE_MAX DEFAULT
PASSWORD_REUSE_TIME DEFAULT;
Profile altered.
gSQL> COMMIT;
Commit complete.다음은 비밀번호 복잡도 검사를 제어하기 위해 profile을 변경하는 예이다.
gSQL> ALTER PROFILE prof1 LIMIT
PASSWORD_VERIFY_FUNCTION KISA_VERIFY_FUNCTION;
Profile altered.
gSQL> COMMIT;
Commit complete.호환성
SQL 표준은 profile에 대한 개념을 다루지 않고 있다.
참조
관련 내용은 DROP PROFILE을 참조한다.
ALTER SEQUENCE
기능
시퀀스를 변경한다.
구문
<alter sequence generator statement> ::=
ALTER SEQUENCE sequence_name <alter sequence generator options>
;
<alter sequence generator options> ::=
<alter sequence generator option> [, ...]
<alter sequence generator option> ::=
<alter sequence generator restart option>
| <basic sequence generator option>
<alter sequence generator restart option> ::=
RESTART [ WITH integer ]
<basic sequence generator option> ::=
<sequence generator increment by option>
| <sequence generator maxvalue option>
| <sequence generator minvalue option>
| <sequence generator cycle option>
| <sequence generator cache option>
<sequence generator increment by option> ::=
INCREMENT BY integer
<sequence generator maxvalue option> ::=
MAXVALUE integer
| (NO MAXVALUE | NOMAXVALUE)
<sequence generator minvalue option> ::=
MINVALUE integer
| (NO MINVALUE | NOMINVALUE)
<sequence generator cycle option> ::=
CYCLE
| (NO CYCLE | NOCYCLE)
<sequence generator cache option> ::=
CACHE integer
| (NO CACHE | NOCACHE)사용 범위 및 접근 권한
<alter sequence generator statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
해당 시퀀스의 소유자
시퀀스가 속한 스키마에 대해 (ALTER SEQUENCE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY SEQUENCE ON DATABASE
구문 규칙 및 파라미터
sequence_name
변경할 시퀀스의 이름이다. schema_name.sequence_name과 같이 시퀀스가 속할 스키마를 정의할 수 있으며, schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
<alter sequence generator restart option>
시퀀스의 다음 값 (NEXT VALUE)을 설정한다. 단, CREATE SEQUENCE 구문에서 정의한 START WITH의 값은 변경하지 않는다.
RESTART
값을 명시하지 않을 경우, <sequence generator definition> 에서 정의한 START WITH의 값이 시퀀스의 다음 값으로 설정된다.
RESTART WITH integer
integer 값을 시퀀스의 다음 값으로 설정한다.
integer 값은 MINVALUE와 MAXVALUE 사이의 값이어야 한다.
<alter sequence generator restart option> 절을 명시하지 않은 경우, 시퀀스의 현재값을 기준으로 시퀀스의 속성을 변경한다.
<sequence generator increment by option>
시퀀스 번호의 간격을 변경한다. 다음과 같은 제약과 특징을 갖는다.
양수 또는 음수를 사용할 수 있으며, 0은 사용할 수 없다.
간격의 절대값은 MINVALUE와 MAXVALUE의 차이보다 작아야 한다.
양수일 경우 오름차순 시퀀스가 되고 음수일 경우 내림차순 시퀀스가 된다.
<sequence generator maxvalue option>
시퀀스로 생성할 수 있는 최대값을 변경한다. 단, MAXVALUE의 값이 시퀀스의 현재값보다 작지 않아야 한다.
MAXVALUE integer
최대값의 범위는 64bit 정수의 최소값 (−9,223,372,036,854,775,808)에서 64bit 정수의 최대값(+9,223,372,036,854,775,807) 까지이다.
START WITH의 값과 같거나 크고, MINVALUE 값보다 커야 한다.
NO MAXVALUE | NOMAXVALUE
최대값을 다음과 같이 변경한다.
오름차순 시퀀스일 경우, 64 bit 정수의 최대값 (+9,223,372,036,854,775,807)이 된다.
내림차순 시퀀스일 경우, -1이 된다.
NO MAXVALUE (SQL 표준)와 NOMAXVALUE는 동일한 의미의 예약어이므로 어떤 것을 사용해도 무방하다.
<sequence generator minvalue option>
시퀀스로 생성할 수 있는 최소값을 변경한다. 단, MINVALUE의 값이 시퀀스의 현재값보다 크지 않아야 한다.
MINVALUE integer
최소값의 범위는 64 bit 정수의 최소값 (−9,223,372,036,854,775,808)에서 64 bit 정수의 최대값(+9,223,372,036,854,775,807) 까지이다.
START WITH의 값과 같거나 작고, MAXVALUE 값보다 작아야 한다.
NO MINVALUE | NOMINVALUE
최소값을 다음과 같이 변경한다.
오름차순 시퀀스일 경우, 1이 된다.
내림차순 시퀀스일 경우, 64 bit 정수의 최소값 (−9,223,372,036,854,775,808)이 된다.
NO MINVALUE (SQL 표준)와 NOMINVALUE는 동일한 의미의 예약어이므로 어떤 것을 사용해도 무방하다.
<sequence generator cycle option>
시퀀스의 값이 최대값 또는 최소값이 되었을 때, 계속 값을 생성할지 여부를 변경한다.
CYCLE
오름차순 시퀀스가 최대값이 되었을 때, 최소값부터 다시 생성한다.
내림차순 시퀀스가 최소값이 되었을 때, 최대값부터 다시 생성한다.
NO CYCLE | NOCYCLE
최대값 또는 최소값이 되었을 때, 시퀀스 값을 생성할 수 없다.
NO CYCLE (SQL 표준)과 NOCYCLE은 동일한 의미의 예약어이므로 어떤 것을 사용해도 무방하다.
<sequence generator cache option>
시퀀스에 신속하게 접근하기 위해 메모리상에 미리 적재할 시퀀스 값의 개수를 정의한다. Database를 재구동할 때, 메모리상에 적재한 시퀀스 값은 유실되고 적재한 이후의 값부터 시작된다.
CACHE integer
CACHE 값은 2와 같거나 커야하고
CYCLE이 존재할 경우 CACHE 값이 CYCLE의 길이보다 크지 않아야 한다.
CYCLE의 길이: CEIL(MAXVALUE - MINVALUE) / ABS(INCREMENT)
NO CACHE | NOCACHE
메모리 상에 시퀀스값을 미리 적재하지 않는다.
설명
CREATE SEQUENCE 구문에서 정의한 시퀀스 속성 중 START WITH는 변경할 수 없다. START WITH 속성을 변경하려면 DROP SEQUENCE 구문을 수행한 후에 CREATE SEQUENCE 구문을 사용하여 다시 생성해야 한다.
사용 예
다음은 RESTART 옵션으로 시퀀스 값을 재시작하고 이를 이용하여 ID 값을 새로 부여하는 예이다.
gSQL> SELECT id, name FROM t1 ORDER BY 1; ID NAME --- ------ 10 leekmo 42 mkkim 51 jhkim 172 ehpark 4 rows selected. gSQL> ALTER SEQUENCE seq1 RESTART; Sequence altered. gSQL> UPDATE t1 SET id = seq1.NEXTVAL; 4 rows updated. gSQL> SELECT id, name FROM t1 ORDER BY 1; ID NAME -- ------ 1 leekmo 2 mkkim 3 jhkim 4 ehpark 4 rows selected.
호환성
SQL 표준에서는 CACHE/ NO CACHE 절을 정의하지 않고 있다.
Feature ID | 설명 | 지원 여부 |
|---|---|---|
T176 | Sequence generator support | O |
T177 | Sequence generator support: simple restart option | O |
참조
관련 내용은 다음을 참조한다.
ALTER SESSION CLEANUP GLOBAL TEMPORARY SEGMENT POOL;
기능
세션에서 재사용하기 위해 catching 된 모든 공간들을 해당 tablespace로 반환한다.
구문
<alter session cleanup global temporary segment pool statement> ::=
ALTER SESSION CLEANUP GLOBAL TEMPORARY SEGMENT POOL
;설명
수행된 세션에서 segment cache의 segment들만 cleanup한다.
사용 예
다음은 세션 segment cache를 cleanup하는 예이다.
gSQL> ALTER SESSION CLEANUP GLOBAL TEMPORARY SEGMENT POOL; Session altered.
호환성
SQL 표준에서는 global temporary table, global temporary index의 segment cache 개념을 정의하지 않고 있다.
참조
관련 내용은 Global Temporary Table 을 참조한다.
ALTER SESSION SET property_name
기능
세션의 프로퍼티 값을 설정한다.
구문
<alter session set statement> ::=
ALTER SESSION SET <property name> { = <property value> | TO DEFAULT }
;구문 규칙 및 파라미터
<property name>
설정할 프로퍼티 이름이다. 자세한 내용은 Database Administration 매뉴얼의 Server Property 장을 참조한다.
<property value>
설정할 프로퍼티 값이다.
TO DEFAULT
세션 프로퍼티 값을 시스템 프로퍼티 값으로 설정한다.
설명
각 property에 대한 자세한 설명은 Database Administration 매뉴얼의 Server Property 장을 참조한다.
사용 예
다음은 HINT_ERROR 속성을 설정하여 hint 구문에 오류가 있을 경우 에러가 발생하는 예이다.
gSQL> ALTER SESSION SET HINT_ERROR = ON;
Session altered.
gSQL> SELECT /*+ INDEX( t1, invalid_index ) */ name FROM t1 WHERE id = 1;
ERR-42000(16058): not applicable hint :
SELECT /*+ INDEX( t1, invalid_index ) */ name FROM t1 WHERE id = 1
*
ERROR at line 1:다음은 세션 프로퍼티 값을 시스템 프로퍼티의 값으로 설정하는 예이다.
gSQL> ALTER SESSION SET HINT_ERROR TO DEFAULT; Session altered.
호환성
SQL 표준에서는 세션 프로퍼티 개념을 정의하지 않고 있다.
참조
관련 내용은 ALTER SESSION SET property_name 을 참조한다.
ALTER SYSTEM CANCEL SESSION
기능
세션에서 수행되고 있는 작업을 취소한다.
구문
<alter system cancel session statement> ::=
ALTER SYSTEM CANCEL SESSION [<member_position>,] <session_id>,
<serial#> [AT <domain_name>]
;사용 범위 및 접근 권한
<alter system cancel session statement> 구문을 수행하려면 사용자에게 ALTER SYSTEM ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<member_position>
Cluster database에서만 유효한 구문이다. Cancel 대상이 되는 세션의 member position 이다.
<session_id>
세션의 ID 이다.
<serial#>
세션의 SERIAL NUMBER 이다.
<domain name>
Cluster database에서만 유효한 구문이다. 구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
CANCEL SESSION은 driver session에만 적용되고 system session이나 cluster session에는 적용되지 않는다. 만약 system session이나 cluster session에 해당 구문을 수행하면 다음과 같은 에러가 발생한다.
gSQL> ALTER SYSTEM CANCEL SESSION 1,1; ERR-42000(16603): system session cannot be canceled
사용 예
다음은 <alter system cancel session statement> 구문을 수행하는 예이다.
gSQL> SELECT USER_NAME, SESSION_ID, SERIAL_NO, SESSION_STATUS, PROGRAM_NAME FROM V$SESSION WHERE USER_NAME = 'TEST'; USER_NAME SESSION_ID SERIAL_NO SESSION_STATUS PROGRAM_NAME --------- ---------- --------- -------------- ------------ TEST 28 10 CONNECTED gsql TEST 29 1 CONNECTED gsqlnet 2 rows selected. gSQL> ALTER SYSTEM CANCEL SESSION 28, 10; System altered.
호환성
SQL 표준에서는 ALTER SYSTEM CANCEL SESSION 구문을 정의하지 않고 있다.
ALTER SYSTEM CHECKPOINT
기능
CHECKPOINT를 수행한다.
구문
<alter system checkpoint statement> ::=
ALTER SYSTEM CHECKPOINT
[ AT <domain name> ]
;사용 범위 및 접근 권한
<alter system checkpoint statement> 구문을 수행하려면 사용자에게 ALTER SYSTEM ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<alter system checkpoint statement>
CHECKPOINT는 commit 된 트랜잭션들이 변경한 모든 데이터가 디스크에 기록되는 것을 보장하는 연산이다.
데이터베이스가 OPEN 상태여야 한다.
데이터베이스가 TDS 모드여야 한다.
전체 백업이 진행중일 때는 변경된 페이지가 데이터 파일에 기록되지 않고, REDO 로그와 제어파일만 디스크에 기록된다. 만약 이러한 상태에서 서버가 비정상 종료되는 경우에는 미디어 복구를 수행해야 한다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
체크포인트 (checkpoint) 연산은 commit 된 트랜잭션들이 변경한 모든 내용을 디스크에 기록함으로써 시스템 장애시 신속한 복구를 가능하게 한다.
사용 예
다음은 CHECKPOINT를 수행하는 예이다.
ALTER SYSTEM CHECKPOINT;
호환성
SQL 표준에서는 CHECKPOINT 개념을 정의하지 않고 있다.
ALTER SYSTEM CLEANUP BUFFER_CACHE
기능
Buffer cache에서 free 가능한 모든 buffer page들을 비운다.
구문
<alter system cleanup buffer_cache statement> ::=
ALTER SYSTEM CLEANUP BUFFER_CACHE
[ AT <domain name> ]
;사용 범위 및 접근 권한
<alter system cleanup buffer_cache statement> 구문을 수행하려면 사용자에게 ALTER SYSTEM ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<alter system cleanup buffer_cache statement>
해당 구문 규칙이나 파라미터가 존재하지 않는다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
Buffer에 캐시된 free 가능한 모든 buffer page들을 flush하고 free 한다.
성능 측정 전에 buffer cache를 비우는 목적으로 사용해야 한다.
운영 중인 서버에서 사용할 경우 성능에 치명적인 영향을 미칠 수 있다.
사용 예
다음은 CLEANUP BUFFER_CACHE을 수행하는 예이다.
ALTER SYSTEM CLEANUP BUFFER_CACHE;
호환성
SQL 표준에서는 CLEANUP BUFFER_CACHE의 개념을 정의하지 않고 있다.
ALTER SYSTEM CLEANUP PLAN
기능
모든 SQL plan을 정리한다.
구문
<alter system cleanup plan statement> ::=
ALTER SYSTEM CLEANUP PLAN
[ AT <domain name> ]
;사용 범위 및 접근 권한
<alter system cleanup plan statement> 구문을 수행하려면 사용자에게 ALTER SYSTEM ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<alter system cleanup plan statement>
해당 구문 규칙이나 파라미터가 존재하지 않는다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
캐시되어 있는 모든 SQL plan을 삭제한다.
사용 예
다음은 CLEANUP PLAN을 수행하는 예이다.
ALTER SYSTEM CLEANUP PLAN;
호환성
SQL 표준에서는 CLEANUP PLAN의 개념을 정의하지 않고 있다.
ALTER SYSTEM FLUSH LOGS
기능
데이터베이스 로그 버퍼에 저장된 redo log를 로그 파일에 기록하도록 요청한다.
구문
<alter system flush flush logs statement> ::=
ALTER SYSTEM FLUSH LOGS [ AT domain_name ]
;사용 범위 및 접근 권한
<alter system flush logs statement> 구문을 수행하려면 사용자에게 ALTER SYSTEM ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<alter system flush logs statement>
트랜잭션들이 생성한 로그를 로그 파일에 기록하도록 요청한다.
데이터베이스가 OPEN 상태여야 한다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
로그 버퍼에 기록된 redo log를 online log file에 기록하도록 요청하고, 기록이 완료될 때까지 대기한다. 로그 기록이 완료되어야 하는 경우에 사용한다.
사용 예
다음은 FLUSH LOGS를 수행하는 예이다.
ALTER SYSTEM FLUSH LOGS;
호환성
SQL 표준에서는 FLUSH LOGS의 개념을 정의하지 않고 있다.
ALTER SYSTEM IRRECOVERABLE CLUSTER MEMBER
기능
복구 불가능한 클러스터 멤버를 지정한다.
구문
<alter system irrecoverable cluster member statement> ::=
ALTER SYSTEM IRRECOVERABLE CLUSTER MEMBER <domain name>
;사용 범위 및 접근 권한
<alter system irrecoverable cluster member statement> 구문을 수행하려면 사용자에게 ALTER SYSTEM ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<alter system irrecoverable cluster member statement>
데이터베이스는 MOUNT 상태여야 한다.
<domain name>
복구 불가능한 멤버 이름이다. 그룹 내의 모든 멤버들을 복구 불가한 멤버로 지정할 수 없다.
설명
복구 불가능한 멤버로 인해 클러스터 재시작에 실패하는 경우 해당 멤버를 제외하고 시스템을 재시작하기 위해 사용한다. 시스템 재시작에 성공한 후에는 반드시 ALTER DATABASE DROP INACTIVE CLUSTER MEMBERS 구문을 이용해 해당 멤버를 삭제해야 한다.
이 구문은 PREPARE 상태의 global transaction (in-doubt transaction) 이 COMMIT 여부를 결정하기 위해 원격 멤버에 상태 정보를 요청했으나, 해당 멤버가 복구 불가능한 상태여서 COMMIT 여부를 판단할 수 없는 경우에, 그 멤버를 제외하고 COMMIT 여부를 판단하기 위해 사용된다.
사용 예
다음은 여섯 개의 노드 중 하나가 복구 불가능한 상태이고, 나머지 다섯 개 노드의 트랜잭션 상태가 PREPARE일 때, 로컬의 startup 단계를 올리면 에러가 발생하는 예이다.
gSQL> ALTER SYSTEM OPEN LOCAL DATABASE; ERR-HY000(56013): cannot resolve in-doubt transaction '0.1.45613060' because '1' members of the total '5' remote cluster members were disconnected - connection map was '011110'
만일 이 상태에서 복구 불가능한 멤버를 제외하고 startup 하려면 다음과 같이 수행한다.
gSQL> ALTER SYSTEM IRRECOVERABLE CLUSTER MEMBER G3N2; System altered. gSQL> ALTER SYSTEM OPEN LOCAL DATABASE; System altered.
호환성
SQL 표준에서는 IRRECOVERABLE CLUSTER MEMBER의 개념을 정의하지 않고 있다.
ALTER SYSTEM JOIN DATABASE
기능
비활성화된 특정 cluster member를 cluster system에 다시 포함한다.
구문
<alter system join database statement> ::=
ALTER SYSTEM JOIN DATABASE
;사용 범위 및 접근 권한
Cluster system 에서 수행할 수 있다.
<alter system join database statement> 구문을 수행하려면 사용자에게 ADMINISTRATION ON DATABASE 권한이 있어야 한다.
설명
Cluster member의 inactive 상태는 cluster system과 연결되어 있지 않은 상태로서 다음과 같은 상황에서 발생한다.
운영 중인 cluster system에서 해당 cluster member에 장애가 발생한 경우
Cluster system에 포함된 cluster member를 구동하지 않고 cluster system의 start-up을 시도한 경우
특정 cluster member가 inactive인 상태에서 해당 member를 다음과 같은 절차를 거쳐 cluster system에 포함시킬 수 있다.
구동되지 않은 cluster member를 local open 단계로 구동한다.
$ gsql sys gliese --as sysdba --dsn=G3N2 gSQL> \startup
<alter system join database statement> 구문을 사용하여 cluster system에 포함시킨다.
$ gsql sys gliese --as sysdba --dsn=G3N2 gSQL> ALTER SYSTEM JOIN DATABASE;
<alter system join database statement> 구문은 local open으로 구동된 inactive cluster member를 shutdown 하지 않고 cluster system에 참여시키려고 할 때 사용한다.
Inactive cluster member가 다시 cluster system에 참여하려면 cluster system과 inactive cluster member의 database 상태가 동일해야 한다.
Cluster system에서 database를 변경하는 트랜잭션이 완료된 후에는 inactive cluster member가 cluster system에 다시 참여할 수 없다.
다수의 inactive cluster member가 존재하는 경우, cluster system을 정상적으로 운영하기 위해 다음과 같은 순서로 inactive cluster member를 정리해야 한다.
Cluster system에 참여할 수 있는 inactive cluster member를 JOIN 한다.
gSQL> ALTER SYSTEM JOIN DATABASE;
Cluster system에 참여할 수 없는 inactive cluster member들을 DROP 한다.
gSQL> ALTER DATABASE DROP INACTIVE CLUSTER MEMBERS;
<alter database drop inactive cluster member statement> 구문을 수행하면 모든 inactive cluster member가 cluster system에서 제거되므로, DROP 하기 전에 참여 가능한 모든 inactive cluster member를 cluster system에 포함시켜야 한다.
<alter system join database statement> 구문은 사용자 테이블들을 하나씩 online 상태로 변경한다. 하지만 모든 테이블을 online 상태로 전환하지 못할 경우, 다음과 같은 warning 메시지를 출력한다.
gSQL> ALTER SYSTEM JOIN DATABASE; ERR-42000(16405): of the total '5' tables in the database, '2' tables need to be rebalanced : concurrent execution : 0 inactive member : 0 replica usablility : 0 offline tablespace : 0 low table scn : 2 others : 0
각 warning 메시지의 의미는 다음과 같다:
concurrent execution
다른 세션과의 동시성 문제로 인해 실패한 경우
inactive member
모든 active member 의 replica 가 offline 상태이고 inactive member 가 존재하는 경우
replica usability
Local replica 가 unusable 상태이거나
모든 active member 의 replica 들이 unusable 상태인 경우
offline tablespace
Local replica 가 오프라인 된 tablespace 에 만들어진 경우
low table scn
로컬 테이블의 scn이 원격 테이블보다 작은 경우
others
위에 명시된 원인 외의 기타 사유
사용 예
gSQL> ALTER SYSTEM JOIN DATABASE;
호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 ALTER DATABASE DROP INACTIVE CLUSTER MEMBERS를 참조한다.
ALTER SYSTEM [KILL | DISCONNECT] SESSION
기능
세션을 종료한다.
구문
<alter system end session statement> ::=
ALTER SYSTEM DISCONNECT SESSION [<member_position>,] <session_id>,
<serial#> [<disconnect_option>] [AT <domain_name>]
| ALTER SYSTEM KILL SESSION [<member_position>,]
<session_id>, <serial#> [AT <domain_name>] ;
<disconnect_option> ::=
POST_TRANSACTION
| IMMEDIATE사용 범위 및 접근 권한
<alter system end session statement> 구문을 수행하려면 사용자에게 ALTER SYSTEM ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<member_position>
Cluster 환경에서 disconnect/ kill 대상이 되는 세션의 member position 이다.
<session_id>
세션의 ID 이다.
<serial#>
세션의 SERIAL NUMBER 이다.
<disconnect_option>
POST_TRANSACTION: 트랜잭션 완료 후, 세션을 종료한다.
IMMEDIATE: 트랜잭션 완료를 기다리지 않고 바로 세션을 종료한다.
<disconnect_option>이 사용되지 않으면 IMMEDIATE로 동작한다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
DISCONNECT SESSION은 POST_TRANSACTION과 IMMEDIATE 옵션을 지정할 수 있으며, POST_TRANSACTION은 현재 실행되는 트랜잭션이 있을 경우 트랜잭션이 끝난 후에 세션을 종료한다. IMMEDIATE는 현재 수행 중인 트랜잭션을 바로 정리한 후에 세션을 종료한다.
KILL SESSION은 해당 세션의 프로세스는 존재하지 않지만, 시스템에 남아있는 비정상 세션을 종료한다.
사용 예
gSQL> SELECT USER_NAME, SESSION_ID, SERIAL_NO, SESSION_STATUS, PROGRAM_NAME FROM V$SESSION WHERE USER_NAME = 'TEST'; USER_NAME SESSION_ID SERIAL_NO SESSION_STATUS PROGRAM_NAME --------- ---------- --------- -------------- ------------ TEST 62 49 CONNECTED gsql TEST 65 109 CONNECTED gsqlnet TEST 66 130 CONNECTED gsql 3 rows selected. gSQL> ALTER SYSTEM DISCONNECT SESSION 65, 109; System altered.
호환성
SQL 표준에서는 정의하지 않고 있다.
ALTER SYSTEM {MOUNT | OPEN} DATABASE
기능
데이터베이스를 시스템에 마운트하거나 서비스 가능한 상태로 변경한다.
구문
<alter system database statement> ::=
ALTER SYSTEM <alter system database clause>
;
<alter system database clause> ::=
MOUNT DATABASE
| OPEN [ <database_scope> ] DATABASE [ <open_database_option> ]
<open_database_option> ::=
NORESETLOGS
| RESETLOGS
<database_scope> ::=
LOCAL
| GLOBAL사용 범위 및 접근 권한
<alter system database statement> 구문을 수행하려면 사용자에게 ADMINISTRATION ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<alter system database clause>
MOUNT DATATABASE
데이터베이스를 시스템에 마운트한다.
OPEN DATABASE
데이터베이스를 서비스 가능한 상태로 변경한다.
<open database option>
RESETLOGS/ NORESETLOGS
데이터베이스를 복구한 이후에 온라인 redo log를 유지할지 선택한다.
NORESETLOGS는 기존 redo log를 유지하는 반면에 RESETLOGS는 이를 초기화한다.
데이터베이스를 불완전 복구한 경우, 반드시 RESETLOGS를 지정해야 한다.
생략된 경우에는 NORESETLOGS가 기본으로 지정된다.
<database_scope>
LOCAL
LOCAL 영역 서버를 OPEN 단계로 구동한다.
GLOBAL
GLOBAL 영역, 즉 전체 서버를 OPEN 단계로 구동한다.
Cluster 환경에서 생략된 경우 GLOBAL로 구동 된다.
사용 예
다음은 온라인 redo log를 초기화하는 예이다.
ALTER SYSTEM OPEN DATABASE RESETLOGS;
호환성
SQL 표준에서는 데이터베이스의 MOUNT 또는 OPEN에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 ALTER DATABASE RECOVER를 참조한다.
ALTER SYSTEM RECONNECT GLOBAL CONNECTION
기능
GLOBAL CONNECTION 형태로 접속한 세션에 재접속할지 여부를 설정한다.
구문
<alter system reconnect global connection statement> ::=
ALTER SYSTEM RECONNECT GLOBAL CONNECTION
;사용 범위 및 접근 권한
<alter system reconnect global connection statement> 구문을 수행하려면 사용자에게 ALTER SYSTEM ON DATABASE 권한이 있어야 한다.
설명
GLOBAL CONNECTION 클라이언트의 재접속 여부는 최초 접속할 때 서버로부터 얻은 system 객체의 SCN과 현재 서버의 system 객체의 SCN을 비교하여 결정한다. 해당 구문은 system 객체의 SCN을 상승시켜 클라이언트의 재접속을 유도한다.
해당 구문을 수행한 즉시 클라이언트가 재접속하는 것은 아니다. 클라이언트가 서버에 명령어를 실행할 때 SCN 비교를 통해서 재접속하며 만약 클라이언트에서 모든 멤버로의 연결이 유효하다면 재접속을 시도하지 않는다.
사용 예
다음은 해당 구문을 수행하는 예이다.
gSQL> ALTER SYSTEM RECONNECT GLOBAL CONNECTION; System altered.
호환성
SQL 표준에서는 GLOBAL CONNECTION의 개념을 정의하지 않고 있다.
ALTER SYSTEM RESET property_name
기능
프로퍼티 파일에서 프로퍼티 값을 삭제한다.
구문
<alter system reset statement> ::=
ALTER SYSTEM { RESET | UNSET } <property name>
[ SCOPE = { FILE | SPFILE } ]
[ AT <domain name>]
;사용 범위 및 접근 권한
<alter system reset statement> 구문을 수행하려면 사용자에게 ALTER SYSTEM ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
{ RESET | UNSET }
RESET과 UNSET은 동일한 의미의 예약어이므로 어떤 것을 사용해도 무방하다.
<property name>
삭제할 프로퍼티의 이름이다. 자세한 내용은 Database Administration 매뉴얼의 Server Property 장을 참조한다.
[ SCOPE = { FILE | SPFILE } ]
프로퍼티 파일에서 삭제하는 것이므로 SCOPE=FILE/SPFILE만 사용할 수 있다.
SCOPE = FILE
FILE과 SPFILE은 동일한 의미의 예약어이므로 어떤 것을 사용해도 무방하다.
프로퍼티를 FILE에서 삭제하고, 현재 상태에는 적용하지 않는다.
Database를 재구동할 때 변경 사항을 적용한다.
SCOPE 절을 명시하지 않을 경우, 기본값은 SCOPE = FILE 이다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
SCOPE=FILE/SPFILE을 사용하여 프로퍼티를 변경했을 경우, 갱신된 값이 프로퍼티 파일에 저장되고 데이터베이스를 재시작할 때 반영된다.
RESET 할 경우, 프로퍼티 파일에 저장된 해당 프로퍼티 갱신값을 파일에서 제거하고 데이터베이스를 재시작할 때 default 값을 사용하도록 한다.
사용 예
다음은 SCOPE=FILE을 사용하여 프로퍼티를 변경하는 예이다.
gSQL> ALTER SYSTEM SET PROCESS_MAX_COUNT=128 SCOPE=FILE; System altered.
다음은 위에서 변경한 프로퍼티를 삭제하는 예이다.
gSQL> ALTER SYSTEM RESET PROCESS_MAX_COUNT SCOPE=FILE; System altered. gSQL> ALTER SYSTEM RESET PROCESS_MAX_COUNT SCOPE=SPFILE; System altered. gSQL> ALTER SYSTEM RESET PROCESS_MAX_COUNT; System altered. gSQL> ALTER SYSTEM UNSET PROCESS_MAX_COUNT; System altered.
호환성
SQL 표준에서는 시스템 프로퍼티 개념을 정의하지 않고 있다.
참조
관련 내용은 ALTER SYSTEM SET property_name을 참조한다.
ALTER SYSTEM SET property_name
기능
시스템의 프로퍼티 값을 설정한다.
구문
<alter system set statement> ::=
ALTER SYSTEM SET <property name> { = <property value> | TO DEFAULT }
[ DEFERRED ]
[ SCOPE = [ MEMORY | { FILE | SPFILE } | BOTH ] ]
[AT <domain name>]
;사용 범위 및 접근 권한
<alter system set statement> 구문을 수행하려면 사용자에게 ALTER SYSTEM ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<property name>
설정할 프로퍼티의 이름이다. 자세한 내용은 Database Administration 매뉴얼의 Server Property 장을 참조한다.
<property value>
설정할 프로퍼티의 값이다.
TO DEFAULT
시스템 프로퍼티 값을 시스템을 구동할 당시의 최초값으로 설정한다.
[ DEFERRED ]
변경된 프로퍼티를 적용할 시점을 정의한다.
DEFERRED
현재 SESSION에는 영향을 주지 않고, 새로 생성되는 SESSION에 적용된다.
프로퍼티의 SYS_MODIFIABLE 속성값이 IMMEDIATE/ DEFERRED 일 때 적용 가능하며, 반드시 명시해야 한다.
프로퍼티의 SYS_MODIFIABLE 속성값이 FALSE인 경우 사용할 수 없다.
프로퍼티의 SYS_MODIFIABLE 속성값이 IMMEDIATE일 경우, DEFERRED를 명시하지 않으면 모든 SESSION에 바로 적용된다.
[ SCOPE = [ MEMORY | { FILE | SPFILE } | BOTH ] ]
시스템 프로퍼티 변경에 영향을 받는 범위를 정의한다.
SCOPE = MEMORY
변경 사항이 현재 상태에만 적용되며, database를 다시 구동할 경우 해당 값은 없어진다.
SCOPE = FILE
FILE과 SPFILE은 동일한 의미의 예약어이므로 어떤 것을 사용해도 무방하다.
변경 사항을 FILE에 저장하고 현재 상태에는 적용하지 않는다.
Database를 다시 구동할 때 변경 사항을 적용한다.
SCOPE = BOTH
변경 사항을 FILE에 저장하고 현재 상태에도 적용한다.
SCOPE 절을 명시하지 않을 경우, 기본값은 SCOPE = MEMORY 이다. 프로퍼티의 SYS_MODIFIABLE 속성값이 FALSE인 경우에는 반드시 SCOPE=FILE/SPFILE이라고 명시해야 한다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
자세한 내용은 Database Administration 매뉴얼의 Server Property 장을 참조한다.
사용 예
다음은 SYS_MODIFIABLE 속성이 DEFERRED인 프로퍼티를 변경하는 예이다.
gSQL> ALTER SYSTEM SET HINT_ERROR = ON; ERR-22000(13019): Invalid property modify mode.(HINT_ERROR) gSQL> ALTER SYSTEM SET HINT_ERROR = ON DEFERRED; System altered.
다음은 SYS_MODIFIABLE 속성이 FALSE인 프로퍼티를 변경하는 예이다.
gSQL> ALTER SYSTEM SET PROCESS_MAX_COUNT=128; ERR-22000(13018): Specified property cannot be modified with this SCOPE option.(PROCESS_MAX_COUNT) gSQL> ALTER SYSTEM SET PROCESS_MAX_COUNT=128 SCOPE=FILE; System altered.
다음은 변경된 속성을 session 접속 당시의 default 값으로 변경하는 예이다.
gSQL> ALTER SYSTEM SET TRANSACTION_COMMIT_WRITE_MODE=0; System altered. gSQL> ALTER SYSTEM SET TRANSACTION_COMMIT_WRITE_MODE TO DEFAULT; System altered. gSQL> ALTER SYSTEM SET TRANSACTION_COMMIT_WRITE_MODE TO DEFAULT DEFERRED; System altered.
호환성
SQL 표준에서는 시스템의 프로퍼티 개념을 정의하지 않고 있다.
참조
관련 내용은 ALTER SYSTEM RESET property_name을 참조한다.
ALTER SYSTEM SWITCH LOGFILE
기능
데이터베이스 내에 있는 CURRENT 상태의 로그파일을 ACTIVE 상태로 변경한다.
구문
<alter system switch logfile statement> ::=
ALTER SYSTEM SWITCH LOGFILE
[ AT <domain name> ]
;사용 범위 및 접근 권한
<alter system switch logfile statement> 구문을 수행하려면 사용자에게 ALTER SYSTEM ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<alter system switch logfile statement>
데이터베이스가 MOUNT 또는 OPEN 상태여야 한다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
기본적으로 CURRENT 상태의 로그파일이 다 채워지면 자동으로 로그 스위치가 발생한다. 해당 구문은 특수한 상황에서 강제로 로그 스위치를 하고자 할 때 사용된다.
사용 예
ALTER SYSTEM SWITCH LOGFILE;
호환성
SQL 표준에서는 LOGFILE에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 ALTER SYSTEM {MOUNT | OPEN} DATABASE를 참조한다.
ALTER TABLE
기능
테이블 정의를 변경한다.
구문
<alter table statement> ::=
<alter table physical attribute statement>
| <rename table statement>
| <add column definition>
| <drop column definition>
| <alter column definition>
| <rename column statement>
| <add table constraint definition>
| <drop table constraint definition>
| <alter table constraint definition>
| <alter table drop offline segments statement>
| <rename table constraint statement>
| <add table supplemental log statement>
| <drop table supplemental log statement>
| <rebalance statement>
| <alter table reorganize statement>
| <move shard statement>
| <merge shards statement>
| <split shard statement>
| <alter table synchronize statement>
| <rename shard statement>
| <read { only | write } statement>
;사용 범위 및 접근 권한
<alter table statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
<alter table physical attribute statement>
테이블의 물리적 속성을 변경한다. 자세한 내용은 ALTER TABLE name STORAGE 구문을 참조한다.
<rename table statement>
테이블 이름을 변경한다. 자세한 내용은 ALTER TABLE name RENAME TO 구문을 참조한다.
<add column definition>
테이블에 column을 추가한다. 자세한 내용은 ALTER TABLE name ADD COLUMN 구문을 참조한다.
<drop column definition>
테이블에서 column을 삭제한다. 자세한 내용은 ALTER TABLE name SET UNUSED COLUMN 구문을 참조한다.
<alter column definition>
테이블 column의 정의를 변경한다. 자세한 내용은 ALTER TABLE name ALTER COLUMN 구문을 참조한다.
<rename column statement>
테이블 column의 이름을 변경한다. 자세한 내용은 ALTER TABLE name RENAME COLUMN 구문을 참조한다.
<add table constraint definition>
테이블에 제약 조건을 추가한다. 자세한 내용은 ALTER TABLE name ADD CONSTRAINT 구문을 참조한다.
<drop table constraint definition>
테이블의 제약 조건을 삭제한다. 자세한 내용은 ALTER TABLE name DROP CONSTRAINT 구문을 참조한다.
<alter table constraint definition>
테이블의 제약 조건을 변경한다. 자세한 내용은 ALTER TABLE name ALTER CONSTRAINT 구문을 참조한다.
<alter table drop offline segments statement>
테이블의 오프라인 된 shard들을 삭제한다. 자세한 내용은 ALTER TABLE name DROP OFFLINE SEGMENTS 구문을 참조한다.
<rename table constraint statement>
테이블 제약 조건의 이름을 변경한다. 자세한 내용은 ALTER TABLE name RENAME CONSTRAINT 구문을 참조한다.
<add table supplemental log statement>
테이블의 데이터가 변경되면 redo log에 부가 정보를 추가하도록 설정한다. 자세한 내용은 ALTER TABLE name ADD SUPPLEMENTAL LOG 구문을 참조한다.
<drop table supplemental log statement>
테이블의 데이터가 변경되면 redo log에 부가 정보를 추가하지 않도록 설정한다. 자세한 내용은 ALTER TABLE name DROP SUPPLEMENTAL LOG 구문을 참조한다.
<rebalance statement>
Cluster 환경에서 테이블의 shard를 재배치하거나 정합성이 깨진 shard를 동기화하여 정합성을 복구한다. 자세한 내용은 ALTER TABLE REBALANCE 구문을 참조한다.
<alter table reorganize statement>
테이블을 물리적으로 재구성한다. 자세한 내용은 ALTER TABLE name REORGANIZE 구문을 참조한다.
<alter table synchronize statement>
Cluster 환경에 이미 배치되어 있는 오프라인 된 shard들을 동기화하여 정합성을 복구한다. 자세한 내용은 ALTER TABLE name SYNCHRONIZE 구문을 참조한다.
<move shard statement>
Cluster 환경에서 테이블의 특정 shard를 특정 cluster group으로 재배치한다. 자세한 내용은 ALTER TABLE MOVE SHARD 구문을 참조한다.
<merge shards statement>
Cluster 환경에서 테이블의 특정 shard들을 병합하여 재배치한다. 자세한 내용은 ALTER TABLE name MERGE SHARDS 구문을 참조한다.
<split shard statement>
Cluster 환경에서 테이블의 특정 shard를 분산하여 특정 cluster group에 재배치한다. 자세한 내용은 ALTER TABLE SPLIT SHARD 구문을 참조한다.
<rename shard statement>
Cluster 환경에서 테이블의 특정 shard 이름을 변경한다. 자세한 내용은 ALTER TABLE name RENAME SHARD 구문을 참조한다.
<read { only | write } statement>
테이블에 READ ( only | write }을 설정한다.
자세한 내용은 ALTER TABLE name READ { ONLY | WRITE } 구문을 참조한다.설명
각 세부 구문의 설명을 참조한다.
사용 예
각 세부 구문의 사용 예를 참조한다.
호환성
SQL 표준에서는 다음과 같은 구문을 정의하지 않고 있다.
<alter table physical attribute statement>
<rename table statement>
<rename column statement>
<rename table constraint statement>
<add table supplemental log statement>
<drop table supplemental log statement>
<rebalance statement>
<move shard statement>
<split shard statement>
<rename shard statement>
<read { only | write } statement>
ALTER TABLE name ADD COLUMN
기능
테이블에 column을 추가한다.
구문
<add column definition> ::=
ALTER TABLE table_name ADD [ COLUMN ] <column definition>
| ALTER TABLE table_name ADD [ COLUMN ] ( <column definition> [, ...] )
;사용 범위 및 접근 권한
<add column definition> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.
테이블을 변경하려면 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
Column을 추가할 때 제약 조건을 함께 명시했다면, 다음과 같이 제약 조건을 생성할 수 있는 조건을 만족해야 한다.
제약 조건이 생성될 스키마에 대해 다음 권한 중 하나가 있어야 한다.
해당 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
생성할 제약 조건이 key 제약 조건일 경우, 인덱스가 생성될 테이블스페이스에 대해 다음 권한 중 하나가 있어야 한다.
해당 테이블스페이스에 대해 CREATE OBJECT ON TABLESPACE
USAGE TABLESPACE ON DATABASE
생성할 제약 조건이 FOREIGN KEY 제약 조건일 경우 다음 권한 중 하나가 있어야 한다.
referenced table 에 대해 REFERENCES
각 referenced column 에 대해 REFERENCES
referenced table 이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
해당 테이블의 소유자는 추가된 column에 대해 다음과 같은 권한을 갖는다.
추가된 모든 column에 대한 권한
SELECT(columns) ON TABLE WITH GRANT OPTION
INSERT(columns) ON TABLE WITH GRANT OPTION
UPDATE(columns) ON TABLE WITH GRANT OPTION
REFERENCES(columns) ON TABLE WITH GRANT OPTION
함께 생성한 제약 조건에 대한 권한
제약 조건의 소유자
제약 조건과 함께 생성된 인덱스의 소유자
구문 규칙 및 파라미터
table_name
변경할 테이블의 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
ADD [ COLUMN ]
COLUMN 예약어는 생략할 수 있다.
<column definition>
추가할 column을 정의한다. 자세한 내용은 CREATE TABLE 구문의 <column definition> 절을 참조한다. 테이블 내에 동일한 column 이름이 존재하지 않아야 한다.
Column을 정의할 때 DEFAULT 절을 명시할 경우, 모든 row의 기본값을 추가되는 column에 저장한다. Column을 정의할 때 <identity column specification> 절을 명시한 경우, 모든 row 각각의 자동 생성값을 추가되는 column에 저장한다. Column을 정의할 때 NOT NULL 제약 조건을 함께 명시한 경우, 테이블을 비우거나 DEFALUT 절 또는 <identity column specification> 절을 함께 기술해야 한다.
( <column definition> [, ...] )
다수의 column을 추가한다. 괄호 내부에 다수의 <column definition>을 나열한다.
설명
추가되는 column은 기존 column들의 뒤에 위치한다. DEFAULT 절이나 <identity column specification>을 명시한 경우, 수행시간은 테이블에 존재하는 row의 개수에 비례하여 증가한다.
사용 예
다음은 하나의 column을 추가하는 예이다.
gSQL> ALTER TABLE region ADD COLUMN r_new_comment VARCHAR(152); Table altered.
다음은 다수의 column을 추가하는 예이다.
gSQL> ALTER TABLE partsupp ADD COLUMN ( ps_retailprice NUMERIC(12,2), ps_acctbal NUMERIC(12,2), ps_mktsegment CHAR(10) ); Table altered.
다음은 identity column과 DEFAULT 절을 갖는 column을 추가하는 예이다.
gSQL> ALTER TABLE region ADD COLUMN (
r_regionkey INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
r_comment VARCHAR(152) DEFAULT 'N/A' );
Table altered.
gSQL> SELECT r_regionkey, r_name, r_comment FROM region;
R_REGIONKEY R_NAME R_COMMENT
----------- ------------------------- ---------
1 AFRICA N/A
2 AMERICA N/A
3 ASIA N/A
4 EUROPE N/A
5 MIDDLE EAST N/A
5 rows selected.다음은 지연가능한 제약 조건을 가지는 column을 추가하는 예이다.
gSQL> ALTER TABLE t1 ADD COLUMN ( id INTEGER CONSTRAINT t1_uk UNIQUE DEFERRABLE ); Table altered. gSQL> COMMIT; Commit complete.
호환성
SQL 표준에서는 다수의 column definition 추가에 대해 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER TABLE name ADD CONSTRAINT
기능
테이블 제약 조건을 추가한다.
구문
<add table constraint definition> ::=
ALTER TABLE table_name
ADD <table constraint definition>
;사용 범위 및 접근 권한
<add table constraint definition> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.
제약 조건을 생성할 테이블에 대해 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
제약 조건이 생성될 스키마에 대해 다음 권한 중 하나가 있어야 한다.
해당 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
생성할 제약 조건이 key 제약 조건일 경우, 인덱스가 생성될 테이블스페이스에 대해 다음 권한 중 하나가 있어야 한다.
해당 테이블스페이스에 대해 CREATE OBJECT ON TABLESPACE
USAGE TABLESPACE ON DATABASE
생성할 제약 조건이 FOREIGN KEY 제약 조건일 경우 다음 권한 중 하나가 있어야 한다.
referenced table 에 대해 REFERENCES
각 referenced column 에 대해 REFERENCES
referenced table 이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
생성한 제약 조건의 소유자는 다음과 같이 결정된다.
제약 조건이 속한 스키마의 소유자
제약 조건이 속한 스키마가 PUBLIC 일 경우, 구문을 수행한 사용자
Cluster system에서 PRIMARY KEY와 UNIQUE 제약 조건은 모든 sharding key를 포함해야 한다.
구문 규칙 및 파라미터
table_name
변경할 테이블의 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
<table constraint definition>
추가할 제약 조건을 정의한다. NOT NULL 제약 조건은 ALTER TABLE .. ADD CONSTRAINT 구문으로 추가할 수 없으며, 다음 예와 같이 ALTER TABLE name ALTER COLUMN 구문을 이용해 정의할 수 있다.
ALTER TABLE t1 ALTER COLUMN c1 SET NOT NULL;
자세한 내용은 CREATE TABLE 구문의 <table constraint definition> 절을 참조한다.
설명
Primary key, unique key와 같은 key 제약을 추가할 때 이를 위한 index가 자동으로 생성된다.
사용 예
다음은 테이블에 primary key 제약 조건을 추가하는 예이다.
gSQL> ALTER TABLE t1 ADD PRIMARY KEY ( id ); Table altered.
다음은 테이블에 primary key 제약 조건을 추가할 때 제약 조건 이름을 명시하는 예이다.
gSQL> ALTER TABLE t1 ADD CONSTRAINT t1_pk PRIMARY KEY ( id ); Table altered.
다음은 지연가능한 제약 조건을 추가하는 예이다.
gSQL> ALTER TABLE t1 ADD CONSTRAINT t1_uk UNIQUE ( id ) DEFERRABLE INITIALLY DEFERRED; Table altered. gSQL> COMMIT; Commit complete.
호환성
Feature ID | 설명 | 지원 여부 |
|---|---|---|
F381 | Extended schema manipulation | O |
참조
관련 내용은 다음을 참조한다.
ALTER TABLE name ADD GLOBAL SECONDARY INDEX
기능
테이블에 global secondary index를 생성한다.
구문
<alter table add global secondary index definition> ::=
ALTER TABLE table_name
ADD GLOBAL SECONDARY INDEX
[ <index attributes> [...] ] [ TABLESPACE tablespace_name ]
;
<index attributes> ::=
<physical attribute clause>
| STORAGE ( <segment attr clause> [...] )
| <parallel clause>
<physical attribute clause> ::=
PCTFREE integer
| INITRANS integer
| MAXTRANS integer
<segment attr clause> ::=
INITIAL <size_clause>
| NEXT <size_clause>
<size clause> ::=
integer [ K | M | G | T ]
<parallel clause> ::=
NOPARALLEL
| PARALLEL [ integer ]사용 범위 및 접근 권한
<alter table add global secondary index definition> 구문은 cluster system에서 정의할 수 있으며 사용자는 다음 조건들을 만족해야 한다.
인덱스를 생성할 테이블에 대해 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
인덱스가 생성될 테이블스페이스에 대해 다음 권한 중 하나가 있어야 한다.
해당 테이블스페이스에 대해 CREATE OBJECT ON TABLESPACE
USAGE TABLESPACE ON DATABASE
구문 규칙 및 파라미터
table_name
인덱스를 생성할 테이블 이름이다. schema_name.table_name과 같이 테이블이 속한 스키마를 정의할 수 있으며, schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
<physical attribute clause>
인덱스의 물리적 속성 정보를 정의한다.
PCTFREE integer
정의
페이지 내 key 삽입으로 인한 페이지 분할 빈도를 조절하기 위해 예약된 공간이다.
인덱스 bottom-up 빌드 시에만 적용된다.
0에서 99까지의 값을 사용할 수 있다.
생략할 경우, 기본값은 DEFAULT_INDEX_PCTFREE property에 설정된 값을 사용한다.
INITRANS integer
정의
페이지에 동시 접근할 수 있는 초기 트랜잭션의 개수이다.
인덱스에 접근하는 사용자의 수가 적을 경우에는 INITRANS를 낮게 설정하고, 동시에 접근하는 사용자가 많을 경우에는 INITRANS를 높게 설정한다.
필요한 경우 설정된 MAXTRANS까지 자동으로 늘어난다.
1 부터 32 까지의 값을 사용할 수 있다.
생략할 경우, 기본값은 4 이다.
MAXTRANS integer
정의
페이지에 동시 접근할 수 있는 트랜잭션의 최대 개수이다.
1 부터 32 까지의 값을 사용할 수 있다.
생략할 경우, 기본값은 8 이다.
<segment attr clause>
인덱스가 저장될 공간에 대한 정보를 기술한다.
INITIAL integer
정의
인덱스를 생성할 때 초기에 할당할 물리적 공간의 크기를 기술한다.
integer 값이 EXTENT 두 개 이하인 경우, extent 두 개 크기로 설정된다.
integer 값이 EXTENT 두 개 보다 큰 경우, TABLESPACE의 EXTENT 크기에 맞춰 (aligned) 설정된다.
최소값은 1이고 최대값은 시스템 환경에 따라 다르다.
생략할 경우, 기본값은 인덱스가 속한 TABLESPACE의 EXTENT 두 개 크기이다.
NEXT integer
정의
인덱스의 물리적 공간을 추가할 경우 할당할 물리적 공간의 크기를 기술한다.
이 크기는 테이블이 속하는 TABLESPACE의 EXTENT 크기에 align 되어 사용된다. (예: EXT크기가 8192 bytes일 경우 'NEXT 100'은 실제 8192 bytes로 작동한다.)
NEXT는 현재 인덱스가 사용할 수 있는 남은 공간의 크기 (MAXEXTENTS의 크기에서 현재 사용하고 있는 공간의 크기를 뺀 크기)에 따라 다음과 같이 작동한다.
- 남은 공간의 크기가 0인 경우 더 이상 공간을 확장하지 못한다.
- 남은 공간의 크기가 0보다 크고 NEXT보다 작은 경우 남은 공간의 크기만큼 할당한다.
- 남은 공간의 크기가 NEXT 보다 클 경우 NEXT의 크기만큼 할당한다.
최소값은 1이고 최대값은 시스템 환경에 따라 다르다.
생략할 경우, 기본값은 인덱스가 속한 TABLESPACE의 EXTENT 하나 크기이다.
<size clause>
파일의 바이트 크기를 명시한다. (단위를 기술하지 않을 경우 bytes이다.)
K: Kilobytes
M: Megabytes
G: Gigabytes
T: Terabytes
NOPARALLEL | PARALLEL [ integer ]
인덱스 구축과정에 사용될 thread의 개수를 지정한다.
NOPARALLEL
병렬로 인덱스를 구축하지 않는다.
PARALLEL [integer]
병렬로 인덱스를 구축한다.
integer가 생략되거나 0으로 지정된 경우에는 프로퍼티 (INDEX_BUILD_PARALLEL_FACTOR)를 따른다.
integer는 0부터 사용할 수 있으며 최대값은 64이다.
만약 integer나 프로퍼티의 값이 0인 경우에는 최적값을 시스템이 결정한다.
명시하지 않을 경우, 기본값은 NOPARALLEL이다.
TABLESPACE tablespace_name
인덱스가 저장될 tablespace의 이름을 지정한다.
tablespace_name을 지정할 경우
LOGGING 인덱스로 변경하려면, tablespace_name은 data tablespace여야 하며
NOLOGGING 인덱스로 변경하려면 tablespace_name은 temporary tablespace 또는 nologging tablespace여야 한다.
TABLESPACE 절을 생략할 경우, 기존 인덱스의 설정을 그대로 따른다.
설명
Non-deterministic 질의에는 global secondary index가 반드시 필요하다. LOGGING 인덱스와 NOLOGGING 인덱스에는 다음과 같은 trade-off가 있다
LOGGING 인덱스
장점: 시스템을 구동할 때 로그를 이용해 인덱스가 자동으로 복구되므로 별도의 구축과정이 없다.
단점: 관련 row를 변경할 때 인덱스 변경 내용을 로그로 기록하여 디스크 IO를 유발한다.
NOLOGGING 인덱스
장점: 관련 row를 변경할 때 인덱스 변경 내용에 대해 디스크 IO가 발생하지 않는다.
단점: 시스템을 구동할 때 인덱스에 대한 로그 정보가 없어 자동으로 인덱스를 재구축한다.
사용 예
다음은 테이블 T1에 global secondary index를 추가하는 예이다.
gSQL> ALTER TABLE T1 ADD GLOBAL SECONDARY INDEX; Table altered. gSQL> COMMIT; Commit complete.
다음은 테이블 T1의 tablespace USER_DATA_TBS에 global secondary index를 logging index로 생성하는 예이다.
gSQL> ALTER TABLE T1 ADD GLOBAL SECONDARY INDEX TABLESPACE USER_DATA_TBS; Table altered. gSQL> COMMIT; Commit complete.
다음은 테이블 T1의 tablespace USER_TEMP_TBS에 global secondary index를 nologging index로 생성하는 예이다.
gSQL> ALTER TABLE T1 ADD GLOBAL SECONDARY INDEX TABLESPACE USER_TEMP_TBS; Table altered. gSQL> COMMIT; Commit complete.
호환성
SQL 표준에서는 global secondary index에 대한 개념을 다루지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER TABLE name ADD SUPPLEMENTAL LOG
기능
테이블의 데이터가 변경될 때 테이블에 primary key가 있으면 redo log에 primary key 값을 추가하도록 설정한다.
구문
<add table supplemental log statement> ::=
ALTER TABLE table_name
ADD SUPPLEMENTAL LOG DATA ( PRIMARY KEY ) COLUMNS
;사용 범위 및 접근 권한
<add table supplemental log statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
변경할 테이블의 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
테이블에 primary key가 존재하지 않더라도 구문을 수행할 수 있다.
설명
해당 TABLE에 UPDATE/ DELETE를 수행할 때 SUPPLEMENTAL LOG를 추가로 기록하도록 한다. 기록된 SUPPLEMENTAL LOG는 CDC와 같은 툴 또는 로그를 분석할 때 사용된다.
모든 TABLE의 SUPPLEMENTAL LOG를 기록하려면 SUPPLEMENTAL_LOG_DATA_PRIMARY_KEY = YES로 설정한다.
사용 예
다음은 테이블의 data를 변경할 때 redo log에 primary key 값을 추가하도록 설정하는 예이다.
gSQL> ALTER TABLE t1 ADD SUPPLEMENTAL LOG DATA ( PRIMARY KEY ) COLUMNS; Table altered.
호환성
SQL 표준에서는 <add table supplemental log statement>를 다루지 않고 있다.
참조
관련 내용은 ALTER TABLE name DROP SUPPLEMENTAL LOG를 참조한다.
ALTER TABLE name ALTER COLUMN
기능
Column의 정의를 변경한다.
구문
<alter column definition> ::=
ALTER TABLE table_name
ALTER [ COLUMN ] column_name <alter column action>
<alter column action> ::=
<set column default clause>
| <drop column default clause>
| <set column not null clause>
| <drop column not null clause>
| <alter column data type clause>
| <alter identity column specification>
| <drop identity property clause>
;
<set column default clause> ::=
SET DEFAULT <default option>
<drop column default clause> ::=
DROP DEFAULT
<set column not null clause> ::=
SET [ CONSTRAINT constraint_name ] NOT NULL [ <constraint characteristics> ]
<constraint characteristics> ::=
[ NOT ] DEFERRABLE [ <constraint check time> ] [ <constraint enforcement> ]
| <constraint check time> [ [ NOT ] DEFERRABLE ] [ <constraint enforcement> ]
| [ <constraint enforcement> ]
<constraint check time> ::=
INITIALLY DEFERRED
| INITIALLY IMMEDIATE
<constraint enforcement> ::=
[NOT] ENFORCED
<drop column not null clause> ::=
DROP NOT NULL
<alter column data type clause> ::=
SET DATA TYPE <data type>
<alter identity column specification> ::=
<set identity column generation clause> [ <alter identity column option> ... ]
| <alter identity column option> ...
<set identity column generation clause> ::=
SET GENERATED { ALWAYS | BY DEFAULT }
<alter identity column option> ::=
<alter sequence generator restart option>
| [ SET ] <basic sequence generator option>
<alter sequence generator restart option> ::=
RESTART [ WITH integer ]
<basic sequence generator option> ::=
<sequence generator increment by option>
| <sequence generator maxvalue option>
| <sequence generator minvalue option>
| <sequence generator cycle option>
| <sequence generator cache option>
<drop identity property clause> ::=
DROP IDENTITY사용 범위 및 접근 권한
<alter column definition> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
변경할 테이블 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
ALTER [ COLUMN ]
COLUMN 예약어는 생략할 수 있다.
column_name
변경할 column의 이름이다.
<set column default clause>
Column의 기본값을 설정한다. identity column이 아니어야 한다.
이후에 수행되는 INSERT 구문 등에서 DEFAULT 절을 사용할 경우 설정한 기본값이 사용된다.
DEFAULT expression의 데이터 타입은 column의 데이터 타입과 호환 가능해야 한다. 타입이 호환되지 않거나 expression이 valid 하지 않으면 에러가 발생한다.
자세한 설명은 CREATE TABLE 구문의 <default clause> 절을 참조한다.
<drop column default clause>
Column의 기본값을 제거한다. identity column이 아니어야 한다. 기본값을 제거하면 INSERT 구문 등에서 DEFAULT 절을 사용할 때 NULL 값으로 설정된다.
<set column not null clause>
SET [CONSTRAINT constraint_name] NOT NULL [ <constraint characteristics> ]
Column에 NOT NULL 제약 조건을 설정한다.
Column의 값으로 NULL 값을 허용하지 않는다.
해당 column에 NULL 값이 존재하지 않아야 한다.
[CONSTRAINT constraint_name]을 생략할 경우 자동으로 제약 조건 이름을 지정한다.
<constraint characteristics>를 생략할 경우, NOT DEFERRABLE INITIALLY IMMEDIATE 속성을 갖는다.
Identity column은 DEFERRABLE 속성을 가질 수 없다.
지연가능한 제약 조건에 대한 자세한 내용은 SET CONSTRAINTS 구문의 설명을 참조한다.
<drop column not null clause>
DROP NOT NULL
Column의 NOT NULL 제약 조건을 제거한다.
<alter column data type clause>
SET DATA TYPE <data type>
Column의 데이터 타입을 변경한다.
SET DATA TYPE 구문은 자동으로 commit 되는 DDL 구문이다.
동일한 계열간에 타입을 변경할 수 있는데 이 때 다음 조건을 만족해야 한다.
from \ to | CHAR(n) | VARHCAR(n) | LONG VARCHAR |
|---|---|---|---|
CHAR(m) | X | X | X |
VARCHAR(m) | X | n >= m | X |
LONG VARCHAR | X | X | O |
char length unit을 변경할 경우 다음과 같은 조건을 만족해야 한다.
from \ to | OCTETS | CHARACTERS |
|---|---|---|
OCTETS | O | O |
CHARACTERS | X | O |
from \ to | BINARY(n) | VARBINARY(n) | LONG VARBINARY |
|---|---|---|---|
BINARY(m) | X | X | X |
VARBINARY(m) | X | n >= m | X |
LONG VARBINARY | X | X | O |
from \ to | SMALLINT | INTEGER | BIGINT | NUMERIC | NUMERIC(q) | NUMERIC(q,t) | NUMBER(q) | NUMBER(q,t) | REAL | DOUBLE PRECISION | FLOAT | FLOAT(q) | NUMBER |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
SMALLINT | O | O | O | O | q >= 5 | q >= 5 t >= 0 (q-t) >= 5 | q >= 5 | q >= 5 t >= 0 (q-t) >= 5 | O | O | O | ddc(q) >= 5 | O |
INTEGER | X | O | O | O | q >= 10 | q >= 10 t >= 0 (q-t) >= 10 | q >= 10 | q >= 10 t >= 0 (q-t) >= 10 | X | O | O | ddc(q) >= 10 | O |
BIGINT | X | X | O | O | q >= 19 | q >= 19 t >= 0 (q-t) >= 19 | q >= 19 | q >= 19 t >= 0 (q-t) >= 19 | X | X | O | ddc(q) >= 19 | O |
NUMERIC | X | X | X | O | q == 38 | q == 38 t == 0 | q == 38 | q == 38 t == 0 | X | X | O | ddc(q) == 38 | O |
NUMERIC(p) | 5 >= p | 10 >= p | 19 >= p | O | q >= p | q >= p t >= 0 (q-t) >= p | q >= p | q >= p t >= 0 (q-t) >= p | 8 >= p | 16 >= p | O | ddc(q) >= p | O |
NUMERIC(p,s) | 5 >= p 0 >= s 5 >= (p-s) | 10 >= p 0 >= s 10 >= (p-s) | 19 >= p 0 >= s 19 >= (p-s) | 38 >= p 0 >= s 38 >= (p-s) | q >= p 0 >= s q >= (p-s) | q >= p t >= s (q-t) >= (p-s) | q >= p 0 >= s q >= (p-s) | q >= p t >= s (q-t) >= (p-s) | 8 >= p | 16 >= p | O | ddc(q) >= p | O |
NUMBER(p) | 5 >= p | 10 >= p | 19 >= p | O | q >= p | q >= p t >= 0 (q-t) >= p | q >= p | q >= p t >= 0 (q-t) >= p | 8 >= p | 16 >= p | O | ddc(q) >= p | O |
NUMBER(p,s) | 5 >= p 0 >= s 5 >= (p-s) | 10 >= p 0 >= s 10 >= (p-s) | 19 >= p 0 >= s 19 >= (p-s) | 38 >= p 0 >= s 3 8 >= (p-s) | q >= p 0 >= s q >= (p-s) | q >= p t >= s (q-t) >= (p-s) | q >= p 0 >= s q >= (p-s) | q >= p t >= s (q-t) >= (p-s) | 8 >= p | 16 >= p | O | ddc(q) >= p | O |
REAL | X | X | X | X | X | X | X | X | O | O | O | ddc(q) >= 8 | O |
DOUBLE PRECISION | X | X | X | X | X | X | X | X | X | O | O | ddc(q) >= 16 | O |
FLOAT | X | X | X | X | X | X | X | X | X | X | O | ddc(q) == 38 | O |
FLOAT(p) | X | X | X | X | X | X | X | X | 8 >= ddc(p) | 16 >= ddc(p) | O | ddc(q) >= ddc(p) | O |
NUMBER | X | X | X | X | X | X | X | X | X | - | O | ddc(q) == 38 | O |
FLOAT(p)에 대한 ddc (decimal digit count) 값은 다음과 같다.
FLOAT(p) | ddc(p) |
|---|---|
1 ~ 3 | 1 |
4 ~ 6 | 2 |
7 ~ 9 | 3 |
10 ~ 13 | 4 |
14 ~ 16 | 5 |
17 ~ 19 | 6 |
20 ~ 23 | 7 |
24 ~ 26 | 8 |
27 ~ 29 | 9 |
30 ~ 33 | 10 |
34 ~ 36 | 11 |
37 ~ 39 | 12 |
40 ~ 43 | 13 |
44 ~ 46 | 14 |
47 ~ 49 | 15 |
50 ~ 53 | 16 |
54 ~ 56 | 17 |
57 ~ 59 | 18 |
60 ~ 63 | 19 |
64 ~ 66 | 20 |
67 ~ 69 | 21 |
70 ~ 73 | 22 |
74 ~ 76 | 23 |
77 ~ 79 | 24 |
80 ~ 83 | 25 |
84 ~ 86 | 26 |
87 ~ 89 | 27 |
90 ~ 93 | 28 |
94 ~ 96 | 29 |
97 ~ 99 | 30 |
100 ~ 103 | 31 |
104 ~ 106 | 32 |
107 ~ 109 | 33 |
110 ~ 113 | 34 |
114 ~ 116 | 35 |
117 ~ 119 | 36 |
120 ~ 123 | 37 |
124 ~ 126 | 38 |
참고로 모든 numeric type은 동일한 구조로 관리되며, 각 numeric type은 다음과 같은 NUMBER(p,s) 표현식과 동일하다.
Numeric type | NUMBER(p,s) 표현식 |
|---|---|
SMALLINT | NUMBER(5,0) |
INTEGER | NUMBER(10,0) |
BIGINT | NUMBER(19,0) |
NUMERIC | NUMBER(38,0) |
NUMERIC(p) | NUMBER(p,0) |
NUMERIC(p,s) | NUMBER(p,s) |
NUMBER(p) | NUMBER(p,0) |
NUMBER(p,s) | NUMBER(p,s) |
REAL | NUMBER(8,N/A) <= FLOAT(24) |
DOUBLE PRECISION | NUMBER(16,N/A) <= FLOAT(53) |
FLOAT | NUMBER(38,N/A) <= FLOAT(126) |
FLOAT(p) | NUMBER( ddc(p), N/A ) |
NUMBER | NUMBER(38, N/A ) |
Native 숫자형은 C 언어의 숫자형 타입과 동일한 데이터 타입이며 서로 다른 타입으로 변환할 수 없다.
from \ to | NATIVE_SMALLINT | NATIVE_INTEGER | NATIVE_BIGINT | NATIVE_REAL | NATIVE_DOUBLE |
|---|---|---|---|---|---|
NATIVE_SMALLINT | O | X | X | X | X |
NATIVE_INTEGER | X | O | X | X | X |
NATIVE_BIGINT | X | X | O | X | X |
NATIVE_REAL | X | X | X | O | X |
NATIVE_DOUBLE | X | X | X | X | O |
from \ to | BOOLEAN |
|---|---|
BOOLEAN | O |
from \ to | DATE | TIME | TIME(g) | TIME TZ | TIME(g) TZ | TIMESTAMP | TIMESTAMP(g) | TIMESTAMP TZ | TIMESTAMP(g) TZ |
|---|---|---|---|---|---|---|---|---|---|
DATE | O | X | X | X | X | X | X | X | X |
TIME | X | O | g >= 6 | X | X | X | X | X | X |
TIME(f) | X | 6 >= f | g >= f | X | X | X | X | X | X |
TIME TZ | X | X | X | O | g >= 6 | X | X | X | X |
TIME(f) TZ | X | X | X | 6 >= f | g >= f | X | X | X | X |
TIMESTAMP | X | X | X | X | X | O | g >= 6 | X | X |
TIMESTAMP(f) | X | X | X | X | X | 6 >= f | g >= f | X | X |
TIMESTAMP TZ | X | X | X | X | X | X | X | O | g >= 6 |
TIMESTAMP(f) TZ | X | X | X | X | X | X | X | 6 >= f | g >= f |
from \ to | YEAR(q) | MONTH(q) | YEAR(q) TO MONTH |
|---|---|---|---|
YEAR(p) | q >= p | X | X |
MONTH(p) | X | q >= p | X |
YEAR(p) TO MONTH | X | X | q >= p |
from \ to | DAY(q) | HOUR(q) | MINUTE(q) | SECOND(q,g) | DAY(q) TO HOUR | DAY(q) TO MINUTE | DAY(q) TO SECOND(g) | HOUR(q) TO MINUTE | HOUR(q) TO SECOND(g) | MINUTE(q) TO SECOND(g) |
|---|---|---|---|---|---|---|---|---|---|---|
DAY(p) | q >= p | X | X | X | X | X | X | X | X | X |
HOUR(p) | X | q >= p | X | X | X | X | X | X | X | X |
MINUTE(p) | X | X | q >= p | X | X | X | X | X | X | X |
SECOND(p,f) | X | X | X | q >= p g >= f | X | X | X | X | X | X |
DAY(p) TO HOUR | X | X | X | X | q >= p | X | X | X | X | X |
DAY(p) TO MINUTE | X | X | X | X | X | q >= p | X | X | X | X |
DAY(p) TO SECOND(f) | X | X | X | X | X | X | q >= p g >= f | X | X | X |
HOUR(p) TO MINUTE | X | X | X | X | X | X | X | q >= p | X | X |
HOUR(p) TO SECOND(f) | X | X | X | X | X | X | X | X | q >= p g >= f | X |
MINUTE(p) TO SECOND(f) | X | X | X | X | X | X | X | X | X | q >= p g >= f |
from \ to | ROWID |
|---|---|
ROWID | O |
<alter identity column specification>
Column의 identity 속성을 변경한다. Column은 identity column 이어야 한다.
SET GENERATED [ ALWAYS | BY DEFAULT ]
identity column의 생성 방식을 변경한다.
자세한 내용은 CREATE TABLE 구문의 <identity column specification>을 참조한다.
<alter sequence generator restart option>
identity column의 다음 값 (NEXT VALUE)을 변경한다.
자세한 내용은 ALTER SEQUENCE 구문의 <alter sequence generator restart option> 절을 참조한다.
<basic sequence generator option>
identity column의 속성을 변경한다.
SQL 표준에서는 SET <basic sequence generator option>의 형태로 기술하도록 정의하고 있으나 생략 가능하다.
자세한 내용은 ALTER SEQUENCE 구문을 참조한다.
<drop identity property clause>
Column의 identity 속성을 제거한다. Column은 identity column 이어야 한다.
설명
SET NOT NULL 절의 null 검사 수행시간은 테이블의 row 개수에 비례한다.
다음과 같은 column은 NULL 값을 허용하지 않는다. 즉, DROP NOT NULL 절을 수행하더라도 다음 조건 중 하나를 만족할 경우 NULL 값을 허용하지 않는다.
NOT NULL 제약 조건이 있는 column
Column이 primary key 제약 조건에 포함되는 경우
Column이 identity column인 경우
SET DEFAULT 절을 이용한 기본값 변경과 <alter identity column specification> 절을 이용한 identity 속성의 변경은 이후에 수행되는 INSERT 또는 UPDATE 구문에 적용된다.
사용 예
다음은 column에 DEFAULT 속성을 설정하는 예이다.
gSQL> ALTER TABLE region ALTER COLUMN r_comment SET DEFAULT 'N/A'; Table altered.
다음은 column의 DEFAULT 속성을 제거하는 예이다.
gSQL> ALTER TABLE region ALTER COLUMN r_comment DROP DEFAULT; Table altered.
다음은 column에 NOT NULL 제약 조건을 설정하는 예이다.
gSQL> ALTER TABLE region ALTER COLUMN r_regionkey SET NOT NULL; Table altered.
다음은 column의 NOT NULL 제약 조건을 제거하는 예이다.
gSQL> ALTER TABLE region ALTER COLUMN r_regionkey DROP NOT NULL; Table altered.
다음은 column의 data type 크기를 확장하는 예이다.
gSQL> ALTER TABLE region ALTER COLUMN r_comment SET DATA TYPE VARCHAR(512); Table altered.
다음은 identity column의 다음 값을 다시 시작하는 예이다.
gSQL> ALTER TABLE region ALTER COLUMN r_regionkey RESTART; Table altered.
다음은 column의 identity 속성을 제거하는 예이다.
gSQL> ALTER TABLE region ALTER COLUMN r_regionkey DROP IDENTITY; Table altered.
호환성
Feature ID | 설명 | 지원 여부 |
|---|---|---|
F381 | Extended schema manipulation | X |
F382 | Alter column data type | O |
F383 | Set column not null clause | O |
F384 | Drop identity property value | O |
F385 | Drop column generation expression clause | X |
F386 | Set identity column generation clause | O |
S043 | Enhanced reference types | X |
T174 | Identity columns | O |
T178 | Identity columns: simple restart option | O |
참조
관련 내용은 다음을 참조한다.
ALTER TABLE name ALTER CONSTRAINT
기능
테이블 제약 조건의 특성을 변경한다.
구문
<alter table constraint definition> ::=
ALTER TABLE table_name
ALTER <constraint object> <constraint characteristics>
;
<constraint object> ::=
CONSTRAINT constraint_name
| PRIMARY KEY
| UNIQUE ( column_name [, ...] )
<constraint characteristics> ::=
[ NOT ] DEFERRABLE [ <constraint check time> ] [ <constraint enforcement> ]
| <constraint check time> [ [ NOT ] DEFERRABLE ] [ <constraint enforcement> ]
| <constraint enforcement>
<constraint check time> ::=
INITIALLY DEFERRED
| INITIALLY IMMEDIATE
<constraint enforcement> ::=
[NOT] ENFORCED사용 범위 및 접근 권한
<alter table constraint definition> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
Cluster는 지연 가능한 제약 조건을 지원하지 않는다.
구문 규칙 및 파라미터
table_name
변경할 테이블의 이름이다. schema_name.table_name과 같이 테이블이 속한 스키마를 정의할 수 있으며, schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
<constraint object>
변경할 제약 조건은 다음과 같이 지정할 수 있다.
CONSTRAINT constraint_name
변경할 제약 조건의 이름이다.
PRIMARY KEY
테이블의 PRIMARY KEY 제약 조건이다.
UNIQUE( column [,...] )
Column 목록에 부합되는 UNIQUE 제약 조건이다.
DEFERRABLE | NOT DEFERRABLE
제약 조건의 지연 가능 여부를 변경한다.
DEFERRABLE
제약 조건을 지연가능하도록 변경한다.
NOT DEFERRABLE
제약 조건을 지연가능하지 않도록 변경한다.
지연가능한 제약 조건에 대한 자세한 내용은 SET CONSTRAINTS 구문의 설명을 참조한다.
INITIALLY IMMEDIATE | INITIALLY DEFERRED
제약 조건의 검사시점 초기값을 변경한다.
INITIALLY IMMEDIATE
DML을 수행할 때 제약 조건을 검사한다.
INITIALLY DEFERRED
COMMIT을 수행할 때 제약 조건을 검사한다.
NOT DEFERRABLE로 정의된 제약 조건은 INITIALLY DEFERRED로 변경할 수 없다.
[NOT] ENFORCED
제약 조건을 활성화 또는 비활성화 한다.
ENFORCED
제약 조건을 활성화한다.
NOT ENFORCED
제약 조건을 비활성화한다.
설명
지연가능한 제약 조건에 대한 자세한 내용은 SET CONSTRAINTS 구문을 참조한다.
사용 예
다음은 t1_uk 제약 조건을 지연가능하게 하고 검사시점을 DEFERRED로 설정하는 예이다.
gSQL> ALTER TABLE t1 ALTER CONSTRAINT t1_uk DEFERRABLE INITIALLY DEFERRED; Table altered. gSQL> COMMIT; Commit complete.
호환성
SQL 표준에서는 다음과 같은 절을 정의하지 않고 있다.
ALTER PRIMARY KEY 절
ALTER UNIQUE(column [,...]) 절
Feature ID | 설명 | 지원 여부 |
|---|---|---|
F492 | Optional table constraint enforcement | O |
ALTER TABLE name ALTER GLOBAL SECONDARY INDEX
기능
테이블에서 global secondary index의 물리적 속성을 변경한다.
구문
<alter table alter global secondary index storage statement> ::=
ALTER TABLE table_name ALTER GLOBAL SECONDARY INDEX
<physical attribute clause>
| [ STORAGE ( <segment attr clause> [...] ) ]
;
<physical attribute clause> ::=
PCTFREE integer
| INITRANS integer
| MAXTRANS integer
<segment attr clause> ::=
INITIAL <size_clause>
| NEXT <size_clause>
<size clause> ::=
integer [ K | M | G | T ]사용 범위 및 접근 권한
<alter table alter global secondary index storage statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
인덱스를 생성할 테이블 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
<physical attribute clause>
인덱스의 물리적 속성 정보를 정의한다.
PCTFREE integer
정의
페이지 내 key 삽입으로 인한 페이지 분할 빈도를 조절하기 위해 예약된 공간이다.
0 에서 99 까지의 값을 사용할 수 있다.
생략할 경우, 기존 인덱스의 설정값을 사용한다.
INITRANS integer
정의
페이지에 동시 접근할 수 있는 초기 트랜잭션의 개수이다.
인덱스에 접근하는 사용자의 수가 적을 경우에는 INITRANS를 낮게 설정하고, 동시에 접근하는 사용자가 많을 경우에는 INITRANS를 높게 설정한다.
필요한 경우 설정된 MAXTRANS까지 자동으로 늘어난다.
1 부터 32 까지의 값을 사용할 수 있다.
생략할 경우, 기존 인덱스의 설정값을 사용한다.
MAXTRANS integer
정의
페이지에 동시 접근할 수 있는 트랜잭션의 최대 개수이다.
1 부터 32 까지의 값을 사용할 수 있다.
생략할 경우, 기존 인덱스의 설정값을 사용한다.
<segment attr clause>
인덱스가 저장될 공간에 대한 정보를 기술한다.
INITIAL integer
정의
인덱스를 생성할 때 초기에 할당할 물리적 공간의 크기를 기술한다.
integer 값이 EXTENT 두 개 이하인 경우, extent 두 개 크기로 설정된다.
integer 값이 EXTENT 두 개 보다 큰 경우, TABLESPACE의 EXTENT 크기에 맞춰 (aligned) 설정된다.
최소값은 1이고 최대값은 시스템 환경에 따라 다르다.
생략할 경우, 기존 인덱스의 설정값을 사용한다.
NEXT integer
정의
인덱스의 물리적 공간을 추가할 경우 할당할 물리적 공간의 크기를 기술한다.
이 크기는 테이블이 속하는 TABLESPACE의 EXTENT 크기에 align 되어 사용된다. (예: EXT크기가 8192 bytes일 경우 'NEXT 100'은 실제 8192 bytes로 작동한다.)
NEXT는 현재 인덱스가 사용할 수 있는 남은 공간의 크기 (MAXEXTENTS의 크기에서 현재 사용하고 있는 공간의 크기를 뺀 크기)에 따라 다음과 같이 작동한다.
- 남은 공간의 크기가 0인 경우 더 이상 공간을 확장하지 못한다.
- 남은 공간의 크기가 0보다 크고 NEXT보다 작은 경우 남은 공간의 크기만큼 할당한다.
- 남은 공간의 크기가 NEXT 보다 클 경우 NEXT의 크기만큼 할당한다.
최소값은 1이고 최대값은 시스템 환경에 따라 다르다.
생략할 경우, 기존 인덱스의 설정값을 사용한다.
<size clause>
파일의 바이트 크기를 명시한다. (단위를 기술하지 않을 경우 bytes이다.)
K: Kilobytes
M: Megabytes
G: Gigabytes
T: Terabytes
설명
Non-deterministic 질의를 하려면 global secondary index가 반드시 필요하다.
사용 예
테이블 T1의 global secondary index가 사용할 INITRANS, MAXTRANS 값을 2와 4로 변경한다.
gSQL> ALTER TABLE T1 ALTER GLOBAL SECONDARY INDEX INITRANS 2 MAXTRANS 4; Table altered. gSQL> COMMIT; Commit complete.
호환성
SQL 표준에서는 global secondary index에 대한 개념을 다루지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER TABLE name ALTER GLOBAL SECONDARY INDEX AGING
기능
Global secondary index 의 빈 페이지를 삭제한다. DML과 동시에 수행할 수 있다.
구문
<global secondary index aging statement> ::=
ALTER TABLE table_name ALTER GLOBAL SECONDARY INDEX AGING
[ AT <domain name> ]
;사용 범위 및 접근 권한
<global secondary index aging statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
테이블에 대해 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
테이블스페이스에 대해 다음 권한 중 하나가 있어야 한다.
해당 테이블스페이스에 대해 CREATE OBJECT ON TABLESPACE
USAGE TABLESPACE ON DATABASE
구문 규칙 및 파라미터
table_name
대상 테이블 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
이 구문은 인덱스 페이지 중 모든 키가 삭제된 페이지를 세그먼트로 반환한다. Aging은 논리적 삭제와 물리적 삭제라는 두 단계로 진행된다.
논리적 삭제는 인덱스에서 해당 페이지를 가리키는 연결을 끊는 작업이다. 페이지의 마지막 키가 삭제된 시점의 SCN이 시스템의 agable SCN보다 작은 경우에 수행된다.
물리적 삭제는 논리적으로 삭제된 페이지를 세그먼트에 반납하는 작업이다. 논리적 삭제 시점의 SCN이 시스템의 agable SCN 보다 작은 경우에 수행된다.
시스템의 agable SCN이 증가하지 않으면, INDEX AGING 구문이 성공하더라도 빈 페이지가 삭제되지 않을 수 있다.
사용 예
다음은 global secondary index를 aging 하는 예이다.
gSQL> select table_name, empty_blocks from user_global_secondary_indexes where table_name = 'T1'; TABLE_NAME EMPTY_BLOCKS ---------- ------------ T1 2 1 row selected. gSQL> alter table t1 alter global secondary index aging; Table altered. gSQL> select table_name, empty_blocks from user_global_secondary_indexes where table_name = 'T1'; TABLE_NAME EMPTY_BLOCKS ---------- ------------ T1 0 1 row selected.
호환성
SQL 표준은 global secondary index에 대한 개념을 다루지 않고 있다.
참조
관련 내용은 ALTER TABLE name ALTER GLOBAL SECONDARY INDEX REBUILD를 참조한다.
ALTER TABLE name ALTER GLOBAL SECONDARY INDEX COALESCE
기능
Global secondary index의 단편화를 제거한다.
구문
<global secondary index coalesce statement> ::=
ALTER TABLE table_name ALTER GLOBAL SECONDARY INDEX COALESCE
[ AT <domain name> ]
;사용 범위 및 접근 권한
<global secondary index coalesce statement> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.
인덱스를 재구축할 테이블에 대해 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
인덱스를 재구축할 테이블스페이스에 대해 다음 권한 중 하나가 있어야 한다.
해당 테이블스페이스에 대해 CREATE OBJECT ON TABLESPACE
USAGE TABLESPACE ON DATABASE
구문 규칙 및 파라미터
table_name
대상 테이블 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
leaf 페이지들을 순차 탐색하며 병합 가능한 페이지들을 병합하고, 제거된 페이지들을 세그먼트로 반환한다.
UPDATE / DELETE 등으로 인해 발생한 leaf 페이지의 단편화 문제를 해결할 수 있다.
인접한 leaf 페이지들이 병합 가능한 경우만 동작하므로 단편화 정도가 낮은 상태에서는 효과가 없을 수 있다.
인덱스의 단편화 정도가 심한 경우 INDEX REBUILD보다 더 오래 걸릴 수 있다.
INDEX REBUILD | INDEX COALESCE | |
|---|---|---|
인덱스 속성 변경 | 가능 | 불가능 |
테이블스페이스 이동 | 가능 | 불가능 |
테이블 잠금 | 필요 | 불필요 |
수행을 위한 추가 공간 | 필요 | 불필요 |
트리 높이 감소 | 가능 | 불가능 |
사용 예
테이블 T1의 global secondary index의 단편화를 제거한다.
gSQL> ALTER TABLE T1 ALTER GLOBAL SECONDARY INDEX COALESCE; Table altered.
호환성
SQL 표준은 global secondary index에 대한 개념을 다루지 않고 있다.
참조
관련 내용은 ALTER TABLE name ALTER GLOBAL SECONDARY INDEX REBUILD를 참조한다.
ALTER TABLE name ALTER GLOBAL SECONDARY INDEX REBUILD
기능
Global secondary index를 재구축한다.
구문
<global secondary index rebuild statement> ::=
ALTER TABLE table_name ALTER GLOBAL SECONDARY INDEX REBUILD
[ ONLINE | OFFLINE ]
[ <index attributes> [...] ]
[ TABLESPACE tablespace_name ]
[ AT <domain name> ]
;
<index attributes> ::=
<physical attribute clause>
| STORAGE ( <segment attr clause> [...] )
| <parallel clause>
<physical attribute clause> ::=
PCTFREE integer
| INITRANS integer
| MAXTRANS integer
<segment attr clause> ::=
INITIAL <size_clause>
| NEXT <size_clause>
<size clause> ::=
integer [ K | M | G | T ]
<parallel clause> ::=
NOPARALLEL
| PARALLEL [ integer ]사용 범위 및 접근 권한
<global secondary index rebuild statement> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.
인덱스를 재구축할 테이블에 대해 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
인덱스를 재구축할 테이블스페이스에 대해 다음 권한 중 하나가 있어야 한다.
해당 테이블스페이스에 대해 CREATE OBJECT ON TABLESPACE
USAGE TABLESPACE ON DATABASE
구문 규칙 및 파라미터
table_name
인덱스를 재구축할 테이블 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
[ ONLINE | OFFLINE ]
인덱스를 재구축할 때, 해당 테이블에 DML을 허용할지 여부를 결정한다.
ONLINE
INSERT, UPDATE, DELETE를 허용한다.
OFFLINE
INSERT, UPDATE, DELETE를 허용하지 않는다.
생략할 경우, 기본값은 ONLINE이다.
<physical attribute clause>
인덱스의 물리적 속성 정보를 정의한다.
PCTFREE integer
정의
페이지 내 key 삽입으로 인한 페이지 분할 빈도를 조절하기 위해 예약된 공간이다.
0 에서 99 까지의 값을 사용할 수 있다.
생략할 경우, 기존 인덱스에 설정된 값을 사용한다.
INITRANS integer
정의
페이지에 동시 접근할 수 있는 초기 트랜잭션의 개수이다.
인덱스에 접근하는 사용자의 수가 적을 경우에는 INITRANS를 낮게 설정하고, 동시에 접근하는 사용자가 많을 경우에는 INITRANS를 높게 설정한다.
필요한 경우 설정된 MAXTRANS까지 자동으로 늘어난다.
1 부터 32 까지의 값을 사용할 수 있다.
생략할 경우, 기존 인덱스에 설정된 값을 사용한다.
MAXTRANS integer
정의
페이지에 동시 접근할 수 있는 트랜잭션의 최대 개수이다.
1 부터 32 까지의 값을 사용할 수 있다.
생략할 경우, 기존 인덱스에 설정된 값을 사용한다.
<segment attr clause>
인덱스가 저장될 공간에 대한 정보를 기술한다.
INITIAL integer
정의
인덱스를 재구축할 때 초기에 할당할 물리적 공간의 크기를 기술한다.
integer 값이 EXTENT 두 개 이하인 경우, extent 두 개 크기로 설정된다.
integer 값이 EXTENT 두 개 보다 큰 경우, TABLESPACE의 EXTENT 크기에 맞춰 (aligned) 설정된다.
최소값은 1이고 최대값은 시스템 환경에 따라 다르다.
생략할 경우, 기존 인덱스에 설정된 값을 사용한다.
NEXT integer
정의
인덱스의 물리적 공간을 추가할 경우 할당할 물리적 공간의 크기를 기술한다.
이 크기는 테이블이 속하는 TABLESPACE의 EXTENT 크기에 align 되어 사용된다. (예: EXT크기가 8192 bytes일 경우 'NEXT 100'은 실제 8192 bytes로 작동한다.)
NEXT는 현재 인덱스가 사용할 수 있는 남은 공간의 크기 (MAXEXTENTS의 크기에서 현재 사용하고 있는 공간의 크기를 뺀 크기)에 따라 다음과 같이 작동한다.
- 남은 공간의 크기가 0인 경우 더 이상 공간을 확장하지 못한다.
- 남은 공간의 크기가 0보다 크고 NEXT보다 작은 경우 남은 공간의 크기만큼 할당한다.
- 남은 공간의 크기가 NEXT 보다 클 경우 NEXT의 크기만큼 할당한다.
최소값은 1이고 최대값은 시스템 환경에 따라 다르다.
생략할 경우, 기존 인덱스에 설정된 값을 사용한다.
<size clause>
파일의 바이트 크기를 명시한다. (단위를 기술하지 않을 경우 bytes이다.)
K: Kilobytes
M: Megabytes
G: Gigabytes
T: Terabytes
NOPARALLEL | PARALLEL [ integer ]
인덱스 재구축되는 동안 사용될 thread의 개수를 지정한다.
NOPARALLEL
인덱스를 병렬로 재구축하지 않는다.
PARALLEL [integer]
인덱스를 병렬로 재구축한다.
integer가 생략되거나 0으로 지정된 경우에는 INDEX_BUILD_PARALLEL_FACTOR 프로퍼티를 따른다.
integer는 0부터 사용할 수 있으며 최대값은 64이다.
만약 integer나 프로퍼티의 값이 0인 경우에는 시스템이 최적값을 결정한다.
명시하지 않을 경우, 기본값은 NOPARALLEL이다.
TABLESPACE tablespace_name
인덱스가 재구축될 tablespace의 이름을 지정한다.
tablespace_name을 지정할 경우
tablespace_name이 data tablespace면 LOGGING 인덱스로 재구축된다.
tablespace_name이 temporary tablespace 또는 nologging tablespace면 NOLOGGING 인덱스로 재구축된다.
TABLESPACE 절을 생략할 경우, 기존 인덱스의 tablespace로 설정된다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다. <index attributes> 와 함께 사용할 수 없다.
설명
인덱스 단편화 제거
인덱스에 update DML이 빈번하게 수행되는 경우, 인덱스 페이지에 단편화가 발생할 수 있다. 유효한 데이터에 비해 트리가 지나치게 커진 경우, 인덱스의 용량은 커지고 성능은 하락한다. 이 경우, 인덱스를 재구축하면 인덱스 페이지의 단편화를 해결하여 인덱스 용량을 줄이고 성능을 회복할 수 있다.
인덱스의 테이블스페이스 변경
기존에 생성된 인덱스의 테이블스페이스를 변경할 수 있다.
단, 테이블스페이스의 TEMPORARY 여부에 따라 로깅 여부를 적절하게 설정해주어야 한다.
인덱스의 로깅 설정 변경
TABLESPACE 옵션을 사용하여 이미 생성된 인덱스의 로깅 설정을 변경할 수 있다.
LOGGING 인덱스로 변경하려는 경우, data tablespace를 TABLESPACE 옵션에 지정해줘야 한다.
NOLOGGING 인덱스로 변경하려는 경우, temporary tablespace 또는 nologging tablespace를 TABLESPACE 옵션에 지정해줘야 한다.
사용 예
테이블 T1의 global secondary index를 재구축한다.
gSQL> ALTER TABLE T1 ALTER GLOBAL SECONDARY INDEX REBUILD;
테이블 T1의 global secondary index의 tablespace와 logging 설정을 변경한다.
gSQL> ALTER TABLE T1 ALTER GLOBAL SECONDARY INDEX REBUILD TABLESPACE MEM_DATA_TBS; gSQL> ALTER TABLE T1 ALTER GLOBAL SECONDARY INDEX REBUILD TABLESPACE MEM_TEMP_TBS;
호환성
SQL 표준은 global secondary index에 대한 개념을 다루지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER TABLE name DROP CONSTRAINT
기능
테이블 제약 조건을 제거한다.
구문
<drop table constraint definition> ::=
ALTER TABLE table_name
DROP <constraint object>
[ <drop behavior> ]
;
<constraint object> ::=
CONSTRAINT constraint_name
| PRIMARY KEY
| UNIQUE ( column_name [, ...] )
<drop behavior> ::=
RESTRICT
| CASCADE
| CASCADE CONSTRAINTS사용 범위 및 접근 권한
<drop table constraint definition> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
제약 조건의 소유자
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
변경할 테이블의 이름이다. schema_name.table_name과 같이 테이블이 속한 스키마를 정의할 수 있으며, schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
CONSTRAINT constraint_name
제거할 제약 조건의 이름이다.
PRIMARY KEY
테이블의 primary key 제약 조건이다.
UNIQUE( column_name [, ...] )
Column들에 대한 unique 제약 조건이다.
<drop behavior>
생략할 경우, 기본값은 RESTRICT 이다.
CASCADE 와 CASCADE CONSTRAINTS 는 동일한 의미이다.
제거할 constraint 가 PRIMARY KEY 나 UNIQUE 이고 해당 constraint 를 참조하는 FOREIGN KEY 가 존재할 경우, CASCADE 또는 CASCADE CONSTRAINTS 를 명시해야 한다.
설명
제약 조건의 이름을 사용하지 않고 NOT NULL 제약 조건을 제거하려고 할 경우 ALTER TABLE name ALTER COLUMN 구문의 <drop column not null clause> 절을 이용한다.
FOREIGN KEY는 constraint name 을 지정하여 삭제해야 한다.
CREATE TABLE parent ( pk INTEGER PRIMARY KEY );
CREATE TABLE child ( fk INTEGER REFERENCES parent(pk) );
COMMIT;
gSQL> ALTER TABLE child DROP FOREIGN KEY;
ERR-42000(40000): syntax error:
ALTER TABLE child DROP FOREIGN KEY
^ ^
Error at line 1
gSQL>
SELECT constraint_name
FROM information_schema.referential_constraints
WHERE constraint_table_name = 'CHILD'
;
CONSTRAINT_NAME
-----------------------------------------
CHILD_FOREIGN_KEY_FK_REFERENCES_PARENT_PK
1 row selected.
gSQL> ALTER TABLE child DROP CONSTRAINT CHILD_FOREIGN_KEY_FK_REFERENCES_PARENT_PK;
Table altered.사용 예
다음은 테이블의 primary key 제약 조건을 제거하는 예이다.
gSQL> ALTER TABLE t1 DROP PRIMARY KEY; Table altered.
다음은 제약 조건 이름을 명시하여 테이블의 제약 조건을 제거하는 예이다.
gSQL> ALTER TABLE t1 DROP CONSTRAINT t1_pk; Table altered.
호환성
SQL 표준에서는 다음과 같은 절을 정의하지 않고 있다.
DROP PRIMARY KEY
DROP UNIQUE ( column_name [, ...] )
CASCADE CONSTRAINTS
Feature ID | 설명 | 지원 여부 |
|---|---|---|
F381 | Extended schema manipulation | O |
참조
관련 내용은 다음을 참조한다.
ALTER TABLE name DROP GLOBAL SECONDARY INDEX
기능
테이블에서 global secondary index를 제거한다.
구문
<alter table drop global secondary index definition> ::=
ALTER TABLE table_name
DROP GLOBAL SECONDARY INDEX
;사용 범위 및 접근 권한
<alter table drop global secondary index definition> 구문은 cluster system에서 정의할 수 있으며 사용자는 다음 조건들을 만족해야 한다.
인덱스를 제거할 테이블에 대해 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
인덱스를 제거할 테이블 이름이다.
설명
Non-deterministic 질의를 하려면 global secondary index가 반드시 필요하다.
사용 예
테이블 T1에서 global secondary index를 제거한다.
gSQL> ALTER TABLE T1 DROP GLOBAL SECONDARY INDEX; Table altered. gSQL> COMMIT; Commit complete.
호환성
SQL 표준에서는 global secondary index에 대한 개념을 다루지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER TABLE name DROP OFFLINE SEGMENTS
기능
오프라인 된 shard들의 세그먼트를 삭제한다.
구문
<alter table drop offline segments statement> ::=
ALTER TABLE table_name
DROP OFFLINE SEGMENTS
;사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter table drop offline segments statement> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
테이블의 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
설명
오프라인 된 shard들의 세그먼트를 삭제한다.
<alter table drop offline segments statement>는 inactive cluster member가 있어도 수행할 수 있다.
다음 조건들을 만족하지 못하면 실패한다.
Cloned 테이블의 세그먼트들을 삭제하려면 클러스터 시스템 내에서 적어도 하나의 멤버에 cloned 테이블의 온라인 replica가 존재해야 한다.
Sharded 테이블의 세그먼트들을 삭제하려면 그룹 당 적어도 하나의 멤버에 해당 sharded 테이블의 온라인 replica가 존재해야 한다.
예를 들어 sharded 테이블 t1의 cluster group G3에 있는 모든 replica들이 오프라인 상태일 경우 다음과 같은 에러가 발생한다.
gSQL> ALTER TABLE t1 DROP OFFLINE SEGMENTS; ERR-42000(16361): sharded table "PUBLIC"."T1" must have at least one usable replica of group 'G3'
모든 테이블들에 대해서 수행하려면 <alter database drop offline segments statement> 구문을 사용한다.
사용 예
다음은 테이블 t1에 대해 <alter table drop offline segments statement> 구문을 수행하는 예이다.
gSQL> ALTER TABLE t1 DROP OFFLINE SEGMENTS; Table altered.
호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 ALTER DATABASE DROP OFFLINE SEGMENTS를 참조한다.
ALTER TABLE name DROP UNUSABLE SEGMENTS
기능
오프라인 된 replica 들의 세그먼트 중에 unusable 세그먼트를 삭제한다.
구문
<alter table drop unusable segments statement> ::=
ALTER TABLE table_name
DROP UNUSABLE SEGMENTS
;사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter table drop unusable segments statement> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
테이블의 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
설명
Unusable 세그먼트는 더 이상 사용할 수 없는 세그먼트를 의미하며, 다음과 같은 상황에서 생성될 수 있다.
특정 세그먼트가 복구 불가능한 상태로 판단되어 <alter database register statement>에 의해 등록된 경우
로깅 없이 append insert 를 수행한 후, 서버가 checkpoint 없이 비정상 종료된 경우
이 구문은 inactive cluster member가 있어도 수행할 수 있다.
<alter table drop offline segments statement>와는 달리 온라인 상태의 replica 가 없어도 실행할 수 있다.
모든 테이블들에 대해 동일한 작업을 수행하려면 <alter database drop offline segments statement> 구문을 사용한다.
사용 예
다음은 테이블 t1에 대해 <alter table drop unusable segments statement> 구문을 수행하는 예이다.
gSQL> ALTER TABLE t1 DROP UNUSABLE SEGMENTS; Table altered.
호환성
SQL 표준에서는 unusable 세그먼트에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 ALTER TABLE name DROP OFFLINE SEGMENTS를 참조한다.
ALTER TABLE name DROP SUPPLEMENTAL LOG
기능
테이블의 데이터가 변경될 때 redo log에 primary key 정보를 남기지 않도록 설정한다.
구문
<add table supplemental log statement> ::=
ALTER TABLE table_name
DROP SUPPLEMENTAL LOG DATA ( PRIMARY KEY ) COLUMNS
;사용 범위 및 접근 권한
<drop table supplemental log statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
변경할 테이블의 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다. ALTER TABLE name ADD SUPPLEMENTAL LOG 구문을 사용해 설정된 상태여야 한다
설명
각 구문별 사용 규칙을 참조한다.
사용 예
다음은 테이블의 데이터가 변경되었을 때 redo log에 primary key 정보를 남기지 않도록 설정하는 예이다.
gSQL> ALTER TABLE t1 DROP SUPPLEMENTAL LOG DATA ( PRIMARY KEY ) COLUMNS; Table altered.
호환성
SQL 표준에서는 <drop table supplemental log statement>를 다루지 않고 있다.
ALTER TABLE name MERGE SHARDS
기능
Cluster 환경에서 테이블의 특정 shard들을 merge 하여 재배치한다.
구문
<alter table merge shards statement> ::=
ALTER TABLE table_name MERGE SHARDS <source shard list>
INTO dest_shard_name [ <dest shard placement> ]
;
<source shard list> ::=
source_shard_name [, ...]
| start_shard_name TO end_shard_name
<dest shard placement> ::=
AT CLUSTER GROUP dest_group_name사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter table merge shards statement> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
테이블의 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다. 해당 테이블이 cluster-specific이고 list shard 또는 range shard인 경우에만 구문을 수행할 수 있다.
<source shard list>
Merge 할 원본 shard들의 list 이다. List에서 지정한 shard가 해당 테이블에 반드시 존재해야 한다.
source_shard_name
Merge 할 원본 shard의 이름이다. 해당 테이블에 존재하지 않는 shard인 경우 구문을 수행할 수 없다.
start_shard_name
Merge 할 범위 중 시작 shard의 이름이다. Range shard에서만 사용된다.
end_shard_name
Merge 할 범위 중 마지막 shard의 이름이다. Range shard에서만 사용된다.
dest_shard_name
대상 shard의 이름이다.
<dest shard placement>
대상 shard가 배치될 cluster group의 이름이다. 해당 구문이 생략된 경우, dest_shard_name이 <source shard list>에 포함되어 있어야 한다.
설명
특정 테이블의 특정 shard들을 merge 하여 임의의 cluster group에 배치한다.
Standalone database에서는 수행할 수 없다.
Hash sharded table이나 cloned table에는 수행할 수 없다.
Cluster wide로 생성한 table에는 수행할 수 없다.
Merge가 진행되는 동안 source shard들에 대한 DML은 수행할 수 없다.
Range shard의 경우에는 merge 할 원본 shard의 시작과 끝을 지정할 수 있다.
Merge 할 원본 shard들은 range shard 또는 list shard에 나열할 수 있다.
다만 이 경우, range shard에 나열된 shard들은 모두 이웃한 shard 여야만 한다.
다음은 range sharded 테이블에 나열형으로 인접하지 않은 shard를 merge 하려고 할 때 발생하는 에러이다.
CREATE TABLE t1( i1 INTEGER )
SHARDING BY RANGE (i1)
SHARD shard1 VALUES LESS THAN ( 200 ) AT CLUSTER GROUP G1,
SHARD shard2 VALUES LESS THAN ( 400 ) AT CLUSTER GROUP G2,
SHARD shard3 VALUES LESS THAN ( MAXVALUE ) AT CLUSTER GROUP G3
;
Table created.
ALTER TABLE t1 MERGE SHARDS shard1, shard3 INTO shard4 AT CLUSTER GROUP G2;
ERR-42000(16488): shards being merged are not adjacent :
ALTER TABLE t1 MERGE SHARDS shard1, shard3 INTO shard4 AT CLUSTER GROUP G2
*
ERROR at line 1:사용 예
다음은 나열형으로 SHARD를 merge 하는 예이다.
gSQL> ALTER TABLE t1 MERGE SHARDS shard1, shard2, shard3 INTO shard4 AT CLUSTER GROUP G2; Table altered
다음은 범위형으로 SHARD를 병합하는 예이다.
gSQL> ALTER TABLE t1 MERGE SHARDS shard1 TO shard3 INTO shard4 AT CLUSTER GROUP G2; Table altered
호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER TABLE name MOVE SHARD
기능
테이블의 특정 shard 또는 특정 cluster group의 전체 shard를 특정 cluster group에 재배치한다.
구문
<alter table move shard statement> ::=
ALTER TABLE table_name MOVE SHARD
{ shard_name_list | FROM CLUSTER GROUP src_cluster_group }
TO CLUSTER GROUP dest_cluster_group
[ ONLINE | OFFLINE ]
[ LOGGING | NOLOGGING ]
[ <scan partition> ]
[ <parallel clause> ]
;
<scan partition> ::=
SCAN PARTITION integer
<parallel clause> ::=
NOPARALLEL
| PARALLEL [ integer ]사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter table move shard statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
테이블 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다. 해당 테이블이 cluster group specific인 경우에만 구문을 수행할 수 있다.
shard_name_list
재배치할 shard name 목록이다. 해당 테이블에 존재하지 않는 shard인 경우 구문을 수행할 수 없다.
src_cluster_group
재배치할 특정 cluster group의 이름이다.
dest_cluster_group
테이블의 shard를 배치할 target cluster group의 이름이다. 해당 테이블의 shard가 지정한 cluster group에 이미 존재할 경우 구문을 수행할 수 없다.
[ ONLINE | OFFLINE ]
테이블의 shard를 재배치할 때 DML을 허용할지 여부를 결정한다.
ONLINE
INSERT, UPDATE, DELETE를 허용한다.
OFFLINE
INSERT, UPDATE, DELETE를 허용하지 않는다.
생략할 경우, 기본값은 ONLINE 이다.
[ LOGGING | NOLOGGING ]
테이블의 shard를 재배치할 때, 테이블 동기화 과정에서 기록되는 로그의 양을 지정한다.
LOGGING
테이블 동기화 과정에서 모든 로그를 기록한다.
NOLOGGING
테이블 동기화 과정에서 최소한의 로그만 기록한다.
생략할 경우, 기본값은 LOGGING 이다.
NOLOGGING 옵션을 사용하면 redo log가 기록되지 않는다. 따라서 move shard 수행 후 서버가 비정상적으로 종료되면 해당 테이블은 unusable 상태가 된다. 이를 방지하려면 move shard 수행 후 CHECKPOINT 구문을 실행해야 한다.
<scan partition>
shard의 partition 개수를 지정한다.
partition 개수 만큼 shard를 분할하여 원격 서버에 재배치 한다.
integer는 0부터 사용할 수 있으며 최대값은 1000이다.
생략할 경우, ONLINE_DDL_SCAN_PARTITION 프로퍼티를 따른다.
integer가 parallel integer 보다 작은 경우에는 parallel integer와 같은 값으로 보정된다.
<parallel clause>
테이블 재배치에 사용할 thread의 개수를 지정한다.
NOPARALLEL
테이블을 병렬로 재배치하지 않는다.
PARALLEL [integer]
테이블을 병렬로 재배치한다.
integer는 0부터 사용할 수 있으며 최대값은 64이다.
integer가 생략된 경우는 0이다.
integer가 0인 경우에는 시스템이 최적값을 결정한다.
설명
테이블의 특정 shard를 특정 cluster group에서 다른 cluster group으로 재배치한다.
특정 cluster group을 제거하려면 테이블의 shard를 재배치한 후에 DROP CLUSTER GROUP 구문을 수행해야 한다.
모든 테이블의 shard를 특정 cluster group에서 다른 cluster group으로 이동시키는 경우, ALTER DATABASE MOVE SHARD FROM CLUSTER GROUP TO CLUSTER GROUP 구문을 수행한다.
CLONED 테이블이거나 CLUSTER WIDE로 설정된 테이블의 경우 에러가 발생하면서 실패할 수 있다.
사용 예
다음은 <alter table move shard statement> 구문을 수행하는 예이다.
gSQL> ALTER TABLE t1 MOVE SHARD shard1, shard2 TO CLUSTER GROUP g3; Table altered. gSQL> ALTER TABLE t1 MOVE SHARD FROM CLUSTER GROUP g1 TO CLUSTER GROUP g3; Table altered.
다음은 CLONED 테이블과 CLUSTER WIDE로 설정된 테이블이 move shard에 실패하는 예이다.
gSQL> CREATE TABLE T1 ( C1 INTEGER ) SHARDING BY RANGE (C1)
AT CLUSTER WIDE
SHARD s1 VALUES LESS THAN (10),
SHARD s2 VALUES LESS THAN (MAXVALUE);
Table created.
gSQL> ALTER TABLE T1 MOVE SHARD s1 TO CLUSTER GROUP g2;
ERR-42000(16440): cannot execute on cluster wide sharded tables
gSQL> CREATE TABLE T2 ( C1 INTEGER ) CLONED AT CLUSTER GROUP g1, g2;
Table created.
gSQL> ALTER TABLE T2 MOVE SHARD FROM CLUSTER GROUP g1 TO CLUSTER GROUP g3;
ERR-42000(16437): cannot execute on cloned tables호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 ALTER DATABASE MOVE SHARD를 참조한다.
ALTER TABLE name OFFLINE INACTIVE CLUSTER MEMBERS
기능
테이블의 cluster member 정보에서 모든 inactive cluster member 를 offline 상태로 변경한다. 즉, 해당 cluster member 의 shard map 을 offline 상태로 변경한다.
구문
<alter table offline inactive cluster members statement> ::=
ALTER TABLE table_name OFFLINE INACTIVE CLUSTER MEMBERS
;사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter table offline inactive cluster members statement> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
테이블의 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
설명
테이블의 shard가 존재하는 모든 inactive cluster member 가 더 이상 cluster member 에 포함될 수 없는 경우에 사용한다.
또한, inactive cluster member가 cluster system에 다시 join 하려면 모든 멤버에서 offline 상태여야 한다.
비활성화된 cluster member 에 대해 database의 모든 테이블을 offline 상태로 변경하려면 <alter database offline inactive cluster members> 구문을 수행한다.
사용 예
다음은 테이블 t1에 대해 <alter table offline inactive cluster members statement> 구문을 수행하는 예이다.
gSQL> ALTER TABLE t1 OFFLINE INACTIVE CLUSTER MEMBERS; Table altered.
호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 ALTER DATABASE OFFLINE INACTIVE CLUSTER MEMBERS를 참조한다.
ALTER TABLE name READ { ONLY | WRITE }
기능
테이블에 READ { ONLY | WRITE }을 설정한다.
구문
<alter table read { only | write } statement> :==
ALTER TABLE table_name
READ { ONLY | WRITE }
;사용 범위 및 접근 권한
<alter table read { only | write } statement> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
테이블 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
설명
테이블의 속성을 READ { ONLY | WRITE } 으로 지정한다.
READ ONLY로 지정하면 SELECT .. FOR UPDATE 구문, 테이블의 데이터가 변경되는 DML 또는 DDL 구문들을 사용할 수 없다. 반면, 테이블의 데이터가 변경이 되지 않는 DDL 구문은 허용한다.
READ ONLY로 지정할 때 허용하지 않는 SQL 구문
INSERT, UPDATE, DELETE
TRUNCATE
SELECT .. FOR UPDATE
ALTER TABLE RENAME/DROP COLUMN
ALTER TABLE SET COLUMN UNUSED
READ ONLY로 지정할 때 허용하는 SQL 구문
SELECT
CREATE/ALTER/DROP INDEX
ALTER TABLE ADD/ALTER COLUMN
ALTER TABLE ADD/ALTER/RENAME/DROP CONSTRAINT
ALTER TABLE for physical property changes
ALTER TABLE DROP UNUSED COLUMNS
ALTER TABLE RENAME TO
DROP TABLE
ALTER TABLE ADD/DROP SUPPLEMENTAL LOG
LOCK TABLE
사용 예
다음은 <alter table read { only | write } statement> 구문을 수행하는 예이다.
gSQL> ALTER TABLE t1 READ ONLY; Table altered. gSQL> ALTER TABLE t1 READ WRITE; Table altered.
호환성
SQL 표준에서는 <alter table read { only | write } statement> 구문을 정의하지 있지 않다.
참조
관련 내용은 ALTER TABLE을 참조한다.
ALTER TABLE name REBALANCE
기능
테이블의 shard를 재배치한다.
구문
<alter table rebalance statement> ::=
ALTER TABLE table_name REBALANCE
[ ONLINE | OFFLINE ]
[ LOGGING | NOLOGGING ]
[ <scan partition> ]
[ <parallel clause> ]
;
<scan partition> ::=
SCAN PARTITION integer
<parallel clause> ::=
NOPARALLEL
| PARALLEL [ integer ]사용 범위 및 접근 권한
Cluster system 에서 수행할 수 있다.
<alter table rebalance statement> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
테이블의 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
[ ONLINE | OFFLINE ]
테이블의 shard를 재배치할 때 DML을 허용할지 여부를 결정한다
ONLINE
INSERT, UPDATE, DELETE를 허용한다.
OFFLINE
INSERT, UPDATE, DELETE를 허용하지 않는다.
생략할 경우, 기본값은 ONLINE 이다.
[ LOGGING | NOLOGGING ]
테이블의 shard를 재배치할 때, 테이블 동기화 과정에서 기록되는 로그의 양을 지정한다.
LOGGING
테이블 동기화 과정에서 모든 로그를 기록한다.
NOLOGGING
테이블 동기화 과정에서 최소한의 로그만 기록한다.
생략할 경우, 기본값은 LOGGING 이다.
NOLOGGING 옵션을 사용하면 redo log가 기록되지 않는다. 따라서 rebalance 수행 후 서버가 비정상적으로 종료되면 해당 테이블은 unusable 상태가 된다. 이를 방지하려면 rebalance 수행 후 CHECKPOINT 구문을 실행해야 한다.
<scan partition>
shard의 partition 개수를 지정한다.
partition 개수 만큼 shard를 분할하여 원격 서버에 재배치 한다.
integer는 0부터 사용할 수 있으며 최대값은 1000이다.
생략할 경우, ONLINE_DDL_SCAN_PARTITION 프로퍼티를 따른다.
integer가 parallel integer 보다 작은 경우에는 parallel integer와 같은 값으로 보정된다.
<parallel clause>
테이블 재배치에 사용할 thread의 개수를 지정한다.
NOPARALLEL
테이블을 병렬로 재배치하지 않는다.
PARALLEL [integer]
테이블을 병렬로 재배치한다.
integer는 0부터 사용할 수 있으며 최대값은 64이다.
integer가 생략된 경우는 0이다.
integer가 0인 경우에는 시스템이 최적값을 결정한다.
설명
다음과 같은 구문을 통해 cluster member, cluster group을 추가할 때 table들의 shard는 재배치하지 않는다.
추가된 cluster group과 cluster member의 테이블 shard를 재배치하려면 <alter table rebalance statement> 구문을 수행한다. 테이블의 shard 가 이미 재배치된 경우, 별도의 재배치 작업없이 성공한다.
모든 테이블들의 shard를 재배치하려면 ALTER DATABASE REBALANCE 구문을 수행한다.
사용 예
다음은 <alter table rebalance statement> 구문을 수행하는 예이다.
gSQL> ALTER TABLE t1 REBALANCE; Table altered.
호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
ALTER TABLE name REBALANCE EXCLUDE CLUSTER GROUP cluster_group_list
기능
특정 cluster group에 shard를 포함하지 않도록 테이블의 shard를 재배치한다.
구문
<alter table rebalance exclude cluster group statement> ::=
ALTER TABLE table_name REBALANCE
EXCLUDE CLUSTER GROUP cluster_group_list
[ ONLINE | OFFLINE ]
[ LOGGING | NOLOGGING ]
[ <scan partition> ]
[ <parallel clause> ]
;
<scan partition> ::=
SCAN PARTITION integer
<parallel clause> ::=
NOPARALLEL
| PARALLEL [ integer ]사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter table rebalance exclude cluster group statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
테이블의 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다. 해당 테이블이 cluster-wide인 경우에만 구문을 수행할 수 있다.
cluster_group_list
테이블의 shard를 포함하지 않는 cluster group의 list이다. 재배치에서 제외될 cluster group이 cluster 전체 group인 경우 구문을 수행할 수 없다.
[ ONLINE | OFFLINE ]
테이블의 shard를 재배치할 때 DML을 허용할지 여부를 결정한다.
ONLINE
INSERT, UPDATE, DELETE 를 허용한다.
OFFLINE
INSERT, UPDATE, DELETE 를 허용하지 않는다.
생략할 경우, 기본값은 ONLINE 이다.
[ LOGGING | NOLOGGING ]
테이블의 shard를 재배치할 때, 테이블 동기화 과정에서 기록되는 로그의 양을 지정한다.
LOGGING
테이블 동기화 과정에서 모든 로그를 기록한다.
NOLOGGING
테이블 동기화 과정에서 최소한의 로그만 기록한다.
생략할 경우, 기본값은 LOGGING 이다.
NOLOGGING 옵션을 사용하면 redo log가 기록되지 않는다. 따라서 rebalance 수행 후 서버가 비정상적으로 종료되면 해당 테이블은 unusable 상태가 된다. 이를 방지하려면 rebalance 수행 후 CHECKPOINT 구문을 실행해야 한다.
<scan partition>
shard의 partition 개수를 지정한다.
partition 개수 만큼 shard를 분할하여 원격 서버에 재배치 한다.
integer는 0부터 사용할 수 있으며 최대값은 1000이다.
생략할 경우, ONLINE_DDL_SCAN_PARTITION 프로퍼티를 따른다.
integer가 parallel integer 보다 작은 경우에는 parallel integer와 같은 값으로 보정된다.
<parallel clause>
테이블 재배치에 사용할 thread의 개수를 지정한다.
NOPARALLEL
테이블을 병렬로 재배치하지 않는다.
PARALLEL [integer]
테이블을 병렬로 재배치한다.
integer는 0부터 사용할 수 있으며 최대값은 64이다.
integer가 생략된 경우는 0이다.
integer가 0인 경우에는 시스템이 최적값을 결정한다.
설명
특정 cluster group을 배제하고 테이블의 shard를 재배치한다. 해당 cluster group에 테이블의 shard가 존재하지 않을 경우, 별도의 재배치 작업없이 성공한다. 테이블의 shard가 위치한 cluster group을 기준으로 shard를 재배치한다.
특정 cluster group을 제거하려면 테이블의 shard를 재배치한 후에 DROP CLUSTER GROUP 구문을 수행해야 한다. 모든 테이블들에서 cluster group을 배제하고 shard를 재배치하고자 할 경우, ALTER DATABASE REBALANCE EXCLUDE CLUSTER GROUP을 수행한다.
사용 예
다음은 <alter table rebalance exclude cluster group statement> 구문을 수행하는 예이다.
gSQL> ALTER TABLE t1 REBALANCE EXCLUDE CLUSTER GROUP g3; Table altered.
호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
ALTER TABLE name RENAME COLUMN
기능
테이블 column의 이름을 변경한다.
구문
<rename column statement> ::=
ALTER TABLE table_name
RENAME COLUMN old_column_name TO new_column_name
;사용 범위 및 접근 권한
<rename column statement> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
변경할 테이블 이름이다. schema_name.table_name과 같이 테이블이 속한 스키마를 정의할 수 있으며, schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
old_column_name
변경할 column의 기존 이름이다.
new_column_name
변경할 column의 새로운 이름이다. 테이블 내에 동일한 column 이름이 존재하지 않아야 한다.
설명
Column 이름이 변경되더라도 이전에 해당 column을 기준으로 생성된 index, constraint 등의 객체를 변경할 필요는 없다.
Column 이름이 변경되더라도, CHECK 제약 조건의 의미는 다음과 같이 그대로 유지된다.
CREATE TABLE t1 ( c1 INTEGER, c2 INTEGER,
CONSTRAINT t1_check CHECK ( c1 > c2 ) );
gSQL>
SELECT constraint_name, check_clause
FROM information_schema.check_constraints
WHERE constraint_table = 'T1';
CONSTRAINT_NAME CHECK_CLAUSE
--------------- --------------------
T1_CHECK CHECK( "C1" > "C2" )
1 row selected.
gSQL> INSERT INTO t1 VALUES ( 1, 2 );
ERR-23000(16665): check constraint "PUBLIC"."T1_CHECK" violated
gSQL> ALTER TABLE t1 RENAME COLUMN c1 TO tmp;
Table altered.
gSQL> INSERT INTO t1 VALUES ( 1, 2 );
ERR-23000(16665): check constraint "PUBLIC"."T1_CHECK" violated
gSQL> ALTER TABLE t1 RENAME COLUMN c2 TO c1;
Table altered.
gSQL> INSERT INTO t1 VALUES ( 1, 2 );
ERR-23000(16665): check constraint "PUBLIC"."T1_CHECK" violated
gSQL> ALTER TABLE t1 RENAME COLUMN tmp TO c2;
Table altered.
gSQL> INSERT INTO t1 VALUES ( 1, 2 );
ERR-23000(16665): check constraint "PUBLIC"."T1_CHECK" violated
gSQL>
SELECT constraint_name, check_clause
FROM information_schema.check_constraints
WHERE constraint_table = 'T1';
CONSTRAINT_NAME CHECK_CLAUSE
--------------- --------------------
T1_CHECK CHECK( "C2" > "C1" )
1 row selected.사용 예
다음은 두 개의 column 이름인 col_1과 col_2를 서로 바꾸는 예이다.
gSQL> ALTER TABLE t1 RENAME COLUMN col_1 TO col_temp; Table altered. gSQL> ALTER TABLE t1 RENAME COLUMN col_2 TO col_1; Table altered. gSQL> ALTER TABLE t1 RENAME COLUMN col_temp TO col_2; Table altered. gSQL> COMMIT; Commit complete.
호환성
SQL 표준에서는 <rename column statement> 구문을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER TABLE name RENAME CONSTRAINT
기능
테이블 제약 조건의 이름을 변경한다.
구문
<rename table constraint statement> ::=
ALTER TABLE table_name
RENAME <constraint object> TO new_constraint_name
;
<constraint object> ::=
CONSTRAINT constraint_name
| PRIMARY KEY
| UNIQUE ( column_name [, ...] )사용 범위 및 접근 권한
<rename table constraint statement> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
변경할 테이블의 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
<constraint object>
변경할 제약 조건의 기존 이름은 다음과 같이 지정할 수 있다.
CONSTRAINT constraint_name
변경할 제약 조건의 이름이다.
PRIMARY KEY
테이블의 PRIMARY KEY 제약 조건이다.
UNIQUE( column [,...] )
Column 목록에 부합되는 UNIQUE 제약 조건이다.
new_column_name
변경할 제약 조건의 새로운 이름이다.
설명
Primary key, unique key와 같이 key 제약 조건으로 자동 생성된 index의 이름은 변경되지 않는다. Index 이름은 ALTER INDEX name RENAME TO 구문을 사용하여 변경해야 한다.
사용 예
다음은 테이블의 primary key 제약 조건의 이름을 변경하는 예이다.
gSQL> ALTER TABLE t1 RENAME PRIMARY KEY TO pk_t1; Table altered.
다음은 제약 조건 이름을 명시하여 테이블의 제약 조건 이름을 변경하는 예이다.
gSQL> ALTER TABLE t1 RENAME CONSTRAINT pk_t1 TO t1_pk; Table altered.
호환성
SQL 표준에서는 <rename table constraint statement> 구문을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER TABLE name RENAME SHARD
기능
Cluster 환경에서 테이블의 특정 shard의 이름을 변경한다.
구문
<alter table rename shard statement> ::=
ALTER TABLE table_name
RENAME SHARD shard_name TO new_shard_name
;사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter table rename shard statement> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
변경할 테이블의 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
shard_name
변경할 shard의 기존 이름이다. Shard가 해당 테이블에 존재하지 않을 경우 구문을 수행할 수 없다.
new_shard_name
변경할 shard의 새 이름이다. 테이블 내에 동일한 shard 이름이 존재하지 않아야 한다.
설명
Hash, range, list 테이블의 특정 shard의 이름을 변경한다. Cloned 테이블에 대해서는 해당 구문을 수행할 수 없다.
사용 예
다음은 <alter table rename shard statement> 구문을 수행하는 예이다.
gSQL> ALTER TABLE t_range RENAME SHARD r_01 TO r_new_01; Table altered. gSQL> ALTER TABLE t_list RENAME SHARD l_01 TO l_new_01; Table altered. gSQL> ALTER TABLE t_hash RENAME SHARD shard_000000 TO h_new_00; Table altered. gSQL> COMMIT; Commit complete.
호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER TABLE name RENAME TO
기능
테이블의 이름을 변경한다.
구문
<rename table statement> ::=
ALTER TABLE table_name
RENAME TO new_table_name
;사용 범위 및 접근 권한
<rename table statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
변경할 테이블의 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
new_table_name
테이블의 새 이름이다. 스키마 내에 동일한 테이블 이름이 존재하지 않아야 한다.
설명
테이블 이름이 변경되더라도 이를 참조하는 index constraint 등의 객체는 변경할 필요없다.
사용 예
다음은 두 테이블 t1, t2의 이름을 서로 바꾸는 예이다.
gSQL> ALTER TABLE t1 RENAME TO t_temp; Table altered. gSQL> ALTER TABLE t2 RENAME TO t1; Table altered. gSQL> ALTER TABLE t_temp RENAME TO t2; Table altered. gSQL> COMMIT; Commit complete.
호환성
SQL 표준에서는 <rename table statement> 구문을 정의하지 않고 있다.
참조
관련 내용은 ALTER TABLE을 참조한다.
ALTER TABLE name REORGANIZE
기능
테이블을 물리적으로 재구성한다.
구문
<alter table reorganize statement> ::=
ALTER TABLE table_name REORGANIZE
[ LOGGING| NOLOGGING ]
[ ONLINE | OFFLINE ]
[ <scan partition> ]
[ <parallel clause> ]
[ AT <domain name> ]
;
<scan partition> ::=
SCAN PARTITION integer
<parallel clause> ::=
NOPARALLEL
| PARALLEL [ integer ]사용 범위 및 접근 권한
<alter table reorganize statement> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
변경할 테이블의 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
[ LOGGING | NOLOGGING ]
테이블을 재구성할 때 redo log를 기록할지 여부를 결정한다.
LOGGING
Redo log를 기록한다.
NOLOGGING
Redo log를 기록하지 않는다.
생략할 경우, 기본값은 LOGGING 이다.
NOLOGGING 옵션을 사용하면 redo log가 기록되지 않는다. 따라서 reorganize 수행 후 서버가 비정상적으로 종료되면 해당 테이블은 unusable 상태가 된다. 이를 방지하려면 reorganize 수행 후 CHECKPOINT 구문을 실행해야 한다.
[ ONLINE | OFFLINE ]
테이블을 재구성할 때 DML을 허용할지 여부를 결정한다
ONLINE
INSERT, UPDATE, DELETE를 허용한다.
OFFLINE
INSERT, UPDATE, DELETE를 허용하지 않는다.
생략할 경우, 기본값은 ONLINE 이다.
<scan partition>
주어진 개수만큼 테이블을 분할하여 새로운 테이블에 동기화 한다.
integer는 0부터 사용할 수 있으며 최대값은 1000이다.
생략할 경우, ONLINE_DDL_SCAN_PARTITION 프로퍼티를 따른다.
integer가 parallel integer 보다 작은 경우에는 parallel integer와 같은 값으로 보정된다.
<parallel clause>
테이블 재구성할 때 사용할 thread 개수를 지정한다.
NOPARALLEL
테이블을 병렬로 재배치하지 않는다.
PARALLEL [integer]
테이블을 병렬로 재배치한다.
integer는 0부터 사용할 수 있으며 최대값은 64이다.
integer가 생략된 경우는 0이다.
integer가 0인 경우에는 시스템이 최적값을 결정한다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다. Cluster database 전용 옵션이다.
설명
테이블 재구성 (Table Reorganization)은 테이블의 물리적 구조를 재배치하여 질의 성능을 향상시키거나 저장 공간을 최적화하는 작업이다. 테이블 페이지 내의 빈 공간을 제거함으로써 테이블의 물리적 크기를 줄일 수 있다.
테이블 재구성의 특징은 다음과 같다.
테이블과 관련된 인덱스도 함께 재구성된다. (단, DISABLE/UNUSABLE 상태의 인덱스는 제외된다.)
OPEN 이상의 단계에서만 재구성을 수행할 수 있다.
재구성 대상 member는 inactive member 가 아니어야 한다.
READ ONLY 테이블에도 수행할 수 있다.
IMMUTABLE 테이블에도 수행할 수 있다.
Recyclebin 에 있는 테이블에도 수행할 수 있다.
다음 조건을 충족하지 못할 경우 재구성은 실패한다.
테이블 또는 관련 인덱스가 ONLINE 테이블스페이스에 존재해야 한다.
테이블은 USABLE 또는 ONLINE 상태여야 한다.
재구성은 기존에 사용하던 공간을 재활용하지 않고, 새로운 세그먼트를 생성하여 데이터를 복사하는 방식으로 진행된다. 따라서 추가 공간이 필요하며, 필요한 공간의 최대 크기는 기존 테이블이 사용하던 공간의 크기와 같다.
사용 예
다음은 <alter table reorganize statement> 구문을 수행하는 예이다.
gSQL> ALTER TABLE t1 REORGANIZE; Table altered.
호환성
SQL 표준에서는 reorganize 에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 ALTER TABLE을 참조한다.
ALTER TABLE name SET TRIGGER ORDER
기능
Table 에 생성한 trigger 들의 실행 순서를 변경한다.
구문
<alter table set trigger order statement> ::=
ALTER TABLE <table_name> SET TRIGGER ORDER <trigger_name> [, ...]
;사용 범위 및 접근 권한
<alter table set trigger order statement> 구문을 실행하기 위해 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
변경할 테이블의 이름이다. schema_name.table_name과 같이 테이블이 속한 스키마를 정의할 수 있으며, schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
<trigger name> [, ... ]
나열된 모든 trigger 들은 다음 조건을 만족해야 한다.
<table name> 에 생성된 trigger 여야 한다.
action timing( BEFORE / AFTER ) 이 동일해야 한다.
action orientation( FOR EACH ROW / FOR EACH STATEMENT ) 이 동일해야 한다.
설명
예를 들어, 테이블 t1 에 대해 다음과 같은 순서로 AFTER STATEMENT trigger 들이 생성된 경우,
생성 순서: trg1, trg2, trg3, trg4, trg5
실행 순서: trg1, trg2, trg3, trg4, trg5
ALTER TABLE t1 SET TRIGGER ORDER 구문을 사용하면 trigger 들의 실행 순서를 다음과 같이 변경할 수 있다.
ALTER TABLE t1 SET TRIGGER ORDER trg3
Trigger를 하나만 기술한 경우
실행 순서 : trg3, trg1, trg2, trg4, trg5
ALTER TABLE t1 SET TRIGGER ORDER trg1, trg3, trg5
Trigger 중 일부만 기술한 경우
실행 순서 : trg1, trg3, trg5, trg2, trg4
ALTER TABLE t1 SET TRIGGER ORDER trg5, trg4, trg3, trg2, trg1
모든 trigger를 기술한 경우
실행 순서 : trg5, trg4, trg3, trg2, trg1
사용 예
현재 테이블에 생성된 trigger 의 실행 순서가 다음과 같을 때
gSQL>
SELECT action_timing
, action_orientation
, action_order
, trigger_name
FROM information_schema.triggers
WHERE event_object_table = 'T1'
ORDER BY action_order;
ACTION_TIMING ACTION_ORIENTATION ACTION_ORDER TRIGGER_NAME
------------- ------------------ ------------ ------------
AFTER STATEMENT 1 TRG1
AFTER STATEMENT 2 TRG2
AFTER STATEMENT 3 TRG3
AFTER STATEMENT 4 TRG4
AFTER STATEMENT 5 TRG5
5 rows selected.<alter table set trigger order statement> 구문을 실행하면 trigger 의 실행 순서가 다음과 같이 변경된다.
gSQL> ALTER TABLE t1 SET TRIGGER ORDER trg5, trg4, trg3, trg2, trg1;
Table Altered
gSQL>
SELECT action_timing
, action_orientation
, trigger_name
, action_order
FROM information_schema.triggers
WHERE event_object_table = 'T1'
ORDER BY action_order;
ACTION_TIMING ACTION_ORIENTATION ACTION_ORDER TRIGGER_NAME
------------- ------------------ ------------ ------------
AFTER STATEMENT 1 TRG5
AFTER STATEMENT 2 TRG4
AFTER STATEMENT 3 TRG3
AFTER STATEMENT 4 TRG2
AFTER STATEMENT 5 TRG1
5 rows selected.호환성
SQL 표준에는 trigger 들의 실행 순서를 변경하는 구문이 존재하지 않는다.
ALTER TABLE name SET UNUSED COLUMN
기능
테이블 column을 제거한다.
구문
<drop column definition> ::=
ALTER TABLE table_name <drop column clause>
;
<drop column clause> ::=
SET UNUSED [ COLUMN ] <column_name_list> [ <drop behavior> ]
<column name list> ::=
column_name
| ( column_name [, ...] )
<drop behavior> ::=
RESTRICT
| CASCADE
| CASCADE CONSTRAINTS사용 범위 및 접근 권한
<drop column definition> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
변경할 테이블의 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
SET UNUSED [ COLUMN ]
해당 column들을 사용하지 않도록 설정한다.
column_name_list
한 개 이상의 삭제될 column 이름이다.
예: ALTER TABLE t1 SET UNUSED COLUMN c1
예: ALTER TABLE t1 SET UNUSED COLUMN (c1, c2)
column_name
삭제할 column의 이름이다.
해당 column 을 포함하는 인덱스도 함께 삭제한다.
CREATE INDEX idx1 ON t1(c1, c2); --# idx1 인덱스도 함께 삭제 ALTER TABLE t1 SET UNUSED COLUMN (c1);
해당 column 들로 구성된 제약 조건도 함께 삭제한다.
CREATE TABLE t1 ( c1 INTEGER PRIMARY KEY
, c2 INTEGER );
--# primary key 도 함께 삭제
ALTER TABLE t1 SET UNUSED COLUMN (c1);해당 column 을 명시한 trigger 도 함께 삭제한다.
CREATE TRIGGER trigger1
AFTER UPDATE OF c1 ON t1
BEGIN
NULL;
END;
/
--# update of trigger 도 함께 삭제
ALTER TABLE t1 SET UNUSED COLUMN (c1);drop behavior
생략할 경우, 기본값은 RESTRICT 이다.
CASCADE 와 CASCADE CONSTRAINTS 는 동일한 의미이다.
제거 대상 column과 다른 column을 함께 포함하는 제약 조건이 존재할 경우, CASCADE CONSTRAINTS 를 명시해야 한다.
CREATE TABLE t1 ( c1 INTEGER
, c2 INTEGER
, UNIQUE(c1, c2) );
--# error
ALTER TABLE t1 SET UNUSED COLUMN c1;
--# success
ALTER TABLE t1 SET UNUSED COLUMN c1 CASCADE CONSTRAINTS;Column을 제거할 때 함께 제거되는 제약 조건을 참조하는 FOREIGN KEY 가 존재할 경우, CASCADE CONSTRAINTS 를 명시해야 한다.
CREATE TABLE parent ( pk INTEGER PRIMARY KEY
, c1 INTEGER );
CREATE TABLE child ( fk INTEGER REFERENCES parent(pk)
, c2 INTEGER );
--# error
ALTER TABLE parent SET UNUSED COLUMN ( pk );
--# success
ALTER TABLE parent SET UNUSED COLUMN ( pk ) CASCADE CONSTRAINTS;설명
SET UNUSED COLUMN은 data를 물리적으로 제거하지 않으므로 row의 개수에 관계없이 일정한 성능을 보장한다.
사용 예
다음은 해당 column을 사용하지 않도록 설정하는 예이다.
gSQL> ALTER TABLE t1 SET UNUSED COLUMN ( addr ); Table altered.
호환성
SQL 표준에서는 다음과 같은 절을 정의하지 않고 있다.
SET UNUSED
CASCADE CONSTRAINTS
다수의 column 나열
Feature ID | 설명 | 지원 여부 |
|---|---|---|
F033 | ALTER TABLE statement: DROP COLUMN clause | X |
참조
관련 내용은 다음을 참조한다.
ALTER TABLE name SPLIT SHARD
기능
Cluster 환경에서 테이블의 특정 shard를 split하여 재배치한다.
구문
<alter table split shard statement> ::=
ALTER TABLE table_name SPLIT SHARD source_shard_name
INTO ( <split shard placement> [, ...] )
;
<split shard placement> ::=
<split shard bound def> AT CLUSTER GROUP dest_group_name
<split shard bound def> ::=
<split list shard def>
| <split range shard def>
<split list shard def> :=
SHARD dest_shard_name VALUES IN ( <split list value clause> )
<split list value clause> :=
<split list value> [, ...]
<split list value> :=
constant
| NULL
<split range shard def> :=
SHARD dest_shard_name VALUES LESS THAN ( <split range value clause> )
<split range value clause> :=
<split range value> [, ...]
<split range value> :=
constant사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter table split shard statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
테이블 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다. 해당 테이블이 cluster group specific이고 list shard 또는 range shard인 경우에만 구문을 수행할 수 있다.
source_shard_name
Split할 원본 shard 이름이다. 해당 테이블에 shard가 존재하지 않을 경우 구문을 수행할 수 없다.
<split shard placement>
원본 shard를 split하여 재배치할 대상 shard를 정의한다.
<split shard bound def>
Split 될 대상 shard의 bound를 정의한다.
다음 두 가지 bound def 중 하나로 정의할 수 있다.
<split list shard def>
<split range shard def>
<split list shard def>
list shard를 위한 split shard bound를 정의한다.
dest_shard_name
대상 shard 이름이다.
<split list value clause>
<split list value>는 상수값이어야 한다.
<split list value>는 NULL 값을 사용할 수 없다.
<split list value>는 DEFAULT를 사용할 수 없다.
S1 : ( 1, 11, 21, 31, NULL ) SPLIT SHARD S1 INTO ( <split list value clause> .. )
(O) SHARD S11 VALUES IN ( 1 )
(O) SHARD S11 VALUES IN ( 1, NULL )
(O) SHARD S11 VALUES IN ( 1, 11, 21, 31 )
(X) SHARD S11 VALUES IN ( 2 )
(X) SHARD S11 VALUES IN ( DEFAULT )
(X) SHARD S11 VALUES IN ( 1, 11, 21, 31, NULL )
<split range shard def>
Range shard를 위한 split shard bound를 정의한다.
<split range value clause>
<split list value>는 상수값이어야 한다.
<split list value>는 NULL 값을 사용할 수 없다.
<split list value>는 MAXVALUE를 사용할 수 없다.
S1 : ( 100, 100 ), S2 : ( 50, 50 ) SPLIT SHARD S1 INTO ( <split range value clause> .. )
(O) SHARD S11 VALUES IN ( 50, 100 )
(O) SHARD S11 VALUES IN ( 100, 50 )
(O) SHARD S11 VALUES IN ( 60, 60 )
(X) SHARD S11 VALUES IN ( 50, NULL )
(X) SHARD S11 VALUES IN ( 50, 50 )
(X) SHARD S11 VALUES IN ( 100, 100 )
(X) SHARD S11 VALUES IN ( 100, 110 )
(X) SHARD S11 VALUES IN ( MAXVALUE, 100 )
dest_group_name
Split 된 shard가 배치될 cluster group의 이름이다.
설명
특정 테이블의 특정 shard를 분산하여 임의의 cluster group에 배치한다. 특정 shard에 해당하는 레코드가 많거나 특정 group member에 부하가 편중될 때 shard를 분산하여 레코드와 부하를 분산하기 위해 사용된다.
사용 예
다음은 <alter table split shard statement> 구문을 수행하는 예이다.
gSQL> ALTER TABLE t1 SPLIT SHARD shard1 INTO ( SHARD shard11 VALUES IN ( 11 ) AT CLUSTER GROUP G2 ); Table altered. gSQL> ALTER TABLE t1 SPLIT SHARD shard1 INTO ( SHARD shard11 VALUES LESS THAN ( 11 ) AT CLUSTER GROUP G2 ); Table altered.
호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER TABLE name STORAGE
기능
테이블의 물리적 속성을 변경한다.
구문
<alter table physical attribute statement> ::=
ALTER TABLE table_name
[ <physical attribute clause> ]
| [ STORAGE ( <segment attr clause> [...] ) ]
;
<physical attribute clause> ::=
PCTFREE integer
| PCTUSED integer
| INITRANS integer
| MAXTRANS integer
<segment attr clause> ::=
NEXT <size_clause>
| MAXSIZE <size_clause>
<size clause> ::=
integer [ K | M | G | T ]사용 범위 및 접근 권한
<alter table physical attribute statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
변경할 테이블 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
<physical attribute clause>
테이블을 구성하는 page의 물리적 속성을 변경한다. 이미 할당된 page에는 적용되지 않으며 새로 할당받는 page에 적용된다. 자세한 설명은 CREATE TABLE 구문의 <table physical attribute clause> 절을 참조한다.
<segment attr clause>
세그먼트를 구성하는 extent의 물리적 속성을 변경한다. 이미 할당된 extent에는 적용되지 않으며, 새로 할당받는 extent에 적용된다.
MAXSIZE integer
할당될 수 있는 세그먼트 공간의 크기를 변경한다.
이미 할당되어 있는 공간보다 작은 크기를 지정하면 에러가 발생한다.
설명
각 구문별 사용 규칙을 참조한다.
사용 예
다음은 테이블의 물리적 속성을 변경하는 예이다.
gSQL> ALTER TABLE t1 PCTFREE 10 PCTUSED 40 STORAGE ( NEXT 10M MAXSIZE 100M ); Table altered.
호환성
SQL 표준에서는 테이블의 물리적 속성에 대하여 정의하지 않고 있다.
참조
관련 내용은 ALTER TABLE을 참조한다.
ALTER TABLE name SYNCHRONIZE
기능
기존에 배치되어 있는 테이블의 shard들을 원격으로 동기화한다.
구문
<alter table synchronize statement> ::=
ALTER TABLE table_name SYNCHRONIZE
[ ONLINE | OFFLINE ]
[ LOGGING | NOLOGGING ]
[ <scan partition> ]
[ <parallel clause> ]
;
<scan partition> ::=
SCAN PARTITION integer
<parallel clause> ::=
NOPARALLEL
| PARALLEL [ integer ]사용 범위 및 접근 권한
Cluster system에서 수행할 수 있다.
<alter table synchronize statement> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
테이블의 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
[ ONLINE | OFFLINE ]
테이블의 shard를 동기화할 때 DML을 허용할지 여부를 결정한다
ONLINE
INSERT, UPDATE, DELETE를 허용한다.
OFFLINE
INSERT, UPDATE, DELETE를 허용하지 않는다.
생략할 경우, 기본값은 ONLINE 이다.
[ LOGGING | NOLOGGING ]
테이블을 동기화하는 동안 기록되는 로그의 양을 지정한다.
LOGGING
테이블 동기화 과정에서 모든 로그를 기록한다.
NOLOGGING
테이블 동기화 과정에서 최소한의 로그만 기록한다.
생략할 경우, 기본값은 LOGGING 이다.
NOLOGGING 옵션을 사용하면 redo log가 기록되지 않는다. 따라서 synchronize 수행 후 서버가 비정상적으로 종료되면 해당 테이블은 unusable 상태가 된다. 이를 방지하려면 synchronize 후에 CHECKPOINT 구문을 수행해야 한다.
<scan partition>
shard의 partition 개수를 지정한다.
partition 개수 만큼 shard를 분할하여 원격 서버와 동기화 한다.
integer는 0부터 사용할 수 있으며 최대값은 1000이다.
생략할 경우, ONLINE_DDL_SCAN_PARTITION 프로퍼티를 따른다.
integer가 parallel integer 보다 작은 경우에는 parallel integer와 같은 값으로 보정된다.
<parallel clause>
테이블을 동기화할 때 사용할 thread 개수를 지정한다.
NOPARALLEL
테이블을 병렬로 동기화하지 않는다.
PARALLEL [integer]
테이블을 병렬로 동기화한다.
integer는 0부터 사용할 수 있으며 최대값은 64이다.
integer가 생략된 경우는 0이다.
integer가 0인 경우에는 시스템이 최적값을 결정한다.
설명
테이블 동기화는 기존에 배치되어 있는 오프라인 된 shard들을 동기화하여 정합성을 복구한다. <alter table rebalance statement>와는 달리 inactive cluster member가 있어도 수행할 수 있다.
다음 조건들을 만족하지 못하면 실패한다.
Cloned 테이블의 shard들을 동기화 하려면 클러스터 시스템 내에서 적어도 하나의 멤버에 cloned 테이블의 온라인 replica가 존재해야 한다.
Sharded 테이블의 shard들을 동기화 하려면 그룹 당 적어도 하나의 멤버에 해당 sharded 테이블의 온라인 replica가 존재해야 한다.
예를 들어 sharded 테이블 t1의 cluster group G3에 있는 모든 replica들이 오프라인 상태일 경우 다음과 같은 에러가 발생한다.
gSQL> ALTER TABLE t1 SYNCHRONIZE; ERR-42000(16546): sharded table "PUBLIC"."T1" must have at least one online replica of group 'G3'
모든 테이블들의 shard를 동기화하려면 <alter database synchronize statement>를 수행한다.
사용 예
다음은 테이블 t1에 대해서 <alter table synchronize statement> 구문을 수행하는 예이다.
gSQL> ALTER TABLE t1 SYNCHRONIZE; Table altered.
호환성
SQL 표준에서는 cluster에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER TABLE name USABLE
기능
unusable 상태의 테이블을 usable 상태로 변경한다.
구문
<alter table usable statement> ::=
ALTER TABLE table_name USABLE
;사용 범위 및 접근 권한
Cluster system 또는 standalone system 에서 수행할 수 있다.
<alter table usable statement> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.
해당 테이블에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
테이블이 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
table_name
테이블의 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
unusable 상태의 테이블을 usable 상태로 변경한다. 이미 usable 상태인 경우에도 정상적으로 성공한 것으로 판단한다. usable 상태로 변경할 때 테이블과 연관된 인덱스들을 모두 rebuild 한다. 단, offline 상태의 tablespace 에 저장된 인덱스는 rebuild 하지 않는다.
unusable 상태의 테이블은 다음과 같은 경우에 생성될 수 있다.
nologging 으로 append insert 실행 후, checkpoint 없이 shutdown abort 를 실행한 경우
nologging 으로 append insert 실행 후, 이전에 백업한 데이터 파일을 이용하여 복구한 경우
ALTER DATABASE REGISTER 구문으로 테이블을 IRRECOVERABLE SEGMENT로 등록한 후 데이터베이스를 startup 한 경우
<alter table usable statement> 는 inactive cluster member가 있는 경우에도 수행할 수 있다. 다만, 테이블에 저장된 페이지 중에 논리적으로 손상된 페이지가 있으면 구문은 실패하며, 다음과 같은 오류가 발생한다.
gSQL> ALTER TABLE t1 USABLE; ERR-42000(16677): unable to set table to 'usable' state due to remaining corrupted pages.
사용 예
다음은 <alter table usable statement> 구문을 수행하는 예이다.
gSQL> ALTER TABLE t1 USABLE; Table altered.
호환성
SQL 표준에서는 usable 세그먼트에 대한 개념을 정의하지 않고 있다.
ALTER TABLESPACE
기능
테이블스페이스의 정의를 변경한다.
구문
<alter tablespace statement> ::=
<rename tablespace statement>
| <backup tablespace statement>
| <on/offline tablespace statement>
| <add file statement>
| <drop file statement>
| <rename datafile statement>
;사용 범위 및 접근 권한
<alter tablespace statement> 구문을 수행하려면 사용자에게 database에 대한 ALTER TABLESPACE 권한이 있어야 한다.
구문 규칙 및 파라미터
<rename tablespace statement>
테이블스페이스의 이름을 변경한다. 자세한 내용은 ALTER TABLESPACE name RENAME TO 구문을 참조한다.
<backup tablespace statement>
테이블스페이스를 백업한다. 자세한 내용은 ALTER TABLESPACE name BACKUP 구문을 참조한다.
<on-offline tablespace statement>
테이블스페이스의 모든 파일을 online 또는 offline으로 변경한다. 자세한 내용은 ALTER TABLESPACE name [ONLINE|OFFLINE] 구문을 참조한다.
<add file statement>
테이블스페이스에 파일을 추가한다. 자세한 내용은 ALTER TABLESPACE name ADD [DATAFILE|MEMORY] 구문을 참조한다.
<drop file statement>
테이블스페이스의 파일을 제거한다. 자세한 내용은 ALTER TABLESPACE name DROP [DATAFILE|MEMORY] 구문을 참조한다.
<rename datafile statement>
데이터 테이블스페이스의 데이터 파일 이름을 변경한다. 자세한 내용은 ALTER TABLESPACE name RENAME DATAFILE 구문을 참조한다.
설명
ALTER TABLESPACE 구문은 다른 Data Definition Language (DDL)과 달리 ROLLBACK 할 수 없고 구문을 수행한 transaction이 자동으로 COMMIT 된다.
사용 예
각 세부 구문의 사용 예를 참조한다.
호환성
SQL 표준에서는 테이블스페이스 개념을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER TABLESPACE name ADD [DATAFILE|MEMORY]
기능
테이블스페이스의 공간을 확장한다.
구문
<add space statement> ::=
ALTER TABLESPACE tablespace_name ADD <space specification>
[AT <domain name>]
;
<space specification> ::=
MEMORY <memory clause> [, ...]
| DATAFILE <add datafile clause> [, ...]
<size clause> ::=
integer [ K | M | G | T ]
<memory clause>
'memory_name' { SIZE <size clause> }
<add datafile clause> ::=
'filename'
{ SIZE <size clause> | REUSE | SIZE <size clause> REUSE }
[ <autoextend clause> ]
<autoextend clause>
AUTOEXTEND { ON [ <next size clause> ] [ <max size clause> ] | OFF }
<next size clause>
NEXT <size clause>
<max size clause>
MAXSIZE { <size clause> | UNLIMITED }사용 범위 및 접근 권한
<add space statement> 구문을 수행하려면 사용자에게 ALTER TABLESPACE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<add space statement>
테이블스페이스에 공간을 추가한다.
OFFLINE 테이블스페이스에는 공간을 추가할 수 없다.
tablespace_name
공간을 추가할 테이블스페이스의 이름이다.
<file specification>
테이블스페이스의 유형에 따라 다음과 같은 구문을 사용해야 한다.
메모리 데이터 테이블스페이스
DATAFILE <add datafile clause>
메모리 임시 테이블스페이스
MEMORY <memory clause>
<add datafile clause>
추가할 메모리 데이터 파일을 정의한다.
'filename'
데이터를 저장 관리할 파일의 이름이다.
메모리 데이터에 대한 체크포인트 이미지를 저장할 공간이다.
filename은 새로운 파일이거나 이미 존재하는 파일일 수 있다.
filename의 길이는 1024 바이트보다 작아야 한다.
SIZE <size clause>
새로운 파일일 경우 SIZE 절을 이용해 초기 크기를 지정한다.
파일이 이미 존재할 경우 에러가 발생한다.
파일의 크기는 최소 1 M ~ 최대 30 G 까지 지정할 수 있다.
REUSE
이미 존재하는 파일일 경우 REUSE 절을 이용한다.
파일이 존재하지 않을 경우 새로운 파일을 생성한다.
새로 생성되는 파일의 사이즈는
데이터 테이블스페이스의 경우 MEMORY_DATA_TABLESPACE_SIZE 프로퍼티에 의해 결정되고
임시 테이블스페이스의 경우 MEMORY_TEMP_TABLESPACE_SIZE 프로퍼티에 의해 결정된다.
SIZE <size clause> REUSE
SIZE 절과 REUSE 절을 모두 명시할 경우 filename의 존재 여부에 따라 다음과 같이 작동한다.
새로운 filename일 경우 SIZE 절을 이용해 초기 파일 크기를 지정한다.
이미 존재하는 filename일 경우 기존 파일을 이용하여 SIZE 절의 값으로 크기를 조정한다.
<memory clause>
<size clause>
추가할 메모리를 정의한다.
자세한 내용은 CREATE MEMORY TEMPORARY TABLESPACE 구문의 <memory clause>를 참조한다.
<autoextend clause>
디스크 테이블스페이스의 데이터 파일이 추가될 때 자동 확장 속성을 설정한다. 자동 확장 속성을 ON 또는 OFF로 설정한다. ON으로 설정하면 자동 확장 크기와 데이터 파일의 최대 크기를 지정할 수 있다.
<next size clause>
현재 사용 중인 데이터 파일에 더 이상 사용할 공간이 없을 때 확장할 크기를 지정한다.
<max size clause>
데이터 파일이 확장될 수 있는 최대 크기를 지정한다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
각 구문별 사용 규칙을 참조한다.
사용 예
다음은 테이블스페이스에 data file을 추가하는 예이다.
gSQL> ALTER TABLESPACE space1 ADD DATAFILE 'test_file_a2.dbf' SIZE 10M REUSE; Tablespace altered.
호환성
SQL 표준에서는 테이블스페이스 개념을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER TABLESPACE name BACKUP
기능
테이블스페이스를 backup 하기 위해 backup이 가능한 상태와 불가능한 상태로 전환한다.
구문
<backup tablespace statement> ::=
<tablespace begin backup statement>
| <tablespace end backup statement>
| <tablespace incremental backup statement>
;
<tablespace begin backup statement> ::=
ALTER TABLESPACE tablespace_name BEGIN BACKUP [AT <domain_name>];
<tablespace end backup statement> ::=
ALTER TABLESPACE tablespace_name END BACKUP [AT <domain_name>];
<tablesapce incremental backup statement> ::=
ALTER TABLESPACE tablespace_name
BACKUP INCREMENTAL <incremental backup option>
[ FORMAT 'format string' ] [ PIECE integer ]
[ <parallel clause> ] [AT <domain_name>];
<incremental backup option> ::=
LEVEL integer [ CUMULATIVE | DIFFERENTIAL ]
<parallel clause> ::=
NOPARALLEL
| PARALLEL [ integer ]사용 범위 및 접근 권한
<backup space statement> 구문을 수행하려면 사용자에게 ALTER TABLESPACE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<tablespace begin backup statement>
테이블스페이스를 백업 가능한 상태로 설정한다.
생성되어 사용 중인 테이블스페이스를 백업 가능한 상태로 설정한다.
OFFLINE/ temporary 테이블스페이스는 backup 상태는 전환할 수 없다.
tablespace_name
Backup 상태를 전환할 테이블스페이스의 이름이다.
<tablespace end backup statement>
테이블스페이스를 백업이 불가능한 상태로 설정한다.
<tablesapce incremental backup statement>
테이블스페이스의 증분 백업을 수행한다. 데이터베이스가 OPEN 상태이고, ARCHIVELOG로 운영되어야 한다.
<incremental backup option>
'integer'는 0 ~ 4 까지 지정할 수 있다.
'LEVEL 0'는 CUMULATIVE나 DIFFERENTIAL을 지정할 수 없다.
CUMULATIVE | DIFFERENTIAL
CUMULATIVE
'integer'가 n이면 가장 최근에 'LEVEL 0' ~ 'LEVEL n-1'까지 백업한 이후 변경된 모든 페이지들을 백업한다.
DIFFERENTIAL
'integer'가 n이면 가장 최근에 'LEVEL 0' ~ 'LEVEL n'까지 백업한 이후 변경된 모든 페이지들을 백업한다.
생략되면 DIFFERENTIAL이 기본으로 지정된다.
FORMAT 'format string'
backup 파일 이름의 형식을 지정한다.
'format string' 내에 format specifier 를 사용할 수 있다.
FORMAT 을 지정하지 않은 경우는 'tablespace_D%T_T%t_L%l_Q%q_P%p.inc' 를 format string 으로 사용한다.
format specifier
%d : 데이터베이스 시그니쳐
%q : 백업 순차 번호
%l : 백업 레벨
%t : 시간(HHMMSS)
%m : 클러스터 멤버 이름
%g : 클러스터 그룹 이름
%D : 요일(DD)
%M : 월(MM)
%N : 테이블스페이스 이름
%p : 백업 파일의 조각(Piece) 번호
%T : 날짜(YYYYMMDD)
%Y : 년(YYYY)
%% : Percent(%) 문자
PIECE integer
분할될 백업 파일의 개수를 지정한다.
'format string' 에 %p 가 포함되어 있지 않으면 지정된 integer 값은 무시하고 1 값을 갖는다.
<parallel clause>
백업시 사용할 thread의 개수를 지정한다.
NOPARALLEL
병렬로 백업을 수행하지 않는다.
PARALLEL [integer]
병렬로 백업을 수행한다.
integer는 1부터 사용할 수 있으며 최대값은 64이다.
integer가 생략된 경우는 1이다.
명시하지 않을 경우, 기본값은 NOPARALLEL이다.
대상 datafile 의 총 개수가 integer 보다 작은 경우는 datafile 개수만큼 병렬로 수행한다.
PIECE 의 개수가 병렬 개수보다 작은 경우는 PIECE 개수 만큼 병렬로 처리한다.
<domain_name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
테이블스페이스에 생성된 datafile을 백업한다. 테이블스페이스 전체를 백업하려면 BEGIN BACKUP을 수행한 후 OS의 파일 복사 기능을 사용하여 datafile들을 복사하고 나서 END BACKUP을 수행한다. 한편, 증분 백업 파일은 하나의 구문으로 BACKUP_DIR_1 property에 설정된 경로에 생성한다.
사용 예
다음은 DICTIONARY_TBS 테이블스페이스의 전체 백업 상태를 'ACTIVE'로 설정하는 예이다.
ALTER TABLESPACE DICTIONARY_TBS BEGIN BACKUP;
다음은 DICTIONARY_TBS 테이블스페이스의 전체 백업 상태를 'INACTIVE'로 설정하는 예이다.
ALTER TABLESPACE DICTIONARY_TBS END BACKUP;
다음은 DICTIONARY_TBS 테이블스페이스의 LEVEL 0 증분 백업을 만드는 예이다.
ALTER TABLESPACE DICTIONARY_TBS BACKUP INCREMENTAL LEVEL 0;
다음은 네 개의 thread로 backup을 수행하는 예로써 테이블스페이스 이름과 날짜와 조각 번호로 구성된 네 개의 backup 파일이 만들어진다.
ALTER TABLESPACE DICTIONARY_TBS BACKUP INCREMENTAL LEVEL 0 FORMAT 'backup_%N_%T_%p' PIECE 4 PARALLEL 4;
호환성
SQL 표준에서는 테이블스페이스 개념을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER TABLESPACE name DROP [DATAFILE|MEMORY]
기능
테이블스페이스의 공간을 축소한다.
구문
<drop space statement> ::=
ALTER TABLESPACE tablespace_name DROP <file specification>
[ AT <domain name> ]
;
<file specification> ::=
DATAFILE 'filename'
| MEMORY 'memory_name'사용 범위 및 접근 권한
<drop space statement> 구문을 수행하려면 사용자에게 ALTER TABLESPACE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
tablespace_name
변경할 테이블스페이스의 이름이다.
<file specification>
테이블스페이스의 유형에 따라 다음과 같은 구문을 사용해야 한다.
메모리 데이터 테이블스페이스
DATAFILE 'filename'
메모리 임시 테이블스페이스
MEMORY 'memory_name'
오프라인 테이블스페이스의 파일은 삭제할 수 없다.
테이블스페이스의 첫 번째 파일은 삭제할 수 없다.
한 번이라도 사용된 적이 있는 데이터 파일은 삭제할 수 없다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
각 구문별 사용 규칙을 참조한다.
사용 예
다음은 테이블스페이스의 파일을 제거하는 예이다.
gSQL> ALTER TABLESPACE space1 DROP DATAFILE 'test_file_f2.dbf'; Tablespace altered.
호환성
SQL 표준에서는 테이블스페이스 개념을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER TABLESPACE name [ONLINE|OFFLINE]
기능
테이블스페이스 상태를 변경한다.
구문
<on/off tablespace statement> ::=
ALTER TABLESPACE tablespace_name { ONLINE | OFFLINE [ NORMAL | IMMEIDATE ] }
[ AT <domain name> ]
;사용 범위 및 접근 권한
<on/off tablespace statement> 구문을 수행하려면 사용자에게 ALTER TABLESPACE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
ONLINE
OFFLINE 상태의 테이블스페이스를 ONLINE으로 변경한다.
OFFLINE NORMAL
ONLINE 상태의 테이블스페이스를 OFFLINE으로 변경한다.
OFFLINE으로 변경된 테이블스페이스는 일관된 (consistent) 상태이기 때문에 ONLINE 상태로 변경할 때 미디어 복구할 필요없다.
MOUNT 단계에서는 OFFLINE NORMAL을 사용할 수 없다.
OFFLINE IMMEDIATE
ONLINE 상태의 테이블스페이스를 OFFLINE으로 변경한다.
OFFLINE으로 변경된 테이블스페이스는 비일관적인 (inconsistent) 상태이기 때문에, ONLINE 상태로 변경할 때 미디어 복구해야 한다.
SYSTEM 테이블스페이스는 OFFLINE으로 변경할 수 없다.
OFFLINE IMMEDIATE는 미디어 복구를 필요로 하기 때문에 archive log mode에서만 수행할 수 있다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
각 구문별 사용 규칙을 참조한다.
클러스터 데이터베이스에서 OPEN 단계 이상일 경우, 테이블스페이스를 OFFLINE으로 전환하려면 해당 테이블스페이스에 포함된 모든 테이블이 OFFLINE 상태여야 한다.
따라서, 해당 구문을 수행하기 전에 반드시 ALTER TABLESPACE name OFFLINE TABLES 명령을 먼저 실행해야 한다.
사용 예
다음은 테이블스페이스를 OFFLINE으로 설정하는 예이다.
gSQL> ALTER TABLESPACE space1 OFFLINE; Tablespace altered.
다음은 MOUNT 단계에서 테이블스페이스에 OFFLINE NORMAL을 수행하여 실패하는 예이다.
gSQL> ALTER TABLESPACE space1 OFFLINE;
ERR-42000(16290): OFFLINE NORMAL is only allowed if the database is in OPEN phase :
ALTER TABLESPACE space1 OFFLINE
*
ERROR at line 1:
gSQL> ALTER TABLESPACE space1 OFFLINE NORMAL;
ERR-42000(16290): OFFLINE NORMAL is only allowed if the database is in OPEN phase :
ALTER TABLESPACE space1 OFFLINE NORMAL
*
ERROR at line 1:호환성
SQL 표준에서는 테이블스페이스 개념을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER TABLESPACE name OFFLINE TABLES
기능
테이블스페이스와 관련된 테이블들을 offline 상태로 변경한다.
구문
<alter tablespace offline tables statement> ::=
ALTER TABLESPACE tablespace_name OFFLINE TABLES [ <domain name> ]
;사용 범위 및 접근 권한
Cluster system 에서 수행할 수 있다.
<alter tablespace offline tables statement> 구문을 수행하려면 사용자에게 ALTER TABLESPACE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
<alter tablespace offline tables statement> 구문은 클러스터 데이터베이스이고 OPEN 단계에서는 ALTER TABLESPACE tablesapce_name OFFLINE을 실행하기 전에 반드시 수행해야 하는 구문이다.
해당 구문을 먼저 수행하지 않고 TABLESPACE OFFLINE 을 실행하면 다음과 같은 에러가 발생한다.
gSQL> ALTER TABLESPACE space1 OFFLINE; ERR-42000(16632): tables related to tablespace 'SPACE1' must be offline
Offline 상태로 변경되는 테이블들은 다음과 같다.
테이블스페이스에 저장된 테이블들
테이블스페이스에 저장된 인덱스들이 속한 테이블들
<alter tablespace offline tables statement>는 inactive member가 있어도 수행할 수 있다.
사용 예
다음은 <alter tablespace offline tables statement> 구문을 수행하는 예이다.
gSQL> ALTER TABLESAPCE space1 OFFLINE TABLES; Tablespace altered.
호환성
SQL 표준에서는 테이블스페이스 개념을 정의하지 않고 있다.
참조
관련 내용은 ALTER TABLESPACE name [ONLINE|OFFLINE]을 참조한다.
ALTER TABLESPACE name RENAME DATAFILE
기능
테이블스페이스를 구성하는 데이터 파일의 이름을 변경한다.
구문
<rename datafile statement> ::=
ALTER TABLESPACE tablespace_name RENAME DATAFILE <filename_list> TO <filename_list>
;
<filename_list> ::=
'filename' [ AT <domain name> ] [, ...]사용 범위 및 접근 권한
<rename datafile statement> 구문을 수행하려면 사용자에게 ALTER TABLESPACE ON DATABASE 권한이 있어야 한다.
TDS 모드이면서 데이터베이스가 OPEN인 상태에서는 온라인 테이블스페이스 파일을 변경할 수 없다. (임시 메모리 테이블스페이스는 제외된다.)
변경한 후에도 파일은 반드시 존재해야 한다.
구문 규칙 및 파라미터
tablespace_name
변경할 테이블스페이스의 이름이다.
'filename'
메모리 임시 테이블스페이스는 'memory_name'을 의미하며, 그 외의 테이블스페이스 종류는 'filename'을 의미한다.
<domain name>
구문을 수행할 멤버나 그룹의 이름이다. 지정하지 않은 경우에는 모든 그룹에 수행된다.
설명
테이블스페이스 상태에 따라 연산 가능 여부가 결정된다.
OFFLINE: MOUNT 단계나 OPEN 단계에서 수행 가능하다.
ONLINE: MOUNT 단계에서만 수행 가능하다.
사용 예
다음은 'test.dbf'를 'test1.dbf'로 변경하는 예이다.
gSQL> ALTER TABLESPACE TEST_TBS RENAME DATAFILE 'test.dbf' TO 'test1.dbf'; Tablespace altered.
호환성
SQL 표준에서는 테이블스페이스 개념을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER TABLESPACE name RENAME TO
기능
테이블스페이스의 이름을 변경한다.
구문
<rename tablespace statement> ::=
ALTER TABLESPACE tablespace_name RENAME TO <new_tablespace_name>
;사용 범위 및 접근 권한
<rename space statement> 구문을 수행하려면 사용자에게 ALTER TABLESPACE ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
tablespace_name
기존 테이블스페이스의 이름이다.
Built-in 테이블스페이스의 이름은 변경할 수 없다.
OFFLINE 테이블스페이스의 이름은 변경할 수 없다.
new_tablespace_name
새로운 테이블스페이스의 이름이다.
설명
Tablespace 이름이 변경되더라도 기존에 이미 해당 tablespace에 생성된 table, index 등은 변경할 필요없다.
사용 예
다음은 테이블스페이스의 이름을 변경하는 예이다.
gSQL> ALTER TABLESPACE space1 RENAME TO space2; Tablespace altered.
호환성
SQL 표준에서는 테이블스페이스 개념을 정의하지 않고 있다.
참조
관련 내용은 ALTER TABLESPACE를 참조한다.
ALTER USER
기능
데이터베이스 사용자 정의를 변경한다.
구문
<alter user statement> ::=
ALTER USER user_identifier <alter user action>
| ALTER USER PUBLIC <alter schema path>
;
<alter user action> ::=
<alter password>
| <alter profile>
| <password expire>
| <account lock>
| <alter default tablespace>
| <alter temporary tablespace>
| <alter index tablespace>
| <alter schema path>
<alter password> ::=
IDENTIFIED BY new_password [ REPLACE old_password ]
<alter profile> ::=
PROFILE { profile_name | DEFAULT | NULL }
<password expire> ::=
PASSWORD EXPIRE
<account lock> ::=
ACCOUNT { LOCK | UNLOCK }
<alter default tablespace> ::=
DEFAULT TABLESPACE tablespace_name
<alter temporary tablespace> ::=
TEMPORARY TABLESPACE tablespace_name
<alter index tablespace> ::=
INDEX TABLESPACE { tablespace_name | NULL }
<alter schema path> ::=
SCHEMA PATH ( { schema_name | CURRENT PATH } [, ...] )사용 범위 및 접근 권한
<alter user statement> 구문을 수행하려면 사용자에게 ALTER USER ON DATABASE 권한이 있어야 한다. 단, <alter password>는 사용자가 user_identifier와 동일할 경우에 권한 없이 수행할 수 있다.
구문 규칙 및 파라미터
user_identifier
변경할 사용자의 이름이다.
<alter password>
사용자의 password를 변경한다.
IDENTIFIED BY new_password
새로운 password로 암호화되어 저장된다.
password의 길이는 128 byte보다 작아야 한다.
password는 대소문자를 구별한다.
REPLACE old_password
ALTER USER ON DATABASE 권한이 있을 경우에는 생략 가능하다.
ALTER USER ON DATABASE 권한이 없을 경우에는 생략할 수 없다.
사용자와 user_identifier가 동일해야 한다.
<alter profile>
비밀번호 관리 정책을 위한 profile을 변경한다.
PROFILE profile_name
사용자가 생성한 profile_name을 할당한다.
PROFILE DEFAULT
기본 profile인 "DEFAULT"를 할당한다.
PROFILE NULL
Profile을 할당하지 않는다.
<password expire>
사용자의 비밀번호를 만료시킨다.
<account lock>
ACCOUNT LOCK
사용자 계정을 잠근다.
ACCOUNT UNLOCK
계정 잠금을 해제한다.
<alter default tablespace>
사용자의 기본 tablespace를 변경한다. tablespace_name은 data tablespace여야 한다.
<alter temporary tablespace>
사용자의 temporary tablespace를 변경한다. tablespace_name은 temporary tablespace여야 한다.
<alter index tablespace>
사용자의 index tablespace를 변경한다.
INDEX TABLESPACE tablespace_name을 지정한다.
Data tablespace를 지정한 경우, LOGGING 인덱스가 된다.
Temporary tablespace를 지정한 경우, NOLOGGING 인덱스가 된다.
INDEX TABLESPACE NULL
Index tablespace를 지정하지 않는다.
<alter schema path>
사용자의 스키마 접근 경로를 변경한다. 사용자의 SQL 구문에 schema가 명시되지 않았을 경우 스키마 접근 경로는 객체의 naming resolution을 위한 스키마 순서에 따라 결정된다.
스키마 이름이 기존에 스키마 접근 경로에 나열된 스키마 이름과 동일할 경우에는 추가적으로 반영되지 않는다.
다음은 ALTER USER u1 SCHEMA PATH ( u1, s2, public ); 구문을 수행했을 때 schema에 존재하는 객체의 예이다.
스키마 이름 | u1 | s2 | public |
|---|---|---|---|
- | t1 | - | t1 |
- | - | t2 | - |
- | - | - | t3 |
다음과 같이 u1 사용자가 수행하는 schema가 명시되지 않은 객체의 이름은 SCHEMA PATH에 의해 다음과 같이 해석된다.
CREATE 구문
CREATE TABLE t1 ( c1 INTEGER );
에러 : CREATE TABLE u1.t1 ( c1 INTEGER );
CREATE TABLE t2 ( c1 INTEGER );
수행 : CREATE TABLE u1.t2 ( c1 INTEGER );
SELECT 구문
SELECT * FROM t1;
수행 : SELECT * FROM u1.t1;
SELECT * FROM t2;
수행 : SELECT * FROM s2.t2;
SELECT * FROM t3;
수행 : SELECT * FROM public.t3;
CURRENT PATH
현재 사용자의 schema path 이다.
다음 예와 같이 CURRENT PATH를 이용해 기존의 schema path를 유지하면서 새로운 schema path를 추가할 수 있다.
u1의 현재 schema path
(u1, public)
구문 수행
ALTER USER u1 SCHEMA PATH ( s1, CURRENT PATH, s2 );
u1의 schema path는 다음과 같이 변경된다.
(s1, u1, public, s2)
ALTER USER PUBLIC <alter schema path>
PUBLIC 계정의 schema path를 변경한다. PUBLIC 계정의 schema path는 모든 사용자의 schema path에 포함된다.
PUBLIC 계정에 최초로 부여된 schema path는 다음과 같다.
DICTIONARY_SCHEMA
INFORMATION_SCHEMA
DEFINITION_SCHEMA
PERFORMANCE_VIEW_SCHEMA
FIXED_TABLE_SCHEMA
설명
각 구문별 사용 규칙을 참조한다.
사용 예
다음은 사용자의 password를 변경하는 예이다.
gSQL> ALTER USER u1 IDENTIFIED BY new_password; User altered.
다음의 사용자에게 profile을 할당하는 예이다.
gSQL> ALTER USER u1 PROFILE prof1; User altered. gSQL> COMMIT; Commit complete.
다음은 사용자의 profile을 제거하는 예이다.
gSQL> ALTER USER u1 PROFILE NULL; User altered. gSQL> COMMIT; Commit complete.
다음은 사용자의 비밀번호를 만료시키는 예이다.
gSQL> ALTER USER u1 PASSWORD EXPIRE; User altered. gSQL> COMMIT; Commit complete.
다음은 사용자의 계정잠금을 해제하는 예이다.
gSQL> ALTER USER u1 ACCOUNT UNLOCK; User altered. gSQL> COMMIT; Commit complete.
다음은 사용자의 DEFAULT TABLESPACE를 변경하는 예이다.
gSQL> ALTER USER u1 DEFAULT TABLESPACE mem_data_tbs; User altered.
다음은 사용자의 TEMPORARY TABLESPACE를 변경하는 예이다.
gSQL> ALTER USER u1 TEMPORARY TABLESPACE mem_temp_tbs; User altered.
다음은 사용자의 INDEX TABLESPACE를 변경하는 예이다.
gSQL> ALTER USER u1 INDEX TABLESPACE mem_temp_tbs; User altered.
다음은 사용자의 schema path를 변경하는 예이다.
gSQL> ALTER USER u1 SCHEMA PATH ( s1, CURRENT PATH ); User altered.
호환성
SQL 표준에서 user의 개념은 다루고 있지만 user의 생성, 변경 및 삭제와 관련된 SQL 구문은 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ALTER VIEW
기능
View 정의를 변경한다.
구문
<alter view statement> ::=
ALTER VIEW view_name <alter view action>
;
<alter view action> ::=
COMPILE사용 범위 및 접근 권한
<alter view statement> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.
해당 view에 대해 (ALTER 또는 CONTROL TABLE) ON TABLE
View가 속한 스키마에 대해 (ALTER TABLE 또는 CONTROL SCHEMA) ON SCHEMA
ALTER ANY TABLE ON DATABASE
구문 규칙 및 파라미터
view_name
변경할 view의 이름이다. schema_name.view_name과 같이 view가 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
COMPILE
View를 다시 컴파일한다. View column에 부여한 COMMENT는 초기화된다.
설명
View가 참조하는 테이블이나 view가 변경되거나 삭제되면 해당 view도 영향을 받는다.
이런 정보는 INFORMATION_SCHEMA.VIEWS를 통해 조회할 수 있다.
IS_COMPILED column
TRUE: View가 정상적으로 생성되었다.
FALSE: 에러가 존재하는 상태에서 FORCE 옵션으로 view가 생성되었다.
IS_AFFECTED column
TRUE : View가 참조하는 테이블 또는 view가 변경되었다.
FALSE: View가 생성되고 COMPILE 된 후에 view가 참조하는 테이블이나 view가 변경되지 않았다.
사용 예
다음은 view가 참조하는 table 변경에 영향을 받은 view를 COMPILE 하는 예이다.
gSQL> SELECT TABLE_NAME, IS_AFFECTED
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_SCHEMA = 'PUBLIC'
AND TABLE_NAME = 'V1';
TABLE_NAME IS_AFFECTED
---------- -----------
V1 TRUE
1 row selected.
gSQL> ALTER VIEW v1 COMPILE;
View altered.
COMMIT;
Commit complete.
gSQL> SELECT TABLE_NAME, IS_AFFECTED
FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_SCHEMA = 'PUBLIC'
AND TABLE_NAME = 'V1';
TABLE_NAME IS_AFFECTED
---------- -----------
V1 FALSE
1 row selected.호환성
SQL 표준에서는 <alter view statement> 구문을 정의하지 않고 있다.
참조
관련 내용은 다음을 참조한다.
ANALYZE SYSTEM
기능
시스템의 통계 정보를 제어한다.
구문
<analyze system statement> ::=
ANALYZE SYSTEM [ <analyze action> ]
;
<analyze action> ::=
COMPUTE STATISTICS
| DELETE STATISTICS사용 범위 및 접근 권한
<analyze system statement> 구문을 수행하려면 사용자에게 ANALYZE ANY ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
<analyze action>
생략할 경우 기본값은 COMPUTE STATISTICS 이다.
COMPUTE STATISTICS
시스템과 관련된 다음과 같은 통계 정보를 구축한다.
CPU_OPS (Operations Per Second)
CPU가 초당 처리할 수 있는 operation의 개수이다.
NETWORK_IOPS (IO operations Per Second)
Cluster인 경우에 유효하다.
초당 처리할 수 있는 network IO 횟수이다.
BUFFER_MISS_PERCENT
디스크 buffer miss 확률이다.
DELETE STATISTICS
시스템 통계 정보를 삭제한다.
설명
구축한 시스템 통계 정보는 질의 처리를 위한 최적화 과정의 비용을 계산하기 위해 사용한다.
사용 예
다음은 <analyze system statement> 구문을 사용하여 시스템 통계 정보를 구축하는 예이다.
gSQL> ANALYZE SYSTEM COMPUTE STATISTICS; analyzed.
다음은 구축된 시스템 통계 정보를 조회하는 예이다.
gSQL> SELECT * FROM DBA_STAT_SYSTEM; CPU_OPS NETWORK_IOPS NETWORK_BUFSIZE BUFFER_MISS_PERCENT LAST_ANALYZED -------- ------------ --------------- ------------------- --------------------------- 53000412 2914 65536 99 2017-03-30 16:49:42.200000 1 row selected.
호환성
SQL 표준에서는 통계 정보에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 ANALYZE TABLE을 참조한다.
ANALYZE TABLE
기능
테이블의 통계 정보를 제어한다.
구문
<analyze table statement> ::=
ANALYZE TABLE table_name
[ <parallel clause> ]
[ <analyze action> ]
;
<parallel clause> ::=
NOPARALLEL
| PARALLEL [thread_count]
<analyze action> ::=
COMPUTE STATISTICS [ <for_clause> | <for_clause_extension> ]
| ESTIMATE STATISTICS <sample_clause> [ <for_clause> | <for_clause_extension> ]
| DELETE STATISTICS
| DELETE STATISTICS <for_clause_extension>
<sample_clause>
SAMPLE row_count ROWS
| SAMPLE percentage PERCENT
<for_clause>
FOR ALL COLUMNS
| FOR ALL INDEXED COLUMNS
| FOR COLUMNS column_name [, ...]
| FOR ALL INDEXES
| FOR INDEXES index_name [, ...]
<for_clause_extension>
FOR COLUMN GROUPS( column_name [, ...] )사용 범위 및 접근 권한
<analyze table statement> 구문을 수행하려면 사용자에게 ANALYZE ANY ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
table_name
테이블 이름이다. schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.
<parallel clause>
분석 과정에서 사용할 thread 개수를 지정한다. 명시하지 않을 경우, 기본값은 PARALLEL 이다.
NOPARALLEL
병렬로 분석하지 않는다.
PARALLEL [thread_count]
병렬로 분석한다.
thread_count 값은 0 부터 사용할 수 있으며 최대값은 64 이다.
thread_count 값이 0이거나 생략된 경우 시스템의 CPU 개수에 의해 결정된다.
<analyze action>
생략할 경우 기본값은 COMPUTE STATISTICS 이다.
COMPUTE STATISTICS
전수 검사를 통해 테이블과 관련된 다음과 같은 통계 정보를 구축한다.
Table 통계 정보
Row count
Page 개수
각 column의 통계 정보
서로 다른 값의 개수
NULL 값의 개수
값의 평균 길이
최소값
최대값
Height-balanced histogram
HISTOGRAM_BALANCE_BUCKET_COUNT 프로퍼티를 활성화할 경우에 구축되는 정보이다.
생성할 balance bucket 개수는 HISTOGRAM_BALANCE_BUCKET_COUNT (권장값: 20)에 따라 결정된다.
Frequency histogram
HISTOGRAM_FREQUENCY_BUCKET_COUNT 프로퍼티를 활성화할 경우에 구축되는 정보이다.
생성할 frequency bucket 개수가 HISTOGRAM_FREQUENCY_BUCKET_COUNT (권장값: 20)보다 클 경우에는 구축되지 않는다.
Index 통계 정보
서로 다른 key의 개수
Page 개수
Leaf page 개수
Tree level
인덱스 군집도 (clustering factor)
Column의 data type에 따라 구축하는 통계 정보는 다음과 같다.
Data type | NUM_DISTINCT | NUM_NULLS | AVG_LENGTH | MIN/MAX | Height-balanced Histogram | Frequency Histogram |
|---|---|---|---|---|---|---|
BOOLEAN | O | O | O | X | X | O |
NATIVE_SMALLINT | O | O | O | O | O | O |
NATIVE_INTEGER | O | O | O | O | O | O |
NATIVE_BIGINT | O | O | O | O | O | O |
NATIVE_REAL | O | O | O | O | O | O |
NATIVE_DOUBLE | O | O | O | O | O | O |
NUMBER | O | O | O | O | O | O |
NUMERIC | O | O | O | O | O | O |
FLOAT | O | O | O | O | O | O |
CHAR(n) | O | O | O | 64 bytes 이하인 경우에 구축된다. | 64 bytes 이하인 경우에 구축된다. | 64 bytes 이하인 경우에 구축된다. |
VARCHAR(n) | O | O | O | 64 bytes 이하인 경우에 구축된다. | 64 bytes 이하인 경우에 구축된다. | 64 bytes 이하인 경우에 구축된다. |
LONG VARCHAR | X | X | X | X | X | X |
BINARY | O | O | O | X | X | X |
VARBINARY | O | O | O | X | X | X |
LONG VARBINARY | X | X | X | X | X | X |
DATE | O | O | O | O | O | O |
TIME | O | O | O | O | O | O |
TIMESTAMP | O | O | O | O | O | O |
INTERVAL | O | O | O | O | O | O |
ROWID | O | O | O | X | X | X |
ESTIMATE STATISTICS <sample_clause>
지정한 <sample_clause>만큼의 샘플을 사용하여 column과 index의 통계 정보를 구축한다.
SAMPLE row_count ROWS
지정한 row 개수만큼 샘플을 사용한다.
row_count는 0보다 큰 양의 정수이다.
SAMPLE percentage PERCENT
지정한 비율만큼 샘플을 사용한다.
Percentage는 1 ~ 99 범위의 양의 정수이다.
샘플링 row의 개수가 MIN_SAMPLE_ROW_COUNT 프로퍼티 값보다 작을 경우 프로퍼티 값을 따른다.
<for_clause>
생략할 경우, 통계정보 구축이 가능한 모든 column과 모든 인덱스의 통계 정보를 구축한다.
FOR ALL COLUMNS
통계 정보 구축이 가능한 모든 column의 통계 정보를 구축한다. 인덱스 통계 정보는 구축하지 않는다.
FOR ALL INDEXED COLUMNS
인덱스에 포함된 모든 column의 통계 정보를 구축한다. 그 외 column의 통계 정보는 구축하지 않는다. 인덱스 통계 정보는 구축하지 않는다.
FOR COLUMNS column_name [, ...]
나열한 column의 통계 정보를 구축한다. 기술하지 않은 column의 통계 정보는 구축하지 않는다. 인덱스 통계 정보는 구축하지 않는다.
FOR ALL INDEXES
모든 인덱스의 통계 정보를 구축한다. Column 통계 정보는 구축하지 않는다.
FOR INDEXES index_name [, ...]
나열한 인덱스의 통계 정보를 구축한다. 기술하지 않은 인덱스의 통계 정보는 구축하지 않는다. Column 통계 정보는 구축하지 않는다.
FOR COLUMN GROUPS ( column_name [, ...] )
해당 구문은 COLUMN GROUP 조합의 NUM_DISTINCT 값을 구축한다.
예를 들어 item 테이블에 ( i_company, i_brand ) column들이 있을 경우에, i_brand column의 'I-PHONE' 값은 i_company column의 'APPLE' 값에 대한 dependency가 매우 강하다.
FOR COLUMN GROUPS( i_company, i_brand )의 통계정보를 구축하면 optimizer가 다음과 같은 질의를 분석하는데 도움이 된다.
SELECT * FROM item, sales, ... WHERE i_brand = 'I-PHONE' AND i_company = 'APPLE' AND i_item_id = s_item_id AND ...
사용자가 FOR COLUMN GROUPS를 명시한 경우에만 구축한다.
(O) ANALYZE TABLE item COMPUTE STATISTICS FOR COLUMN GROUPS ( i_company, i_brand );
다음과 같이 순서만 바꾼 column의 조합은 위와 동일한 COLUMN GROUP 이므로 생성할 수 없다.
(X) ANALYZE TABLE item COMPUTE STATISTICS FOR COLUMN GROUPS ( i_brand, i_company );
동일한 column을 기술할 수 없다.
(X) ANALYZE TABLE item COMPUTE STATISTICS FOR COLUMN GROUPS ( i_company, i_brand, i_company );
조합할 수 있는 column의 개수는 2~4 개이다.
(X) ANALYZE TABLE item COMPUTE STATISTICS FOR COLUMN GROUPS ( i_category );
(X) ANALYZE TABLE item COMPUTE STATISTICS FOR COLUMN GROUPS ( i_category, i_class, i_company, i_brand, i_size, i_type );
DELETE STATISTICS
테이블의 통계 정보를 제거한다.
DELETE STATISTICS FOR COLUMN GROUPS ( column_name [, ...] )
지정한 COLUMN GROUP 통계 정보를 제거한다.
설명
테이블 통계 정보는 질의 최적화의 정확도에 영향을 미치는 매우 중요한 정보이다.
통계 정보 구축시간은 테이블의 데이터 양에 비례하므로, 데이터 양이 많을 경우 샘플링을 사용하여 통계 정보를 구축하거나 질의에 영향을 미치는 주요 정보에 대해서만 통계 정보를 구축하는 것이 바람직하다.
다음은 샘플링을 사용하여 통계 정보를 구축하는 예이다.
ANALYZE TABLE lineitem ESTIMATE STATISTICS SAMPLE 10 PERCENT;
다음은 주요 column과 인덱스에 대해서만 통계 정보를 구축하는 예이다.
ANALYZE TABLE lineitem COMPUTE STATISTICS FOR ALL INDEXED COLUMNS; ANALYZE TABLE lineitem COMPUTE STATISTICS FOR ALL INDEXES;
사용 예
다음은 전수 검사를 통해 통계 정보를 구축하는 예이다.
gSQL> ANALYZE TABLE orders; Table analyzed.
다음은 구축된 테이블 통계 정보를 조회하는 예이다.
gSQL>
SELECT
TABLE_NAME
, NUM_ROWS
FROM
DICTIONARY_SCHEMA.USER_TABLES
WHERE
TABLE_SCHEMA = 'PUBLIC'
AND TABLE_NAME = 'ORDERS'
;
TABLE_NAME NUM_ROWS
---------- --------
ORDERS 1500000
1 row selected.
gSQL>
SELECT
TABLE_NAME
, COLUMN_NAME
, NUM_DISTINCT
, NUM_NULLS
, LOW_VALUE
, HIGH_VALUE
FROM
DICTIONARY_SCHEMA.USER_TAB_COLUMNS
WHERE
TABLE_SCHEMA = 'PUBLIC'
AND TABLE_NAME = 'ORDERS'
;
TABLE_NAME COLUMN_NAME NUM_DISTINCT NUM_NULLS LOW_VALUE HIGH_VALUE
---------- --------------- ------------ --------- ------------------- -------------------
ORDERS O_ORDERKEY 1500000 0 1 6000000
ORDERS O_CUSTKEY 99996 0 1 149999
ORDERS O_ORDERSTATUS 3 0 F P
ORDERS O_TOTALPRICE 1464556 0 857.71 555285.16
ORDERS O_ORDERDATE 2406 0 1992-01-01 00:00:00 1998-08-02 00:00:00
ORDERS O_ORDERPRIORITY 5 0 1-URGENT 5-LOW
ORDERS O_CLERK 1000 0 Clerk#000000001 Clerk#000001000
ORDERS O_SHIPPRIORITY 1 0 0 0
ORDERS O_COMMENT 1482071 0 null null
9 rows selected.
gSQL>
SELECT
TABLE_NAME
, INDEX_NAME
, DISTINCT_KEYS
FROM
DICTIONARY_SCHEMA.USER_INDEXES
WHERE
TABLE_SCHEMA = 'PUBLIC'
AND TABLE_NAME = 'ORDERS'
;
TABLE_NAME INDEX_NAME DISTINCT_KEYS
---------- ----------------- -------------
ORDERS ORDERS_PK_INDEX 1500000
ORDERS ORDERS_CUSTKEY_FK 99996
2 rows selected.호환성
SQL 표준에서는 통계 정보에 대한 개념을 정의하지 않고 있다.
참조
관련 내용은 ANALYZE SYSTEM을 참조한다.
AUDIT POLICY
기능
Audit policy를 활성화한다.
구문
<audit policy statement> ::=
AUDIT POLICY policy_name
[ <specified_user_option> ]
[ <specified_success_option> ]
;
<specified_user_option> ::=
BY user_name [, ...]
| EXCEPT user_name [, ...]
<specified_success_option> ::=
WHENEVER SUCCESSFUL
| WHENEVER NOT SUCCESSFUL사용 범위 및 접근 권한
<audit policy statement> 구문을 수행하려면 사용자에게 AUDIT SYSTEM ON DATABASE 권한이 있어야 한다.
구문 규칙 및 파라미터
policy_name
활성화할 audit policy 객체의 이름이다. 활성화 된 audit policy는 기존 session에 영향을 미치지 않으며 새로 생성되는 session에만 영향을 준다.
<specified_user_option>
감사를 수행할 사용자를 명시한다. 생략할 경우 모든 사용자에 대해 감사를 수행한다.
동일한 audit policy에 대해 BY 절과 EXCEPT 절을 함께 사용할 수 없다.
BY user_list: 감사를 수행할 사용자를 특정할 경우 BY 절을 사용한다.
EXCEPT user_list: 특정 사용자를 배제하고 다른 사용자들을 감사할 경우 EXCEPT 절을 사용한다.
<specified_success_option>
WHENEVER SUCCESSFUL
Action이 성공했을 때 audit record가 생성된다.
WHENEVER NOT SUCCESSFUL
Action이 실패했을 때 audit record가 생성된다.
생략할 경우 성공할 경우와 실패할 경우 모두 audit record를 생성한다.
설명
Audit policy를 활성화하면 기존 session에는 영향을 미치지 않으며 새로 생성되는 session에 대해 감사를 시작한다.
Audit Record 조회
감사 조건에 부합할 경우 audit record를 생성하는데 다음과 같이 DICTIONARY_SCHEMA.AUDIT_TRAIL view를 통해 조회할 수 있다.
SELECT logon_user
, event_timestamp
, action_name
, object_name
, sql_text
FROM audit_trail
WHERE policy_name = 'P1'
;일반 사용자가 AUDIT_TRAIL을 조회하려면 SELECT 권한을 부여받아야 한다.
GRANT SELECT ON DICTIONARY_SCHEMA.AUDTI_TRAIL TO user_name;
Audit Policy 정보 조회
Audit policy 객체 정보는 DICTIONARY_SCHEMA.AUDIT_POLICY_OPTIONS view를 통해 조회할 수 있다.
SELECT policy_name
, audit_option
, object_schema
, object_name
FROM audit_policy_options
;Audit policy 객체들의 활성화 정보는 DICTIONARY_SCHEMA.AUDIT_POLICY_ENABLED view를 통해 조회할 수 있다.
SELECT policy_name
, enabled_opt
, user_name
, when_success
, when_failure
FROM audit_policy_enabled
;BY 절과 EXCEPT 절 사용 시 유의사항
동일한 audit policy에 대해 다수의 AUDIT POLICY BY 절을 사용할 경우, user들의 집합을 활성화한다. 즉, 다음 두 예는 동일한 의미이다.
예제 1: u1, u2에 대해 p1 audit policy를 활성화한다.
AUDIT POLICY p1 BY u1; AUDIT POLICY p1 BY u2;
예제 2: u1, u2에 대해 p1 audit policy를 활성화한다.
AUDIT POLICY p1 BY u1, u2;
동일한 audit policy에 대해 다수의 AUDIT POLICY EXCEPT 절을 사용할 경우, 마지막 AUDIT POLICY 구문만 유효하다. 즉, 다음 두 예는 다른 의미이다.
예제 1: 마지막 구문만 유효하며 u2를 배제하고 p1 audit policy를 활성화한다.
AUDIT POLICY p1 EXCEPT u1; AUDIT POLICY p1 EXCEPT u2;
예제 2: u1과 u2를 배제하고 p1 audit policy를 활성화한다.
AUDIT POLICY p1 EXCEPT u1, u2;
같은 audit policy에 대해 BY와 EXCEPT를 함께 사용할 수 없다.
BY 절로 audit policy가 활성화된 경우 이후에 BY 절만 사용할 수 있다.
AUDIT POLICY p1 BY u1;
N/A
Error
AUDIT POLICY p1 EXCEPT u2;
EXCEPT 절로 audit policy가 활성화 된 경우 이후에 EXCEPT 절만 사용할 수 있다.
AUDIT POLICY p1 EXCEPT u1;
N/A
Error: by all users에 해당한다.
AUDIT POLICY p1;
BY로 활성화된 audit policy를 EXCEPT로 전환하거나 EXCEPT로 활성화된 audit policy를 BY로 전환하려면 먼저 활성화된 audit policy를 비활성화 한 후에 전환해야 한다.
다음 예와 같이 NOAUDIT POLICY 구문으로 비활성해야 한다.
AUDIT POLICY p1 BY u1, u2;
NOAUDIT POLICY p1 BY u1, u2;
AUDIT POLICY p1;
NOAUDIT POLICY p1;
AUDIT POLICY p1 EXCEPT u1, u2;
NOAUDIT POLICY p1;
NOAUDIT POLICY 구문은 EXCEPT option 이 없다.
BY 절과 함께 사용하는 WHENEVER 절은 누적된다.
다음 두 예는 동일한 의미이다.
예제 1: 성공/ 실패와 관계없이 audit record를 생성한다.
AUDIT POLICY p1 BY u1 WHENEVER SUCCESSFUL; AUDIT POLICY p1 BY u1 WHENEVER NOT SUCCESSFUL;
예제 2: 성공/ 실패와 관계없이 audit record를 생성한다.
AUDIT POLICY p1 BY u1;
WHENEVER 절이 EXCEPT 절과 함께 사용되면 마지막 WHENEVER 절만 유효하다.
다음 두 예는 서로 다른 의미이다.
예제 1: 실패할 경우 audit record를 생성한다.
AUDIT POLICY p1 EXCEPT u1 WHENEVER SUCCESSFUL; AUDIT POLICY p1 EXCEPT u1 WHENEVER NOT SUCCESSFUL;
예제 2: 성공/ 실패와 관계없이 audit record를 생성한다.
AUDIT POLICY p1 EXCEPT u1;
사용 예
다음은 모든 사용자에 대해 audit policy를 활성화하는 예이다.
AUDIT POLICY table_pol;
다음 질의를 통해 활성화 정보를 확인할 수 있다.
SELECT policy_name
, enabled_opt
, user_name
FROM audit_policy_enabled
WHERE policy_name = 'TABLE_POL';
POLICY_NAME ENABLED_OPT USER_NAME
----------- ----------- ---------
TABLE_POL BY ALL USERS다음은 특정 사용자들을 한정하여 audit policy를 활성화하는 예이다.
AUDIT POLICY dml_pol BY u1, u2;
다음은 특정 사용자를 배제하여 audit policy를 활성화하는 예이다.
AUDIT POLICY read_seq_pol EXCEPT sys;
다음은 특정 사용자가 SQL 구문에 실패한 경우를 감사하는 예이다.
AUDIT POLICY delete_pol BY u1 WHENEVER NOT SUCCESSFUL;
호환성
SQL 표준에는 audit policy가 없다.
참조
관련 내용은 다음을 참조한다.
Audit policy 객체 관리
Audit policy 활성화/ 비활성화
Audit trail 조회: AUDIT_TRAIL
Audit trail 소거: ALTER DATABASE CLEAR AUDIT TRAIL