개요
본 문서는 Oracle Database를 Altibase v7.1 이상으로 전환하는 방법에 대한 문서이다.
Migration Process
Oracle에서 Altibase로 전환은 다음 절차를 따른다.
시스템 분석
Altibase로 전환 가능한 Oracle 버전 및 환경 구성을 위한 사전 점검 항목에 대해 기술한다.
지원 버전
Oracle 12c
사전 점검 항목
Oracle에서 Altibase로 전환하기 위해서는 Oracle의 기본 정보들을 취합하여야 한다.
환경 분석
- Oracle 버전
- Oracle이 설치된 시스템의 OS 및 HW Spec (Cpu, Memory, Disk 등)
- Altibase 버전
- Altibase가 설치될 시스템의 OS 및 HW Spec (Cpu, Memory, Disk 등)
- Database 서버의 Storage 제품, 사양(Cpu, Memory Network) 및 구성 (RAID1/RAID5 등)
- Database 서버와 Storage 간의 Network 구성 및 속도
Oracle 분석
- Tablespace 개수 및 사이즈
- Table 개수 및 사이즈
- Object 개수 및 사이즈
- Oracle 서버의 Physical Memory / Swap 사이즈
- 전체 Query 중 Function/Procedure의 비중
비즈니스 분석
- 온라인성 업무와 배치성 업무의 구성 비율
- 배치성 업무의 Query 복잡도 (Join, Group By, Order By 등)
- 배치성 업무의 동시 작업(Query) 수
SQL 변환 가이드
Oracle에서 Altibase로 전환 시 SQL 변환 방법에 대한 설명이다.
데이터 타입 변환
Oracle의 데이터 타입을 Altibase로 변환할 때 고려할 사항에 대하여 기술한다.
분류 | Oracle | Altibase | Oracle 최대 크기 | Altibase 최대 크기 | 비고 |
|---|---|---|---|---|---|
문자 타입
| CHAR | CHAR | 2000 bytes | 32000 bytes |
|
VARCHAR2,VARCHAR | VARCHAR2,VARCHAR | 4000 bytes | 32000 bytes | Oracle에서 MAX_STRING_SIZE=EXTENDED일 경우, 32767 bytes | |
NCHAR | NCHAR | 1000(UTF16), 666(UTF8) 최대 2000 bytes | 16000(UTF16), 10666(UTF8) 최대 32000 bytes |
| |
NVARCHAR2 | NVARCHAR | 2000(UTF16), 1333(UTF8) 최대 4000 bytes | 16000(UTF16), 10666(UTF8) 최대 32000 bytes | Oracle에서 MAX_STRING_SIZE=EXTENDED일 경우, 16383(UTF16), 10922(UTF8) 최대 32767 bytes | |
숫자 타입
| NUMBER | NUMBER | NUMBER(38)은 정수형이므로 최대 크기를 고려하여 SMALLINT, INTEGER, BIGINT 등 native type으로 전환을 권장한다. native type을 사용할 경우, 데이터 처리 시 변환 비용에 따른 Overhead를 줄일 수 있고, 저장 공간의 효율성이 좋아진다. | ||
FLOAT | FLOAT |
| |||
| BINARY_FLOAT | REAL | 4 bytes 실수형 타입 | |||
| BINARY_DOUBLE | DOUBLE | 8 bytes 실수형 타입 | |||
| LONG & RAW 타입 | LONG | CLOB | 2 GB | 4 GB - 1 | Altibase CLOB으로 대체 가능 |
LONG RAW | BLOB | 2 GB | 4 GB - 1 | Altibase BLOB으로 대체 가능 | |
RAW (size) | BLOB | 2000 bytes | 4 GB - 1 | Oracle에서 MAX_STRING_SIZE=EXTENDED일 경우, 32767 bytes Altibase BLOB으로 대체 가능 | |
날짜 타입
| DATE | DATE | Altibase DATE : 8 bytes. 범위는 1년 1월 1일부터 9999년 12월 31일. 년, 월, 일, 시, 분, 초, 마이크로초까지 저장 가능 Oracle DATE : 7 bytes. 범위는 BC 4712년 1월1일 ~ AD 9999년 12월 31일. 년,월,일,시,분,초까지 저장 가능 | ||
INTERVAL YEAR TO MONTH | - | Altibase 미 지원 | |||
INTERVAL DAY TO SECOND | - | Altibase 미 지원 | |||
TIMESTAMP WITH TIME ZONE | - | Altibase 미 지원 | |||
TIMESTAMP WITH LOCAL TIME ZONE | - | Altibase 미 지원 | |||
TIMESTAMP | DATE | Altibase DATE로 대체 가능 Altibase DATE : 초 정보의 정밀도를 6자리(microsec)까지 표현 가능 Oracle TIMESTAMP : 초 정보의 정밀도를 9자리까지 표현 가능 * 참고 : Altibase의 TIMESTAMP는 사용자가 값을 입력할 수 없다. | |||
대용량 타입 | BLOB
| BLOB | (4 GB - 1) * (database block size) | 4 GB - 1 |
|
| CLOB | CLOB | (4 GB - 1) * (database block size) | 4 GB - 1 |
| |
| NCLOB | CLOB | (4 GB - 1) * (database block size) | 4 GB - 1 | Altibase CLOB으로 대체 가능 | |
BFILE | BLOB | 4 GB | 4 GB - 1 | Altibase BLOB으로 대체 가능 | |
ROWID 타입
| ROWID | - |
| Altibase 미 지원 | |
UROWID | - | Altibase 미 지원 | |||
| Any 타입 | ANYTYPE | -
| Altibase 미 지원 | ||
| ANYDATA | - | Altibase 미 지원 | |||
| ANYDATASET | - | Altibase 미 지원 | |||
| XML 타입 | XMLType | -
| Altibase 미 지원 | ||
| URI Data Types | - | Altibase 미 지원 | |||
| URIFactory Package | - | Altibase 미 지원 | |||
| Spatial 타입 | SDO_GEOMETRY | GEOMETRY | 16 bytes ~ 100 MB 기본값 : 32,000 bytes | Altibase GEOMETRY으로 대체 가능 | |
| SDO_TOPO_GEOMETRY | - | Altibase 미 지원 | |||
| SDO_GEORASTER | - | Altibase 미 지원 | |||
| Media 타입 | ORDAudio | - | Altibase 미 지원 | ||
| ORDDicom | - | Altibase 미 지원 | |||
| ORDDoc | - | Altibase 미 지원 | |||
| ORDImage | - | Altibase 미 지원 | |||
| ORDVideo | - | Altibase 미 지원 | |||
| still_image_object_types | - | Altibase 미 지원 |
Object 변환
Oracle Object들을 Altibase로 변환할 때 고려할 사항에 대해 기술한다.
Object 비교
| 분류 | Oracle | Altibase |
|---|---|---|
| Schema Object
| ANALYTIC VIEW | 미 지원 |
| ATTRIBUTE DIMENSION | 미 지원 | |
CLUSTER | 미 지원 | |
CONSTRAINT | 지원 | |
DATABASE LINK | 지원 | |
DATABASE TRIGGER | 지원 | |
DIMENSION | 미 지원 | |
EXTERNAL PROCEDURE LIBRARY | 지원(C/C++만 가능) | |
| HIERARCHY | 미 지원 | |
INDEX-ORGANIZED TABLE | 미 지원 | |
INDEX | B-TREE, R-TREE, Function based 지원(BITMAP, CLUSTER, Global Partitioned INDEX는 미 지원) | |
INDEXTYPE | 미 지원 | |
JAVA 관련 객체 | 미 지원 | |
| JOIN GROUP | 미 지원 | |
MATERIALIZED VIEW | 지원 | |
MATERIALIZED VIEW LOG | 미 지원 | |
| MINING MODEL | 미 지원 | |
OBJECT TABLE | 미 지원 | |
OBJECT TYPE | 미 지원 | |
OBJECT VIEW | 미 지원 | |
OPERATOR | 미 지원 | |
PACKAGE | 지원 | |
SEQUENCE | 지원 | |
STORED FUNCTION/PROCEDURE | 지원 | |
SYNONYM | 지원 | |
TABLE | 지원 | |
VIEW | 지원 | |
| ZONE MAP | 미 지원 | |
| Nonschema Object
| CONTEXT | 미 지원 |
DIRECTORY | 지원 | |
| EDITION | 미 지원 | |
| FLASHBACK ARCHIVEF | 미 지원 | |
| LOCKDOWN PROFILE | 미 지원 | |
PROFILE | 미 지원 | |
| RESTROE POINT | 미 지원 | |
ROLE | 지원 | |
| ROLLBACK SEGMENT | 미 지원 | |
TABLESPACE | MEMORY, DISK, VOLATILE, TEMPORARY, UNDO 지원 | |
| TABLESPACE SET | 미 지원 | |
| UNIFIED AUDIT POLICY | 미 지원 | |
USER | 지원 |
CREATE TABLESPACE
Oracle의 Data Tablespace는 모두 Disk Tablespace이다. Altibase는 Memory Tablespace와 Disk Tablespace를 지원하므로 업무 특성에 맞게 구성할 수 있다.
DATA TABLESPACE
Oracle | Altibase | 비고 |
|---|---|---|
BIGFILE|SMALLFILE | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
DATAFILE File Specification | DATAFILE File Specification |
|
MINIMUM EXTENT | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
BLOCKSIZE | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
LOGGING|NOLOGGING | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
FORCE LOGGING | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
DEFAULT Storage 구문 | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
ONLINE|OFFLINE | ALTER TABLESPACE 구문으로 가능 | OFFLINE의 경우, CREATE TABLESPACE 구문에서 지원하지 않으므로 해당 옵션을 삭제하고 |
EXTENT MANAGEMENT LOCAL AUTOALLOCATE|UNIFORM SIZE | EXTENTSIZE | EXTENT 관리 방식은 지원하지 않고 EXTENTSIZE만 설정 가능 |
SEGMENT SPACE MANAGEMENT AUTO|MANUAL | SEGMENT MANAGEMENT AUTO|MANUAL |
|
FLASHBACK ON|OFF | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
CREATE DATA TABLESPACE 변환 예제
Oracle | Altibase |
|---|---|
SEGMENT 절은 SEGMENT MANAGEMENT AUTO|MANUAL 절로 수정하고 그 외 지원하지 않는 구문은 삭제
TEMPORARY TABLESPACE
Oracle | Altibase | 비고 |
|---|---|---|
| TABLESPACE GROUP | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
EXTENT MANAGEMENT LOCAL AUTOALLOCATE|UNIFORM SIZE | EXTENTSIZE | EXTENT 관리 방식은 지원하지 않고 EXTENTSIZE만 설정 가능 |
CREATE TEMPORARY TABLESPACE 변환 예제
Oracle | Altibase |
|---|---|
TABLESPACE GROUP 절은 지원하지 않으므로 삭제
UNDO TABLESPACE
Altibase는 시스템에 의해 자동으로 Undo Tablespace를 관리한다. Undo Tablespace에 데이터 파일의 추가 및 크기 변경만 가능하다.
CREATE UNDO TABLESPACE 변환 예제
Oracle | Altibase |
|---|---|
CREATE TABLE
Altibase는 Object Table, XMLType Table을 지원하지 않지만 Memory Table을 지원하므로 업무 특성을 파악하여 Memory Table과 Disk Table로 분리하여 테이블을 생성할 수 있다.
TABLE 생성 시 Segment 관련 내용을 지정할 경우에는 TABLESPACE 지정 -> PCTFREE/PCTUSED 지정 -> INITRANS/MAXTRANS 지정 -> Storage 절 -> Logging 절 순으로 지정해야 한다.
COLUMN DEFINITION 절
Oracle | Altibase | 비고 |
|---|---|---|
| SORT | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
DEFAULT | DEFAULT |
|
ENCRYPT | ENCRYPT |
|
Constraint 구문 | Constraint 구문 | Altibase는 Constraint 지정 시 ENABLE/DISABLE 옵션, References 절의 ON DELETE SET NULL(ON DELETE CASCADE는 지원) 옵션은 지원하지 않으므로 삭제. |
Ref Constraint 구문 | - | Altibase는 REF 컬럼을 지원하지 않으므로 변환 시 해당 옵션 삭제 |
ORGANIZATION | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
| CLUSTER | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
COMPRESS|NOCOMPRESS | COMPRESS | Altibase는 지정하지 않으면 NOCOMPRESS이므로 변환 시 NOCOMPRESS 옵션은 삭제 |
Column의 크기 지정 시 Byte 키워드 명시 가능 | Column의 크기 지정 시 Byte 키워드 미지원 | Oracle은 Column의 크기 지정 시 Byte 키워드를 명시할 수 있지만, Altibase는 지원하지 않음. |
PRIMARY KEY, UNIQUE Constraint을 지정 시 USING INDEX 절을 이용하여 INDEX 속성을 지정할 경우, Altibase는 TABLESPACE 절, PARALLEL/NOPARALLEL 절, LOGGING/NOLOGGING 절만 지정이 가능하다.
즉, storage 관련 속성은 지정할 수 없다.
SEGMENT ATTRIBUTES 절
Oracle | Altibase | 비고 |
|---|---|---|
| TABLESPACE | TABLESPACE |
|
PCTFREE | PCTFREE |
|
PCTUSED | PCTUSED |
|
INITRANS | INITRANS |
|
MAXTRANS | MAXTRANS | Oracle의 기본/최대값 : 255, Altibase의 기본/최대값 : 120 Altibase로 변환 시 이 파라미터 생략 또는 120으로 변경한다. 참고로 Oracle의 MAXTRANS 파라미터는 deprecated 상태이다. |
LOGGING|NOLOGGING | LOGGING|NOLOGGING |
|
STORAGE 절
Oracle | Altibase | 비고 |
|---|---|---|
| INITIAL | INITEXTENTS | bytes -> extent 개수로 변경 |
NEXT | NEXTEXTENTS | bytes -> extent 개수로 변경 |
MINEXTENTS | MINEXTENTS |
|
MAXEXTENTS | MAXEXTENTS |
|
PCTINCREASE | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
FREELISTS | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
FREELIST | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
OPTIMAL | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
BUFFER POOL | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
LOB STORAGE 절
Oracle | Altibase | 비고 |
|---|---|---|
| TABLESPACE | TABLESPACE | Altibase의 LOB STORAGE절은 TABLESPACE만 지정 가능 |
STORAGE | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
CHUNK | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
PCTVERSION | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
RETENTION | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
FREEPOOLS | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
CACHE | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
STORAGE IN ROW | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
LOGGING|NOLOGGING | LOGGING|NOLOGGING |
|
TABLE PARTITION 절
Oracle | Altibase | 비고 |
|---|---|---|
| PARTITION BY RANGE | PARTITION BY RANGE |
|
PARTITION BY HASH | PARTITION BY HASH |
|
PARTITION BY LIST | PARTITION BY LIST |
|
Composite partitioning 구문 | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
TABLE PROPERTIES 절
Oracle | Altibase | 비고 |
|---|---|---|
ENABLE|DISABLE ROW MOVEMENT | ENABLE|DISABLE ROW MOVEMENT | Partitioned TABLE에만 지원 |
NOPARALLEL|PARALLEL | NOPARALLEL|PARALLEL |
|
ENABLE|DISABLE VALIDATE|NOVALIDATE | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
CREATE TABLE 변환 예제
Oracle | Altibase |
|---|---|
"ENAME" VARCHAR2(10) : Byte 삭제
USING INDEX TABLESPACE "USERS" : PK 지정 시 USING INDEX 절에는 TABLESPACE 절, PARALLEL/NOPARALLEL 절, LOGGING/NOLOGGING 절만 지정 가능하므로 TABLESPACE 절 외의 다른 옵션은 삭제
REFERENCES "SCOTT"."DEPT" ("DEPTNO") : FK 지정 시 ENABLE 옵션은 지원하지 않으므로 삭제
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 120 : MAXTRANS의 최대 값은 120이므로 120으로 수정
STORAGE(INITEXTENTS 1 NEXTEXTENTS 1 MINEXTENTS 1 MAXEXTENTS 2147483645) : INITIAL과 NEXT는 각각 INITEXTENTS, NEXTEXTENTS로 변경하고 그 값도 extent 개수로 수정
TABLESPACE "USERS"
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 120
STORAGE...
LOGGING : segment 관련 내용을 지정할 경우, TABLESPACE 지정 -> PCTFREE/PCTUSED 지정 -> INITRANS/MAXTRANS 지정 -> Storage 절 -> logging 절 순으로 지정
CREATE INDEX
Altibase가 지원하는 인덱스 종류는 BTREE, RTREE 및 Function-based INDEX이고, BITMAP, CLUSTER, REVERSE, Global partitioned INDEX는 지원하지 않는다.
Altibase INDEX 생성 시 segment 관련 내용을 지정할 경우, TABLESPACE 지정 -> PARALLEL/ NOPARALLEL 지정 -> LOGGING/NOLOGGING 지정 -> storage 절 순으로 지정해야 한다.
Oracle | Altibase | 비고 |
|---|---|---|
TABLESPACE | TABLESPACE |
|
LOGGING|NOLOGGING | LOGGING|NOLOGGING |
|
NOPARALLEL|PARALLEL | NOPARALLEL|PARALLEL |
|
COMPUTE STATISTICS | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
REVERSE | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
SORT|NOSORT | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
ONLINE | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
COMPRESS|NOCOMPRESS | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
PCTFREE, PCTUSED, | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
INITRANS | INITRANS | |
MAXTRANS | MAXTRANS | Oracle의 기본/최대값 : 255, Altibase의 기본/최대값 : 30 Altibase로 변환 시 이 파라미터 생략 또는 30으로 변경한다. 참고로 Oracle의 MAXTRANS 파라미터는 deprecated 상태이다. |
Storage 구문 | TABLE의 Storage 구문과 동일 |
|
CREATE INDEX 변환 예제
Oracle | Altibase |
|---|---|
INITRANS 2 MAXTRANS 30 : MAXTRANS는 30까지 지원하므로 30으로 변경
STORAGE(INITEXTENTS 1 NEXTEXTENTS 1 MINEXTENTS 1 MAXEXTENTS 2147483645) : STORAGE 절에는 INITEXTENTS, NEXTEXTENTS, MINEXTENTS, MAXEXTENTS 만 지정 가능하고, INITIAL과 NEXT는 각각 INITEXTENTS, NEXTEXTENTS로 변경 및 그 값도 extent의 개수로 수정
TABLESPACE "USERS"
INITRANS 2 MAXTRANS 30
STORAGE ... : segment 관련 내용 지정할 경우에는 TABLESPACE 지정 -> PARALLEL/NOPARALLEL 지정 -> LOGGING/NOLOGGING 지정 -> storage 절 순으로 지정
CREATE VIEW
Altibase의 VIEW는 Oracle의 VIEW 생성 구문과 동일하게 CREATE OR REPLACE VIEW 구문으로 생성한다.
Oracle | Altibase | 비고 |
|---|---|---|
WITH READ ONLY | WITH READ ONLY | 이 옵션을 지정하지 않으면 updatable view가 생성된다. |
NO FORCE | NO FORCE |
|
WITH CHECK OPTION | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
XMLType view 구문 | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
Object view 구문 | - | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
CREATE TRIGGER
Altibase의 TRIGGER는 Oracle의 TRIGGER 생성 구문과 동일하게 CREATE OR REPLACE TRIGGER 구문으로 생성한다.
Altibae 이중화를 사용할 경우, 이중화에 의해 반영되는 데이터 변경은 트리거 동작을 발생시키지 않으므로 비지니스 로직에서 이런 사항이 고려되어야 한다.
Oracle | Altibase | 비고 |
|---|---|---|
CREATE OR REPLACE TRIGGER | CREATE OR REPLACE TRIGGER |
|
BEFORE|AFTER|INSTEAD OF | BEFORE|AFTER|INSTEAD OF |
|
DML 이벤트 구문 | DML 이벤트 구문 | DML 이벤트 구문은 Oracle과 동일 |
DDL 이벤트 구문 | - | Altibase는 DDL TRIGGER를 지원하지 않음 |
WHEN 조건 | WHEN 조건 |
|
FOR EACH ROW | FOR EACH ROW |
|
REFERENCING | REFERENCING | Altibase에서는 OLD/NEW가 키워드이므로 alias로 사용할 수 없다. |
Trigger body 구문 | Trigger body 구문 |
|
CREATE SEQUENCE
Altibase의 SEQUENCE는 Oracle의 SEQUENCE 생성 구문과 동일하게 CREATE SEQUENCE 구문으로 생성한다.
Oracle | Altibase | 비고 |
|---|---|---|
CREATE SEQUENCE | CREATE SEQUENCE |
|
START WITH | START WITH |
|
| INCREMENT BY | INCREMENT BY | |
| MAXVALUE|NOMAXVALUE | MAXVALUE|NOMAXVALUE | Oracle의 maxvalue는 28자리 정수까지 지정 가능 Altibase의 maxvalue는 -9223372036854775805 ~ 9223372036854775806 범위 내에서 지정 가능 |
| MINVALUE|NOMINVALUE | MINVALUE|NOMINVALUE | |
| CYCLE|NOCYCLE | CYCLE|NOCYCLE | |
| CACHE|NOCACHE | CACHE|NOCACHE | |
| ORDER|NOORDER | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 | |
| KEEP|NOKEEP | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 | |
| SESSION|GLOBAL | Altibase는 지원하지 않으므로 변환 시 해당 옵션 삭제 |
CREATE SYNONYM
Altibase의 CREATE SYNONYM 구문은 Oracle과 동일하다. 단, EDITIONABLE|NONEDITIONABLE 옵션은 지원하지 않는다.
ALTER TABLE
Altibase는 Constraint 추가 시 한번에 1개의 Constraint만 추가 가능하다.
Oracle에서 “ALTER TABLE ADD (CONSTRAINT constraint_name constraint_type,…);” 문으로 여러 개의 Constraint를 추가하는 문장은 “ALTER TABLE ADD CONSTRAINT constraint_name constraint_type;” 문으로 Constraint 별로 나눠서 실행해야 한다.
Oracle은 PRIMARY KEY와 UNIQUE를 지정 시 INDEX를 미리 생성한 후 지정이 가능하지만, Altibase는 Constraint를 지정하는 시점에 내부적으로 INDEX를 생성하기 때문에 동일 컬럼에 대해 PK Constraint, UNIQUE Constraint, INDEX 생성 중 하나만 가능하다. 즉, INDEX를 생성한 컬럼에 PK Constraint를 지정할 수 없다.
SQL 변환
Numeric Functions
Oracle | Altibase | 비고 |
|---|---|---|
ABS(n) | ABS(n) | n의 절대 값을 반환 |
ACOS(n) | ACOS(n) | n의 역코사인(arc cosine) 값을 반환 |
ASIN(n) | ASIN(n) | n의 역사인(arc sine) 값을 반환 |
ATAN(n) | ATAN(n) | n의 역탄젠트(arc tangent) 값을 반환 |
ATAN2(n1, n2) | ATAN2(n1, n2) | n1/n2의 역탄젠트(arc tangent) 값을 라디안(radian)으로 반환 |
BITAND(expr1, expr2) | BITAND(expr1, expr2) | expr1과 expr2의 비트에 대한 and 연산을 수행하여 정수를 반환 |
CEIL(n) | CEIL(n) | n에서 지정한 수치를 올림하여 정수를 반환 |
COS(n) | COS(n) | n의 코사인 값을 반환 |
COSH(n) | COSH(n) | n의 쌍곡 코사인 값을 반환 |
EXP(n) | EXP(n) | e의 n제곱 값을 반환 |
FLOOR(n) | FLOOR(n) | n 보다 작거나 같은 가장 큰 정수 반환 |
LN(n) | LN(n) | n의 자연 로그 값을 반환 |
LOG(n2, n1) | LOG(n2, n1) | 밑이 n2인 n1의 로그 값을 반환 |
MOD(n2, n1) | MOD(n2, n1) | n2를 n1으로 나눈 나머지 값을 반환 |
NANVL(n2, n1) | 미 지원 | n2가 NaN이면 대체 값 n1을 반환, NaN가 아니면 n2를 반환 |
POWER(n2, n1) | POWER(n2, n1) | n2의 n1 제곱을 반환 |
| REMAINDER(n2, n1) | MOD(n2, n1) | n2를 n1으로 나눈 나머지를 반환 |
ROUND(number) | ROUND(number) | n값의 소수점 이하를 integer를 기준으로 반올림하여 반환 |
SIGN(n) | SIGN(n) | n의 부호를 반환 |
SIN(n) | SIN(n) | n의 사인 값을 반환 |
SINH(n) | SINH(n) | n의 쌍곡선 사인을 반환 |
SQRT(n) | SQRT(n) | n의 제곱근을 반환 |
TAN(n) | TAN(n) | n의 탄젠트 값을 반환 |
TANH(n) | TANH(n) | n의 쌍곡선 탄젠트(hyperbolic tangent)값을 반환 |
| TRUNC(number) | TRUNC(number) | n1에서 소수점 자리 파라미터 n2 이하를 절삭 |
| WIDTH_BUCKET | 미 지원 | 동일한 넓이를 갖는 히스토그램을 생성 |
Character Functions Returning Character Values
Oracle | Altibase | 비고 |
|---|---|---|
CHR | CHR | 입력 ASCII 코드 값에 해당하는 문자를 반환 |
CONCAT | CONCAT | char1과 char2를 연결하여 반환 |
INITCAP | INITCAP | 입력 문자열 중에서 각 단어의 첫 글자를 대문자로 변환하여 반환 |
LOWER | LOWER | 입력된 문자열을 소문자로 변환하여 반환 |
LPAD | LPAD | expr1의 왼쪽에 expr2를 전체 길이가 n이 될 때까지 반복적으로 삽입하여 그 결과를 반환 |
LTRIM | LTRIM | expr1의 왼쪽에 expr2와 같은 문자가 있으면 삭제하여 그 결과를 반환 |
NCHR | NCHR | 국가 문자 집합(national character set)에서 n 값에 해당하는 문자를 반환 |
NLS_INITCAP | 미 지원 | 입력 문자열에서 각 단어의 첫 글자를 대문자로 변환하여 반환 |
| NLS_LOWER | 미 지원 | 모든 문자를 소문자로 변환하여 반환 |
| NLS_UPPER | 미 지원 | 입력 문자열을 모두 대문자로 변환하여 반환 |
NLSSORT | 미 지원 | 입력 문자열을 정렬하여 반환 |
REGEXP_REPLACE | REGEXP_REPLACE | 지정한 정규 표현을 만족하는 부분을, 지정한 다른 문자열로 변환하여 반환 |
| REGEXP_SUBSTR | REGEXP_SUBSTR | 지정한 정규 표현을 만족하는 부분 문자열을 반환 |
REPLACE | REPLACE2 | 파라미터의 첫 번째 문자열에서, 두 번째 문자열을 모두 세 번째 문자열로 바꾼 후 결과를 반환 |
RPAD | RPAD | expr1의 오른쪽에 expr2를 전체 길이가 n이 될 때까지 반복적으로 삽입하여 그 결과를 반환 |
| RTRIM | RTRIM | expr1의 오른쪽에 expr2와 같은 문자가 있으면 삭제하여 그 결과를 반환 |
| SOUNDEX | 미 지원 | char의 음성 표현을 가지는 문자열을 반환 |
SUBSTR | SUBSTR SUBSTRING | expr에서 start번째 문자부터 length 길이 만큼의 문자열을 반환 |
| TRANSLATE | TRANSLATE | from_string에서 각 문자를 to_string 안의 대응하는 문자로 치환하여 반환 |
| TRANSLATE ... USING | 미 지원 | char를 database character set과 national character set 간에 지정된 문자 집합으로 변환하여 반환 |
| TRIM | TRIM | expr2에서 찾을 수 있는 모든 문자를 expr1의 처음과 끝에서 제거하여 그 결과를 반환 |
| UPPER | UPPER | 모든 문자를 대문자로 변환하여 반환 |
Character Functions Returning Number Values
Oracle | Altibase | 비고 |
|---|---|---|
| ASCII | ASCII | 주어진 char에서 첫 문자의 ASCII 값에 상응하는 10진수 값을 반환 |
| INSTR | INSTR | 문자열 중에서 지정한 문자가 처음 나타나는 위치를 숫자로 반환 |
| LENGTH | CHAR_LENGTH CHARACTER_LENGTH LENGTH | 인수 char의 길이를 반환 |
| REGEXP_COUNT | REGEXP_COUNT | 문자열에서 pattern_expr이 발생한 횟수를 반환 |
| REGEXP_INSTR | REGEXP_INSTR | 지정한 조건(정규 표현)을 만족하는 부분의 최초 위치(무슨 문자인지)를 반환 |
Character Set Functions
Oracle | Altibase | 비고 |
|---|---|---|
NLS_CHARSET_DECL_LEN NLS_CHARSET_ID NLS_CHARSET_NAME | 미 지원 | database character set ID 및 이름 반환 |
Collation Functions
Oracle | Altibase | 비고 |
|---|---|---|
COLLATION NLS_COLLATION_ID NLS_COLLATION_NAME | 미 지원 | 데이터 정렬 설정에 대한 정보 반환 |
Datetime Functions
Oracle | Altibase | 비고 |
|---|---|---|
| +, - 연산 | +, -, DATEADD | date의 date_field_name부분을 number 만큼 증가 또는 감소 시켜 그 결과를 반환 |
ADD_MONTHS | ADD_MONTHS | date에 특정 개월 수 integer를 더한 값을 반환 |
CURRENT_DATE | CURRENT_DATE | 현재 세션의 날짜 정보를 date 형으로 반환 |
CURRENT_TIMESTAMP | CURRENT_TIMESTAMP | 현재 세션의 날짜와 시간 정보를 반환 (CURRENT_DATE의 alias임) |
| DBTIMEZONE | DB_TIMEZONE | 데이터베이스 time zone 값을 반환 |
EXTRACT(datetime) | EXTRACT(datetime) DATEPART | 날짜/시간 또는 interval 표현식에서 지정된 날짜/시간 필드의 값을 추출하여 반환 |
| FROM_TZ | 미 지원 | timestamp 값과 time zone을 TIMESTAMP WITH TIME ZONE 값으로 변환 |
LAST_DAY | LAST_DAY | 해당 날짜가 속한 달의 마지막 날짜를 반환 |
LOCALTIMESTAMP | 미 지원 | 세션 시간대의 현재 날짜와 시간을 TIMESTAMP 데이터 유형 값으로 반환 |
MONTHS_BETWEEN | MONTHS_BETWEEN | date1과 date2 사이의 개월 수를 반환 |
NEW_TIME | 미 지원 | timezone1 시간대의 날짜와 시간을 timezone2 시간대의 날짜와 시간으로 변환하여 반환 |
NEXT_DAY | NEXT_DAY | 주어진 날짜 이후의 가장 가까운 지정 요일을 반환 |
| NUMTODSINTERVAL | NUMTODSINTERVAL TO_INTERVAL | n을 INTERVAL DAY TO SECOND 문자로 변환 |
| NUMTOYMINTERVAL | TO_INTERVAL | n을 INTERVAL YEAR TO MONTH 문자로 변환 |
| ORA_DST_AFFECTED | 미 지원 | |
| ORA_DST_CONVERT | 미 지원 | |
| ORA_DST_ERROR | 미 지원 | |
ROUND(date) | ROUND(date) | 지정된 단위로 반올림한 날짜 반환 |
| SESSIONTIMEZONE | SESSION_TIMEZONE | 현재 세션의 시간대(time zone)을 반환 |
| SYS_EXTRACT_UTC | 미 지원 | 협정 세계 시간 UTC(Coordinated Universal Time—formerly Greenwich Mean Time)를 반환 |
| SYSDATE | SYSDATE | 데이터베이스가 있는 OS의 날짜와 시간을 반환 |
SYSTIMESTAMP | SYSTIMESTAMP | 데이터베이스가 있는 시스템의 시스템 날짜를 TIMESTAMP WITH TIME ZONE 유형으로 반환 |
| TO_CHAR(datetime) | TO_CHAR(datetime) | 지정된 포맷의 VARCHAR 데이터 타입 값으로 변환 |
| TO_DSINTERVAL | 미 지원 | 인수를 INTERVAL DAY TO SECOND 데이터 타입 값으로 변환 |
| TO_TIMESTAMP | TO_DATE | char를 TIMESTAMP 데이터 타입 값으로 변환 |
| TO_TIMESTAMP_TZ | 미 지원 | char를 TIMESTAMP WITH TIME ZONE 데이터 타입 값으로 변환 |
| TO_YMINTERVAL | 미 지원 | 문자열을 INTERVAL YEAR TO MONTH 데이터 타입 값으로 변환 |
TRUNC(date) | TRUNC(date) | 날짜를 지정된 단위로 잘라서 반환 |
| TZ_OFFSET | 미 지원 | 문장이 실행된 일자에 근거한 인수에 상응하는 time zone offset을 반환 |
General Comparison Functions
Oracle | Altibase | 비고 |
|---|---|---|
GREATEST | GREATEST | 하나 이상의 인수 중에서 가장 큰 값을 반환 |
LEAST | LEAST | 하나 이상의 인수 중에서 가장 작은 값을 반환 |
Conversion Functions
Oracle | Altibase | 비고 |
|---|---|---|
| ASCIISTR | ASCIISTR | 문자열의 ASCII 문자열을 반환 |
| BIN_TO_NUM | BIN_TO_NUM | 비트(2진수) 벡터를 동등한 수치(10진수)로 변환 |
CAST | CAST | 한 데이터 타입을 다른 데이터 타입으로 변환 |
| CHARTOROWID | 미 지원 | 문자 타입의 값을 ROWID 형으로 변환 |
| COMPOSE | 미 지원 | 정규화된 형태의 유니코드를 반환 |
CONVERT | CONVERT | 문자열을 지정된 character set으로 변환 |
| DECOMPOSE | 미 지원 | 모든 데이터 유형의 문자열을 인수로 사용하여 입력과 동일한 문자 집합으로 분해된 유니코드 문자열을 반환 |
HEXTORAW | 미 지원 | 16진수를 RAW 데이터 타입 값으로 변환 |
| NUMTODSINTERVAL | NUMTODSINTERVAL TO_INTERVAL | n을 INTERVAL DAY TO SECOND 데이터 타입 값으로 변환 |
| NUMTOYMINTERVAL | TO_INTERVAL | n을 INTERVAL YEAR TO MONTH 데이터 타입 값으로 변환 |
RAWTOHEX | 미 지원 | RAW를 16진수의 문자로 변환 |
| RAWTONHEX | 미 지원 | RAW를 NVARCHAR2 형태의 16진수로 변환 |
RAWIDTOCHAR | 미 지원 | RAWID 값을 VARCHAR2 형식으로 변환 |
| ROWIDTONCHAR | 미 지원 | RAWID 값을 NVARCHAR2 형식으로 변환 |
SCN_TO_TIMESTAMP | 미 지원 | 인수를 시스템 변경 번호(SCN)로 변환 |
| TIMESTAMP_TO_SCN | 미 지원 | TIMESTAMP 값을 인수로 받아 해당 TIMESTAMP와 연관된 대략적인 시스템 변경 번호(SCN)를 반환 |
TO_BINARY_DOUBLE | 미 지원 | 인수를 배정밀도(double-precision) 부동소수점 숫자로 변환 |
| TO_BINARY_FLOAT | 미 지원 | 인수를 단순정밀도(single-precision) 부동소수점 숫자로 변환 |
| TO_BLOB(bfile) | 미 지원 | BFILE을 BLOB으로 변환 |
| TO_BLOB(raw) | 미 지원 | RAW를 BLOB으로 변환 |
| TO_CHAR(bfile|blob) | 미 지원 | BFILE 및 BLOB을 database character set으로 변환 |
| TO_CHAR(character) | 미 지원 | NCHAR, NVARCHAR2, CLOB, 또는 NCLOB 데이터를 database character set으로 변환 |
| TO_CHAR(datetime) | TO_CHAR(datetime) | 날짜형 데이터 타입의 datetime 또는 interval 값을 지정된 포맷의 VARCHAR 데이터 타입의 값으로 변환 |
| TO_CHAR(number) | TO_CHAR(number) | 숫자형 데이터 타입의 값을 VARCHAR 데이터 타입의 값으로 변환 |
| TO_CLOB(bfile|blob) | 미 지원 | BFILE 및 BLOB을 database character set으로 변환하고 CLOB값으로 변환 |
| TO_CLOB(character) | 미 지원 | LOB 컬럼에 있는 NCLOB 값 또는 다른 문자열을 CLOB값으로 변환 |
| TO_DATE | TO_DATE | char를 날짜 데이터 타입의 값으로 변환 |
| TO_DSINTERVAL | 미 지원 | 인수를 INTERVAL DAY TO SECOND 데이터 타입 값으로 변환 |
| TO_LOB | 미 지원 | LONG 또는 LONG ROW 값을 LOB값으로 변환 |
| TO_MULTI_BYTE | 미 지원 | 해당 multibyte 문자로 변환된 모든 single-byte 문자로 char를 반환 |
| TO_NCHAR(character) | TO_NCHAR(character) | database character set의 문자열, CLOB, NCLOB 값을 national character set으로 변환 |
| TO_NCHAR(datetime) | TO_NCHAR(datetime) | 날짜형 데이터 타입의 datetime 또는 interval 값을 national character set으로 변환 |
| TO_NCHAR(number) | TO_NCHAR(number) | n을 national character set으로 변환 |
| TO_NCLOB | 미 지원 | CLOB값을 NCLOB값으로 변환 |
| TO_NUMBER | TO_NUMBER | expr을 NUMBER 데이터 타입의 값으로 변환 |
| TO_SINGLE_BYTE | 미 지원 | 해당 single-byte 문자로 변환된 모든 multibyte 문자로 char를 반환 |
| TO_TIMESTAMP | TO_DATE | char를 TIMESTAMP 데이터 타입의 값으로 변환 |
| TO_TIMESTAMP_TZ | 미 지원 | char를 TIMESTAMP WITH TIME ZONE 데이터 타입의 값으로 변환 |
| TO_YMINTERVAL | 미 지원 | 문자열을 INTERVAL YEAR TO MONTH 데이터 타입의 값로 변환 |
| TREAT | 미 지원 | 객체 지향 타입 변환을 위한 함수로 슈퍼타입(부모 객체)을 서브타입(자식 객체)으로 변환 |
| UNISTR | UNISTR | 유니코드 문자열을 표현하거나 변환 |
| VALIDATE_CONVERSION | 미 지원 | expr이 지정된 데이터 유형으로 변환 될 수 있는지 여부를 판별 |
Large Object Functions
Oracle | Altibase | 비고 |
|---|---|---|
BFILENAME | 미 지원 | Server File System의 물리 LOB BinaryFile과 연관된 BFILE Locator를 반환 |
EMPTY_BLOB/EMPTY_CLOB | EMPTY_BLOB/EMPTY_CLOB | LOB변수를 초기화하는 함수 |
Collection Functions
Oracle | Altibase | 비고 |
|---|---|---|
CARDINALITY | 미 지원 | 중첩된 테이블과 varray에서 수행되는 함수 |
Hierarchical Functions
Oracle | Altibase | 비고 |
|---|---|---|
SYS_CONNECT_BY_PATH | SYS_CONNECT_BY_PATH | 최상위 노드에서 현재 노드까지의 칼럼 값 경로를 구하는 함수 |
Data Mining Functions
Oracle | Altibase | 비고 |
|---|---|---|
CLUSTER_DETAILS | 미 지원 | 데이터 마이닝 관련 함수 |
XML Functions
Oracle | Altibase | 비고 |
|---|---|---|
DEPTH | 미 지원 | XML 관련 함수 |
JSON Functions
Oracle | Altibase | 비고 |
|---|---|---|
JSON_QUERY | 미 지원 | JSON 관련 함수 |
Encoding and Decoding Functions
Oracle | Altibase | 비고 |
|---|---|---|
DECODE | DECODE | 프로그래밍언어의 IF 문을 SQL , PL/SQL 안으로 사용하기 위한 함수 |
DUMP | DUMP | 지정한 data의 위치와 길이 등을 지정한 형식으로 반환 |
ORA_HASH | 미 지원 | 주어진 표현에 대한 해쉬 값을 계산하는 함수 |
STANDARD_HASH | 미 지원 | 기본 해쉬 값 계산 |
VSIZE | OCTET_LENGTH | 입력된 문자열의 길이를 바이트 단위로 반환 |
NULL-Related Functions
Oracle | Altibase | 비고 |
|---|---|---|
COALESCE | COALESCE | 나열된 값을 순차적으로 체크하여 NULL이 아닌 첫 번째 인수를 반환 |
LNNVL | LNNVL | 조건의 결과가 FALSE 또는 NULL인 경우 TRUE를 반환하고, TRUE인 경우 FALSE를 반환 |
| NANVL | 미 지원 | 부동소수점 NaN 값만 감지해서 다른 값으로 치환 |
NULLIF | NULLIF | expr1과 expr2 가 같으면, null 값을 반환 |
NVL | NVL | 쿼리의 결과에서 NULL값을 치환 |
NVL2 | NVL2 | expr1이 NULL이 아니면 expr2를 반환하고 NULL이면 expr3를 반환 |
Environment and Identifier Functions
Oracle | Altibase | 비고 |
|---|---|---|
CON_DBID_TO_ID | 미 지원 | |
| SYS_CONTEXT | SYS_CONTEXT | 현재 세션에 접속한 환경 정보(context)를 namespace로 하여 관련된 파라미터의 결과 값을 반환 |
SYS_GUID | SYS_GUID_STR | 16 바이트로 구성된 전 세계적으로 고유한 식별자(RAW값)를 생성하고 반환 |
| SYS_TYPEID | 미 지원 | 식별자의 typeid를 반환 |
| UID | USER_ID | 세션 사용자를 고유하게 식별하는 정수를 반환 |
| USER | USER_NAME | 세션 사용자의 이름을 반환 |
| USERENV | SESSION_ID | USERENV는 세션에 대한 정보를 반환 SESSION_ID는 사용자의 SESSION_ID를 반환 |
Aggregate/Analytic Functions
Oracle | Altibase | 비고 |
|---|---|---|
AVG | AVG | 지정된 컬럼에 대한 조건을 만족하는 행 중에서 Null을 제외한 평균을 반환 |
| CORR | CORR | 수치 쌍에 대한 상관 계수를 반환 |
| COUNT | COUNT | 쿼리에 의해 반환된 행의 수를 반환 |
| COVAR_POP | COVAR_POP | number 조합의 세트의 모집단 공분산을 반환 |
| COVAR_SAMP | COVAR_SAMP | number 쌍의 세트의 표본 공분산을 반환 |
| CUME_DIST | CUME_DIST | 값의 그룹에 있는 값의 누적 분포치를 계산 |
| DENSE_RANK | DENSE_RANK | ORDER BY절에 사용된 컬럼이나 표현식에 대하여 순위를 부여하는데 RANK와 달리 동일 순위 다음의 순위는 동일 순위의 수와 상관 없이 1씩 증가 |
| FIRST | FIRST | 집계 함수(MIN, MAX 등)와 같이 써서 특정 컬럼을 기준으로 정렬했을 때 첫 번째 행의 값을 가져올 때 사용 |
| LAST | LAST | 집계 함수(MIN, MAX 등)와 같이 써서 특정 컬럼을 기준으로 정렬했을 때 마지막 행의 값을 가져올 때 사용 |
| LISTAGG | LISTAGG | 여러 행의 문자열 값을 하나의 문자열로 이어 붙이는 집계 함수 |
| MAX | MAX | 인수 중에서 최대값을 반환 |
| MIN | MIN | 인수 중에서 최소값을 반환 |
| PERCENT_RANK | PERCENT_RANK | 그룹 수에 대한 값의 순위 퍼센트를 반환 |
| PERCENTILE_CONT | PERCENTILE_CONT | 연속된 분포 모델을 가정한 역 분포 함수(inverse distribution function) |
| PERCENTILE_DISC | PERCENTILE_DISC | 이산 분포 모형을 가정하는 역 분포 함수 |
| RANK | RANK | 값의 그룹에서 값의 순위를 계산 |
| REGR_ (Linear Regression) Functions | 미 지원 | 선형 회귀를 위한 집계 함수들 |
| STDDEV | STDDEV | number의 조합인 expr의 표본 표준편차를 반환 |
| STDDEV_POP | STDDEV_POP | 모집단 표준편차를 계산하고, 모집단 분산의 제곱근 값을 반환 |
| STDDEV_SAMP | STDDEV_SAMP | 누적 표본 표준편차를 계산하고, 표본 분산의 제곱근 값을 반환 |
SUM | SUM | expr의 값의 합을 반환 |
| VAR_POP | VAR_POP | null 값들을 제거한 후에 number 세트의 모집단 분산을 반환 |
| VAR_SAMP | VAR_SAMP | null 값들을 제거한 후에 number 세트의 표본 분산을 반환 |
| VARIANCE | VARIANCE | expr의 분산을 반환 |
Aggregate Functions
Oracle | Altibase | 비고 |
|---|---|---|
APPROX_COUNT_DISTINCT | 미 지원 | |
| CORR_* (CORR_S,CORR_K) | 미 지원 | Pearson's 상관 계수를 계산 |
| GROUP_ID | 미 지원 | 지정된 GROUP BY 결과로부터 중복된 그룹을 구별 |
| GROUPING | GROUPING | ROLLUP, CUBE, GROUPING SETS 사용 시 집계 레벨을 구분하는 함수 |
| GROUPING_ID | GROUPING_ID | 행과 관련되는 GROUPING 비트 벡터에 대응되는 수치를 반환 |
| MEDIAN | MEDIAN | 중앙값 구하는 집계/분석 함수 |
STATS_BINOMIAL_TEST | 미 지원 | 단지 두 개의 유효한 값이 존재하는 이분 변수(두 개의 배타적인 값을 가지는 변수)에 대해서 이용되는 정확 확률 테스트 |
| STATS_CROSSTAB | 미 지원 | 두 개의 명목 변수를 분석하는 방법 |
| STATS_F_TEST | 미 지원 | 두 개의 분산이 유의한 차가 있는지 테스트 |
| STATS_KS_TEST | 미 지원 | 두 개의 표본이 같은 모집단에 속하고 있는지 또는 같은 분포를 가지는 모집단에 속하고 있는지 테스트하는 Kolmogorov-Smirnov 함수 |
| STATS_MODE | 미 지원 | 가장 큰 빈도를 가지는 값을 반환 |
| STATS_MW_TEST | 미 지원 | A Mann Whitney Test는 2개의 독립 표본을 비교 |
| STATS_ONE_WAY_ANOVA | STATS_ONE_WAY_ANOVA | 분산의 다른 2개 추정치 비교에 의해 통계적 유의성에 대한 평균(그룹 또는 변수에 대한)의 유의한 차를 검증 |
| STATS_T_TEST_* | 미 지원 | t검정에서는, 평균치의 차이의 유의성을 측정 |
| STATS_WSR_TEST | 미 지원 | 대응쌍표본의 윌콕스 부호 순위 검증을 수행하며, 표본 간의 차이가 zero로부터 유의한 차이가 있는지 검정 |
| SYS_OP_ZONE_ID | 미 지원 | 인수로 rowid를 취하여 영역 ID를 반환 |
| TO_APPROX_COUNT_DISTINCT | 미 지원 | |
| TO_APPROX_PERCENTILE | 미 지원 |
Analytic Functions
Oracle | Altibase | 비고 |
|---|---|---|
CLUSTER_DETAILS | 미 지원 | |
FEATURE_DETAILS | 미 지원 | |
| FIRST_VALUE * | FIRST_VALUE | 값의 정렬된 세트에서 첫번째 값을 반환 |
| LAG | LAG | 현재 행을 기준으로 이전 값을 참조하는 함수 |
| LAST_VALUE * | LAST_VALUE | 윈도우에서 정렬된 값 중에서 마지막 값을 반환 |
| LEAD | LEAD | 현재 행을 기준으로 이후의 값을 참조하는 함수 |
NTH_VALUE * | NTH_VALUE | offset번째 행의 값을 구하는 함수 |
| NTILE | NTILE | 출력 결과를 사용자가 지정한 그룹 수로 나누어 출력하는 함수 |
PREDICTION | 미 지원 | |
| RATIO_TO_REPORT | RATIO_TO_REPORT | 값의 세트의 합에 대한 값의 비율을 계산 |
| ROW_NUMBER | ROW_NUMBER | 분할 별로 정렬된 결과에 대해 순위를 부여하는 기능 |
Object Reference Functions
Oracle | Altibase | 비고 |
|---|---|---|
DEREF | 미 지원 | 객체 참조 함수 |
Model Functions
Oracle | Altibase | 비고 |
|---|---|---|
CV | 미 지원 | Select 문의 Model_clause에서만 사용 가능 |
OLAP Functions
Oracle | Altibase | 비고 |
|---|---|---|
CUBE_TABLE | 미 지원 | 3차원 데이터를 2차원 데이터로 변환 |
Data Cartridge Functions
Oracle | Altibase | 비고 |
|---|---|---|
DATAOBJ_TO_MAT_PARTITION | 미 지원 | 데이터 카트리지 개발에 유용함 |
Pseudocolumns
Oracle | Altibase | 비고 |
|---|---|---|
| ROWID | 미 지원 | |
| ROWNUM | ROWNUM | Select되는 ROW의 순서값, DML에는 미 지원 |
Expressions
Oracle | Altibase | 비고 |
|---|---|---|
| CASE | CASE, CASE2 | expr1이 참이면 ret_expr1을 반환 |
Stored Procedure or Function 변환
Altibase AUTOCOMMIT 모드에서 Procedure 처리
AUTOCOMMIT 모드에서 Altibase의 PROCEDURE/FUNCTION은 전체가 하나의 트랜잭션으로 처리된다.
따라서 PROCEDURE 내의 COMMIT/ROLLBACK은 무시되고 PROCEDURE 실행 후 자동으로 COMMIT 된다.
반면 Oracle은 AUTOCOMMIT 모드에서도 PROCEDURE/FUNCTION 내의 COMMIT/ROLLBACK이 수행되기 때문에 이 경우 PROCEDURE 수행 결과가 달라질 수 있다.
NON-AUTOCOMMIT 모드에서는 Altibase와 Oracle의 PROCEDURE 수행 결과가 동일하다.
Oracle | Altibase |
|---|---|
PROCEDURE/FUNCTION의 PARAMETER TYPE과 RETURN TYPE
Oracle의 PARAMETER TYPE과 RETURN TYPE은 크기를 지정할 수 없고, 자동으로 최대 크기까지 허용된다.
다만, 동일 타입이더라도 SQL에서 최대 크기와 PL/SQL에서 최대 크기가 다를 수 있는데, 그 내용은 아래 표에 기술되어 있다.
반면 Altibase의 PARAMETER TYPE과 RETURN TYPE은 크기를 지정할 수 있다.
만약 크기를 지정하지 않으면, PARAMETER TYPE과 RETURN TYPE 최대 크기는 아래 프로퍼티 설정에 따라 결정된다.
- PSM_PARAM_AND_RETURN_WITHOUT_PRECISION_ENABLE = 0
- CHAR, NCHAR, NVARCHAR, VARCHAR의 크기는 1이다.
- PSM_PARAM_AND_RETURN_WITHOUT_PRECISION_ENABLE = 1 (기본값)
- CHAR, NCHAR, NVARCHAR, VARCHAR의 크기는 각각 아래 표의 프로퍼티 설정 값으로 결정된다.
PROCEDURE/FUNCTION에서 데이터 타입의 최대 크기
데이터 타입 | Oracle SQL에서 최대 크기 | Oralce PL/SQL에서 최대 크기 | Altibase SQL에서 최대 크기 | Altibase PL/SQL에서 최대 크기 | Altibase PL/SQL에서 크기를 지정하지 않은 경우 최대 크기 |
|---|---|---|---|---|---|
| CHAR | 2000 bytes | 32767 bytes | 32000 bytes | 65534 bytes | PSM_CHAR_DEFAULT_PRECISION (기본값 : 32767) |
| NCHAR | 1000(UTF16), 666(UTF8) 최대 2000 bytes | 16383(UTF16), 10922(UTF8) 최대 32767 bytes | 16000(UTF16), 10666(UTF8) 최대 32000 bytes | 32766(UTF16), 21843(UTF8) 최대 65534 bytes | PSM_NCHAR_UTF16_DEFAULT_PRECISION (기본값 : 16383) PSM_NCHAR_UTF8_DEFAULT_PRECISION (기본값 : 10921) |
| RAW | 2000 bytes | 32767 bytes | |||
VARCHAR VARCHAR2 | 4000 bytes | 32767 bytes | 32000 bytes | 65534 bytes | PSM_VARCHAR_DEFAULT_PRECISION (기본값 : 32767) |
NVARCHAR2 NVARCHAR2 | 2000(UTF16), 1333(UTF8) 최대 4000 bytes | 16383(UTF16), 10922(UTF8) 최대 32767 bytes | 16000(UTF16), 10666(UTF8) 최대 32000 bytes | 32766(UTF16), 21843(UTF8) 최대 65534 bytes | PSM_NVARCHAR_UTF16_DEFAULT_PRECISION (기본값 : 16383) PSM_NVARCHAR_UTF8_DEFAULT_PRECISION (기본값 : 10921) |
| LONG | 2 GB - 1 | 32760 bytes | |||
| LONG RAW | 2 GB | 32760 bytes | |||
| BLOB | (4 GB - 1) * (database block size) | 128 TB | 4 GB - 1 | 100 MB | LOB_OBJECT_BUFFER_SIZE (기본값 : 32000) |
| CLOB | (4 GB - 1) * (database block size) | 128 TB | 4 GB - 1 | 100 MB | LOB_OBJECT_BUFFER_SIZE (기본값 : 32000) |
| NCLOB | (4 GB - 1) * (database block size) | 128 TB |
Oracle의 Extended Data Types (MAX_STRING_SIZE = EXTENDED) 의 최대 크기는 본 문서의 'SQL 변환 가이드 -> 데이터 타입 변환'에서 확인할 수 있다.
입출력 및 파일 제어를 위해 제공되는 저장 프로시저 및 함수
입출력 및 파일 제어에 관련된 PROCEDURE 및 FUNCTION은 SYSTEM_ 사용자에 자동으로 생성되어 있고, PUBLIC SYNONYM으로 정의되어 있기 때문에 사용자는 PROCEDURE/FUNCTION 이름만 호출하여 사용할 수 있다.
구분 | Oracle | Altibase | 비고 |
|---|---|---|---|
| 표준 출력 | DBMS_OUTPUT.DISABLE | 미 지원 | |
| DBMS_OUTPUT.ENABLE | 미 지원 | ||
| DBMS_OUTPUT.GET_LINE | 미 지원 | ||
| DBMS_OUTPUT.GET_LINES | 미 지원 | ||
| DBMS_OUTPUT.NEW_LINE | DBMS_OUTPUT.NEW_LINE | Altibase의 DBMS_OUTPUT 패키지는 $ALTIBASE_HOME/packages의 스크립트를 실행해서 생성 후 사용할 수 있다. | |
| DBMS_OUTPUT.PUT | DBMS_OUTPUT.PUT | Altibase의 PRINT로 대체 가능 | |
| DBMS_OUTPUT.PUT_LINE | DBMS_OUTPUT.PUT_LINE | Altibase의 PRINTLN으로 대체 가능 | |
| 파일 처리
| UTL_FILE.FCLOSE | FCLOSE | |
| UTL_FILE.FCLOSE_ALL | FCLOSE_ALL | ||
| UTL_FILE.FCOPY | FCOPY | ||
| UTL_FILE.FFLUSH | FFLUSH | ||
| UTL_FILE.FGETATTR | 미 지원 | ||
| UTL_FILE.FGETPOS | 미 지원 | ||
UTL_FILE.FOPEN | FOPEN | ||
UTL_FILE.FOPEN_NCHAR | 미 지원 | ||
UTL_FILE.FREMOVE | FREMOVE | ||
UTL_FILE.FRENAME | FRENAME | ||
| UTL_FILE.FSEEK | 미 지원 | ||
UTL_FILE.GET_LINE | GET_LINE | ||
| UTL_FILE.GET_LINE_NCHAR | 미 지원 | ||
| UTL_FILE.GET_RAW | 미 지원 | ||
UTL_FILE.IS_OPEN | IS_OPEN | ||
UTL_FILE.NEW_LINE | NEW_LINE | ||
| UTL_FILE.PUT | PUT | ||
| UTL_FILE.PUT_LINE | PUT_LINE | ||
| UTL_FILE.PUT_LINE_NCHAR | 미 지원 | ||
| UTL_FILE.PUT_NCHAR | 미 지원 | ||
| UTL_FILE.PUTF | 미 지원 | ||
| UTL_FILE.PUTF_NCHAR | 미 지원 | ||
| UTL_FILE.PUT_RAW | 미 지원 |
DBMS_RANDOM 변환
Altibase는 DBMS_RANDOM 패키지 외에 RANDOM 함수도 지원한다.
Oracle | Altibase | 비고 |
|---|---|---|
| DBMS_RANDOM.NORMAL | 미 지원 | 정규 분포에서 난수를 반환 |
| DBMS_RANDOM.SEED | DBMS_RANDOM.SEED | seed를 재설정 Altibase의 RANDOM(seed) 함수로 대체 가능 |
| DBMS_RANDOM.STRING | DBMS_RANDOM.STRING | 임의의 문자열을 반환 |
| DBMS_RANDOM.VALUE | DBMS_RANDOM.VALUE | 난수를 반환 Altibase의 RANDOM(0) 함수로 대체 가능 |
DBMS_RANDOM.INITIALIZE | DBMS_RANDOM.INITIALIZE | 패키지를 초기화하는 프로시저 Oracle은 deprecated |
| DBMS_RANDOM.RANDOM | DBMS_RANDOM.RANDOM | 난수 생성 Oracle은 deprecated |
| DBMS_RANDOM.TERMINATE | 미 지원 | 패키지를 종료하는 프로시저 Oracle은 deprecated |
WHERE CURRENT OF 구문
Oracle의 CURSOR를 이용한 WHERE CURRENT OF 구문은 Altibase에서 다음과 같이 변환이 필요하다.
Oracle | Altibase |
|---|---|
EXCEPTION
Oracle과 Altibase는 Stored PROCEDURE/FUNCTION에서 발생하는 EXCEPTION들을 미리 시스템에서 정의해 놓았다.
Oracle | Altibase | |||
|---|---|---|---|---|
SQLERRM | SQLCODE | SQLERRM | SQLCODE(integer) | SQLCODE(hexadecimal) |
ACCESS_INTO_NULL | -6530 |
| 미 지원 | |
CASE_NOT_FOUND | -6592 |
| 미 지원 | |
COLLECTION_IS_NULL | -6531 |
| 미 지원 | |
CURSOR_ALREADY_OPEN | -6511 | CURSOR_ALREADY_OPEN | 201062 | 31166 |
DUP_VAL_ON_INDEX | -1 | DUP_VAL_ON_INDEX | 201063 | 31167 |
INVALID_CURSOR | -1001 | INVALID_CURSOR | 201064 | 31168 |
INVALID_NUMBER | -1722 | INVALID_NUMBER | 201065 | 31169 |
LOGIN_DENIED | -1017 |
| 미 지원 | |
NO_DATA_FOUND | +100 | NO_DATA_FOUND | 201066 | 3116A |
| NO_DATA_NEEDED | -6548 | 미 지원 | ||
NOT_LOGGED_ON | -1012 |
| 미 지원 | |
PROGRAM_ERROR | -6501 | PROGRAM_ERROR | 201067 | 3116B |
ROWTYPE_MISMATCH | -6504 |
| 미 지원 | |
SELF_IS_NULL | -30625 |
| 미 지원 | |
STROAGE_ERROR | -6500 | STORAGE_ERROR | 201068 | 3116C |
SUBSCRIPT_BEYOND_COUNT | -6533 |
| 미 지원 | |
SUBSCRIPT_OUTSIDE_LIMIT | -6532 |
| 미 지원 | |
SYS_INVALID_ROWID | -1410 |
| 미 지원 | |
TIMEOUT_ON_RESOURCE | -51 | TIMEOUT_ON_RESOURCE | 201069 | 3116D |
TOO_MANY_ROWS | -1422 | TOO_MANY_ROWS | 201070 | 3116E |
VALUE_ERROR | -6502 | VALUE_ERROR | 201071 | 3116F |
ZERO_DIVIDE | -1476 | ZERO_DIVIDE | 201072 | 31170 |
데이터베이스 전환 절차
Oracle에서 Altibase로 데이터베이스 전환을 위해, 객체 변환 및 데이터 마이그레이션을 자동으로 수행해주는 MigrationCenter 도구를 사용할 수 있다.
전환 작업이 진행되기 이전에 맵핑 작업을 위하여 이전 Database에서 사용하는 환경에 맞게 user와 Tablespace 생성이 필요하다.
Oracle에 종속적인 기능이나 비표준 및 Altibase에서 지원하지 않는 기능 등은 수동으로 변환해주어야 한다.
Data 이관 및 Application 변환 작업 절차
Data 정합성 확인
APPLICATION 검증 | 검증 방안 도출 |
|---|---|
DATA검증 | Migration Center Report |
Database 전환 시 장애 대처 방안
Database 전환 도구
Oracle에서 Altibase로 전환 시, 자동 전환 도구인 MigratinCenter를 이용하여 전환한다.
1) MigrationCenter 이점
GUI 기반의 툴로 손쉽게 사용이 가능
CLI 모드 지원으로 이관 작업의 손쉬운 실행과 높은 성능
스키마와 함께 데이터도 모두 한 번의 조작으로 이관 수행
서로 다른 데이터 형식에 대한 매핑 작업을 통해 이관 작업 수행
유연한 데이터 이관을 지원하기 위하여 사용자 정의 형식 지원
전환 결과에 대한 단계 별 요약 보고서 제공
2) 사용법
(1) Add Database Connection
Source/Target Database의 정보를 입력.
Connection Name : 임의 지정 가능
IP : Database Server IP
Port : Database Server Port
User : 연결 사용자 계정
Password : 연결 사용자 비밀번호
SID : 서비스 명
IP Version : IPv4/IPv6
데이터베이스 접속을 위해 JDBC 드라이버를 사용하므로, 원본 데이터베이스와 대상 데이터베이스에 알맞은 JDBC 드라이버를 준비하는 것이 중요하다.
사용자 편의를 위해 지원되는 데이터베이스에 적합한 몇 가지 JDBC 드라이버를 MigrationCenter와 함께 제공한다.
(2) Create Project
데이터 이관에 대한 프로젝트를 생성.
Project Name : 임의 지정 가능
Project Path : 자동 생성
Source Database : Oracle
Destination Database : Altibase
(3) Connect
원본 및 대상 데이터베이스로 연결.
(4) Build Project
Build User : 원본 데이터베이스에 접속한 사용자의 이관 가능한 모든 객체 정보를 수집한다.
Build Table : 원본 데이터베이스에 접속한 사용자의 테이블들로부터 이관할 테이블 목록을 직접 구성한다. 선택된 테이블과 그에 종속된 제약조건 및 인덱스의 객체 정보를 수집한다.
Source Database에서 테이블의 레코드 개수를 가져오는 방식(Fast/Slow)을 선택하고 진행한다.
(5) Reconcile Project
마이그레이션 수행 방법을 정의하는 단계로, 마이그레이션 과정에서 가장 중요한 단계이다.
Data Type Mapping : Oracle과 Altibase의 데이터 타입 매핑
PSM Data Type Mapping : Oracle PL/SQL과 Altibase PSM 의 데이터 타입 매핑
Tablespace to Tablespace Mapping : Oracle과 Altibase의 테이블스페이스 매핑
Table to Tablespace Mapping : Altibase의 테이블을 저장할 테이블스페이스 지정
Select Editing : Oracle 데이터 조회 조건 추가/수정
DDL Editing : Altibase의 최종 DDL 수정
(6) Run Project
데이터 마이그레이션을 수행.
(7) PL/SQL Converter Tool
파일로 저장된 Oralce PL/SQL을 MigrationCenter를 이용하여 데이터 타입에 대한 sytax를 수정한다.
비즈니스 로직은 자동 변환되지 않으므로, 개발자가 수동으로 변환해야 한다.