ALTER TABLE
ALTER TABLE#
구문#
alter_table::=#
log_compression_clause ::=, alter_table_properties ::=, alter_table_segment_properties ::=, alter_table_partitioning ::=, alter_table_tablespace ::=, column_clauses ::=, constraints_clauses ::=, aging_clause ::=, compact_clause ::=, allocate_extent_clause ::=, access_mode_clause ::=
log_compression_clause ::=#
alter_table_properties ::=#
logging_clause ::=, parallel_clause ::=, row_movement_clause ::=
alter_table_tablespace ::=#
table_move_index_clause ::=#
table_lob_column_clause ::=#
logging_clause ::=#
parallel_clause ::=#
row_movement_clause ::=#
alter_table_segment_properties ::=#
alter_table_segment_attribute_clause ::=#
storage_clause ::=#
alter_table_partitioning ::=#
add_table_partition ::=, alter_partition ::=, coalesce_table_partition ::=, drop_table_partition ::=, merge_table_partition ::=, rename_table_partition ::=, split_table_partition ::=, truncate_table_partition ::=, partition_access_mode ::=
add_table_partition ::=#
partition_spec ::=, partition_range_clause ::=, index_partition_spec ::=
alter_partition ::=#
partition_index_clause ::=#
partition_lob_column_clause ::=#
coalesce_table_partition ::=#
drop_table_partition ::=#
merge_table_partition ::=#
rename_table_partition ::=#
split_table_partition ::=#
truncate_table_partition ::=#
partition_spec ::=#
table_partition_description ::=#
index_partition_spec ::=#
index_partition_description ::=#
partition_access_mode ::=#
access_mode_clause ::=#
column_clauses ::=#
add_column_clauses ::=, alter_column_clause ::=, modify_column_clause ::=, drop_column_clause ::=, rename_column_clause ::=, reorganize_column_clause ::=
add_column_clauses ::=#
column_definition ::=#
encrypt_clause ::=, variable_clause ::=, in_row_clause ::=, default_clause ::=, column_constraint ::=
partition_lob_storage_clause ::=#
alter_column_clause ::=#
modify_column_clause ::=#
modify_column_spec ::=#
drop_column_clause ::=#
rename_column_clause ::=#
reorganize_column_clause ::=#
constraints_clauses ::=#
add_table_constraint_clauses ::=, modify_constraint_clause ::=, rename_constraint_clauses ::=, drop_constraint_clauses ::=
add_table_constraint_clauses ::=#
table_constraint_for_alter ::=#
using_index_clause ::=, referential_constraint ::=, constraint_state ::=, check_clause ::=
constraint_state ::=#
modify_constraint_clause ::=#
rename_constraint_clauses ::=#
drop_constraint_clause ::=#
aging_clause ::=#
compact_clause ::=#
allocate_extent_clause ::=#
전제 조건#
SYS 사용자, 테이블이 속한 스키마의 소유자, 테이블에 ALTER 객체 권한을 가진 사용자 또는 ALTER ANY TABLE 시스템 권한을 가진 사용자만이 이 구문으로 테이블 정의를 변경할 수 있다.
설명#
ALTER TABLE 구문은 명시된 테이블 정의를 변경하는 SQL문이다. 이 구문의 수행 후 해당 테이블의 메타 정보가 변경된다.
ALTER TABLE 구문으로 파티션드 테이블(partitioned table)의 속성을 변경할 수 있다. 파티션드 테이블 관련 구문에는 테이블스페이스 변경(ALTER), 추가(ADD), 병합(COALESCE), 삭제(DROP), 합병(MERGE), 이름변경(RENAME), 분할(SPLIT), 및 레코드 삭제(TRUNCATE)가 있다.
아래 표는 각 구문을 범위, 해시, 리스트 파티션드 테이블에 사용할 수 있는지 여부를 나타낸다.
범위 파티셔닝으로 생성된 파티션 | 리스트 파티셔닝으로 생성된 파티션 | 해시 파티셔닝으로 생성된 파티션 | 해시를 사용한 범위 파티션 | |
---|---|---|---|---|
테이블스페이스 변경 | ○ | ○ | ○ | ○ |
추가 | △ ( 조건부 가능 ) |
X | ○ | X |
병합 | X | X | ○ | X |
삭제 | ○ | ○ | X | ○ |
합병 | ○ | ○ | X | ○ |
이름 변경 | ○ | ○ | ○ | ○ |
분할 | ○ | ○ | X | ○ |
레코드 삭제 | ○ | ○ | ○ | ○ |
[표 3‑1] 파티셔닝 방법에 따른 지원 연산
user_name#
변경될 테이블의 소유자 이름이다. 생략하면 Altibase는 현재 세션에 연결된 사용자의 스키마에 속한 것으로 간주한다.
tbl_name#
변경될 테이블 이름이다.
parallel_clause#
CREATE TABLE의 parallel_clause 설명을 참고한다.
alter_table_segment_attribute_clause#
PCTFREE 절#
이 절은 페이지에 이미 저장되어 있는 레코드를 갱신할 때 이용하기 위해 예약해 둔 여유 공간의 비율을 변경하기 위해 사용된다. ALTER TABLE 구문의 alter_table_segment_attribute_clause을 사용해 Altibase 운영 중에 세그먼트 속성을 변경할 수 있다. 그러나 즉시 세그먼트의 모든 페이지에 변경 사항이 반영되는 것은 아니며, 이후 연산에 의해 접근된 테이블 페이지에 대해서 개별적으로 적용된다.
PCTUSED 절#
이 절은 한 페이지가 다시 레코드 삽입이 가능한 상태로 돌아가기 위한 페이지 사용 공간의 최소 비율을 변경하기 위해 사용된다.
INITRANS 절#
이 절은 초기 TTS(Touched Transaction Slot)의 개수를 변경하기 위해 사용된다.
MAXTRANS 절#
이 절은 최대 TTS(Touched Transaction Slot)의 개수를 변경하기 위해 사용된다.
storage_clause#
이 절은 사용자가 세그먼트 내의 익스텐트를 관리하기 위한 파라미터를 지정하기 위해 사용한다.
INITEXTENTS 절#
ALTER TABLE 구문의 INITEXTENTS 파라미터는 무시된다.
NEXTEXTENTS 절#
이 절은 세그먼트 확장시 세그먼트에 추가될 익스텐트의 개수를 지정한다.
MINEXTENTS 절#
이 절은 세그먼트의 최소 익스텐트 개수를 지정한다.
MAXEXTENTS 절#
이 절은 세그먼트의 최대 익스텐트 개수를 지정한다.
add_table_partition#
이는 파티션드 테이블에 한 개의 파티션을 추가하는 절이다. 이 절은 해시 파티션드 테이블 또는 기본 파티션이 생략된 범위 파티션드 테이블에만 사용할 수 있다.
partition_spec 절은 해시 파티션드 테이블에만 사용할 수 있다.
partition_range_clause 절은 범위 파티션드 테이블에만 사용할 수 있으며, 범위 파티션드 테이블의 마지막 범위의 파티션을 추가하는 구문이다. SPLIT 파티션 연산과 다르게 데이터가 이동하지 않기 때문에 DML문과의 동시성을 보장할 수 있다.
기존 파티션들에 로컬 인덱스가 이미 생성되어 있는 경우, 추가된 파티션에도 로컬 인덱스가 자동으로 생성된다. 이 때 로컬 인덱스의 이름은 시스템에 의해 자동으로 결정되고, 그 인덱스는 새로 추가된 파티션과 같은 테이블스페이스에 저장된다.
주의
- 범위 파티션드 테이블의 기본 파티션을 추가 할 수 없다.
- 범위 파티션드 테이블의 범위 중간에 파티션을 추가할 수 없다. SPLIT 파티션 연산을 사용해야한다.
partition_spec#
이 절은 파티션의 이름과 파티션이 저장될 테이블스페이스를 명시하는데 사용된다. 테이블스페이스 이름은 생략이 가능하며 이 때에는 파티션의 데이터는 해당 테이블이 위치한 테이블스페이스에 저장된다. 또한, 해당 테이블에 인덱스가 존재한다면 인덱스 파티션이 저장될 테이블스페이스를 지정할 수 있다.
alter_partition#
이 절은 파티션의 테이블스페이스를 변경하는 절이다. 변경되는 파티션의 레코드 뿐 아니라 파티션에 생성한 로컬 인덱스와 LOB 칼럼도 이동할 수 있다.
그러나 인덱스는 동일한 저장 매체의 테이블스페이스로만 이동할 수 있으며, LOB 칼럼은 파티션이 디스크 테이블스페이스로 이동할 때에만 파티션과 다른 테이블스페이스로 지정할 수 있다.
partition_index_clause#
파티션의 테이블 스페이스를 변경할 때, 파티션의 로컬 인덱스가 이동할 테이블스페이스를 지정한다.
partition_lob_column_clause#
파티션의 테이블 스페이스를 변경할 때, 파티션의 LOB 칼럼이 이동할 테이블스페이스를 지정한다.
table_partition_description#
이 절은 각 파티션이 저장될 테이블스페이스를 명시하고 LOB 칼럼이 있는 경우 LOB 칼럼의 속성을 지정하는데 사용된다.
테이블스페이스 절이 생략되면, 해당 테이블의 기본 테이블스페이스에 파티션이 저장된다. 마찬가지로 LOB 칼럼을 위한 테이블스페이스 절이 생략된 경우에는 해당 파티션의 테이블스페이스에 LOB칼럼의 데이터가 저장된다.
테이블스페이스 적용 방식에 관한 더 자세한 내용은 CREATE TABLE 구문의 table_partition_description 설명을 참고한다.
index_partition_spec#
SPLIT PARTITION, MERGE PARTITION, 또는 ADD PARTITION을 실행할 경우 새로운 파티션이 생성된다. 이 때, 이 절은 테이블 파티션과 함께 자동으로 생성되는 인덱스 파티션이 저장될 테이블스페이스를 지정하기 위해 사용될 수 있다.
coalesce_table_partition#
이 절은 해시 파티션에만 사용할 수 있다. 해시 파티션을 병합하고 데이터를 재구성한다. 파티션을 병합하면 마지막 파티션이 선택되어 그 파티션의 데이터는 남아있는 다른 파티션에 분배된 후 제거된다.
drop_table_partition#
이 절은 파티션을 제거하는데 사용된다. 파티션에 있는 데이터와 함께 로컬 인덱스도 제거된다. 데이터를 삭제하지 않으려면, 파티션을 DROP을 하기 전에 다른 파티션과 합병(MERGE)한다.
주의 : 범위, 리스트 파티션드 테이블의 기본 파티션을 삭제 할 수 없다.
merge_table_partition#
두 개의 파티션을 한 개의 파티션으로 합병한다. INTO 절에 합병될 새로운 파티션의 이름을 지정한다. 새로운 파티션의 이름으로 합병될 두 개의 파티션 이름 중의 하나 또는 해당 테이블에 존재하지 않는 파티션의 이름을 사용할 수 있다.
범위 파티션을 합병할 경우, 두 개의 파티션 중 더 큰 상한값을 갖는 파티션으로 합병된다.
리스트 파티션을 합병할 경우, 두 개의 파티션이 갖는 파티션 키 값의 합집합을 갖는 파티션으로 합병된다.
어떤 파티션과 기본 파티션을 합병할 경우에는 합병된 파티션의 도메인은 기본 파티션의 도메인으로 포함되어 기본 파티션만 남게 된다.
해당 테이블에 로컬 인덱스가 있는 경우에는 합병된 파티션의 로컬 인덱스가 삭제된다.
테이블에 LOB 칼럼이 있는 경우에는 LOB 칼럼에 대한 속성을 따로 명시할 수 있다.
테이블스페이스를 명시하지 않을 경우, 새로 생성될 파티션의 이름이 원래 존재하는 파티션의 이름과 같고 그 파티션이 다른 테이블스페이스에 저장되어 있었다 하더라도 새로운 파티션은 테이블의 기본 테이블스페이스에 저장된다.
rename_table_partition#
파티션의 이름을 변경한다.
split_table_partition#
하나의 파티션을 두 개의 파티션으로 분리한다.
AT 절은 범위 파티션에만 사용할 수 있으며, 2개의 파티션으로 나누는 기준이 되는 파티션 키 값을 여기에 명시한다. 이 값은 바로 앞의 파티션 키 값보다 커야 하고, 분리하기 전의 파티션의 파티션 키 값보다는 작아야한다.
VALUES 절은 리스트 파티션에만 사용할 수 있으며, 기존의 파티션 키 값의 리스트에서 분리하기를 원하는 값의 리스트를 여기에 명시한다. VALUES 절에 올 수 있는 값은 기존 파티션 키 값의 리스트에 반드시 들어있는 값이어야 한다. 그러나 그 리스트의 모든 값을 포함할 수는 없다.
INTO 절은 분리된 2개의 파티션의 이름과 파티션이 저장될 테이블스페이스 등을 지정할 수 있는 구문이다.
테이블에 로컬 인덱스가 있는 경우 로컬 인덱스 파티션도 테이블 파티션과 같이 분리된다.
테이블에 LOB 칼럼이 있는 경우 LOB 칼럼에 대한 속성을 따로 정의할 수 있다.
truncate_table_partition#
해당 파티션 안에 있는 모든 데이터를 삭제한다.
partition_access_mode#
파티션에 대한 접근 모드를 읽기 전용 모드, 읽기/쓰기 모드 또는 읽기/추가 모드로 변경한다.
add_column_clause#
테이블에 새로운 칼럼을 추가한다.
partition_lob_storage_clause#
파티션드 테이블에 LOB 칼럼을 추가할 경우 이 절을 사용해서 LOB 칼럼 파티션을 어떤 테이블스페이스에 저장할 것인지 지정할 수 있다.
alter_column_clause#
기존 칼럼의 기본 값을 변경한다.
modify_column_clause#
기존 칼럼의 자료형(data type)을 변경하거나 공간 객체 타입인 경우 SRID의 값을 변경한다.
SRID는 4바이트 범위 내의 정수를 사용할 수 있다. 만약 SRID의 값을 변경할 경우 테이블에 입력된 값과 일치하는 값만 선택할 수 있다.
다음의 표는 특정 자료형이 다른 자료형으로 변경이 가능한지 여부를 나타낸다. △로 표시한 부분은 자료형을 변경했을 때, 테이블의 데이터가 NULL이 아닌 경우 자료 손실(data loss)이 발생할 수 있음을 나타낸다. 만일 이러한 자료 손실을 감수하고서라도 자료형을 변경하고자 하는 경우 TOLERATE DATA LOSS 옵션을 사용하면 된다.
자료형 변경 시 전제 조건#
- 문자형 데이터 타입 --> 숫자형 데이터 타입
문자형 데이터가 숫자와 소숫점으로만 구성되어야 한다.
문자형 데이터가 숫자형 데이터 타입의 범위 내에 있어야 한다. - 문자형 데이터 타입 --> 문자형 데이터 타입
변경 전 데이터 타입의 길이보다 칼럼의 크기가 크거나 같아야 한다. 숫자형 데이터 타입 --> 문자형 데이터 타입
변경 전 데이터 타입의 길이보다 칼럼의 크기가 크거나 같아야 한다. - 숫자형 데이터 타입 --> 숫자형 데이터 타입
데이터가 변경하려는 숫자형 데이터 타입의 범위 내에 있어야 한다. - 문자형 데이터 타입 --> 날짜형 데이터 타입
변경 전의 데이터가 날짜형으로 저장되어 있어야 한다.
데이터 형식이 DEFAULT_DATE_FORMAT 프로퍼티와 일치해야 한다. - 날짜형 데이터 타입 --> 문자형 데이터 타입
문자형으로 변환될 때 DEFAULT_DATE_FORMAT으로 변경된다.
변경 후 변경 전 | char | var char | nchar | nvarchar | clob | big int | dou ble | float | int eger | num ber | num eric | real | small int | date | blob | byte | nibble | bit | varbit | geometry |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
char | o | o | o | o | △ | △ | △ | △ | △ | △ | △ | △ | △ | |||||||
varchar | o | o | o | o | △ | △ | △ | △ | △ | △ | △ | △ | △ | |||||||
nchar | o | o | o | o | △ | △ | △ | △ | △ | △ | △ | △ | △ | |||||||
nvarchar | o | o | o | o | △ | △ | △ | △ | △ | △ | △ | △ | △ | |||||||
clob | ||||||||||||||||||||
bigint | o | o | o | o | o | △ | △ | o | △ | △ | △ | o | ||||||||
double | o | o | o | o | △ | o | △ | △ | △ | △ | △ | △ | ||||||||
float | o | o | o | o | △ | △ | △ | △ | △ | △ | △ | △ | ||||||||
integer | o | o | o | o | o | △ | △ | o | △ | △ | △ | o | ||||||||
number | o | o | o | o | △ | △ | △ | △ | △ | △ | △ | △ | ||||||||
numeric | o | o | o | o | △ | △ | △ | △ | △ | △ | △ | △ | ||||||||
real | o | o | o | o | △ | △ | △ | △ | △ | △ | o | △ | ||||||||
smallint | o | o | o | o | o | △ | △ | o | △ | △ | △ | o | ||||||||
date | △ | △ | △ | △ | o | |||||||||||||||
blob | ||||||||||||||||||||
byte | o | |||||||||||||||||||
nibble | o | |||||||||||||||||||
bit | o | o | ||||||||||||||||||
varbit | o | o | o | |||||||||||||||||
geometry | o |
- O: 데이터 타입 변경 조건을 만족하면, TOLERATE DATA LOSS 옵션을 명시할 필요없이 기존 칼럼의 자료형 변경 가능
- △: 데이터 타입 변경 조건을 만족하고,TOLERATE DATA LOSS 옵션을 명시해야 기존 칼럼의 자료형 변경 가능
drop_column_clause#
하나의 칼럼 혹은 여러 개의 칼럼을 삭제한다.
rename_column_clause#
칼럼 이름을 변경한다.
reorganize_column_clause#
칼럼의 데이터를 실제로 저장하고 있는 딕셔너리 테이블의 데이터를 재구축할 칼럼을 명시한다.
column_definition#
DEFAULT#
새로운 칼럼을 추가할 때 DEFAULT 절을 명시하지 않으면 각 행의 새로운 칼럼의 초기값은 NULL이다. 그러나 DEFAULT 절을 명시한 경우에는 기존 행에 칼럼 추가 시 명시한 DEFAULT 값이 입력된다.
TIMESTAMP#
TIMESTAMP 칼럼을 추가한다.
column_constraint#
새로운 칼럼에 대해 제약조건을 명시한다.
NULL/NOT NULL#
칼럼에 NULL 값 허용 여부를 지정한다. ALTER TABLE 구문을 사용해서 NULL 값이 허용되지 않는 칼럼을 추가하고자 하면 기본값을 반드시 지정해야 한다. 즉, 테이블에 새로 추가될 칼럼은 NULL 값을 허용하거나 기본값이 지정되어 있어야 한다.
CHECK condition#
해당 칼럼에 대한 무결성 규칙(Integrity Rule)을 지정한다. column_constraint 절의 condition 내에서는 해당 칼럼만 참조할 수 있다.
USING INDEX TABLESPACE tablespace_name#
제약 조건을 위해 생성되는 인덱스가 저장될 테이블스페이스를 지정한다.
ALTER TABLE 문의 상당수의 절이 CREATE TABLE 문과 같은 기능을 가지고 있다. 그러한 절들에 대한 자세한 정보는 CREATE TABLE 문을 참고한다.
constraints_clauses#
테이블에 제약조건을 추가, 삭제하거나 이름을 변경하는 절이다.
add_table_constraints_clause#
테이블에 제약조건을 추가하는 절이다.
rename_table_constraints_clause#
제약조건의 이름을 변경하는 절이다.
drop_table_constraints_clause#
존재하는 제약조건을 제거하는 절이다.
DROP CONSTRAINT#
제약조건 삭제
DROP PRIMARY KEY#
기본키 삭제
DROP UNIQUE#
UNIQUE 제약 삭제
DROP LOCALUNIQUE#
RENAME TO#
테이블의 이름을 변경한다.
MAXROWS#
테이블 생성 시 지정된 테이블의 최대 레코드 개수를 변경한다. 자세한 설명은 CREATE TABLE 문을 참고한다.
ENABLE/DISABLE#
해당 테이블(tbl_name)의 모든 인덱스들을 비활성화 또는 활성화 상태로 변경하는 옵션이다. 서버 재구동 시 또는 데이터베이스 운영 중에 인덱스 빌딩 시간을 최소화1하여 성능을 향상시킬 수 있다. 예를 들어, iLoader로 대량의 데이터를 데이터베이스에 적재할 때 (또는 기존 테이블의 내용을 새 테이블로 이동할 때) 데이터가 저장될 테이블에 인덱스가 많은 경우, 인덱스 구축으로 인해 데이터 로딩에 많은 시간이 소요2된다. 그러므로 인덱스를 비활성화(disable)시킨 상태에서 대량의 레코드 삽입 후 인덱스를 다시 활성화(enable) 하면 데이터 로딩 시간이 단축되어 성능을 향상시킬 수 있다.
aging_clause#
테이블 내에서 이미 논리적으로 삭제된 구 버전(old version)들을 물리적으로 삭제한다. 파티션을 지정하여 수행할 수 있다.
compact_clause#
데이터가 없는 빈 페이지들을 테이블스페이스에 반환한다. MAXPAGES 구문으로 압축할 수 있는 최대 페이지 크기를 지정할 수 있다. 압축을 수행하여도, Altibase는 실제로 데이터를 옮기지는 않는다. 이 구문은 메모리 테이블과 휘발성 테이블에 대해서만 지원되며, 파티션을 지정하여 수행할 수 있다.
allocate_extent_clause#
테이블 세그먼트에 명시적으로 익스텐트를 할당한다. SIZE에는 테이블 세그먼트에 추가적으로 할당될 익스텐트의 총 크기를 지정한다. 여기에 명시한 값이 한 익스텐트 크기의 배수가 아니라면, 할당되는 익스텐트의 개수는 반올림된다. 디스크 테이블스페이스가 여러 데이터 파일로 구성되어 있다면 익스텐트는 여러 파일들에 걸쳐서 고르게 할당된다.
ACCESS access_mode_clause#
테이블에 대한 접근 모드를 읽기 전용 모드, 읽기/쓰기 모드 또는 읽기/추가 모드로 변경한다.
alter_table_tablespace#
테이블의 테이블스페이스를 변경할 수 있으며, 기존 테이블에 생성한 인덱스와 LOB 칼럼도 함께 이동할 수 있다. 이 때 파티션드 테이블 여부에 따라 레코드 이동과 칼럼 속성의 변경이 묵시적으로 수행될 수 있다. 단, 임시 테이블(Temporary Table)은 테이블스페이스를 변경할 수 없다.
논파티션드 테이블의 경우#
- 테이블의 레코드를 이동한다.
- 디스크 테이블스페이스에서 메모리 또는 휘발성으로 테이블스페이스를 변경할 때는 VARIABLE이 가능한 칼럼을 VARIABLE로 변경한다.
- 메모리 또는 휘발성 테이블스페이스에서 디스크로 테이블스페이스를 변경할 때는 모든 칼럼을 FIXED로 변경한다.
파티션드 테이블의 경우#
- 파티션드 테이블의 테이블스페이스만 변경할 수 있다. 이 때, 파티션의 테이블스페이스를 변경하지 않고, 파티션의 레코드도 이동하지 않는다.
- 파티션의 테이블스페이스를 변경하려면, alter_partition 절을 참고한다.
table_move_index_clause#
테이블스페이스를 변경할 때, 해당 테이블의 인덱스를 저장할 테이블스페이스를 지정할 수 있다.
단 테이블과 동일한 종류(메모리, 휘발성, 디스크)의 테이블스페이스로만 이동할 수 있다.
table_lob_column_clause#
테이블스페이스를 변경할 때, 해당 테이블의 LOB 칼럼이 저장할 테이블스페이스를 지정할 수 있다.
단 파티션이 디스크 테이블스페이스로 이동하는 경우에만, LOB 칼럼을 저장할 테이블스페이스를 다른 디스크 테이블스페이스로 지정할 수 있다.
TOUCH#
SCN(System Commit Number)을 증가시켜 옵티마이저가 테이블이 변경된 것으로 인식하게 한다. 해당 테이블이 포함된 질의의 실행 계획을 재생성한다.
주의 사항#
- 이중화 대상 테이블의 정의는 변경할 수 없다. 칼럼의 자료형을 변경하는 것은 테이블의 정의를 변경하는 것이므로 이중화 대상 테이블에는 허용되지 않는다.
-
테이블에 파티션이 하나만 있으면 COALESCE/DROP TABLE PARTITION을 사용할 수 없다.
-
해시 파티션드 테이블에 DROP PARTITION과 MERGE PARTITION절을 사용할 수 없다. 대신 COALESCE PARTITION 절을 이용하도록 한다. 또한 해시 파티션드 테이블에는 SPLIT PARTITION을 사용할 수 없다.
-
범위 파티션드 테이블의 경우 병합할 파티션은 서로 인접해 있어야 한다.
-
다른 테이블에 의해 참조되는 기본키(PRIMARY KEY) 또는 유니크 키가 테이블에 존재하면 그 테이블의 정의는 변경할 수 없다.
-
칼럼 추가 또는 삭제로 테이블의 전체 칼럼 수가 0이 되거나 최대 칼럼 수인 1024개를 초과할 수 없다. 만약 테이블에 VARIABLE 속성의 칼럼이 있다면 그 테이블의 최대 허용 칼럼 수는 IN ROW 절에 지정한 값에 따라 1024개 이하가 될 것이다.
-
기본키는 한 테이블에 한 개만 존재할 수 있다.
-
참조 제약의 경우 외래키(foreign key)와 참조키(기본 키 또는 유니크 키)의 칼럼 개수와 각 칼럼의 자료형은 동일해야 한다.
-
외래키와 관련있는 칼럼의 경우 칼럼의 자료형을 변경할 수 없다. 외래키가 걸려 있는 칼럼이거나 외래키에 의해 참조되는 키 (기본키 또는 유니크 키)가 걸려 있는 칼럼의 경우 데이터 타입 변경이 칼럼의 값을 변경시킬 수 있으므로, 데이터 타입 변경을 허용하지 않는다.
-
한 테이블에 생성할 수 있는 인덱스의 최대 개수는 64개이다. 한 테이블의 기본키와 유니크 제약조건의 개수의 총합이 64개를 넘을 수 없다.
-
파티션드 테이블의 테이블스페이스를 변경할 때 각 파티션의 레코드는 이동하지 않는다.
-
메모리 또는 휘발성 테이블스페이스에서 디스크 테이블스페이스로 변경될 때 모든 칼럼은 FIXED로 변경된다.
제한 사항#
- ADD/DROP CONSTRAINT 절을 사용해서 기존 칼럼에 TIMESTAMP 제약조건을 추가 또는 삭제할 수 없다.
- TIMESTAMP 제약조건을 가진 칼럼에 INSERT 또는 UPDATE 수행 시 기본값으로 시스템 시간 값이 입력된다. 따라서 ALTIER TABLE SET/DROP DEFAULT 문을 이용하여 DEFAULT를 변경 또는 삭제할 수 없다. 자세한 설명은 CREATE TABLE 문을 참고한다.
- GEOMETRY 칼럼의 SRID를 변경할 때, 테이블에 입력된 값과 일치하는 값만 선택할 수 있다. 예를 들어 테이블 안에 100, 101, 102를 SRID로 갖는 값이 입력된 경우 어떤 값으로도 변경할 수 없다.
예제 1: 칼럼 추가/삭제#
<질의> 테이블 books에 다음 칼럼들을 추가하라.
isbn: CHAR(10) PRIMARY KEY
edition: INTEGER DEFAULT 1
iSQL> ALTER TABLE books
ADD COLUMN (isbn CHAR(10) PRIMARY KEY,
edition INTEGER DEFAULT 1);
Alter success.
또는
iSQL> ALTER TABLE books
ADD COLUMN (isbn CHAR(10) CONSTRAINT const1
PRIMARY KEY, edition INTEGER DEFAULT 1);
Alter success.
<질의> 테이블 books에서 isbn 칼럼을 삭제하라.
iSQL> ALTER TABLE books
DROP COLUMN isbn;
Alter success.
<질의> 테이블 books에 TIMESTAMP 칼럼을 추가하라.
iSQL> ALTER TABLE books
ADD COLUMN (due_date TIMESTAMP);
Alter success.
<질의> 테이블 books에 isbn, due_date 칼럼인 due_date을 삭제하라.
iSQL> ALTER TABLE books
DROP COLUMN (isbn, due_date);
Alter success.
예제 2: 기존 칼럼에 제약조건 추가/삭제#
<질의> 테이블 books의 기존 bno(북넘버) 칼럼에 UNIQUE 제약조건을 추가하라.
iSQL> ALTER TABLE books
ADD UNIQUE(bno);
Alter success.
또는
iSQL> ALTER TABLE books
ADD CONSTRAINT const1 UNIQUE(bno);
Alter success
<질의> 테이블 boosk의 const1 제약조건의 이름을 변경하라.
iSQL> ALTER TABLE books
RENAME CONSTRAINT const1 TO const_unique;
Alter success
<질의> 테이블 books의 bno 칼럼의 UNIQUE 제약조건을 삭제하라.
iSQL> ALTER TABLE books
DROP UNIQUE(bno);
Alter success.
또는
iSQL> ALTER TABLE books
DROP CONSTRAINT const_unique;
Alter success
<질의> 테이블 inventory에 다음 칼럼 추가 시 books 테이블의 isbn을 참조하는 외래키 fk_isbn을 추가하라.
isbn: CHAR(10)
iSQL> ALTER TABLE inventory
ADD COLUMN(isbn CHAR(10) CONSTRAINT fk_isbn REFERENCES books(isbn));
Alter success.
<질의> 테이블 inventory의 제약조건 fk_isbn을 삭제하라.
iSQL> ALTER TABLE inventory
DROP CONSTRAINT fk_isbn;
Alter success.
<질의> 테이블 books에서 기본키 제약을 삭제하라.
iSQL> ALTER TABLE books
DROP PRIMARY KEY;
Alter success.
<질의> 테이블 books의 칼럼 bno(북넘버)에 PRIMARY KEY 제약을 추가하고, 이때 인덱스는 시스템 고장이나 미디어 고장이 발생하더라도 사용할 수 있게 LOGGING 옵션을 사용하라.
iSQL> ALTER TABLE books
ADD PRIMARY KEY (bno) USING INDEX PARALLEL 4;
Alter success.
또는
iSQL> ALTER TABLE books
ADD PRIMARY KEY (bno) USING INDEX LOGGING
PARALLEL 4;
Alter success.
<질의> 테이블 books의 칼럼 bno(북넘버)에 PRIMARY KEY 제약을 추가하고, 이때 인덱스는 NOLOGGING 옵션으로 생성하되 서버가 죽더라도 인덱스를 사용할 수 있게 FORCE옵션도 사용하라.
iSQL> ALTER TABLE books
ADD PRIMARY KEY (bno) USING INDEX NOLOGGING PARALLEL 4;
Alter success.
또는
iSQL> ALTER TABLE books
ADD PRIMARY KEY (bno) USING INDEX NOLOGGING FORCE PARALLEL 4;
Alter success.
<질의> 테이블 books의 칼럼 bno(북넘버)에 PRIMARY KEY 제약을 추가하고, 이때 인덱스는 NOLOGGING 옵션으로 생성하고 디스크에 반영하지 않게 NOFORCE옵션을 사용하라.
iSQL> ALTER TABLE books
ADD PRIMARY KEY (bno) USING INDEX NOLOGGING NOFORCE PARALLEL 4;
Alter success.
<질의> 테이블 books의 bno(북넘버) 칼럼에 값이 1에서 1000000 사이의 값이어야 한다는 CHECK 제약조건을 추가하라.
iSQL> ALTER TABLE books ADD CHECK ( bno >= 1 AND bno <= 1000000 );
Alter success.
예제 3: 인덱스 파티션에 테이블스페이스 지정#
<질의> 파티션드 테이블 t1에 LOCALUNIQUE 제약을 갖는 i2 칼럼을 추가하라.
iSQL> ALTER TABLE T1 ADD COLUMN
(I2 INTEGER LOCALUNIQUE USING INDEX LOCAL
(
PARTITION P1_LOCALUNIQUE ON P1 TABLESPACE TBS3,
PARTITION P2_LOCALUNIQUE ON P2 TABLESPACE TBS2,
PARTITION P3_LOCALUNIQUE ON P3 TABLESPACE TBS1
)
);
<질의> 파티션드 테이블 t3에 LOCALUNIQUE 제약을 갖는 i7 칼럼을 추가하되, 생성될 파티션드 인덱스의 각 파티션이 저장될 테이블스페이스를 지정하라.
iSQL> ALTER TABLE t3
ADD COLUMN ( i7 INTEGER LOCALUNIQUE USING INDEX LOCAL
(
PARTITION p1_localunique ON p1 TABLESPACE PMT_TBS,
PARTITION p2_localunique ON p2 TABLESPACE PMT_TBS,
PARTITION p3_localunique ON p3 TABLESPACE PMT_TBS2,
PARTITION p4_localunique ON p4 TABLESPACE PMT_TBS3,
PARTITION pd_localunique ON pd TABLESPACE PMT_TBS4
)
);
Alter success.
예제 4: 칼럼 이름 변경#
테이블의 칼럼 이름을 변경할 때 사용한다. 새로운 칼럼 이름은 그 테이블에 있는 다른 칼럼 이름과 같아서는 안 된다. 칼럼 이름이 변경됐을 때, 예전 칼럼과 관련 된 인덱스 및 모든 제약 조건은 새로운 칼럼이 승계한다.
예전 칼럼을 참조하는 저장 프로시저가 존재하면 해당 프로시저는 invalid 한 상태가 된다. 이렇게 된 저장 프로시저를 사용 가능하도록 하려면 사용자는 저장 프로시저내의 칼럼 이름을 새로운 이름으로 변경해야 한다.
<질의> 테이블 departments에서 칼럼 이름 dno를 dcode로 변경하라.
iSQL> ALTER TABLE departments
RENAME COLUMN dno TO dcode;
Alter success.
예제 5: DEFAULT 값 설정/삭제#
<질의> 테이블 employees에서 sex 칼럼의 기본값을 'M'으로 설정하라.
iSQL> ALTER TABLE employees
ALTER (sex SET DEFAULT 'M');
Alter success.
<질의> 테이블 employees에서 sex 칼럼의 기본값 설정을 삭제하라.
iSQL> ALTER TABLE employees
ALTER (sex DROP DEFAULT);
Alter success.
예제 6: 자료형 변경#
<질의> 테이블 books의 isbn 칼럼의 자료형을 CHAR(20) 형으로, edition 칼럼의 자료형을 BIGINT 형으로 변경하라.
iSQL> ALTER TABLE books MODIFY COLUMN (isbn CHAR(20), edition BIGINT);
Alter success.
<질의> books 테이블에서 isbn 칼럼의 자료형을 CHAR(20)에서 BIGINT형으로, edition 칼럼의 자료형을 BIGINT에서 FLOAT형으로 변경하라.
iSQL> ALTER TABLE books MODIFY COLUMN (isbn BIGINT TOLERATE DATA LOSS, edition FLOAT TOLERATE DATA LOSS);
Alter success.
<질의> t1 테이블에서 i1칼럼의 자료형을 CHAR(20)에서 DATE 형으로 변경하라.
iSQL> CREATE TABLE t1 (i1 CHAR(20));
insert into t1 values (sysdate);
Create success.
ALTER TABLE t1 MODIFY COLUMN (i1 DATE TOLERATE DATA LOSS);
Alter success.
<질의> 테이블 t에서 c4 칼럼의 자료형을 CHAR(14)에서 DATE 형으로 변경하라.
iSQL> ALTER TABLE t ADD COLUMN (c4 CHAR(14));
Alter success.
iSQL> INSERT INTO t(c4) VALUES('20161123112119');
1 row inserted.
iSQL>ALTER SESSION SET DEFAULT_DATE_FORMAT = 'YYYYMMDDHHMISS';
Alter success.
iSQL> ALTER TABLE t MODIFY COLUMN (c4 DATE TOLERATE DATA LOSS);
Alter success.
예제 7: 테이블 이름 변경#
<질의> 테이블 books의 이름을 ebooks으로 변경하라.
iSQL> RENAME books TO ebooks;
Rename success.
또는
iSQL> ALTER TABLE books
RENAME TO ebooks;
Alter success.
예제 8: 테이블의 최대 레코드 개수 변경#
<질의> 테이블 departmenst에 최대 입력할 수 있는 레코드의 개수를 6000000개로 설정하라.
iSQL> ALTER TABLE departments MAXROWS 6000000;
Alter success.
예제 9: 인덱스 활성화/비활성화#
<질의> 테이블 orders의 모든 인덱스를 비활성하라.
iSQL> ALTER TABLE orders ALL INDEX DISABLE;
Alter success.
예제 10: 파티션드 테이블 생성#
<질의> 범위, 리스트, 해시 파티션드 테이블을 생성하라.
CREATE TABLE T1
(
I1 INTEGER,
I2 INTEGER
)
PARTITION BY RANGE(I1)
(
PARTITION P1 VALUES LESS THAN (100),
PARTITION P2 VALUES LESS THAN (200),
PARTITION P3 VALUES DEFAULT
) TABLESPACE SYS_TBS_DISK_DATA;
CREATE TABLE T2
(
I1 INTEGER,
I2 INTEGER
)
PARTITION BY LIST (I1)
(
PARTITION P1 VALUES (1,2,3,4),
PARTITION P2 VALUES (5,6,7,8),
PARTITION P3 VALUES DEFAULT
) TABLESPACE SYS_TBS_DISK_DATA;
CREATE TABLE T3
(
I1 INTEGER
)
PARTITION BY HASH (I1)
(
PARTITION P1,
PARTITION P2
) TABLESPACE SYS_TBS_DISK_DATA;
CREATE TABLE T4
(
I1 INTEGER,
I2 INTEGER
)
PARTITION BY RANGE(I1)
(
PARTITION P1 VALUES LESS THAN (100),
PARTITION P2 VALUES DEFAULT
);
CREATE TABLE T5
(
I1 INTEGER,
I2 INTEGER
)
PARTITION BY LIST (I1)
(
PARTITION P1 VALUES DEFAULT
);
CREATE TABLE T6
(
I1 INTEGER
)
PARTITION BY HASH (I1)
(
PARTITION P1
);
예제 11: 파티션 연산#
파티션 추가(ADD PARTITION)#
<질의> 해시 파티션드 테이블에 새로운 파티션을 추가하라..
ALTER TABLE T3 ADD PARTITION P3;
파티션 병합(COALESCE PARTITION)#
<질의> 해시 파티션드 테이블의 파티션을 병합하라.(T3에는 2개의 해시 파티션만 남는다)
ALTER TABLE T3 COALESCE PARTITION;
파티션 삭제(DROP PARTITION)#
<질의> 테이블 T1에서 파티션 P2를 삭제한다.
ALTER TABLE T1 DROP PARTITION P2;
파티션 합병(MERGE PARTITION)#
<질의> 테이블 T1에 남아있는 파티션인 P1, P3를 P_1_3이라는 새로운 이름을 갖는 파티션으로 합병한다.
ALTER TABLE T1 MERGE PARTITIONS P1, P3 INTO PARTITION P_1_3;
파티션 이름 변경(RENAME PARTITION)#
<질의> 파티션 P1의 이름을 P1_LIST로 변경한다.
ALTER TABLE T2 RENAME PARTITION P1 TO P1_LIST;
파티션 분리(SPLIT PARTITION)#
<질의> 범위 파티션드 테이블 T1에서 기본 파티션인 P3를 350을 기준으로 분리한다. 이를 수행하면 200 ~ 350의 범위를 갖는 P_200_350이라는 이름의 파티션 하나가 생성되고, 기존의 기본 파티션의 이름은 P_OVER_350으로 변경될 것이다.
ALTER TABLE T1 SPLIT PARTITION P3
AT ( 350 ) INTO ( PARTITION P_200_350, PARTITION P_OVER_350 );
<질의> 리스트 파티션드 테이블의 경우에는 AT 대신 VALUES를 사용해서 분리한다.
ALTER TABLE T2
SPLIT PARTITION P1_LIST VALUES ( 2, 4 )
INTO
(
PARTITION P_2_4 TABLESPACE TBS1,
PARTITION P_1_3 TABLESPACE TBS2
);
파티션 데이터 삭제(TRUNCATE PARTITION)#
<질의> 파티션 P5에 들어있는 모든 데이터를 삭제한다.
ALTER TABLE T1 TRUNCATE PARTITION P5;
예제 12: 파티션드 테이블 인덱스 생성#
CREATE INDEX T4_IDX ON T4 ( I1 )
LOCAL
(
PARTITION T4_P1_IDX ON P1,
PARTITION T4_P2_IDX ON P2
);
CREATE INDEX T5_IDX ON T5 ( I1 )
LOCAL
(
PARTITION T5_P1_IDX ON P1
);
CREATE INDEX T6_IDX ON T6 ( I1 )
LOCAL
(
PARTITION T6_P1_IDX ON P1
);
예제 13: 인덱스 파티션 이름 지정#
<질의> 해시 파티션드 테이블에 새로운 파티션 추가 시, 인덱스 파티션 이름을 지정한다.
ALTER TABLE T6 ADD PARTITION P2 INDEX ( T6_IDX PARTITION T6_P2_IDX );
<질의> 테이블 T4에 남아있는 파티션인 P1, P2를 P1으로 합병하고 인텍스 파티션 이름을 지정한다.
ALTER TABLE T4 MERGE PARTITIONS P1, P2 INTO PARTITION P1 INDEX ( T4_IDX
PARTITION T4_P1_IDX );
<질의> 범위 파티션드 테이블 T4에서 기본 파티션인 P1를 100을 기준으로 분리한다. P1은 In-place 분리이기 때문에 인덱스 파티션 이름을 지정할 수 없다.
ALTER TABLE T4 SPLIT PARTITION P1 AT ( 100 ) INTO
(
PARTITION P1,
PARTITION P2 INDEX ( T4_IDX PARTITION T4_P2_IDX )
);
<질의> 리스트 파티션드 테이블의 경우에는 AT 대신 VALUES를 사용해서 분리한다. P1은 In-place 분리이기 때문에 인덱스 파티션 이름을 지정할 수 없다.
ALTER TABLE T5 SPLIT PARTITION P1 VALUES ( 2, 4 ) INTO
(
PARTITION P1,
PARTITION P2 INDEX ( T5_IDX PARTITION T5_P2_IDX )
);
예제 14: row_movement_clause 절 이용#
<질의> 테이블 T1은 반드시 파티션드 테이블이어야 한다. 논파티션드 테이블일 경우 에러가 발생한다.
ALTER TABLE T1 ENABLE ROW MOVEMENT;
예제 15: 테이블에 익스텐트 할당#
<질의> 디스크 테이블스페이스에 존재하는 LOCAL_TBL 테이블에 10M만큼의 익스텐트를 할당한다.
iSQL> ALTER TABLE LOCAL_TBL ALLOCATE EXTENT ( SIZE 10M );
Alter success.
예제 16: 테이블의 테이블스페이스 변경#
<질의> 논파티션드 테이블을 생성하여 다른 저장 매체의 테이블스페이스로 변경하라.
iSQL> CREATE MEMORY TABLESPACE mem_tbs_0 SIZE 32M AUTOEXTEND ON;
Create success.
iSQL> CREATE VOLATILE TABLESPACE vol_tbs_0 SIZE 32M AUTOEXTEND ON;
Create success.
iSQL> CREATE TABLE sales_table
(
sales_date DATE,
sales_id NUMBER,
sales_city VARCHAR(20)
)
TABLESPACE SYS_TBS_DISK_DATA UNCOMPRESSED LOGGING;
Create success.
Disk -> Memory#
iSQL> ALTER TABLE sales_table ALTER TABLESPACE SYS_TBS_MEM_DATA;
Alter success.
Memory -> Memory#
iSQL> ALTER TABLE sales_table ALTER TABLESPACE mem_tbs_0;
Alter success.
Memory -> Volatile#
iSQL> ALTER TABLE sales_table ALTER TABLESPACE vol_tbs_0;
Alter success.
Volatile -> Disk#
iSQL> ALTER TABLE sales_table ALTER TABLESPACE SYS_TBS_DISK_DATA;
Alter success.
Disk -> Volatile#
iSQL> ALTER TABLE sales_table ALTER TABLESPACE vol_tbs_0;
Alter success.
Volatile -> Memory#
iSQL> ALTER TABLE sales_table ALTER TABLESPACE mem_tbs_0;
Alter success.
Memory -> Disk#
iSQL> ALTER TABLE sales_table ALTER TABLESPACE SYS_TBS_DISK_DATA;
Alter success.
<질의> 파티션드 테이블을 생성하여 다른 저장 매체의 테이블스페이스로 변경하라.
iSQL> CREATE TABLE part_table
(
sales_date DATE,
sales_id NUMBER,
sales_city VARCHAR(20)
)
PARTITION BY LIST(sales_city)
(
PARTITION part_1 VALUES ( 'SEOUL' , 'INCHEON' ),
PARTITION part_2 VALUES ( 'PUSAN' , 'JUNJU' ),
PARTITION part_3 VALUES ( 'CHUNGJU' , 'DAEJUN' ),
PARTITION part_def VALUES DEFAULT
)
TABLESPACE SYS_TBS_DISK_DATA UNCOMPRESSED LOGGING;
Create success.
Disk -> Memory#
iSQL> ALTER TABLE part_table ALTER TABLESPACE SYS_TBS_MEM_DATA;
Alter success.
Memory -> Memory#
iSQL> ALTER TABLE part_table ALTER TABLESPACE mem_tbs_0;
Alter success.
Memory -> Volatile#
iSQL> ALTER TABLE part_table ALTER TABLESPACE vol_tbs_0;
Alter success.
Volatile -> Disk#
iSQL> ALTER TABLE part_table ALTER TABLESPACE SYS_TBS_DISK_DATA;
Alter success.
Disk -> Volatile#
iSQL> ALTER TABLE part_table ALTER TABLESPACE vol_tbs_0;
Alter success.
Volatile -> Memory#
iSQL> ALTER TABLE part_table ALTER TABLESPACE mem_tbs_0;
Alter success.
Memory -> Disk#
iSQL> ALTER TABLE part_table ALTER TABLESPACE SYS_TBS_DISK_DATA;
Alter success.
<질의> 파티션드 테이블을 다른 테이블스페이스로 변경하고, 파티션드 테이블의 인덱스를 저장할 테이블스페이스를 변경한다.
iSQL> CREATE DISK TABLESPACE disk_tbs_0 DATAFILE '/tmp/tbs.user.0';
Create success.
iSQL> CREATE DISK TABLESPACE disk_tbs_1 DATAFILE '/tmp/tbs.user.1';
Create success.
iSQL> CREATE MEMORY TABLESPACE mem_tbs_0 SIZE 32M AUTOEXTEND ON;
Create success.
iSQL> CREATE MEMORY TABLESPACE mem_tbs_1 SIZE 32M AUTOEXTEND ON;
Create success.
iSQL> CREATE VOLATILE TABLESPACE vol_tbs_0 SIZE 32M AUTOEXTEND ON;
Create success.
iSQL> CREATE VOLATILE TABLESPACE vol_tbs_1 SIZE 32M AUTOEXTEND ON;
Create success.
iSQL> CREATE TABLE text_table
(
id NUMBER,
date DATE,
text VARCHAR(500)
)
PARTITION BY RANGE ( id )
(
PARTITION part_1 VALUES LESS THAN ( 100 ),
PARTITION part_2 VALUES LESS THAN ( 200 ),
PARTITION part_def VALUES DEFAULT
)
TABLESPACE disk_tbs_0 UNCOMPRESSED LOGGING;
Create success.
iSQL> CREATE INDEX text_table_idx on text_table ( date ) LOCAL;
Create success.
Disk -> Memory#
iSQL> ALTER TABLE text_table ALTER TABLESPACE mem_tbs_0 INDEX ( text_table_idx TABLESPACE mem_tbs_1 );
Alter success.
Memory -> Volatile#
iSQL> ALTER TABLE text_table ALTER TABLESPACE vol_tbs_0 INDEX ( text_table_idx TABLESPACE vol_tbs_1 );
Alter success.
Volatile -> Disk#
iSQL> ALTER TABLE text_table ALTER TABLESPACE disk_tbs_0 INDEX ( text_table_idx TABLESPACE disk_tbs_1 );
Alter success.
Disk -> Volatile#
iSQL> ALTER TABLE text_table ALTER TABLESPACE vol_tbs_1 INDEX ( text_table_idx TABLESPACE vol_tbs_0 );
Alter success.
Volatile -> Memory#
iSQL> ALTER TABLE text_table ALTER TABLESPACE mem_tbs_1 INDEX ( text_table_idx TABLESPACE mem_tbs_0 );
Alter success.
Memory -> Disk#
iSQL> ALTER TABLE text_table ALTER TABLESPACE disk_tbs_1 INDEX ( text_table_idx TABLESPACE disk_tbs_0 );
Alter success.
<질의> 메모리 파티션드 테이블을 디스크 테이블스페이스로 변경하고, Lob 칼럼은 디스크 테이블스페이스로 변경하라.
iSQL> CREATE TABLE clob_table
(
id NUMBER,
date DATE,
text CLOB
)
PARTITION BY RANGE ( id )
(
PARTITION part_1 VALUES LESS THAN ( 100 ),
PARTITION part_2 VALUES LESS THAN ( 200 ),
PARTITION part_def VALUES DEFAULT
)
TABLESPACE mem_tbs_0 UNCOMPRESSED LOGGING;
Create success.
Memory -> Disk#
iSQL> ALTER TABLE clob_table ALTER TABLESPACE disk_tbs_0 LOB ( text TABLESPACE disk_tbs_1 );
Alter success.
<질의> 파티션드 테이블을 생성하고, 파티션을 다른 저장 매체인 테이블스페이스로 이동하라.
iSQL> CREATE TABLE data_table
(
id NUMBER,
date DATE,
data VARCHAR(500)
)
PARTITION BY RANGE ( id )
(
PARTITION part_1 VALUES LESS THAN ( 100 ),
PARTITION part_2 VALUES LESS THAN ( 200 ),
PARTITION part_def VALUES DEFAULT
)
TABLESPACE disk_tbs_0 UNCOMPRESSED LOGGING;
Create success.
Disk -> Memory#
iSQL> ALTER TABLE data_table ALTER PARTITION part_1 TABLESPACE mem_tbs_0;
Alter success.
Memory -> Volatile#
iSQL> ALTER TABLE data_table ALTER PARTITION part_1 TABLESPACE vol_tbs_0;
Alter success.
Volatile -> Disk#
iSQL> ALTER TABLE data_table ALTER PARTITION part_1 TABLESPACE disk_tbs_0;
Alter success.
Disk -> Volatile#
iSQL> ALTER TABLE data_table ALTER PARTITION part_1 TABLESPACE vol_tbs_1;
Alter success.
Volatile -> Memory#
iSQL> ALTER TABLE data_table ALTER PARTITION part_1 TABLESPACE mem_tbs_1;
Alter success.
Memory -> Disk#
iSQL> ALTER TABLE data_table ALTER PARTITION part_1 TABLESPACE disk_tbs_1;
Alter success.
<질의> 파티션드 테이블을 생성하고, 파티션을 다른 저장 매체의 테이블스페이스로 이동한다. 인덱스는 다른 테이블스페이스로 이동하라.
iSQL> CREATE TABLE data_table
(
id NUMBER,
date DATE,
data VARCHAR(500)
)
PARTITION BY RANGE ( id )
(
PARTITION part_1 VALUES LESS THAN ( 100 ),
PARTITION part_2 VALUES LESS THAN ( 200 ),
PARTITION part_def VALUES DEFAULT
)
TABLESPACE disk_tbs_0 UNCOMPRESSED LOGGING;
Create success.
iSQL> CREATE INDEX data_table_idx on data_table ( date ) LOCAL;
Create success.
Disk -> Memory#
iSQL> ALTER TABLE data_table ALTER PARTITION part_1 TABLESPACE mem_tbs_0 INDEX ( data_table_idx TABLESPACE mem_tbs_1 );
Alter success.
Memory -> Volatile#
iSQL> ALTER TABLE data_table ALTER PARTITION part_1 TABLESPACE vol_tbs_0 INDEX ( data_table_idx TABLESPACE vol_tbs_1 );
Alter success.
Volatile -> Disk#
iSQL> ALTER TABLE data_table ALTER PARTITION part_1 TABLESPACE disk_tbs_0 INDEX ( data_table_idx TABLESPACE disk_tbs_1 );
Alter success.
Disk -> Volatile#
iSQL> ALTER TABLE data_table ALTER PARTITION part_1 TABLESPACE vol_tbs_1 INDEX ( data_table_idx TABLESPACE vol_tbs_0 );
Alter success.
Volatile -> Memory#
iSQL> ALTER TABLE data_table ALTER PARTITION part_1 TABLESPACE mem_tbs_1 INDEX ( data_table_idx TABLESPACE mem_tbs_0 );
Alter success.
Memory -> Disk#
iSQL> ALTER TABLE data_table ALTER PARTITION part_1 TABLESPACE disk_tbs_1 INDEX ( data_table_idx TABLESPACE disk_tbs_0 );
Alter success.
<질의> 메모리 파티션드 테이블을 생성하고, 메모리 파티션 part_1을 디스크 테이블스페이스로 변경한다. Lob 칼럼은 다른 디스크 테이블스페이스 disk_tbs_1으로 변경하라.
iSQL> CREATE TABLE blob_table
(
id NUMBER,
date DATE,
data blob
)
PARTITION BY RANGE ( id )
(
PARTITION part_1 VALUES LESS THAN ( 100 ),
PARTITION part_2 VALUES LESS THAN ( 200 ),
PARTITION part_def VALUES DEFAULT
)
TABLESPACE mem_tbs_0 UNCOMPRESSED LOGGING;
Create success.
Memory -> Disk#
iSQL> ALTER TABLE blob_table ALTER PARTITION part_1 TABLESPACE disk_tbs_0 LOB ( data TABLESPACE disk_tbs_1 );
Alter success.