SQL References (A~B)

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가 없다.

참조

관련 내용은 다음을 참조한다.

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 내에서 유일해야 한다.

<member position>

Cluster member의 position number를 지정한다.

Cluster member의 member_position 정보는 DBA_CLUSTER view를 통해 조회할 수 있다.

SELECT member_name, member_id, member_position FROM dba_cluster;

예를 들어 다음과 같은 position number가 사용되고 있는 경우,

각 옵션에 따라, 다음과 같은 값을 지정한다.

설명

<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 내에서 유일해야 한다.

설명

만약 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 group statement>

새로운 로그파일 그룹을 추가한다.

설명

새로운 로그파일 그룹 및 로그 멤버가 추가되는 경우 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>

설명

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>

데이터베이스를 전체 백업이 가능한 상태로 설정한다.

<database end backup clause>

데이터베이스를 전체 백업 불가능한 상태로 설정한다.

<database incremental backup statement>

<incremental backup option>

FORMAT 'format string'

PIECE integer

<parallel clause>

백업시 사용할 thread의 개수를 지정한다.

<database controlfile backup statement>

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;
ALTER DATABASE CLEAR AUDIT TRAIL;

사용 예

다음 구문을 사용하여 audit trail을 삭제 (purge)한다.

ALTER DATABASE CLEAR AUDIT TRAIL;

호환성

SQL 표준에는 audit policy가 없다.

참조

관련 내용은 다음을 참조한다.

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>

기존 증분 백업들 중에서 삭제할 대상을 선정한다.

<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 ]

설명

모든 inactive cluster member들을 제거한다.

Cluster member의 inactive 상태는 cluster system과 연결되어 있지 않은 상태로서 다음과 같은 상황에서 발생한다.

단, 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>

기존의 로그파일 그룹을 제거한다.

<drop logfile member statement>

기존의 로그파일 멤버들을 제거한다.

설명

각 구문별 사용 규칙을 참조한다.

사용 예

다음은 기존 로그파일인 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과 연결되어 있지 않은 상태로서 다음과 같은 상황에서 발생한다.

<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 기능은 비활성화된 상태여야 한다.

<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을 허용할지 여부를 결정한다.

[ LOGGING | NOLOGGING ]

테이블의 shard를 재배치할 때, 테이블 동기화 과정에서 기록되는 로그의 양을 지정한다.

NOLOGGING 옵션을 사용하면 redo log가 기록되지 않는다. 따라서 move shard 수행 후 서버가 비정상적으로 종료되면 해당 테이블은 unusable 상태가 된다. 이를 방지하려면 move shard 수행 후 CHECKPOINT 구문을 실행해야 한다.

<scan partition>

Shard의 partition 개수를 지정한다.

<parallel clause>

테이블 재배치에 사용할 thread의 개수를 지정한다.

설명

다음과 같은 구문을 사용하여 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과 연결되어 있지 않은 상태로서 다음과 같은 상황에서 발생한다.

설명

<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을 허용할지 여부를 결정한다.

[ LOGGING | NOLOGGING ]

테이블의 shard를 재배치할 때, 테이블 동기화 과정에서 기록되는 로그의 양을 지정한다.

NOLOGGING 옵션을 사용하면 redo log가 기록되지 않는다. 따라서 rebalance 수행 후 서버가 비정상적으로 종료되면 해당 테이블은 unusable 상태가 된다. 이를 방지하려면 rebalance 수행 후 CHECKPOINT 구문을 실행해야 한다.

<scan partition>

shard의 partition 개수를 지정한다.

<parallel clause>

테이블 재배치에 사용할 thread의 개수를 지정한다.

설명

다음과 같은 구문을 사용하여 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을 허용할지 여부를 결정한다.

[ LOGGING | NOLOGGING ]

테이블의 shard를 재배치할 때, 테이블 동기화 과정에서 기록되는 로그의 양을 지정한다.

NOLOGGING 옵션을 사용하면 redo log가 기록되지 않는다. 따라서 rebalance 수행 후 서버가 비정상적으로 종료되면 해당 테이블은 unusable 상태가 된다. 이를 방지하려면 rebalance 수행 후 CHECKPOINT 구문을 실행해야 한다.

<scan partition>

shard의 partition 개수를 지정한다.

<parallel clause>

테이블 재배치에 사용할 thread의 개수를 지정한다.

