내용 목차
본 장에서는 T-Up 유틸리티를 소개하고 사용 방법을 설명한다.
T-Up은 Tibero DB에서 제공하는 호환성 평가 및 마이그레이션 유틸리티이다.
이 유틸리티는 실제 마이그레이션을 수행 전 호환성 평가 기능과 데이터베이스 스키마 오브젝트 중 전체 또는 일부를 Tibero로 옮기는 마이그레이션 기능으로 구성되어 있다. 호환성 평가 기능은 소스 데이터베이스의 스키마 오브젝트와 SQL 구문 그리고 응용 프로그램에서 사용된 데이터베이스 관련 API에 대해 Tibero에서의 지원가능 여부 및 미지원 원인 분석을 수행한다 . 마이그레이션은 소스 데이터베이스에 저장된 테이블, 인덱스, 뷰 등의 스키마 오브젝트와 PSM 프로그램 등을 Tibero 데이터베이스로 옮겨 이전의 데이터베이스와 같은 기능을 수행하도록 한다.
T-Up 유틸리티의 기능은 다음과 같다.
호환성 평가 기능
실제 마이그레이션을 수행하기 전에 소스 데이터베이스의 스키마 오브젝트, SQL 구문, 응용 프로그램의 API에 대한 호환성을 평가한다.
호환성 평가 결과를 HTML 형식의 보고서로 출력하여 제공한다.
마이그레이션 기능
사용자가 원하는 데이터를 선택하여 Tibero로 마이그레이션한다.
테이블, 인덱스, 뷰, 동의어 등의 스키마 객체와 테이블에 정의된 각종 제약조건을 마이그레이션한다.
사용자 특권(privilege) 및 역할(role)을 마이그레이션한다.
마이그레이션 타겟 데이터베이스에 대한 정보를 제공한다.
[Option] 버튼을 사용하여 다양한 방법으로 마이그레이션한다.
Progress 화면을 통해서 마이그레이션의 진행사항을 파악할 수 있다.
T-Up은 Java 언어로 구현되어 있으며, Java 6 이상에서 사용할 수 있다. 또한 실행하기 전에 접속하려는 DB의 JDBC 드라이버 파일의 경로를 실행 스크립트 내의 classpath 설정에 추가해야 한다.
다음은 T-Up 유틸리티를 실행하면 호환성 평가와 마이그레이션에서 공통으로 이용하는 메인 화면이다.
Source
Source 접속 정보
다음은 Source 접속 정보의 각 항목에 대한 설명이다.
소스 데이터베이스 스키마 트리
스키마 트리는 사용자가 원하는 데이터를 선택하는 기능과 데이터베이스의 문자 셋 설정을 보여준다. 스키마 트리는 3개의 계층으로 구성되어 있다. 루트 노드는 소스 데이터베이스를 지칭하고 그 하위 계층은 스키마들을 지칭하고 각 스키마 하위 계층은 해당 스키마가 소유하고 있는 테이블들을 지칭한다. 데이터를 선택하는 방식은 아래와 같이 3가지로 나눈다.
전체 모드
데이터베이스명을 선택하면 모든 스키마가 선택된다. 종속된 스키마 요소를 하나라도 해제하면 전체 모드에서 스키마 모드로 변환한다.
스키마 모드
특정한 스키마명를 선택하면 스키마에 종속된 객체들이 모두선택된다. 종속된 테이블 요소를 하나라도 해제하면 스키마 모드에서 테이블 모드로 변환된다.
테이블 모드
테이블 요소를 선택한 것으로 T-Up의 최소 이관 단위이다.
Source의 문자 셋 설정은 다음 두 가지 정보를 보여준다.
Charset
NCharset
Tibero
버튼
다음은 T-Up 메인 화면 버튼의 설명이다.
버튼 | 설명 |
---|---|
[Connect] | 대상 데이터베이스에 접속한다. |
[Analyze] | 호환성 평가 옵션 화면이 나타난다. |
[Option] | 마이그레이션 옵션 화면이 나타난다. |
[Migrate] | 마이그레이션을 시작한다. |
[Close] | T-Up을 종료한다. |
T-Up의 호환성 평가와 관련된 화면 및 기능에 대해 설명한다.
다음은 호환성 평가를 위한 Analysis 화면이다. 이 화면을 통해 분석 대상과 분석 파일 등을 설정할 수 있고 분석 진행 상황을 파악할 수 있다.
Target to Analyze
여기서는 호환성을 분석할 대상을 선택한다.
Data Dictionary
소스 데이터베이스의 Table, Index, View 등과 같은 스키마 오브젝트의 호환성 평가를 수행한다. 이 옵션을 수행하기 위해서는 반드시 소스 데이터베이스에 접속해야 한다. 전체 모드와 스키마 모드처럼 적어도 하나 이상의 스키마가 선택되어야 평가를 진행할 수 있다.
'Target to Analyze'에서 'Data Dictionary'를 선택하면 다음 그림과 같이 File Information 입력 항목이 활성화된다. 자세한 설명은 "File Information"을 참고한다.
SQL File
DDL, DML, Query, PSM 등 소스 데이터베이스에서 사용된 SQL들에 대한 호환성 평가를 수행한다. 이 옵션을 수행하기 위해서는 파일의 형태로 입력을 받으므로 소스 데이터베이스에 대한 접속이 필요하지 않다.
파일 입력 방식은 'Directory'와 'File' 두 가지 모두 가능하다. Directory는 선택된 가장 상위 디렉터리부터 하위의 모든 디렉터리까지 탐색하여 모든 파일을 분석의 입력으로 사용한다. File은 특정 하나의 파일만을 분석의 입력으로 사용한다.
'Target to Analyze'에서 'SQL File'을 선택하면 다음 그림과 같이 File Information 입력 항목이 활성화된다. 자세한 설명은 "File Information"을 참고한다.
API Source
소스 데이터베이스를 사용하는 응용 프로그램의 데이터베이스 관련 API들의 호환성 평가를 수행한다. 이 옵션도 응용 프로그램의 코드를 파일 형태로 입력 받으므로 소스 데이터베이스에 대한 접속이 필요하지 않다. 파일 입력 방식은 SQL File과 동일하다.
'Target to Analyze'에서 'API Source'를 선택하면 다음 그림과 같이 File Information 입력 항목이 활성화된다. 자세한 설명은 "File Information"을 참고한다.
File Information
Report Options
여기서는 결과 보고서의 출력 옵션을 선택한다.
Remove Duplication Error
이 옵션이 선택된 경우 중복된 에러 메세지는 결과 보고서에 표시하지 않는다.
Analysis
[Run Analysis] 버튼을 클릭하면 설정한 옵션으로 호환성 평가가 수행되고 Progress Status에서 진행률을 보여준다. Log Messages에서는 평가 진행과 관련된 통계, 에러, 평가 완료 등의 간단한 메시지를 출력한다.
버튼
다음은 Analysis 화면 버튼의 설명이다.
버튼 | 설명 |
---|---|
[Syntax] | 분석 대상의 파일 형식을 지정한다. |
[Directory] | 분석할 파일들이 들어 있는 디렉터리를 선택한다. |
[File] | 분석할 하나의 파일을 선택한다. |
[Run Analysis] | 호환성 평가 분석을 시작한다. |
[Close] | Analysis 화면을 종료한다. |
호환성 평가는 크게 Data Dictionary, SQL File, API Source로 나눌 수 있다. 각 평가 대상은 Source DBMS의 종류에 따라 지원하는 범위에 대해 설명한다.
Data Dictionary
다음은 Oracle Data Dictionary 호환성 평가 대상 스키마 오브젝트이다.
스키마 오브젝트 | 스키마 오브젝트 | 스키마 오브젝트 | 스키마 오브젝트 |
---|---|---|---|
TABLESPACE | TABLE | INDEX | INDEX TYPE |
VIEW | SEQUENCE | MATERIALIZED VIEW | MATERIALIZED VIEW LOG |
SYNONYM | ROLE | DATABASE LINK | TRIGGER |
FUNCTION | PROCEDURE | PACKAGE | TYPE |
JAVA SOURCE | DIRECTORY | LIBRARY | CONTEXT |
PROFILE | OPERATOR | RESOURCE | OUTLINE |
ASSOCIATION | CLUSTER | DIMENSION |
SQL File
다음은 Oracle SQL File 호환성 평가 대상 문장이다.
문장 | 문장 | 문장 | 문장 |
---|---|---|---|
CREATE | ALTER | DROP | TRUNCATE |
GRANT | REVOKE | AUDIT | ANALYZE |
ASSOCIATE | COMMENT | PURGE | RENAME |
LOCK | INSERT | DELETE | UPDATE |
MERGE | CALL | ANONYMOUS BLOCK |
API Source
다음은 Oracle API Source 호환성 평가 대상 구문이다.
구문 | 구문 |
---|---|
OCI | ODP.NET |
T-Up의 마이그레이션과 관련된 화면 및 기능에 대해 설명한다.
다음은 Migration Option 화면에 대한 설명이다.
DDL
DDL은 마이그레이션할 때 첫 단계로 Tibero 데이터베이스의 객체들을 생성할 때 사용하는 SQL 문이다. 여기서는 어떤 타입의 스키마 오브젝트의 DDL을 추출하고, 생성한 DDL 문장을 수행할지를 선택하는 등의 DDL과 관련된 옵션을 결정한다.
Type Selection
이관 대상이 될 스키마 오브젝트의 타입을 정한다.
항목 | 설명 |
---|---|
Migrates All Objects | 지원하는 모든 타입의 DDL 문장을 추출한다. |
Migrates Objects by Type | 선택한 오브젝트 종류에 해당하는 DDL 문장만을 추출한다. |
상세선택 버튼([...])을 클릭하면 다음과 같이 오브젝트 종류를 선택할 수 있는 선택 화면이 나타난다.
Execute DDLs
추출한 DDL 문장을 타깃 데이터베이스에 실행할지를 결정한다. 이관할 테이블 등의 오브젝트가 이미 생성되어 있는 경우 이 옵션을 선택 해제하여 생성 SQL 문을 실행하는 단계를 건너뛸 수 있다.
Data Transfer
데이터 전송은 DDL 다음 단계로 데이터들을 소스 데이터베이스에서 Tibero로 이관한다.
Conversion
다음은 데이터 변환 옵션에 대한 설명이다.
항목 | 설명 |
---|---|
Read as Bytes | 테이블의 char, varchar와 같은 문자열을 저장하기 위한 열에 데이터베이스 설정과 다른 캐릭터 셋을 사용하여 실제 문자열이 저장될 경우 문자열 형태로 데이터를 가져올 경우 문자열이 깨질 수 있다. 이를 방지하기 위하여 문자열이 아닌 binary 형태로 데이터를 가져오고, binary 형태로 Tibero 측으로 옮길 때 사용되는 옵션이다. |
Real Characterset | 테이블 데이터 이외의 부분에 실제 데이터베이스의 캐릭터 셋과 다르게 입력된 부분이 있는 경우 이관 후 해당 내용이 깨질 수 있다. 이를 방지하기 위해 실제 사용한 캐릭터 셋을 지정하여 올바른 문자열 형태로 옮겨지도록 해주는 옵션이다. Read as Bytes 설정을 활성화한 경우에만 유효하며, 영향을 받는 항목은 PSM, DDL, 테이블의 COMMENT, 테이블 열의 COMMENT다. |
Double Character Column Size | 소스 데이터베이스와 Tibero의 캐릭터 셋이 서로 다른 경우 변환된 문자열 데이터의 실제 바이트 길이가 달라질 수 있다. 이 때문에 열의 길이 제한을 초과하여 이관에 실패하는 경우가 발생할 수 있다. 이를 방지하기 위해 문자열 기반의 열을 생성할 때 소스 데이터베이스에서 지정된 것의 2배의 길이로 바꾸어주는 옵션이다. |
Truncate Data Exceeded Max Length | 컬럼 길이가 Tibero에서 지원하는 최대 길이를 초과하는 경우, 잘라내고 이관할지 에러를 낼지를 선택하는 옵션이다. |
Remove Double Quotation | 이관할 때 오브젝트명의 대소문자를 무시하기 위해 제공하는 옵션이다. 옵션을 사용하지 않으면,
기본적으로 이관할 때 소스 데이터베이스의 오브젝트명을 그대로 이관하기 위해서 큰따옴표(" ")를 붙여서
이관한다. Table, Column 오브젝트에 지원하고 있으며, PSM 소스와 같이 텍스트 형태로 저장되는 부분에는 적용되지 않는다. |
Type Conversion Table | 소스 데이터베이스와 Tibero의 열 타입이 완전히 일치하지 않기 때문에 호환성을 보완하기 위한 설정을 할 수 있는 옵션이다. 이 옵션의 내용은 소스 데이터베이스의 종류에 따라 다를 수 있다. |
사용자는 Migration Progress 화면을 통해서 마이그레이션의 진행사항을 파악할 수 있다.
조회 항목
항목 | 설명 |
---|---|
Current Schema | 현재 진행하고 있는 스키마 정보이다. Current Schema는 마이그레이션해야 할 스키마 갯수와 마이그레이션된 스키마 갯수를 보여준다. 마이그레이션이 완료되면 COMPLETE를 나타낸다. |
Current Stage | 현재 진행하고 있는 스키마의 스테이지 정보이다. 스테이지 정보는 스키마의 데이터 타입 정보를 보여주고, 마이그레이션이 완료되면 COMPLETE를 나타낸다. |
Stage Progress | 마이그레이션하는 각 스테이지 진행상태를 보여준다. 스테이지 진행 정보는 마이그레이션 진행 중인 데이터명을 가르키며, 마이그레이션해야 할 데이터 갯수와 마이그레이션된 데이터 갯수를 보여준다. |
Created Objects | 현재까지 성공적으로 생성된 Object 갯수를 보여준다. |
Errors | 현재까지 발생한 Error 갯수를 보여준다. |
Data Migrator # | 테이블 데이터를 처리하는 스레드를 나타내며, 각각 현재 처리하고 있는 테이블 이름과 진행률을 보여준다. 총 갯수는 Option 화면의 데이터 전송 옵션 중 Concurrent Threads 항목에서 지정한 값에 따른다. |
버튼
버튼 | 설명 |
---|---|
[Show Report] | 마이그레이션의 결과를 확인할 수 있는 Report 화면이 나타난다. 자세한 내용은 “2.4.3. Migration Report 화면”을 참고한다. |
[OK] | 마이그레이션이 진행 중일 때는 비활성화되어 있다. 작업 과정이 모두 끝나면 버튼이 활성화되며, 클릭하면 모든 과정이 종료된다. |
[Cancel] | 마이그레이션의 진행이 중단된다. 작업과정이 모두 끝나면 이 버튼은 비활성화된다. |
T-Up 유틸리티는 전체 모드, 스키마 모드, 테이블 모드 3가지 마이그레이션 모드를 지원한다. 각 모드는 각각 다른 마이그레이션 범위를 지원한다.
전체 모드
전체 모드를 선택하면 데이터베이스안의 모든 스키마 객체들이 마이그레이션 대상이 된다.
스키마 모드
특정 스키마만 선택하는 경우는 스키마 모드로 동작하며, 선택한 스키마와 그에 속한 오브젝트 또는 연관된 오브젝트가 마이그레이션의 대상이 된다.
테이블 모드
특정 테이블을 선택하는 경우는 테이블 모드로 동작하며, 해당 테이블과 그에 속한 스키마의 연관된 객체들이 마이그레이션된다.
각 모드에 따라 마이그레이션하는 객체를 타입별로 정리하면 다음 표와 같다.
항목 | 전체 모드 | 스키마 모드 | 테이블 모드 |
---|---|---|---|
TABLESPACE | ● | ● | ✖ |
ROLE | ● | ● | ✖ |
SYSTEM PRIVILEGE | ● | ● | ✖ |
OBJECT PRIVILEGE | ● | ● | ● |
SYNONYM | ● | ● | ● |
SEQUENCE | ● | ● | ● |
TABLE | ● | ● | ● |
INDEX | ● | ● | ● |
CONSTRAINT | ● | ● | ● |
MATERIALIZED VIEW | ● | ● | ● |
VIEW | ● | ● | ● |
PSM | ● | ● | ● |
이때 타깃 데이터베이스에 새로 생성된 사용자의 비밀번호는 모두 초기화되며, 기본값은 'tibero'이다.
Object Privilege의 Grantor 값은 부여할 때 사용자의 권한에 따라 다르게 설정될 수 있기 때문에, 이관 후 로그인 사용자 또는 오브젝트의 소유자로 값이 변경될 수 있다.
다음은 간단한 예제이다.
# DBA권한의 사용자로 로그인 create user owuser identified by tibero; grant resource, connect to owuser; create user gtuser1 identified by tibero; grant resource, connect to gtuser1; create user gtuser2 identified by tibero; # owuser 사용자로 로그인 create table grantest1 ( c1 varchar2(20) ); grant select on grantest1 to gtuser1 with grant option; # gtuser1 사용자로 로그인 grant select on owuser.grantest1 to gtuser2;
위의 순서로 권한을 부여하면 Grantor가 다른 Object Privilege가 생성된다. 이런 Grantor에 해당되는 사용자에 대한 접속 정보를 T-Up에서 모두 알 수 없기 때문에 일괄적으로 마이그레이션을 수행하며, Grantor가 그대로 옮겨지지 않을 수 있다. 사용자 A가 Grantor이고 사용자 B가 Grantee인 권한을 생성하려면 위의 예제를 참고하여, A에게 권한을 우선 부여한 후 A로 로그인하여 B에게 다시 권한을 부여하면 된다.
메인 화면의 Source 접속 정보에서 소스 데이터베이스를 선택할 수 있다. 각 데이터베이스별로 고려해야 할 항목들과 지원하는 스미카 오브젝트들은 아래와 같다.
Default value의 표현식이 Tibero에서 지원하지 않는 경우 이관에 실패할 수 있다.
Character의 Size, Number의 Precision 등이 Tibero의 지원 범위보다 클 경우 이관에 실패할 수 있다.
메인 화면 Source 접속 정보
Connect As 정보를 설정해야 한다. [Properties] 버튼을 클릭하면 옵션을 선택할 수 있는 화면이 나타난다. 화면에서 NORMAL, SYSDBA, SYSOPER 중에 하나를 선택할 수 있다. (기본값: NORMAL)
SYSDBA 또는 SYSOPER를 선택하여 접속하는 경우 Oracle의 설정에 따라 원격에서의 로그인이 금지되어 있을 수 있다. 이에 해당하는 경우에는 REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE 설정을 주어 해결 할 수 있으며, 해당 설정에 대한 상세한 내용은 Oracle의 문서를 참고한다.
Option 화면의 데이터 변환 옵션
Option 화면이 나타나면 Type Conversion Table을 이용하여 컬럼 타입 변환 옵션을 설정할 수 있다.
LONG과 LONG RAW 컬럼은 Oracle 8x 이후에서는 사용하지 않는 것으로 권장되는 컬럼 타입으로, 단지 7x 이전 버전과의 호환성을 위해 지원되고 있다. 이 옵션을 이용하여 이관할 때에 위의 컬럼들을 각각 대치되는 CLOB, BLOB으로 변환할 것인지, 또는 해당 타입을 유지할 것인지를 지정할 수 있다.
다음은 Oracle에서 Tibero로 이관할 때 지원 오브젝트를 타입별로 정리한 내용이다.
Oracle | Tibero | 비고 |
---|---|---|
Constraint | Constraint | Primary Key, Foreign Key, Check, Ref Constraint에 대해 이관 지원한다. Primary Key index/constraint는 모두 constraint로 처리된다. Check constraint의 표현식은 Oracle의 DD에 저장된 문장을 이용해 DDL을 생성한다. |
Index | Index | R-TREE, Domain Index는 미지원 |
Materialized View | Materialized View | |
Materialized View Log | Materialized View Log | |
Privilege | Privilege | |
PSM | PSM | |
Role | Role | |
Schema | Schema | |
Sequence | Sequence | |
Synonym | Synonym | |
Table | Table | |
Tablespace | Tablespace | |
View | View |
Oracle에서 Tibero로 이관할 때 데이터 타입은 아래와 같이 변환된다.
Oracle | 이관 Data Type | 비고 |
---|---|---|
blob | BLOB | |
binary_float | BINARY_FLOAT | |
binary_double | BINARY_DOUBLE | |
character | CHAR | |
clob | CLOB | |
date | DATE | |
interval day to second | INTERVAL DAY(2) TO SECOND(6) | |
interval year to month | INTERVAL YEAR(2) TO MONTH | |
long | LONG | |
long raw | LONG RAW | |
nchar | NCHAR | |
nclob | NCLOB | |
number | NUMBER | |
nvarchar2 | NVARCHAR2 | |
rowid | ROWID | |
time | TIME | |
timestamp | TIMESTAMP | |
timestamp with time zone | TIMESTAMP WITH TIME ZONE | |
timestamp with local time zone | TIMESTAMP(6) WITH LOCAL TIME ZONE | |
varchar | VARCHAR | |
varchar2 | VARCHAR2 | |
xmltype | XMLTYPE |
BFILE, spatial data에 대해서 이관 지원하지 않는다.
같은 Tibero 간에 마이그레이션을 수행하는 경우 다른 데이터베이스를 선택한 경우와는 다르게 소스 데이터베이스와 타겟인 Tibero와 연결하는 경우 같은 JDBC 드라이버를 사용하게 된다. 그러므로 T-Up에 포함된 JDBC는 양쪽 데이터베이스 모두에 호환되어야 하며, 가장 최신의 JDBC를 사용하는 것이 바람직하다.
다음은 Sybase Adaptive Server Enterprice (ASE) 15 기준으로 Tibero와 다른 부분을 정리한 내용이다.
Sybase ASE | Tibero | 비고 |
---|---|---|
User | Schema | Tibero의 schema는 DB schema와 DB user를 포함한 개념이다. |
Segment | Segment | ASE에는 테이블스페이스 개념이 없으며, 각 객체가 Segment에 직접 저장된다. 이관할 때에는 Segment 이름에 해당하는 테이블스페이스를 만들어 각 객체를 그에 할당한다. |
✖ | Tablespace | |
Role | Role | |
Table | Table | ASE의 테이블 중 USER TABLE로 분류되는 것들을 이관한다. |
View | View | ASE에서 제공하는 sp_helptext를 이용하여 얻은 생성 DDL을 이용해 이관이 가능하다. 단, 문법이 완벽히 호환되지는 않는다. |
Index | Index | Function based Index를 제외한 Table Index를 이관한다. |
Rule | Constraint | Primary Key, Unique, Not Null, Check, Referential constraint의 이관이 가능하다. |
System Protect | System Privilege | System Protect와 Privilege의 각 항목의 이름이 ASE와 Tibero 양쪽 모두 동일할 경우에만 이관이 가능하다. |
Object Privilege | ||
Transact SQL | PSM | 미지원 |
SQLJ Procedure | ||
Scalar Function |
메인 화면 Source 접속 정보의 Properties에 Informix 서버 이름을 입력해야 한다. 메인 화면에서 [Properties] 버튼을 클릭하면 Informix 서버 이름을 입력할 수 있는 화면이 나타난다.
다음은 SQL Server에서 Tibero로 이관할 때의 스키마 오브젝트를 타입별로 정리한 내용이다.
각 오브젝트별 Storage 옵션 등의 세부 옵션은 대부분 지원하지 않는다.
SQL Server | Tibero | 비고 |
---|---|---|
Schema | Schema | |
Table | Table | |
View | View | 미지원 |
Index | Index | Unique index/constraint는 모두 index로 처리된다. |
Privilege | Privilege | 미지원 |
Role | Role | 미지원 |
Sequence | Sequence | 미지원 |
Tablespace | Tablespace | 미지원 |
Index | Index | |
Constraint | Constraint | Primary Key, Foreign Key, Check에 대해 이관 지원한다. Primary Key index/constraint는 모두 constraint로 처리된다. Foreign Key의 update 규칙은 지원하지 않는다. |
Synonym | Synonym | 미지원 |
Public Synonym | 미지원 | |
Materialized View | Materialized View | 미지원 |
PSM | PSM | 미지원 |
SQL Server에서 Tibero로 이관할 때 데이터 타입은 아래와 같이 변환된다.
SQL Server | 이관 Data Type | 비고 |
---|---|---|
bigint | NUMBER(19) | |
binary | RAW | 길이가 2000을 넘는 데이터는 truncate된다. |
bit | NUMBER(1) | |
char | CHAR | 최대 컬럼 길이는 2000(MAX_CHAR_SIZE)이며, 길이를 넘는 데이터는 truncate된다. |
cursor | 미지원 | |
date | DATE | |
datetime | TIMESTAMP(3) | |
datetime2 | TIMESTAMP(7) | |
datetimeoffset | TIMESTAMP WITH TIMEZONE | |
decimal | NUMBER | |
double precision | BINARY_DOUBLE | |
float | BINARY_FLOAT 또는 BINARY_DOUBLE | 1 ~ 24 precision은 BINARY_FLOAT, 25 ~ 53은 BINARY_DOUBLE로 이관된다. |
hyierachyid | 미지원 | |
image | BLOB | |
int | NUMBER(10) | |
money | NUMBER(19, 4) | |
nchar | NCHAR | 길이가 2000을 넘는 데이터는 truncate된다. |
numeric | NUMBER | |
nvarchar | NVARCHAR | 길이가 4000을 넘는 데이터는 truncate된다. |
ntext | NCLOB | |
real | BINARY_FLOAT | |
smalldatetime | DATE | |
smallint | NUMBER(5) | |
smallmoney | NUMBER(10, 4) | |
sql_variant | LONG RAW | |
table | 미지원 | |
text | CLOB | |
time | TIME(7) | |
timestamp | RAW(8) | |
tinyint | NUMBER(3) | |
uniqueidentifier | VARCHAR(36) | |
varbinary | RAW | 길이가 2000을 넘는 데이터는 truncate하며, RAW(max)는 BLOB으로 이관한다. |
varchar | VARCHAR | 길이가 8000을 넘는 데이터는 truncate된다. Target DB 버전에 따라 지원하는 varchar max size 차이가 있음을 주의가 필요하다. |
xml | XMLTYPE |
spartial 타입 컬럼은 지원하지 않는다.
다음은 PostgreSQL을 Tibero로 이관할 때 오브젝트를 타입별로 정리한 내용이다. 각 오브젝트별 storage 옵션 등의 세부 옵션은 대부분 지원하지 않는다.
PostgreSQL | Tibero | 비고 |
---|---|---|
Tablespace | Tablespace | 미지원 |
Role | Role | 미지원 |
Schema | Schema (=User) | Tibero는 Schema와 User가 동일한 Object이나 PostgreSQL에서는 Schema(namespace)와 User가 별개로 구분된다. T-Up에서는 PostgreSQL의 Schema(namespace)를 Tibero Schema(=Tibero의 User)로 생성한다. PostgreSQL의 User는 Tibero User(=Tibero Schema)로 이관되지 않는다. |
User | ||
Privilege | Privilege | 미지원 |
✖ | Public Synonym | 미지원 |
Sequence | Sequence | 미지원 |
Table | Table | |
Index | Index | Unique index/constraint는 모두 index로 처리된다. |
Constraint | Constraint | Primary Key, Foreign Key, Check에 대해 이관 지원한다. Primary Key index/constraint는 모두 constraint로 처리된다. Check constraint의 표현식은 PostgreSQL의 DD에 저장된 문장을 이용해 DDL을 생성하며, Tibero와 대소문자 처리방식 차이로도 이관에 실패할 수 있다. Foreign Key의 update 규칙은 지원하지 않는다. delete 규칙은 CASCADE와 SET NULL 두 가지만 지원한다. |
Synonym | Synonym | 미지원 |
Materialized View | Materialized View | 미지원 |
View | View | 미지원 |
✖ | PSM | 미지원 |
PostgreSQL을 Tibero로 이관할 때 데이터 타입은 아래와 같이 변환된다.
PostgreSQL | 이관 Data Type | 비고 |
---|---|---|
smallint | NUMBER(5) | |
integer | NUMBER(10) | |
bigint | NUMBER(19) | |
decimal | NUMBER | |
numeric | NUMBER | |
real | BINARY_FLOAT | |
double precision | BINARY_DOUBLE | |
float | BINARY_FLOAT 또는 BINARY_DOUBLE | 1 ~ 24 precision은 BINARY_FLOAT, 25 ~ 53은 BINARY_DOUBLE로 이관된다. |
money | NUMBER | |
character | CHAR | |
character varying | VARCHAR | |
text | VARCHAR(65532) | |
date | DATE | |
time | TIME(6) | |
time with time zone | TIME | timezone이 반영된 time 값으로 이관된다. |
timestamp | TIMESTAMP(6) | |
timestamp with time zone | TIMESTAMP(6) WITH TIME ZONE | 조회할 때 받아오는 timezone이 반영된다. |
interval | 미지원 | |
boolean | CHAR(1) | |
cidr | VARCHAR(43) | |
inet | VARCHAR(43) | |
macaddr | VARCHAR(17) | |
BIT | VARCHAR | |
BIT VARYING | VARCHAR | |
bytea | RAW(2000) | |
uuid | VARCHAR(40) | |
xml | XMLTYPE |
Array 타입 컬럼은 지원하지 않고, 컬럼의 추가 옵션은 Nullable과 Default value 설정만을 지원한다.
소스와 타겟 데이터베이스에 접속할 때 사용자에게는 마이그레이션 작업에 필요한 권한이 부여되어 있어야 한다. 적절한 권한이 부여되지 않으면 이관 실패가 발생할 수 있다. 예를 들면 SELECT ANY TABLE 권한이 없을 경우에 이관할 테이블을 조회하지 못하는 문제가 발생한다. 주로 DBA 권한을 부여한 사용자를 사용할 것을 권장하고 있으며, 실제 필요한 상세 권한 목록은 데이터베이스의 종류나 Option 화면에서 선택한 이관하게 될 오브젝트 종류에 따라 달라질 수 있다.
예를 들어 Oracle에서 전체 모드로 이관할 경우 소스 데이터베이스에 접속할 때 사용자에게는 다음의 권한이 부여되어 있어야 한다.
CONNECT
SELECT ANY TABLE
SELECT ANY DICTIONARY
ALTER SESSION
SELECT ANY DICTIONARY 권한에 SYS DATA DICTIONARY TABLE에 대해서 조회할 권한이 없을 수 있는데, 이 때는 아래 테이블에 대해서 추가적인 권한 부여가 필요하다.
constraint : sys.user$, sys.con$, sys.cdef$
mview : sys.snap$
타겟 데이터베이스가 Tibero인 경우 접속할 때 사용자에게는 다음의 권한이 부여되어 있어야 한다.
CONNECT
SELECT ANY TABLE
SELECT ANY DICTIONARY
RESOURCE
ALTER SESSION
다음은 T-Up의 호환성 평가 기능을 사용하는 과정에 대한 설명이다.
Data Dictionary로 분석을 수행할 경우에 아래 화면처럼 T-Up 유틸리티 메인 화면에서 소스 데이터베이스의 접속 정보를 입력하고 [Connect] 버튼을 클릭해서 접속한 후 스키마를 선택한 후 [Analyze] 버튼을 클릭한다.
다음과 같이 Analysis 화면이 나타난다. Target to Analyze에서 Data Dictionary를 선택한 후 [Run Analysis] 버튼을 클릭해서 분석을 수행한다.
분석이 수행되면 진행률과 간략한 로그 메시지가 출력된다. 분석이 완료되면 HTML 형식의 보고서가 생성되고 웹 브라우저를 통해 자동으로 팝업된다.
다음은 호환성 평가 보고서의 첫 화면이다. 맨 위에는 버전 및 접속 정보 등이 표시되고 Summary에서는 전반적인 호환률에 대한 통계가 나타난다.
다음은 호환성 평가 보고서의 하단에 나타나는 호환되지 않는 항목에 대해 자세한 정보를 제공하는 화면이다. 결과 리스트의 각 테이블 행을 클릭하면 평가된 문장이 나타나고 문제가 되는 부분을 빨간색으로 표시하여 보여준다.
SQL File 또는 API Source로 분석을 수행할 경우에는 메인 화면에서 소스 데이터베이스에 접속할 필요 없이 [Analyze] 버튼을 클릭하면 다음 그림과 같이 Target to analyze에서 각각 'SQL File', 'API Source' 항목을 선택하면 File Information에 항목이 활성화된다.
[Directory] 또는 [File] 버튼을 클릭하면 다음과 같은 그림의 선택창이 팝업된다. 분석에 사용할 디렉터리나 파일을 선택한다.
디렉터리나 파일을 선택하면 'Location'에 경로가 표시된다. 분석을 수행하기 위해 [Run Analysis] 버튼을 클릭하면 분석이 수행된다. SQL File 또는 API Source도 Data Dictionary와 마찬가지로 평가가 완료되면 호환성 평가 보고서를 출력하고 웹 브라우저를 통해 자동으로 팝업된다.
다음은 T-Up의 마이그레이션 기능을 사용하는 과정에 대한 설명이다.
T-Up 유틸리티를 실행하면 다음과 같은 초기 화면이 나타난다.
접속할 소스 데이터베이스의 사용자 ID, 패스워드 등의 입력이 완료되면 [Connect] 버튼을 클릭한다.
접속할 Tibero 데이터베이스의 사용자 ID, 패스워드 등의 입력이 완료되면 [Connect] 버튼을 클릭한다.
[OPTION] 버튼을 클릭한다. 그리고 Option 정보 설정이 완료되면 [OK] 버튼을 클릭한다.
소스 데이터베이스 스키마 트리 뷰에서 마이그레이션할 대상을 선택하여 [Run] 버튼을 클릭하면 마이그레이션이 진행된다.
마이그레이션을 진행하면 다음과 같이 진행상황을 보여주는 Progress 화면이 나타난다. 또한 화면 하단의 뷰에서 진행상황 로그를 확인할 수 있다.
진행 중 또는 종료 후 [Show Report] 버튼을 클릭하면 다음과 같은 Report 화면이 뜨고 마이그레이션 진행 내역을 확인할 수 있다.
모든 과정이 끝난 뒤 Progress 화면를 닫으면 다음과 같이 마이그레이션이 완료되었다는 대화 상자가 나타나면 [OK] 버튼을 클릭한다.