설명

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 로그파일을 이용하여 데이터베이스의 데이터 파일들을 최신상태로 복구한다.

<datafile recover statement>

Immediate option으로 offline 된 tablespace의 datafile, backup 된 datafile 또는 backup 도중에 장애가 발생하여 archive logfile을 이용한 복구가 필요한 tablespace의 datafile들을 최신 상태로 복구한다.

<complete tablespace recover statement>

테이블스페이스의 데이터 파일들을 최신 상태로 복구한다.

<incomplete database recover statement>

<batch incomplete database recover statement>

온라인 및 archive log file을 이용하여 데이터베이스의 데이터 파일들을 최신상태가 아닌 특정 시점까지 일괄 복구한다.

<interactive incomplete database recover statement>

온라인 및 archive log file을 이용하여 데이터베이스의 데이터 파일들을 최신상태가 아닌 특정 시점까지 사용자와 대화식으로 복구한다.

<recovery slaves clause>

병렬 복구에 참여하는 slave 개수를 지정한다. 만약 <recovery slaves clause>가 생략된 경우에는 RECOVERY_SLAVES 프로퍼티에 설정된 값을 따른다.

불완전 복구의 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>

복구 불가능한 세그먼트를 데이터베이스에 등록한다. 해당 구문은 백업이 존재하지 않고 데이터베이스를 복구할 수 없는 경우, 세그먼트를 더 이상 사용하지 않는다는 가정하에 사용될 수 있다.

<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>

'file_name'

설명

각 구문별 사용 규칙을 참조한다.

사용 예

다음은 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>

설명

각 구문별 사용 규칙을 참조한다.

사용 예

다음은 글로벌 트랜잭션 로그파일을 변경하는 예이다.

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>

설명

각 구문별 사용 규칙을 참조한다.

사용 예

다음은 기존 로그파일 '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에서 제외된 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>

증분 백업을 사용하여 테이블스페이스 내의 데이터 파일들을 복원한다.

<parallel clause>

복원시 사용할 thread의 개수를 지정한다.

<domain name>

구문을 수행할 멤버나 그룹의 이름이다.
지정하지 않은 경우에는 모든 그룹에 수행된다.

<controlfile restore statement>

'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>

동기화 대상 객체를 지정한다.

[ ONLINE | OFFLINE ]

동기화 수행시 DML을 허용할지 여부를 결정한다

[ LOGGING | NOLOGGING ]

테이블 동기화 과정에서 기록되는 로그의 양을 지정한다.

NOLOGGING 옵션을 사용하면 redo log가 기록되지 않는다. 따라서 move shard 수행 후 서버가 비정상적으로 종료되면 해당 테이블은 unusable 상태가 된다. 이를 방지하려면 synchronize 수행 후 CHECKPOINT 구문을 실행해야 한다.

<scan partition>

shard의 partition 개수를 지정한다.

<synchronize target>에 SEQUENCE만 지정될 경우, 이는 무시된다.

<parallel clause>

테이블을 동기화할 때 사용할 thread 개수를 지정한다.

<synchronize target>에 SEQUENCE만 지정될 경우, 이는 무시된다.

설명

기존에 배치되어 있는 모든 오프라인된 shard와 시퀀스들을 동기화하고 온라인으로 변경한다. ALTER DATABASE REBALANCE와는 달리 inactive cluster member가 있어도 수행할 수 있다.

Cluster member의 inactive 상태는 cluster system과 연결되어 있지 않은 상태로서 다음과 같은 상황에서 발생한다.

<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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

<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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

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> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.

인덱스가 생성될 테이블스페이스에 대해 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

index_name

대상 인덱스의 이름이다.
스키마 이름을 명시할 수 있으며, 생략할 경우 사용자의 기본 스키마 이름이 사용된다.

<domain name>

구문을 수행할 멤버나 그룹의 이름이다.
지정하지 않은 경우에는 모든 그룹에 수행된다.

설명

Index coalesce

Index coalesce

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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

index_name

대상 인덱스의 이름이다.
스키마 이름을 명시할 수 있으며, 생략할 경우 사용자의 기본 스키마 이름이 사용된다.

<index enforcement>

ENABLE 과 ENFORCED 는 동일한 의미이다.
DISABLE 과 NOT ENFORCED 는 동일한 의미이다.

설명

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> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.

인덱스가 생성될 테이블스페이스에 대해 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

index_name

대상 인덱스의 이름이다.
스키마 이름을 명시할 수 있으며, 생략할 경우 사용자의 기본 스키마 이름이 사용된다.

[ ONLINE | OFFLINE ]

인덱스를 재구축할 때, 해당 테이블에 DML을 허용할지 여부를 결정한다.

<physical attribute clause>

인덱스의 물리적 속성 정보를 정의한다.

<segment attr clause>

인덱스가 저장될 공간에 대한 정보를 기술한다.

<size clause>

파일의 바이트 크기를 명시한다. (단위를 기술하지 않을 경우 bytes이다.)

NOPARALLEL | PARALLEL [ integer ]

인덱스가 재구축되는 동안 사용될 thread의 개수를 지정한다.

TABLESPACE tablespace_name

인덱스가 재구축될 tablespace의 이름을 지정한다.

<domain name>

구문을 수행할 멤버나 그룹의 이름이다.
지정하지 않은 경우에는 모든 그룹에 수행된다.
<index attributes> 와 함께 사용할 수 없다.

설명

사용 예

다음은 인덱스의 로깅 설정과 테이블스페이스를 변경하는 예이다.

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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

index_name

대상 인덱스의 이름이다.

<physical attribute clause>

인덱스의 물리적 속성 정보를 정의한다.

<segment attr clause>

인덱스가 저장될 공간에 대한 정보를 기술한다.

<size clause>

파일의 바이트 크기를 명시한다. (단위를 기술하지 않을 경우 bytes이다.)

설명

각 구문별 사용 규칙을 참조한다.

사용 예

다음은 인덱스의 물리적 속성을 변경하는 예이다.

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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

sequence_name

변경할 시퀀스의 이름이다.
schema_name.sequence_name과 같이 시퀀스가 속할 스키마를 정의할 수 있으며, schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

<alter sequence generator restart option>

시퀀스의 다음 값 (NEXT VALUE)을 설정한다.
단, CREATE SEQUENCE 구문에서 정의한 START WITH의 값은 변경하지 않는다.

<alter sequence generator restart option> 절을 명시하지 않은 경우, 시퀀스의 현재값을 기준으로 시퀀스의 속성을 변경한다.

<sequence generator increment by option>

시퀀스 번호의 간격을 변경한다.
다음과 같은 제약과 특징을 갖는다.

<sequence generator maxvalue option>

시퀀스로 생성할 수 있는 최대값을 변경한다. 
단, MAXVALUE의 값이 시퀀스의 현재값보다 작지 않아야 한다.

<sequence generator minvalue option>

시퀀스로 생성할 수 있는 최소값을 변경한다. 
단, MINVALUE의 값이 시퀀스의 현재값보다 크지 않아야 한다.

<sequence generator cycle option>

시퀀스의 값이 최대값 또는 최소값이 되었을 때, 계속 값을 생성할지 여부를 변경한다.

<sequence generator cache option>

시퀀스에 신속하게 접근하기 위해 메모리상에 미리 적재할 시퀀스 값의 개수를 정의한다. 
Database를 재구동할 때, 메모리상에 적재한 시퀀스 값은 유실되고 적재한 이후의 값부터 시작된다.

설명

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 절을 정의하지 않고 있다.

SQL 표준 호환성

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 된 트랜잭션들이 변경한 모든 데이터가 디스크에 기록되는 것을 보장하는 연산이다.

<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>

트랜잭션들이 생성한 로그를 로그 파일에 기록하도록 요청한다.

<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 member가 inactive인 상태에서 해당 member를 다음과 같은 절차를 거쳐 cluster system에 포함시킬 수 있다.

$ gsql sys gliese --as sysdba --dsn=G3N2
gSQL> \startup
$ 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를 정리해야 한다.

  1. Cluster system에 참여할 수 있는 inactive cluster member를 JOIN 한다.

gSQL> ALTER SYSTEM JOIN DATABASE;
  1. 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 메시지의 의미는 다음과 같다:

사용 예

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>

<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>

<open database option>

<database_scope>

사용 예

다음은 온라인 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 절을 명시하지 않을 경우, 기본값은 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 ]

변경된 프로퍼티를 적용할 시점을 정의한다.

프로퍼티의 SYS_MODIFIABLE 속성값이 IMMEDIATE일 경우, DEFERRED를 명시하지 않으면 모든 SESSION에 바로 적용된다.

[ SCOPE = [ MEMORY | { FILE | SPFILE } | BOTH ] ]

시스템 프로퍼티 변경에 영향을 받는 범위를 정의한다.

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 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 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> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.

구문 규칙 및 파라미터

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> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.

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.

호환성

SQL 표준 호환성

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에서 정의할 수 있으며 사용자는 다음 조건들을 만족해야 한다.

구문 규칙 및 파라미터

table_name

인덱스를 생성할 테이블 이름이다. 
schema_name.table_name과 같이 테이블이 속한 스키마를 정의할 수 있으며, schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

<physical attribute clause>

인덱스의 물리적 속성 정보를 정의한다.

<segment attr clause>

인덱스가 저장될 공간에 대한 정보를 기술한다.

<size clause>

파일의 바이트 크기를 명시한다. (단위를 기술하지 않을 경우 bytes이다.)

NOPARALLEL | PARALLEL [ integer ]

인덱스 구축과정에 사용될 thread의 개수를 지정한다.

TABLESPACE tablespace_name

인덱스가 저장될 tablespace의 이름을 지정한다.

설명

Non-deterministic 질의에는 global secondary index가 반드시 필요하다. LOGGING 인덱스와 NOLOGGING 인덱스에는 다음과 같은 trade-off가 있다

사용 예

다음은 테이블 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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

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> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

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 CONSTRAINTS 구문의 설명을 참조한다.

<drop column not null clause>

<alter column data type clause>

SET DATA TYPE 구문은 자동으로 commit 되는 DDL 구문이다.

동일한 계열간에 타입을 변경할 수 있는데 이 때 다음 조건을 만족해야 한다.

character string type 변환

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을 변경할 경우 다음과 같은 조건을 만족해야 한다.

character length unit 변환

from \ to

OCTETS

CHARACTERS

OCTETS

O

O

CHARACTERS

X

O

binary string type 변환

from \ to

BINARY(n)

VARBINARY(n)

LONG VARBINARY

BINARY(m)

X

X

X

VARBINARY(m)

X

n >= m

X

LONG VARBINARY

X

X

O

numeric type

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) 값은 다음과 같다.

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 표현식

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 언어의 숫자형 타입과 동일한 데이터 타입이며 서로 다른 타입으로 변환할 수 없다.

Native 숫자형의 변환

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

Boolean type의 변환

from \ to

BOOLEAN

BOOLEAN

O

Date/ time type의 변환 (TZ: WITH TIME ZONE)

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

INTERVAL YEAR TO MONTH 계열의 type 변환 (p,q 가 생략된 경우 2)

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

INTERVAL DAY TO TIME 계열의 type 변환 (p,q 가 생략된 경우 2) (f,g 가 생략된 경우 6)

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

ROWID type

from \ to

ROWID

ROWID

O

<alter identity column specification>

Column의 identity 속성을 변경한다. 
Column은 identity column 이어야 한다.

<drop identity property clause>

Column의 identity 속성을 제거한다. 
Column은 identity column 이어야 한다.

설명

SET NOT NULL 절의 null 검사 수행시간은 테이블의 row 개수에 비례한다.

다음과 같은 column은 NULL 값을 허용하지 않는다. 즉, DROP NOT NULL 절을 수행하더라도 다음 조건 중 하나를 만족할 경우 NULL 값을 허용하지 않는다.

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.

호환성

SQL 표준 호환성

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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

Cluster는 지연 가능한 제약 조건을 지원하지 않는다.

구문 규칙 및 파라미터

table_name

변경할 테이블의 이름이다. 
schema_name.table_name과 같이 테이블이 속한 스키마를 정의할 수 있으며, schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

<constraint object>

변경할 제약 조건은 다음과 같이 지정할 수 있다.

DEFERRABLE | NOT DEFERRABLE

제약 조건의 지연 가능 여부를 변경한다.

지연가능한 제약 조건에 대한 자세한 내용은 SET CONSTRAINTS 구문의 설명을 참조한다.

INITIALLY IMMEDIATE | INITIALLY DEFERRED

제약 조건의 검사시점 초기값을 변경한다.

NOT DEFERRABLE로 정의된 제약 조건은 INITIALLY DEFERRED로 변경할 수 없다.

[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 표준에서는 다음과 같은 절을 정의하지 않고 있다.

SQL 표준 호환성

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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

table_name

인덱스를 생성할 테이블 이름이다. 
schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

<physical attribute clause>

인덱스의 물리적 속성 정보를 정의한다.

<segment attr clause>

인덱스가 저장될 공간에 대한 정보를 기술한다.

<size clause>

파일의 바이트 크기를 명시한다. (단위를 기술하지 않을 경우 bytes이다.)

설명

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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

table_name

대상 테이블 이름이다.
schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

<domain name>

구문을 수행할 멤버나 그룹의 이름이다.
지정하지 않은 경우에는 모든 그룹에 수행된다.

설명

이 구문은 인덱스 페이지 중 모든 키가 삭제된 페이지를 세그먼트로 반환한다. 
Aging은 논리적 삭제와 물리적 삭제라는 두 단계로 진행된다.

시스템의 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> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.

구문 규칙 및 파라미터

table_name

대상 테이블 이름이다.
schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

<domain name>

구문을 수행할 멤버나 그룹의 이름이다.
지정하지 않은 경우에는 모든 그룹에 수행된다.

설명

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> 구문을 수행하려면 사용자가 다음 조건들을 만족해야 한다.

구문 규칙 및 파라미터

table_name

인덱스를 재구축할 테이블 이름이다. 
schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

[ ONLINE | OFFLINE ]

인덱스를 재구축할 때, 해당 테이블에 DML을 허용할지 여부를 결정한다.

<physical attribute clause>

인덱스의 물리적 속성 정보를 정의한다.

<segment attr clause>

인덱스가 저장될 공간에 대한 정보를 기술한다.

<size clause>

파일의 바이트 크기를 명시한다. (단위를 기술하지 않을 경우 bytes이다.)

NOPARALLEL | PARALLEL [ integer ]

인덱스 재구축되는 동안 사용될 thread의 개수를 지정한다.

TABLESPACE tablespace_name

인덱스가 재구축될 tablespace의 이름을 지정한다.

<domain name>

구문을 수행할 멤버나 그룹의 이름이다.
지정하지 않은 경우에는 모든 그룹에 수행된다.
<index attributes> 와 함께 사용할 수 없다.

설명

사용 예

테이블 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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

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 표준에서는 다음과 같은 절을 정의하지 않고 있다.

SQL 표준 호환성

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에서 정의할 수 있으며 사용자는 다음 조건들을 만족해야 한다.

구문 규칙 및 파라미터

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> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

table_name

테이블의 이름이다. 
schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

설명

오프라인 된 shard들의 세그먼트를 삭제한다.

<alter table drop offline segments statement>는 inactive cluster member가 있어도 수행할 수 있다.

다음 조건들을 만족하지 못하면 실패한다.

예를 들어 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> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

table_name

테이블의 이름이다. 
schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

설명

Unusable 세그먼트는 더 이상 사용할 수 없는 세그먼트를 의미하며, 다음과 같은 상황에서 생성될 수 있다.

이 구문은 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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

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> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

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에 배치한다.

다음은 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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

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을 허용할지 여부를 결정한다.

[ LOGGING | NOLOGGING ]

테이블의 shard를 재배치할 때, 테이블 동기화 과정에서 기록되는 로그의 양을 지정한다.

NOLOGGING 옵션을 사용하면 redo log가 기록되지 않는다. 따라서 move shard 수행 후 서버가 비정상적으로 종료되면 해당 테이블은 unusable 상태가 된다. 이를 방지하려면 move shard 수행 후 CHECKPOINT 구문을 실행해야 한다.

<scan partition>

shard의 partition 개수를 지정한다.

<parallel clause>

테이블 재배치에 사용할 thread의 개수를 지정한다.

설명

테이블의 특정 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> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

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> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

table_name

테이블 이름이다. 
schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

설명

테이블의 속성을 READ { ONLY | WRITE } 으로 지정한다.

READ ONLY로 지정하면 SELECT .. FOR UPDATE 구문, 테이블의 데이터가 변경되는 DML 또는 DDL 구문들을 사용할 수 없다. 반면, 테이블의 데이터가 변경이 되지 않는 DDL 구문은 허용한다.

READ ONLY로 지정할 때 허용하지 않는 SQL 구문


READ ONLY로 지정할 때 허용하는 SQL 구문

사용 예

다음은 <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> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

table_name

테이블의 이름이다. 
schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

[ ONLINE | OFFLINE ]

테이블의 shard를 재배치할 때 DML을 허용할지 여부를 결정한다

[ LOGGING | NOLOGGING ]

테이블의 shard를 재배치할 때, 테이블 동기화 과정에서 기록되는 로그의 양을 지정한다.

NOLOGGING 옵션을 사용하면 redo log가 기록되지 않는다. 따라서 rebalance 수행 후 서버가 비정상적으로 종료되면 해당 테이블은 unusable 상태가 된다. 이를 방지하려면 rebalance 수행 후 CHECKPOINT 구문을 실행해야 한다.

<scan partition>

shard의 partition 개수를 지정한다.

<parallel clause>

테이블 재배치에 사용할 thread의 개수를 지정한다.

설명

다음과 같은 구문을 통해 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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

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을 허용할지 여부를 결정한다.

[ LOGGING | NOLOGGING ]

테이블의 shard를 재배치할 때, 테이블 동기화 과정에서 기록되는 로그의 양을 지정한다.

NOLOGGING 옵션을 사용하면 redo log가 기록되지 않는다. 따라서 rebalance 수행 후 서버가 비정상적으로 종료되면 해당 테이블은 unusable 상태가 된다. 이를 방지하려면 rebalance 수행 후 CHECKPOINT 구문을 실행해야 한다.

<scan partition>

shard의 partition 개수를 지정한다.

<parallel clause>

테이블 재배치에 사용할 thread의 개수를 지정한다.

설명

특정 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> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

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> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

table_name

변경할 테이블의 이름이다. 
schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

<constraint object>

변경할 제약 조건의 기존 이름은 다음과 같이 지정할 수 있다.

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> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

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> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

table_name

변경할 테이블의 이름이다.
schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

[ LOGGING | NOLOGGING ]

테이블을 재구성할 때 redo log를 기록할지 여부를 결정한다.

NOLOGGING 옵션을 사용하면 redo log가 기록되지 않는다. 따라서 reorganize 수행 후 서버가 비정상적으로 종료되면 해당 테이블은 unusable 상태가 된다. 이를 방지하려면 reorganize 수행 후 CHECKPOINT 구문을 실행해야 한다.

[ ONLINE | OFFLINE ]

테이블을 재구성할 때 DML을 허용할지 여부를 결정한다

<scan partition>

주어진 개수만큼 테이블을 분할하여 새로운 테이블에 동기화 한다.

<parallel clause>

테이블 재구성할 때 사용할 thread 개수를 지정한다.

<domain name>

구문을 수행할 멤버나 그룹의 이름이다.
지정하지 않은 경우에는 모든 그룹에 수행된다. 
Cluster database 전용 옵션이다.

설명

테이블 재구성 (Table Reorganization)은 테이블의 물리적 구조를 재배치하여 질의 성능을 향상시키거나 저장 공간을 최적화하는 작업이다.
테이블 페이지 내의 빈 공간을 제거함으로써 테이블의 물리적 크기를 줄일 수 있다.

테이블 재구성의 특징은 다음과 같다.

사용 예

다음은 <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> 구문을 실행하기 위해 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

table_name

변경할 테이블의 이름이다.
schema_name.table_name과 같이 테이블이 속한 스키마를 정의할 수 있으며, schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

<trigger name> [, ... ]

나열된 모든 trigger 들은 다음 조건을 만족해야 한다.

설명

예를 들어, 테이블 t1 에 대해 다음과 같은 순서로 AFTER STATEMENT trigger 들이 생성된 경우,

ALTER TABLE t1 SET TRIGGER ORDER 구문을 사용하면 trigger 들의 실행 순서를 다음과 같이 변경할 수 있다.

사용 예

현재 테이블에 생성된 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> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

table_name

변경할 테이블의 이름이다. 
schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

SET UNUSED [ COLUMN ]

해당 column들을 사용하지 않도록 설정한다.

column_name_list

한 개 이상의 삭제될 column 이름이다.

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 표준에서는 다음과 같은 절을 정의하지 않고 있다.

SQL 표준 호환성

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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

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>

list shard를 위한 split shard bound를 정의한다.

<split range shard def>

Range shard를 위한 split shard bound를 정의한다.

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> 구문을 수행하려면 사용자에게 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

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에 적용된다.

설명

각 구문별 사용 규칙을 참조한다.

사용 예

다음은 테이블의 물리적 속성을 변경하는 예이다.

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> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

table_name

테이블의 이름이다. 
schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

[ ONLINE | OFFLINE ]

테이블의 shard를 동기화할 때 DML을 허용할지 여부를 결정한다

[ LOGGING | NOLOGGING ]

테이블을 동기화하는 동안 기록되는 로그의 양을 지정한다.

NOLOGGING 옵션을 사용하면 redo log가 기록되지 않는다. 따라서 synchronize 수행 후 서버가 비정상적으로 종료되면 해당 테이블은 unusable 상태가 된다. 이를 방지하려면 synchronize 후에 CHECKPOINT 구문을 수행해야 한다.

<scan partition>

shard의 partition 개수를 지정한다.

<parallel clause>

테이블을 동기화할 때 사용할 thread 개수를 지정한다.

설명

테이블 동기화는 기존에 배치되어 있는 오프라인 된 shard들을 동기화하여 정합성을 복구한다. <alter table rebalance statement>와는 달리 inactive cluster member가 있어도 수행할 수 있다.

다음 조건들을 만족하지 못하면 실패한다.

예를 들어 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> 구문을 수행하려면 다음 권한 중 하나가 있어야 한다.

구문 규칙 및 파라미터

table_name

테이블의 이름이다. 
schema_name.table_name과 같이 테이블이 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우, 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

<domain name>

구문을 수행할 멤버나 그룹의 이름이다.
지정하지 않은 경우에는 모든 그룹에 수행된다. 

설명

unusable 상태의 테이블을 usable 상태로 변경한다.
이미 usable 상태인 경우에도 정상적으로 성공한 것으로 판단한다.
usable 상태로 변경할 때 테이블과 연관된 인덱스들을 모두 rebuild 한다.
단, offline 상태의 tablespace 에 저장된 인덱스는 rebuild 하지 않는다.

unusable 상태의 테이블은 다음과 같은 경우에 생성될 수 있다.

<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>

테이블스페이스에 공간을 추가한다.

tablespace_name

공간을 추가할 테이블스페이스의 이름이다.

<file specification>

테이블스페이스의 유형에 따라 다음과 같은 구문을 사용해야 한다.

<add datafile clause>

추가할 메모리 데이터 파일을 정의한다.

<memory 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>

테이블스페이스를 백업 가능한 상태로 설정한다.

tablespace_name

Backup 상태를 전환할 테이블스페이스의 이름이다.

<tablespace end backup statement>

테이블스페이스를 백업이 불가능한 상태로 설정한다.

<tablesapce incremental backup statement>

테이블스페이스의 증분 백업을 수행한다.
데이터베이스가 OPEN 상태이고, ARCHIVELOG로 운영되어야 한다.

<incremental backup option>

FORMAT 'format string'

PIECE integer

<parallel clause>

백업시 사용할 thread의 개수를 지정한다.

<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>

테이블스페이스의 유형에 따라 다음과 같은 구문을 사용해야 한다.

오프라인 테이블스페이스의 파일은 삭제할 수 없다.

테이블스페이스의 첫 번째 파일은 삭제할 수 없다.

한 번이라도 사용된 적이 있는 데이터 파일은 삭제할 수 없다.

<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>

구문을 수행할 멤버나 그룹의 이름이다. 
지정하지 않은 경우에는 모든 그룹에 수행된다.

설명

테이블스페이스 상태에 따라 연산 가능 여부가 결정된다.

사용 예

다음은 '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

기존 테이블스페이스의 이름이다.

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를 변경한다.

<alter profile>

비밀번호 관리 정책을 위한 profile을 변경한다.

<password expire>

사용자의 비밀번호를 만료시킨다.

<account lock>

<alter default tablespace>

사용자의 기본 tablespace를 변경한다. 
tablespace_name은 data tablespace여야 한다.

<alter temporary tablespace>

사용자의 temporary tablespace를 변경한다. 
tablespace_name은 temporary tablespace여야 한다.

<alter index tablespace>

사용자의 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에 의해 다음과 같이 해석된다.

CURRENT PATH

현재 사용자의 schema path 이다.

다음 예와 같이 CURRENT PATH를 이용해 기존의 schema path를 유지하면서 새로운 schema path를 추가할 수 있다.

ALTER USER PUBLIC <alter schema path>

PUBLIC 계정의 schema path를 변경한다. 
PUBLIC 계정의 schema path는 모든 사용자의 schema path에 포함된다.

PUBLIC 계정에 최초로 부여된 schema path는 다음과 같다.

설명

각 구문별 사용 규칙을 참조한다.

사용 예

다음은 사용자의 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_name

변경할 view의 이름이다.
schema_name.view_name과 같이 view가 소속한 스키마를 정의할 수 있는데 schema_name을 생략할 경우 구문을 수행하는 사용자의 기본 스키마 이름이 사용된다.

COMPILE

View를 다시 컴파일한다. 
View column에 부여한 COMMENT는 초기화된다.

설명

View가 참조하는 테이블이나 view가 변경되거나 삭제되면 해당 view도 영향을 받는다.

이런 정보는 INFORMATION_SCHEMA.VIEWS를 통해 조회할 수 있다.

사용 예

다음은 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

시스템과 관련된 다음과 같은 통계 정보를 구축한다.

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 이다.

<analyze action>

생략할 경우 기본값은 COMPUTE STATISTICS 이다.

COMPUTE STATISTICS

전수 검사를 통해 테이블과 관련된 다음과 같은 통계 정보를 구축한다.

Column의 data type에 따라 구축하는 통계 정보는 다음과 같다.

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의 통계 정보를 구축한다.

샘플링 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 ...

DELETE STATISTICS

테이블의 통계 정보를 제거한다.

DELETE STATISTICS FOR COLUMN GROUPS ( column_name [, ...] )

지정한 COLUMN GROUP 통계 정보를 제거한다.

설명

테이블 통계 정보는 질의 최적화의 정확도에 영향을 미치는 매우 중요한 정보이다.

통계 정보 구축시간은 테이블의 데이터 양에 비례하므로, 데이터 양이 많을 경우 샘플링을 사용하여 통계 정보를 구축하거나 질의에 영향을 미치는 주요 정보에 대해서만 통계 정보를 구축하는 것이 바람직하다.

ANALYZE TABLE lineitem ESTIMATE STATISTICS SAMPLE 10 PERCENT;
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 절을 함께 사용할 수 없다.

<specified_success_option>

설명

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들의 집합을 활성화한다. 
즉, 다음 두 예는 동일한 의미이다.
AUDIT POLICY p1 BY u1;
AUDIT POLICY p1 BY u2;
AUDIT POLICY p1 BY u1, u2;
동일한 audit policy에 대해 다수의 AUDIT POLICY EXCEPT 절을 사용할 경우, 마지막 AUDIT POLICY 구문만 유효하다. 
즉, 다음 두 예는 다른 의미이다.
AUDIT POLICY p1 EXCEPT u1;
AUDIT POLICY p1 EXCEPT u2;
AUDIT POLICY p1 EXCEPT u1, u2;

같은 audit policy에 대해 BY와 EXCEPT를 함께 사용할 수 없다.

AUDIT POLICY p1 BY u1;
AUDIT POLICY p1 EXCEPT u2;
AUDIT POLICY p1 EXCEPT u1;
AUDIT POLICY p1;
BY로 활성화된 audit policy를 EXCEPT로 전환하거나 EXCEPT로 활성화된 audit policy를 BY로 전환하려면 먼저 활성화된 audit policy를 비활성화 한 후에 전환해야 한다.

다음 예와 같이 NOAUDIT POLICY 구문으로 비활성해야 한다.

BY 절과 함께 사용하는 WHENEVER 절은 누적된다.

다음 두 예는 동일한 의미이다.

AUDIT POLICY p1 BY u1 WHENEVER SUCCESSFUL;
AUDIT POLICY p1 BY u1 WHENEVER NOT SUCCESSFUL;
AUDIT POLICY p1 BY u1;

WHENEVER 절이 EXCEPT 절과 함께 사용되면 마지막 WHENEVER 절만 유효하다.

다음 두 예는 서로 다른 의미이다.

AUDIT POLICY p1 EXCEPT u1 WHENEVER SUCCESSFUL;
AUDIT POLICY p1 EXCEPT u1 WHENEVER NOT SUCCESSFUL;
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가 없다.

참조

관련 내용은 다음을 참조한다.