All pages
1 of 14

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

전환

타 DB에서 Tibero DB로 전환하는 방법에 대해 안내합니다.

안내서 구성

본 문서는 총 4개의 장으로 구성됩니다.

전환 전 확인해야 할 사항에 대해서 설명합니다.

🔎 전환 전 확인 바로가기

DB를 전환할 때 사용하는 방법들에 대해서 설명합니다.

🔎 전환 방법 바로가기

타사 DB에서 Tibero DB로 전환하는 절차 및 방법을 설명합니다.

🔎 전환 바로가기

Tibero와 다른 DBMS의 컬럼 데이터 타입을 비교하여 설명한 참고자료 입니다.

🔎

문서 다운로드

데이터 타입 비교 바로가기
Tibero_7_전환 가이드.pdf
PDF · 10MB
Open

Target DB 작업

업그레이드 Target DB인 Tibero 7 업그레이드 작업 절차를 설명합니다.

작업은 다음과 같은 순서로 진행합니다.

  1. 설치

  2. IMPORT 수행

  3. 후 처리

설치

Tibero 7를 설치하는 순서는 아래와 같습니다.

기본 절차에 대한 자세한 내용은 "Tibero 설치 가이드"를 참고합니다.

TIP은 $TB_HOME/config 안에 $TB_SID.tip 파일명으로 되어있습니다.

Tibero 6과 기본 문법은 같고 기존에 사용하던 Alias 등을 추가합니다.

Source DB에서 아래와 같은 설정 파일을 사용한다면 Tibero 7의 해당 설정 파일에도 적용이 필요합니다.

  • ESQL

  • C/JAVA External Procedure

  • DB Link 관련 Gateway

  • External Procedure (so 또는 class 파일 복사) Source DB와 Targer DB의 OS, BIT가 동일하면 복사를 하고 다르면 원본 소스를 통해 재컴파일을 수행합니다.

  • 디렉터리 관련 파일

"체크리스트 및 체크 방법"의 ""의 조회 결과 파일을 복사합니다.

의 내용을 참고하여 Tibero 6 설정에 맞게 수정한 후 DB를 생성합니다. 단, Archivelog 모드일 경우 후처리를 적용합니다.


Import를 수행하는 순서는 아래와 같습니다.

tbexport에서 생성된 tibero6_exp.log 파일을 열어 CREATE TABLESPACE 구문을 참조해 데이터 파일경로 및 size를 조정합니다. 단, CREATE DATABASE에서 생성된 SYSTEM, UNDO,TEMP, USR 부분은 생성하지 않습니다.

tbexport에서 생성된 tibero6_exp.log 파일을 열어 CREATE USER 구문을 참조해 USER의 PASSWORD, DEFAUTL_TABLESPACE 등의 설정을 조정합니다.

Export 한 데이터 파일을 미리 복사해서 가져온 후 tbimport의 Database(FULL) 모드로 수행합니다.

아래는 Target DB 서버에서 tbimport의 사용 방법 입니다.

항목
설명

다음은 Source DB 서버에서 Tibero 7 버전의 tbimport 사용 예시 입니다.


미지원 목록에 대한 생성구문을 Source DB 스크립트 형태로 실행합니다.

기존 Tibero 6이 Archive 모드였거나 Archive 운영이 필요할 경우 적용합니다.

tb6=(
(INSTANCE=(HOST=192.168.1.129) 
(PORT=8629)
(DB_NAME=tb6) 
)
hidden=(
(INSTANCE=(HOST=192.168.1.129) 
(PORT=8630)
(DB_NAME=tb6) 
)
$TB_HOME/client/config/tbpc.cfg
$TB_HOME/client/config/tbpcb.cfg
$TB_HOME/client/epa/java/config/tbepa.cfg
(Tibero 6의 경우 : $TB_HOME/client/epa/java/config/epa.cfg)
$TBGW_HOME/oracle/config/tbgw.cfg
$tbJavaGW/tbgw.cfg(Tibero 6의 경우 : $tbJavaGW/jgw.cfg)
create database
user sys identified by tibero
character set MSWIN949 
national character set UTF16
logfile group 0 ('log001.log','log002.log') size 50M,
group 1 ('log011.log','log012.log') size 50M,
group 2 ('log021.log','log022.log') size 50M
maxdatafiles 8192
maxlogfiles 100
maxlogmembers 8
noarchivelog
datafile 'system001.dtf' size 1G autoextend on next 256M maxsize unlimited 
default tablespace USR
datafile 'usr001.dtf' size 1G autoextend on next 256M maxsize unlimited    
default temporary tablespace TEMP
tempfile 'temp001.dtf' size 1G autoextend off
undo tablespace UNDO
datafile 'undo001.dtf' size 1G autoextend off
SYSSUB datafile 'syssub001.dtf' size 1G autoextend on next 32M maxsize unlimited;
$TB_HOME/scripts/system.sh
tbimport username={sys | dba계정} password=<password> port=<port_no> sid=<SID>
file=<file name> log=<log-file name> full=y script=y ignore=y

username

Import 할 DB 계정으로 sys 계정 또는 dba 계정 중에서 하나를 선택

password

Import 할 DB 계정의 비밀번호

port

tbimport username=sys password=pwd port=8629 sid=tb7 
file=tibero6_all.dat log=tibero7_imp.log full=y ignore=y
DECLARE
job_no number;
BEGIN
DBMS_JOB.SUBMIT(job_no,'dbms_output.put_line(''ok'');',SYSDATE,'SYSDATE+1');
END;
/
CREATE DATABASE LINK olink CONNECT TO scott IDENTIFIED BY 'tiger' USING 'oragw';
CREATE OR REPLACE LIBRARY extproc IS '/home/tibero/cepa/libextproc.so';
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "JavaExtproc" AS
public class SimpleMath {
public static int findMax(int x, int y) {
if (x >= y) return x;
else return y;
}
}
/
CREATE OR REPLACE PROCEDURE wrap_test WRAPPING
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello World');
END;
/
CREATE OR REPLACE DIRECTORY dir_ext AS '/home/tibero/t7/work/external/external'
/
tbdown immediate
tbboot -t mount
tbsql sys/tibero
SQL> alter database archivelog;
tbdown immediate
tbboot
tbsql sys/tibero
SQL> SHOW PARAM LOG_ARCHIVE_DEST
NAME                    TYPE     VALUE
----------------------- -------- --------------------------------------------
LOG_ARCHIVE_DEST        DIRNAME  /home/tibero/t7/tibero7/database/t7/archive/
​
SQL> alter system switch logfile;
System altered.
​
SQL> !ls -la /home/tibero/t7/tibero7/database/t7/archive/
total 23572
-rw-------. 1 tibero dba 24126976 Apr 4 22:40 log-t0-r0-s1.arc
​
SQL> select log_mode from v$database;
LOG_MODE
-------------- -
ARCHIVELOG

기본절차

파일 설정

Tibero Initial Parameter(tip파일)

Tibero 6에서 사용하던 파라미터중 변경되거나 사라진 파라미터가 있으므로 Tibero 7에서의 적용 확인이 필요합니다.

또한 _로 시작하는 히든파라미터를 사용하는것이 있다면 Tibero 7에서의 적용 확인이 필요합니다.

tbdsn.tbr

기타 파일

데이터베이스 생성

system.sh 수행

Import 수행

사용자 Tablespace 생성

Tablespace를 미리 생성하지 않은 상태에서 Import를 수행하면 Source DB 정보 그대로 데이터파일을 생성하게 되고, 이 경우 의도하지 않은 경로에 데이터 파일을 생성하거나 데이터파일 생성 실패 및 불필요한 스토리지 사용의 문제를 일으킬 수 있습니다.

사용자 생성

USER를 미리 생성하지 않은 경우 Tibero 6 에서 수행한 Export를 Tibero 7에서 Import 수행 시, 두 버전의 default 암호화 방식이 변경되어 유저 생성이 실패합니다.

tbimport

후처리

미지원 목록처리

JOB

DB LINK

External Procedure - Library

External Procedure – JAVA SOURCE

Wrapped PL/SQL

디렉터리 경로 변경

Archive 모드 적용

DB 종료

Mount 모드 기동

모드 변경

DB 종료 및 기동

확인

디렉터리 확인
"체크리스트 및 체크 방법"

Import 할 DB의 포트 번호

sid

Import 할 DB의 이름

file

Tibero6에서 import 한 데이터 파일

log

생성될 로그 파일의 이름

ignore

이미 존재하는 스키마 객체로 인한 생성 에러 무시 여부를 결정

I/F Driver 변경

JDBC

Tibero 6

  • JDBC 4.0 SPEC를 준수합니다. (JDK 1.6이상)

  • JDBC 파일 : $TB_HOME/client/lib/jar/tibero6-jdbc.jar

Tibero 7

  • JDBC 4.0 SPEC을 준수합니다. (JDK 1.7 이상)

  • JDBC 파일 : $TB_HOME/client/lib/jar/tibero7-jdbc.jar


Tibero 7 ODBC를 설치하여 기존 드라이버를 변경합니다.

OLE DB의 경우 지원이 중단되어, 아래와 같은 방법으로 우회가 필요합니다.

  1. ADO 환경(VB)에서는 MADASQL(Microsoft에서 제공하는 제너럴 OLE DB Driver)로 우회합니다.

  2. ADO.NET(C#, VB.NET) 환경에서는 TDP.NET으로 우회합니다.

DSN 방식은 동일하며 WIndows 계열의 IP/PORT 접속방식이면 아래와 같이 변경이 필요합니다.


Gateway를 사용 중이라면 Tibero 7에서 제공하는 Gateway로 변경 후 기동합니다.

JAVA External Procedure의 Agent를 사용 중이라면 Tibero 7에서 제공하는 Agent로 변경 후 기동합니다.

Tibero 6의 해당 파일을 열어 외부 라이브러리 참조에 필요한 셋팅을 Tibero 7에 적용한 후 관련 라이브러리를 가져옵니다.

Tibero URL Setting

Tibero 6,7

참고

Tibero 7부터는 클라이언트의 JVM Locale을 따르는 방식으로 변경되었습니다. 기존에는 DB 서버의 Locale을 기준으로 설정되었습니다.

ODBC 및 OLE DB

Connection String(ODBC)

Tibero 6

Tibero 7

참고

Tibero 7의 경우 DB NAME 체크가 강화되므로, 고객사에 해당하는 DB NAME을 추가합니다.

UNIX 계열(Linux 포함)에서는 SQLDriverConnect를 사용하여 IP/PORT를 명시하더라도 환경변수 TB_SID를 참고하여 DSN 방식으로 동작합니다.

기타(DB Link, EXTERNAL 등)

DB Link

External Procedure

외부라라이브러리(JAR) 참조

Tibero 6

Tibero 7

Single : jdbc:tibero:thin:@192.168.11.49:8629:tibero
TAC : "jdbc:tibero:thin:@(description=
(failover=on)(load_balance=on)
(address_list=(address=(host=192.168.11.49)(port=8629))
(address=(host=192.168.11.50)(port=8629))
)(DATABASE_NAME=tibero7))”
DRIVER={Tibero 6 ODBC Driver};SERVER=127.0.0.1;PORT=8629;UID=tibero;PWD=tmax;
DRIVER={Tibero 7 ODBC Driver};SERVER=127.0.0.1;PORT=8629;DB=tb7;UID=tibero;
PWD=tmax;
$TB_HOME/client/bin/ (해당 경로에 연결 대상 DB에 따른 Gateway 존재)
$TB_HOME/bin/psmjavac
$TB_HOME/client/bin/tbjavaepa
$TB_HOME/bin/psmjavac
$TB_HOME/client/bin/tbjavaepa

Tibero 문서 네비게이션 맵

개발, 운영 등 업무에 따라 필요한 티베로 기술정보를 아래 문서 목록에서 확인하세요.

개발

구분1
구분2
가이드

일반

기본관리


구분1
구분2
가이드

용어

설치

전체

패치

이관

Tools

유틸리티

인터페이스/연동

Driver

Web server

클라우드

분석

로그/덤프

모니터링/점검

TPR

빅데이터

성능

Storage

트랜잭션

튜닝

App

 

Language

C

COBOL

SQL

API

Interface

장애해결

 

보안

 

일반

기본관리

운영

구조

Language

TAC/ TAS

용어

설치

전체

패치

업그레이드

이관

Tools

유틸리티

백업/복구

인터페이스/연동

Driver

Web server

클라우드

성능

Storage

통계

분석

로그/덤프

모니터링/점검

TPR

빅데이터

보안

 

장애해결

 

운영자 가이드
설치 가이드
Client 설치가이드
패치 가이드
전환 가이드
대용량 이관 가이드
전환 유틸리티 가이드
WAS 연동 가이드
TPR 가이드
보안 가이드
운영자 가이드
Driver 연결 가이드
모니터링 가이드
대량 입력 업무 설정 가이드
파라미터 표준설정 가이드
Object 활용 가이드
물리 설계 안내서
설치 가이드
Client 설치가이드
패치 가이드
업그레이드가이드
전환 가이드
대용량 이관 가이드
전환 유틸리티 가이드
백업/복구 가이드
WAS 연동 가이드
TPR 가이드
보안 가이드
Driver 연결 가이드
모니터링 가이드

저작권 안내

티맥스티베로 기술문서에 일반적으로 공통 적용되는 저작권 안내사항 입니다.

경기도 성남시 분당구 정자일로 45 티맥스타워

Tel : +82-1544-8629

E-Mail :

이 소프트웨어(Tibero®) 사용설명서의 내용과 프로그램은 저작권법과 국제 조약에 의해서 보호받고 있습니다. 사용설명서의 내용과 여기에 설명된 프로그램은 TmaxTibero Co., Ltd.와의 사용권 계약 하에서만 사용이 가능하며, 사용설명서는 사용권 계약의 범위 내에서만 배포 또는 복제할 수 있습니다. 이 사용설명서의 전부 또는 일부분을 TmaxTibero의 사전 서면 동의 없이 전자, 기계, 녹음 등의 수단을 사용하여 전송, 복제, 배포, 2차적 저작물 작성 등 의 행위를 해서는 안 됩니다.

이 소프트웨어 사용설명서와 프로그램의 사용권 계약은 어떠한 경우에도 사용설명서 및 프로그램과 관련된 지적 재산권(등록 여부를 불문)을 양도하는 것으로 해석되지 않으며, 브랜드나 로고, 상표 등을 사용할 권한을 부여하지 않습니다. 사용설명서는 오로지 정보의 제공만을 목적으로 하고, 이로 인한 계약상의 직접적 또는 간접적 책임을 지지 않으며, 사용설명서 상의 내용은 법적 또는 상업적인 특정한 조건을 만족시키는 것을 보장하지는 않습니다.

사용설명서의 내용은 제품의 업그레이드나 수정에 따라 그 내용이 예고 없이 변경될 수 있으며, 내용상의 오류가 없음을 보장하지 않습니다.

Tibero® 는 TmaxTibero Co., Ltd.의 등록 상표입니다. 기타 모든 제품들과 회사 이름은 각각 해당 소유주의 상표로서 참조용으로만 사용됩니다.

본 제품의 일부 파일 또는 모듈은 다음의 라이선스를 준수합니다. : OpenSSL, RSA Data Security, Inc., Apache Foundation, Jean-loup Gailly and Mark Adler, Paul Hsieh's hash 관련 상세한 정보는 제품의 다음의 디렉터리에 기재된 사항을 참고해 주십시오. : ${INSTALL_PATH}/license/oss_li censes

주소

Website

기술서비스센터

Restricted Rights Legend

Trademarks

Open Source Software Notice

docs@tibero.com

전환 전 확인

티베로 DB전환 전 고려사항에 대해서 설명합니다.

고려사항

전환 수행 절차

다음은 DB 전환 수행 절차 입니다. 전환을 위해서는 DB 전환팀과 AP 전환 및 테스트팀이 필요합니다.

[그림 1] 전환 수행 절차

전환 난이도

다른 DB에서 Tibero DB로 전환할 때 상황에 따라 난이도가 구분되며 난이도에 따라 전환 방법이 달라질 수 있습니다.

아래는 각 난이도에 대한 상황의 설명입니다.

난이도
상황

전환 검증 시간을 줄이기 위하여 전환을 시작하기 전 고객사의 DB 담당자는 Source DB의 INVALID한 Object를 정리하는 것이 좋습니다.


T-UP의 Analysis 기능을 이용해 전환 전 호환성 검증을 진행합니다.

시작하기

클라우드 최적화 DBMS Tibero에 대한 소개부터 처음 사용 시 필요한 정보들을 안내합니다.

쉬움

몇 개의 Schema(=사용자)로 구성되어 있습니다.

Object들 사이에 의존성이 복잡하게 구성되어 있지 않습니다.

실제 사용하는 Object들로 구성되어 있으며 모두 VALID 상태 입니다.

어려움

다수의 Schema(=사용자)로 구성되어 있으며 Object들 사이에 의존성이 복잡하게 구성되어 있습니다.

Object들이 사용되지 않는 것들이 많으며 INVALID 상태입니다.

전환 전 권장사항

Source DB에서 에러가 발생하면 Tibero에서도 에러가 발생합니다.

전환 전 분석

[그림 2.1] T-UP Analysis
[그림 2.2] T-UP Analysis
[그림 3.1] T-UP Analysis Report
[그림 3.2] T-UP Analysis Report

Introduction

Tibero DBMS는 고성능, 고가용성 및 확장성의 문제를 해결하는 엔터프라이즈 데이터베이스관리시스템 입니다.

About Tibero DBMS

현재 기업의 비즈니스는 폭발적인 데이터의 증가와 다양한 환경 및 플랫폼의 등장으로 빠르게 확장되고 있습니다. 새로운 비즈니스 환경이 도래함에 따라 보다 더 효율적이고 유연한 데이터 서비스와 정보의 처리, 데이터 관리 기능이 필요하게 되었습니다.

Tibero는 이러한 변화에 맞춰 기업 비즈니스 구현의 기반이 되는 데이터베이스 인프라 구성을 지원하며 고성능, 고가용성 및 확장성의 문제를 해결하는 엔터프라이즈 데이터베이스 관리 시스템 입니다.

  • 기존 DB의 단점을 보완하기 위해 Tibero 는 독자적인 Tibero Thread Architecture를 채택, 구현했습니다.

  • 한정된 서버 프로세스의 CPU 및 메모리 등의 시스템 리소스를 효율적으로 사용하면서 뛰어난 성능과 안정성 및 확장성을 보장하고 편리한 개발 환경과 관리 기능을 제공합니다.

Tibero는 초기 설계부터 대규모 사용자, 대용량 데이터, 강화된 안정성, 향상된 호환성 측면 등에서 다른 DBMS와 차별화를 고려하여 개발된, 대용량의 데이터를 관리하고 안정적으로 비즈니스의 연속성을 보장하는 데이터 관리 솔루션 입니다.

  • RDBMS 환경에서 요구되는 주요 기능인 분산 데이터베이스 링크(Distributed Database Link), 데이터 이중화(Data Replication), 데이터베이스 클러스터(Data Cluster), 병렬 질의 처리 (Parallel Query Processing) 등의 기능을 갖추고 있습니다.

이처럼 Tibero는 기업이 원하는 최적의 데이터베이스 환경을 제공하는 대표적인 DB 입니다.

Tibero 문서 네비게이션 맵 바로가기
Tibero 안내서 바로가기

Source DB 작업

Tibero6의 업그레이드 진행을 위한 Source DB 업그레이드 사전 작업 절차를 설명합니다.

작업 절차는 다음과 같은 순서로 진행합니다.

  1. 체크리스트 및 체크 방법

  2. Export 수행

체크리스트 및 체크 방법

Tibero 6에서 Tibero 7로 업그레이드 하기 위해 다음의 항목들을 확인합니다.

  • CHARACTERSET

  • Redo 확인

  • Undo 확인

  • Temp Tablespace 확인

  • User Tablespace 확인

  • 로그 모드 확인

  • 컨트롤 파일 확인

  • JOB 확인

  • DB Link 확인(Tibero to Tibero, Tibero to Oracle 등)

  • External Procedure 사용여부 확인

  • Wrapped PSM(PL/SQL) 확인

  • 디렉터리 확인

  • Object Count 확인

  • Constraint 확인

NLS_CHARACTERSET과 NLS_NCHAR_CHARACTERSET의 VALUE를 확인합니다. TARGET DB를 생성할 경우 해당 내용에 맞춰 생성합니다.

각 로그 그룹별 MEMBER 및 각 그룹별 size(mb)와 MEMBERS를 확인합니다.

DB에서 사용중인 UNDO의 TABLESPACE_NAME과 해당 TABLESPACE가 사용중인 데이터 파일의 FILE_NAME, size, maxsize, AUTOEXTENSIBLE을 확인합니다.

Temp 파일을 쓰고 있는 TABLESPACE_NAME 및 해당 파일의 FILE_NAME, size,AUTOEXTENSIBLE, maxsize를 확인합니다.

Default Tablespace를 제외한 Tablespace들에 대해 TABLESPACE_NAME과 각 Tablespace에서 사용중인 데이터 파일의 FILE_NAME, size, maxsize, AUTOEXTENSIBLE을 확인합니다.

ARCHIVELOG일 경우 LOG_ARVHIVE_DEST, LOG_ARVHIVE_FORMAT, LOG_ARVHIVE_OVERWRITE, LOG_ARVHIVE_RETRY_TIME을 확인합니다. 로그 모드 외에 기본값과 다른 값이 있다면 Target DB의 tip 파일에 설정합니다.

경로 및 파일명을 알맞게 수정합니다. Target DB의 데이터베이스를 생성할 때 수정한 경로 및 파일명을 참고합니다.

JOB은 이관되지 않으므로 Target DB에 수동으로 생성이 필요합니다.

DB Link는 이관되지 않으므로 Target DB에 수동으로 생성이 필요합니다.

외부 참조 라이브러리를 확인하여 결과가 존재할 경우 후처리 파일인 so 및 class 파일을 Target DB의 동일 경로에 복사하거나 Target DB에서 재컴파일 합니다. 라이브러리는 이관되지 않으므로 Target DB에 수동으로 생성이 필요합니다.

다음은 외부 참조 라이브러리의 확인 예시 입니다.

다음은 JAVA의 Class 위치 확인 예시 입니다.

Tibero 7부터는 JEPA에서 사용자에 따라 class를 구분하도록 변경되어, JAVA_CLASS_PATH 경로에 사용자별 디렉토리가 생성되며 각 사용자별 class가 존재합니다.

Wrapped PL/SQL은 DB에서 내용을 조회할 수 없으므로 수동으로 생성하기 위한 생성문을 얻을 수 없습니다. 그래서 이관을 위해서는 원본 생성문이 필요합니다. Wrapped PSM(PL/SQL)은 이관되지 않으므로 Target DB에 수동으로 생성이 필요합니다.

다음은 Wrapped PSM(PL/SQL) 확인 예시 입니다.

External table에서 사용하는 디렉터리가 존재하는지 확인한 후 디렉터리가 존재한다면 해당 파일을 Target DB 시 스템 경로에 맞게 복사 및 재생성합니다.

쿼리 수행 후 나온 조회 결과를 저장하고 Object Count를 확인 합니다.

쿼리 수행 후 나온 조회 결과를 저장하고 Constraint를 확인합니다.


Export 하는 동안 데이터 변경이 일어나지 않게 하려면 Source DB에 연결된 모든 애플리케이션을 종료합니다.

아래는 접속된 세션 확인 예시 입니다.

Export 하는 동안 JOB이 수행되면 데이터 변경이 일어날 수 있으므로 JOB 수행을 중지합니다.

아래는 JOB 번호가 100번인 JOB을 중지하는 예시 입니다.

tbexport의 Database(FULL) 모드로 수행합니다.

아래는 tbexport의 사용 방법 입니다.

항목
설명

아래는 Source DB 서버에서 Tibero 6 버전의 tbexport 사용 예시 입니다.

SQL> SET LINESIZE 120 
SQL> COL name FOR a30
SQL> COL value FOR a20 
SQL> SELECT name, value 
FROM sys._dd_props
WHERE name like '%CHARACTERSET%'
ORDER BY 1;

NAME                                VALUE
--------------------------------    ----------
NLS_CHARACTERSET                    UTF8
NLS_NCHAR_CHARACTERSET              UTF16
SQL> SET LINESIZE 120
SQL> COL member FOR a50
SQL> SELECT * FROM v$logfile;

GROUP#             STATUS  TYPE   MEMBER
-----------      --------  -----------------------------
0                  ONLINE /data2/tb6/tbdata/log001.log
0                  ONLINE /data2/tb6/tbdata/log002.log
1                  ONLINE /data2/tb6/tbdata/log003.log
1                  ONLINE /data2/tb6/tbdata/log004.log
2                  ONLINE /data2/tb6/tbdata/log005.log
2                  ONLINE /data2/tb6/tbdata/log006.log

SQL> SELECT group#, bytes/1024/1024 as "size(mb)", members, archived FROM v$log;

GROUP#             size(mb)   MEMBERS    ARCHIVED
-----------      --------  -----------   -----------
0                   50        2          NO
1                   50        2          NO
2                   50        2          NO
SQL> SET LINESIZE 120
SQL> COL tablespace_name FOR a20
SQL> COL file_name FOR a50
SQL> SELECT tablespace_name 
FROM dba_tablespaces
WHERE contents = 'UNDO';

TABLESPACE_NAME
--------------------
UNDO


SQL> show parameter UNDO_TABLESPACE;

NAME                  TYPE      VALUE
-----------------     --------  ---------
UNDO_TABLESPACE       STRING    UNDO

SQL> SELECT tablespace_name,
file_name,
bytes/1024/1024 "size(mb)", 
maxbytes/1024/1024 "maxsize(mb)", 
autoextensible
FROM dba_data_files
WHERE tablespace_name like 'UNDO%';

TABLESPACE_NAME  FILE_NAME                    size(mb) maxsize(mb) AUTOEXTENSIBLE
---------------- ---------------------------- -------- ----------- --------------
UNDO          /data2/tb6/tbdata/undo001.tdf   400      1024        YES
SQL> SET LINESIZE 150
SQL> COL tablespace_name FOR a30
SQL> COL file_name FOR a50
SQL> SELECT tablespace_name,
file_name, bytes/1024/1024 "size(mb)", 
autoextensible,
maxbytes/1024/1024 "max(mb)" 
FROM dba_temp_files;

TABLESPACE_NAME  FILE_NAME                      size(mb) AUTOEXTENSIBLE max(mb)
---------------- -----------------------------  -------- -------------- --------
TEMP             /data2/tb6/tbdata/temp001.tdf  400      YES            1024        
SQL> SET linesize 150
SQL> COL tablespace_name FOR a30
SQL> COL file_name FOR a50
SQL> SELECT tablespace_name, 
file_name,
bytes/1024/1024 "size(mb)", 
maxbytes/1024/1024 "maxsize(mb)", 
autoextensible
FROM dba_data_files
WHERE tablespace_name not in('SYSTEM', 'UNDO', 'USR');

TABLESPACE_NAME  FILE_NAME                    size(mb) maxsize(mb) AUTOEXTENSIBLE
---------------- ---------------------------- -------- ----------- --------------
DBTECH_TBS       /tb6/tbdata/dbtech_tbs01.dtf 50       5120        YES
DBTECH_IDX       /tb6/tbdata/dbtech_idx01.dtf 50       1024        YES
SQL> SELECT log_mode FROM v$database; 
LOG_MODE
---------------
ARCHIVELOG

SQL> SHOW PARAM ARCHIVE
NAME                    TYPE     VALUE
----------------------- -------- ------------------------------------------
LOG_ARCHIVE_DEST        DIRNAME  /data2/tb6/tibero6/database/tb4/archive/ 
LOG_ARCHIVE_FORMAT      STRING   log-t%t-r%r-s%s.arc
LOG_ARCHIVE_OVERWRITE   Y_N      NO 
LOG_ARCHIVE_RETRY_TIME  UINT32   60
SQL> alter database backup controlfile to trace 
as '/data2/tb6/tb6_export/controlfile_tb6.sql'; 
Database altered.
SQL> !cat /data2/tb6/tb6_export/controlfile_tb6.sql
CREATE CONTROLFILE REUSE DATABASE "tb6" LOGFILE
GROUP 0 (
'/data2/tb6/tbdata/log001.log', 
'/data2/tb6/tbdata/log002.log'
) SIZE 50M, 
GROUP 1 (
'/data2/tb6/tbdata/log003.log', 
'/data2/tb6/tbdata/log004.log'
) SIZE 50M,
GROUP 2 (
'/data2/tb6/tbdata/log005.log', 
'/data2/tb6/tbdata/log006.log'
) SIZE 50M
NORESETLOGS DATAFILE
'/data2/tb6/tbdata/system001.tdf', 
'/data2/tb6/tbdata/undo001.tdf', 
'/data2/tb6/tbdata/usr001.tdf', 
'/data2/tb6/tbdata/dbtech_tbs01.dtf', 
'/data2/tb6/tbdata/dbtech_idx01.dtf' 
ARCHIVELOG
MAXLOGFILES 255
MAXLOGMEMBERS 8
MAXDATAFILES 100 CHARACTER SET MSWIN949
NATIONAL CHARACTER SET UTF16
;
--ALTER DATABASE MOUNT
---- Recovery is required in MOUNT mode.
--ALTER DATABASE RECOVER AUTOMATIC;
--ALTER DATABASE OPEN ;
---- Adding Tempfiles is required in OPEN mode.
-- ALTER TABLESPACE TEMP ADD TEMPFILE '/data2/tb6/tbdata/temp001.tdf'
-- SIZE 400M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 1G;
SQL> SET LINESIZE 150
SQL> COL what FOR a30
SQL> COL interval FOR a30
SQL> COL username FOR a20
SQL> alter session set NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
SQL> SELECT job as job_no, 
b.username,
what,
to_char(next_date, 'yyyy/mm/dd HH24:MI:SS') as next_date, 
interval,
broken
FROM dba_jobs a, dba_users b 
WHERE a.schema_user=b.user_id;


JOB_NO USERNAME WHAT                        NEXT_DATE           INTERVAL  BROKEN
------ -------- --------------------------- ------------------- --------- ------
1       DBTECH  dbms_output.put_line('ok');  2013/06/30 00:00:00 SYSDATE+1 N
SQL> SET LINESIZE 150
SQL> COL owner FOR a15
SQL> COL db_link FOR a20
SQL> COL username FOR a20
SQL> COL host FOR a10
SQL> COL created FOR a10
SQL> SELECT owner, db_link, username, host, created FROM dba_db_links;
OWNER           DB_LINK              USERNAME             HOST       CREATED
--------------- -------------------- -------------------- ---------- ----------
DBTECH          TBLINK                DBTECH2             tb6        2013/06/12
SQL> SET LINESIZE 120
SQL> COL owner FOR a10
SQL> COL library_name FOR a30
SQL> COL file_spec FOR a50
SQL> COL status FOR a10
SELECT owner, library_name, file_spec, status FROM dba_libraries;
SET LINESIZE 120
COL owner FOR a10
COL name FOR a30
COL source FOR a50
SELECT owner, name, source FROM dba_java_classes;
SQL> SHOW PARAM JAVA_CLASS_PATH;
NAME             TYPE     VALUE
---------------- -------- --------------------------
JAVA_CLASS_PATH  DIRNAME  /data2/tb6/tbdata/java/
SQL> SET LINESIZE 120
SQL> COL owner FOR a30
SQL> COL object_name FOR a40
SQL> SELECT owner, object_name, functionable, wrapped 
FROM dba_procedures
WHERE wrapped = 'YES';
OWNER                      OBJECT_NAME              FUNCTIONABLE WRAPPED
------------------------- ------------------------- ------------ -------
DBTECH                     WRAP_TEST                NO           YES
SQL> SET LINESIZE 120
SQL> COL name FOR a20
SQL> COL path FOR a60
SQL> SELECT * FROM dba_directories;
NAME                 PATH
-------------------- ----------------------
SAM                  /data2/tb6/DIR_SAM
SQL> SET LINESIZE 150
SQL> SET PAGES 500
SQL> COL owner FOR a20
SQL> SELECT owner, object_type, status, count(*)
FROM dba_objects
WHERE owner not in ('SYS', 'SYSCAT', 'SYSGIS', 'OUTLN')
GROUP BY owner, object_Type, status
ORDER BY owner, object_type, status;

OWNER     OBJECT_TYPE     STATUS  COUNT(*)
-------- --------------  ------  --------
DBTECH    DATABASE LINK   VALID          1
DBTECH    FUNCTION        VALID          3
DBTECH    INDEX           VALID          9
DBTECH    JAVA            VALID          1
DBTECH    LIBRARY         VALID          1
DBTECH    PROCEDURE       VALID          3
DBTECH    SEQUENCE        VALID          3
DBTECH    SYNONYM         VALID          6
DBTECH    TABLE           VALID         10
DBTECH    TRIGGER         VALID          2
DBTECH    VIEW            VALID          1
DBTECH2   FUNCTION        VALID          1
DBTECH2   INDEX           VALID          7
DBTECH2   LOB             VALID          2
DBTECH2   PACKAGE         VALID          2
DBTECH2   PACKAGE BODY    VALID          2
DBTECH2   PROCEDURE       VALID          4
DBTECH2   SEQUENCE        VALID          1
DBTECH2   TABLE           VALID          7
DBTECH2   TRIGGER         VALID          1
DBTECH2   VIEW            VALID          1
PUBLIC    SYNONYM         VALID        565
TIBERO    TABLE           VALID          1
SQL> SET LINESIZE 150
SQL> COL owner FOR a30
SQL> SELECT owner
,constraint_type
,count(constraint_name) as con_cnt
FROM dba_constraints
WHERE owner not in ('SYS', 'SYSCAT', 'SYSGIS', 'OUTLN')
GROUP BY owner, constraint_type
ORDER BY owner ,constraint_type;

OWNER     CONSTRAINT_TYPE  CON_CNT
-------- ---------------  -------
DBTECH    C                     21
DBTECH    O                      0
DBTECH    P                      7
DBTECH    R                      3
DBTECH    U                      1
DBTECH2   C                      7
DBTECH2   P                      7
DBTECH2   R                      1
SQL> SELECTcount(*) FROM v$session;

COUNT(*)
---------- -
2
BEGIN
DBMS_JOB.BROKEN(100, true);
END;
/
tbexport username={sys | dba계정} password=<password> port=<port_no> sid=<SID> 
file=<file name> log=<log-file name> full=y script=y

username

Export 할 DB 계정으로 sys 계정 또는 dba 계정 중에서 하나를 선택

password

Export 할 DB 계정의 비밀번호

port

tbexport username=sys password=pwd port=8629 sid=tibero6
file=tibero6_all.dat log=tibero6_exp.log full=y script=y

CHARACTERSET

Redo 확인

Undo 확인

Temp Tablespace 확인

User Tablespace 확인

로그 모드 확인

컨트롤 파일 확인

JOB 확인

DB Link 확인 (Tibero to Tibero, Tibero to Oracle 등)

External Procedure 사용여부 확인

C External Procedure

JAVA External Procedure

JAVA External Procedure에서 외부 라이브러리를 참조할 때 $TB_HOME/bin/tbjavac와 $TB_HOME/client/bin/tbjavaepa 설정을 확인합니다.

Wrapped PSM(PL/SQL) 확인

디렉터리 확인

Object Count 확인

해당 결과는 에서 이관된 Object Count를 확인하는 기준으로 사용됩니다.

Constraint 확인

해당 결과는 “”에서 이관된 Constraint 를 확인하는 기준으로 사용됩니다.

Export 수행

DB에 연결된 모든 애플리케이션 종료

JOB 수행 중지

tbexport

Export 할 DB의 포트 번호

sid

Export 할 DB의 이름.

file

생성될 파일 이름

log

생성될 로그 파일의 이름

“검증”
검증

전환

Oracle to Tibero DB 전환 절차 및 방법을 설명합니다.

1. 사전 점검

타사 DB에서Tibero DB로 전환하기 전 점검사항에 대해서 설명합니다.

사전 점검은 전환하기 전 Oracle의 특성을 파악하고 Tibero에 적용해야 하는 값들을 확인하는 중요한 절차입니다.

본 절에서 설명하는 SQL문(10g, 11g에서 수행 가능한 쿼리)은 Oracle 버전에 따라서 일부 달라질 수 있음을 유의합니다.

1) 기본 항목

Oracle의 sys 또는 system 등의 DBA 권한을 가진 사용자로 접속하여 아래 정보를 확인합니다.

항목
설명

버전 정보

전환 Oracle 버전을 확인합니다.

Oracle과 Tibero간 대응되는 문자 집합을 사용합니다.

Oracle의 'sys' 또는 'system' 계정 등의 DBA 권한이 있는 사용자로 접속한 후 조회합니다.

  • 사용자 조회 아래는 전체 사용자 목록입니다.

  • Open된 사용자 조회 아래는 현재 Open 사용자를 조회하는 쿼리입니다.

  • Oracle 기본 사용자 아래와 같은 사용자 이름의 경우 Oracle을 설치할 때 자동으로 생성되는 사용자로 전환할 때 제외합니다. (Oracle 버전에 따라 사용자명이 일부 다를 수 있습니다.)

User Name
Description

전환 대상 사용자에 속하는 Table, Index가 저장된 Tablespace만 확인합니다. 아래는 Tablespace 전체에 대하여 확인하는 예제입니다.

  • 전체 Tablespace 크기와 사용량 확인

  • 전체 합계

전환 대상 사용자에 대해당하는 정보만 확인합니다.

  • Object 상태별 개수 확인

  • Object 개수 확인

전환 완료 후 Oracle과 Object 개수를 비교할 때 검증용으로 사용합니다.

  • Constraint 개수 확인

Oracle의 sys 또는 system 등의 DBA 권한을 가진 사용자로 접속하여 아래의 정보를 확인하고, Tibero 설치 과정 중 CREATE DATABASE를 수행할 경우 아래의 정보를 참고하여 DB를 생성합니다.

아래는 DB 생성관련 항목에 대한 설명입니다.

항목
설명

문자 집합 정보를 확인합니다.

  • Oracle

  • Tibero

확인 결과 항목에 대한 설명은 아래와 같습니다.

항목
설명

아래는 Oracle과 Tibero의 문자 집합 대응 정보입니다.

Oracle
Tibero

  • National 문자 집합

Oracle
Tibero

초기 파라미터 정보를 확인합니다.

아래는 Oracle에서 전환할 때 확인해야 할 초기 파라미터입니다.

파라미터
설명

Tibero에서 Redo 로그를 생성할 경우 참고하며 파일 크기를 동일하거나 더 크게 생성해 줍니다.

아래는 Redo를 확인하는 예입니다.

Tibero에서 Undo와 Temp를 생성할 경우 참고하며 파일 크기를 동일하거나 더 크게 생성합니다.

아래는 Undo Tablespace를 확인하는 예입니다.

아래는 Temp Tablespace 확인 예입니다.

아래는 Log 모드를 확인하는 예입니다.

만약, ARCHIVE LOG 모드라면 전환 시간 단축을 위해 전환이 모두 완료된 후에 모드를 변경합니다.

아래는 추가로 확인해야 할 Object에 대한 설명입니다.

항목
설명

본 절에서는 실제 전환을 수행하는 방법에 대해서 설명합니다.

아래는 전환을 수행하는 과정입니다.

각 과정에 대한 상세한 설명은 해당 절의 내용을 참고합니다.

전환할 때 Object를 생성하는 기본 순서는 아래와 같습니다.

순 서
Object
내용

Oracle의 생성문(=DDL)을 추출하기 위하여 T-UP DDL export 기능을 사용합니다.

Tablespace, User, Table 생성문(=DDL)을 추출합니다.

(1) T-UP > Migrator

“Migrator” 를 선택합니다.

(2) Source Database > Type Conversion

ORACLE과 대응되는 데이터 타입을 선택합니다.

(3) Schema Object

  • “Independent Objects” Tablespace, User를 선택합니다.

  • “Dependent Objects” Table을 선택합니다.

  • “Schema” Table을 선택합니다.

(4) Migration Option

  • “Data Transfer”, ”DDL Execution” 비활성화 합니다.

  • “Export DDL Script” 선택, “Filename”과 “Path“ 를 지정합니다.

  • 스키마별로 파일을 분리하고 싶다면, “Create Individual DDL Script Files" 을선택합니다.

(5) Target Database > Summary

추출 대상을 확인합니다.

(6) Data Migration

“Migrate“ 를 수행합니다.

(7) Result > “close”

“Result” 단계는 Execution 정보가 출력되며 DDL Export 정보는 출력되지 않습니다.

(8) 파일 확인

DDL문이 정상적으로 출력됬는지 확인합니다.

Tablespace, User, Table을 제외한 나머지 Object(=DDL)를 추출합니다.

(1) T-UP > Migrator

“Migrator” 를 선택합니다.

(2)Source Database > Type Conversion

ORACLE과 대응되는 데이터 타입을 선택합니다.Table은 포함되지 않아 관계없습니다.

(3) Schema Object

  • “Dependent Objects” 추출 오브젝트를 선택합니다.

  • “Schema” Table 선택, 의존성을 위해 테이블을 선택합니다.

(4) Migration Option

  • “Data Transfer”, ”DDL Execution” 비활성화 합니다.

  • “Export DDL Script” 선택, “Filename”과 “Path“ 를 지정합니다.

  • 스키마 및오브젝트별로 파일을 분리하고 싶다면, “Create Individual DDL Script Files" 을선택합니다.

(5) Target Database > Sumamry

추출 대상을 확인합니다.

(6) Data Migration

“Migrate“ 를 수행합니다.

(7) Result > “close”

“Result” 단계는 Execution 정보가 출력되며 DDL Export 정보는 출력되지 않습니다.

(8) 파일 확인

DDL문이 정상적으로 출력됬는지 확인합니다.

추출한 스크립트를 Tibero에서 실행할 수 있게 정리와 변경을 진행합니다.

  • Tablespace, User, Table DDL 스크립트 보정 Tablespace, User, Table 스크립트 파일명은 export_ddl.sql 입니다.

  • Tablespace DDL - Tibero DB를 생성하였다면 System, Undo, 기본 Temp Tablespace는 이미 존재하므로 생성하지 않습니다. 단, 기본 Temp Tablespace 이외의 Temp Tablespace는 전환해야 합니다. (예 : TEMP1) - Oracle 전용 Tablespace는 제외합니다. (예 : SYSAUX) - 데이터 파일의 경로, 파일명, Size 조정이 필요할 경우 수정합니다. - Tibero에서 미지원되는 사항은 주석처리 합니다.

아래는 Tablespace 스크립트의 주석처리 항목에 대한 설명입니다.

항목
설명

  • User DDL - 사용자별 패스워드를 확인합니다. (Oracle DB 관리자에게 문의합니다.) 사용자별 패스워드는 기본 tibero로 설정됩니다. - 전환 대상 사용자만 적용합니다. Oracle을 설치할 때 자동으로 생성되는 사용자는 전환이 필요하지 않습니다. - Tibero에서 미지원되는 사항은 주석 처리 합니다.

항목
설명

  • Table DDL

- Oracle에서 전환되는 문자 집합으로 인해 Active Value 에러가 발생할 수 있습니다.

- 컬럼 타입 부분에서 에러가 발생할 경우 “데이터 타입 비교”의 ""을 참고합니다.

  • Tablespace, User, Table을 제외한 나머지 Object DDL 스크립트 보정

추출 파일명은 export_other_ddl.sql 입니다.

  • 기타 오브젝트 리스트

    Index View

    Constraint

    Sequence Synonym

    Materialized View

    Library

    Function

    Procedure Package

    Type

    Trigger

(1) Tibero 데이터베이스 서버에 export_ddl.sql 파일을 업로드합니다.

(2) export_ddl.sql 을 수행합니다.

데이터 전환 작업 수행 시 다양한 도구를 통해 전환을 수행합니다.

T-UP

  • 클라이언트 PC에서 T-UP을 통해 전환을 수행합니다.

  • Oracle → T-UP(클라이언트 PC) → Tibero

Table Migrator

  • Tibero에서 Table Migrator를 통해 전환을 수행합니다.

  • Oracle → Tibero

DB Link

  • Tibero에서 Oracle DB Link를 통해 전환을 수행합니다.

  • Oracle → Tibero

(1) Tibero 데이터베이스 서버에 export_other_ddl.sql 파일을 업로드합니다.

  • 사용자가 많거나 전환을 반복적으로 수행할 경우 Shell(또는 Batch) 스크립트를 작성하여 진행할 것을 권장합니다.

  • 전환을 반복적으로 수행할 경우 1차 전환을 할 때 의존성과 예외 상황을 정리해 놓고 2차, 3차 전환을 수행할 때 스크립트에 사전 작업을 수행하여 에러가 발생하지 않게 합니다.

  • Shell 프로그램을 사용하여 Object들이 자동으로 생성되도록 하고 다음과 같은 방법으로 검증합니다.

  • 모든 사용자에 대해서 생성이 완료된 후 Oracle과 개수를 비교하여 누락된 부분이 없는지 확인합니다.

(2) export_other_ddl.sql 을 수행합니다.

  • Synoym Synonym에서 참조하는 원본의 Object가 존재하지 않아도 생성할 때 문제가 되지 않습니다. 이후에 원본 Object가 생성되었다면 사용할 때 자동으로 VALID하게 됩니다.

  • View 생성할 때 의존성, Object 권한으로 인해 에러가 발생할 수 있습니다. 처음 생성할 때 컴파일 에러가 발생하더라도 모든 Object를 생성 후 "Object 상태변경"을 참고하여 VALID 수행 작업을 합니다.

아래는 의존성을 확인하는 예입니다.

  • Sequence 최종 전환 작업을 수행할 때에는 Oracle의 Current Value가 변경되지 않게 애플리케이션을 종료한 후 진행합니다.

  • PSM(=PL/SQL) PSM을 생성할 때 다음과 같은 사항을 고려합니다. - 생성할 때 의존성, Object 권한으로 인해 에러가 발생할 수 있다. 처음 생성할 때 컴파일 에러가 발생하더라 도 모든 Object를 생성 후 "Object 상태 변경"을 참고하여 VALID 수행 작업을 합니다. - 해당 Object에 대한 권한이 없어 "TBR-8053: Not authorized" 에러가 발생할 수 있습니다. 이때, Object의 권한을 부여한 후 재생성하면 됩니다. - PSM 내의 쿼리 부분에서 에러가 발생할 수 있습니다. 자세한 내용은 "애플리케이션 쿼리 수정"을 참고하여 수정 합니다. - Object 타입의 경우 Tibero는 지원되지 않으므로 Package 내의 타입을 선언하여 우회합니다.

아래는 Object 타입에 대하여 Package 내의 타입으로 우회 생성하는 방법입니다.

  • Oracle

  • Tibero

  • Index 아래는 Index 생성 이후 Oracle과 Tibero의 Index 개수 비교에 대한 설명입니다.

상황
설명

  • Constraint 전환 검증 항목의 "Constraint 개수 확인"에서 확인한 항목과 비교합니다.

  • Trigger Oracle에서 Disable된 Trigger를 전환할 때 Syntax 에러가 발생하므로 아래와 같이 처리합니다. - Disable 구문 부분을 주석 처리합니다. - Tibero에서 Disable 처리합니다.

  • Grant 아래는 Tibero의 Grant 미지원 사항에 대한 설명으로, Grant Count 계산할 때 제외시킵니다.

항목
설명

위와 같은 권한이 정상적인 권한과 함께 부여될 경우 모두 부여되지 않으므로 미지원 권한을 찾아서 삭제한 이후에 재수행이 필요합니다.

  • 기타 기타 External Procedure, Job 부분은 Oracle을 참조하여 생성합니다.

생성할 때 의존성, Object 권한으로 인해 Object 상태가 INVALID할 수 있으므로 아래와 같이 처리합니다.

(1) Object 확인

  • 상태별 개수 확인

  • INVALID Object 확인

(2) 재컴파일 수행

‘sys’ 계정으로 접속하여 아래와 같이 특정 스키마의 INVALID된 오브젝트 재컴파일을 수행합니다.

(3) Object별 재컴파일 및 에러 확인

해당 사용자로 접속하여 Object별로 재컴파일 및 에러 내용을 확인합니다.

  • View 재컴파일

  • PSM(=PL/SQL) 재컴파일

  • PSM(=PL/SQL) 에러 확인

  • Index 재컴파일

전환이 완료된 후 DB 측에서 확인하는 사항으로 크게 Object 개수와 데이터 검증이 있습니다.

  • Table

  • View

  • Synonym

  • Sequence

  • Package

  • Package Body

  • Function

  • Procedure

  • Index

  • Constraint

  • Grant

  • Trigger

Oracle DB Link

  • Count 건수 비교

  • Minus 결과 비교

T-UP Data Transfer Verification

(1) T-UP > Migrator

“Migrator” 를 선택합니다.

(2) Source Database > Type Conversion

ORACLE과 대응되는 데이터 타입을 선택합니다.

(3) Schema Object

  • “Dependent Objects” Table을 선택합니다.

  • “Schemas” 이관 대상 Schema 및 Table을 선택합니다.

(4) Migration Option

  • “Data Transfer” 활성화 합니다.

  • “Verification” 선택합니다.

(5) Target Database > Summary

  • Source와 Target 대응 Schema 및 Table 확인

(6) Data Migration

“Migrate“ 를 수행합니다.

(7) Result

  • Type: Data의 지정 Table 성공률을 확인합니다.

  • Type: Data 클릭 시 Verification 결과를 확인합니다.


DB 전환이 완료된 후 애플리케이션 전환을 수행합니다.

크게 인터페이스 수정 및 애플리케이션 쿼리 수정이 필요할 수 있습니다.

JDBC

$TB_HOME/client/lib/jar 폴더에 tibero7-jdbc.jar 드라이버를 애플리케이션의 드라이버 관리 폴더에 복사합니다.

  • Oracle

  • Tibero

ODBC

Tibero ODBC를 설치합니다.

  • Oracle

  • Tibero

애플리케이션 쿼리 수정은 필요한 경우에만 사용하며 다음과 같은 상황에서 필요합니다.

Syntax Error가 발생할 경우

.
상황
대응방법

결과가 정렬된 상태로 출력되지 않을 경우

.
상황
대응방법

PSM(=PL/SQL) 작성 후 컴파일을 수행할 때 Error가 발생하는 경우

.
상황
대응방법
Object Privilege

Job

DBMS_SCHEDULER

External Procedure

만약, 정상적으로 Object가 생성되지 않았다면 원인을 찾아 해결한 후 문제가 발생한 Object 수동 생성 및 다음 단계로 진행합니다.

Oracle 9i, 10g, 11g는 전환 사례가 많으므로 그 이외 버전에서 전환할 경우에 대해서는 검토가 필요합니다.

전환 문자 집합

Oracle에서 사용 중인 문자 집합에 대응되는 Tibero 문자 집합으로 선택합니다.

전환 사용자 선택

Oracle을 설치할 때 자동 생성되는 기본 사용자의 경우는 제외합니다. 전환 사용자에 대해서 고객사 담당자 확인이 필요합니다.

전환 크기

전환 시간에 가장 큰 영향을 미치는 요소입니다. 그 외 DISK I/O, NETWORK I/O 등에 따라서 고객사의 전환 시간이 많이 달라질 수 있습니다.

전환 검증 항목

전환이 완료된 후에 비교해 보는 정보입니다

select * from v$version;
$ tbboot -C
 
Available character set list
 
 Charset name       Equivalent Oracle Charset name
 
 AR8ISO8859P6       AR8ISO8859P6
 AR8MSWIN1256       AR8MSWIN1256 
 ASCII              US7ASCII 
 CL8ISO8859P5       CL8ISO8859P5 
 CL8KOI8R           CL8KOI8R 
 CL8MSWIN1251       CL8MSWIN1251
 EE8ISO8859P2       EE8ISO8859P2
 EL8ISO8859P7       EL8ISO8859P7
 EL8MSWIN1253       EL8MSWIN1253 
 EUCKR              KO16KSC5601
 EUCTW              ZHT32EUC
 GB18030            GB18030
 GBK                ZHS16GBK
 IW8ISO8859P8       IW8ISO8859P8 
 JA16EUC            JA16EUC 
 JA16EUCTILDE       JA16EUCTILDE 
 JA16SJIS
 JA16SJISTILDE
 MSWIN949           KO16MSWIN949
 RU8PC866           RU8PC866
 SJIS               JA16SJIS 
 SJISTILDE          JA16SJISTILDE 
 TH8TISASCII        TH8TISASCII 
 UTF16              AL16UTF16
 UTF8               UTF8
 VN8VN3             VN8VN3 
 WE8ISO8859P1       WE8ISO8859P1 
 WE8ISO8859P15      WE8ISO8859P15 
 WE8ISO8859P9       WE8ISO8859P9
 WE8MSWIN1252       WE8MSWIN1252 
 ZHT16BIG5          ZHT16BIG5 
 ZHT16HKSCS         ZHT16HKSCS 
 ZHT16MSWIN950      ZHT16MSWIN950
 
Available nls_date_lang set list
 
 
 AMERICAN
 BRAZILIAN PORTUGUESE 
 JAPANESE
 KOREAN 
 RUSSIAN
 SIMPLIFIED CHINESE 
 THAI
 TRADITIONAL CHINESE
 VIETNAMESE
select username, account_status, default_tablespace, temporary_tablespace 
from dba_users order by oracle;
set linesize 120
set pagesize 100
select username, default_tablespace, temporary_tablespace
from dba_users where account_status='OPEN' order by username;

ANONYMOUS

Enables HTTP access to Oracle XML DB.

APEX_050100

select x.a tablespace_name
    , sum(x.b)/1024 "tot_size(mb)" 
    , sum(x.c)/1024 "used_size(mb)" 
    , sum(x.c)/sum(x.b)*100 rate
from (
    select
        b.tablespace_name a
        ,sum(bytes)/1024 b
        ,0 c
    from dba_data_files b 
    group by b.tablespace_name 
    union
    select
        d.tablespace_name,
        0,
        sum(bytes)/1024
    from dba_segments d
    group by d.tablespace_name 
    )x
group by x.a;
select sum(x.b)/1024 "tot(mb)", sum(x.c)/1024 "used(mb)" 
from (
    select sum(bytes)/1024 b, 0 c 
    from dba_data_files b
    union
    select 0, sum(bytes)/1024 
    from dba_segments d
) x;
select owner, object_type, status, count(*) 
from dba_objects
where owner in (select username from dba_users where account_status='OPEN' )
group by owner, object_Type, status 
order by owner, object_type, status;
WITH mig_user AS
(
    SELECT username
    FROM dba_users
    WHERE account_status='OPEN'
    AND username NOT IN('SYS', 'SYSTEM', 'WMSYS','EXFSYS', 'XDB', 'ORDSYS','MDSYS','SYSMAN')
)
SELECT
    O.OWNER
    ,NVL(TBL.TABLE_CNT, 0) AS "TABLE_CNT"
    ,O.VIEW_CNT
    ,O.DBLINK_CNT
    ,O.SEQ_CNT
    ,O.PKG_CNT
    ,O.PKGBODY_CNT
    ,O.PROC_CNT
    ,O.FUNC_CNT
    ,O.TYPE_CNT
    ,O.TYPEBODY_CNT
    ,O.LIB_CNT
    ,TRI.TRIGGER_CNT
    ,NVL(SYN.SYN_CNT,0) AS "SYN_CNT"
    ,NVL(PUB_SYN.PUB_SYN_CNT,0) AS "PUB_SYN_CNT" 
    ,NVL(IDX.IDX_CNT, 0) AS "IDX_CNT"
    ,NVL(G.GRANT_CNT, 0) AS "GRANT_CNT" 
    ,NVL(LOB.LOB_CNT, 0) AS "LOB_CNT" 
    ,NVL(JOB.JOB_CNT, 0) AS "JOB_CNT"
FROM (
    SELECT
        T.OWNER
        ,SUM( DBLINK_CNT ) AS "DBLINK_CNT" 
        ,SUM( VIEW_CNT ) AS "VIEW_CNT"
        ,SUM( SEQ_CNT ) AS "SEQ_CNT" 
        ,SUM( PKG_CNT ) AS "PKG_CNT"
        ,SUM( PKGBODY_CNT ) AS "PKGBODY_CNT" 
        ,SUM( PROC_CNT ) AS "PROC_CNT"
        ,SUM( FUNC_CNT ) AS "FUNC_CNT"
        ,SUM( TYPE_CNT ) AS "TYPE_CNT"
        ,SUM( TYPEBODY_CNT ) AS "TYPEBODY_CNT" 
        ,SUM( LIB_CNT ) AS "LIB_CNT"
    FROM (
            SELECT
                OWNER 
                ,CASE WHEN OBJECT_TYPE = 'DATABASE LINK' THEN COUNT(1) ELSE 0 END
AS "DBLINK_CNT"
                ,CASE WHEN OBJECT_TYPE = 'VIEW' THEN COUNT(1) ELSE 0 END AS
"VIEW_CNT"
                ,CASE WHEN OBJECT_TYPE = 'SEQUENCE' THEN COUNT(1) ELSE 0 END AS
"SEQ_CNT"
                ,CASE WHEN OBJECT_TYPE = 'PACKAGE' THEN COUNT(1) ELSE 0 END AS
"PKG_CNT"
                ,CASE WHEN OBJECT_TYPE = 'PACKAGE BODY' THEN COUNT(1) ELSE 0 END
AS "PKGBODY_CNT" 
                ,CASE WHEN OBJECT_TYPE = 'PROCEDURE' THEN COUNT(1) ELSE 0 END AS
"PROC_CNT"
                ,CASE WHEN OBJECT_TYPE = 'FUNCTION' THEN COUNT(1) ELSE 0 END AS
"FUNC_CNT"
                ,CASE WHEN OBJECT_TYPE = 'TYPE' THEN COUNT(1) ELSE 0 END AS
"TYPE_CNT"
                ,CASE WHEN OBJECT_TYPE = 'TYPE BODY' THEN COUNT(1) ELSE 0 END AS
"TYPEBODY_CNT" 
                ,CASE WHEN OBJECT_TYPE = 'LIBRARY' THEN COUNT(1) ELSE 0 END AS
"LIB_CNT"
            FROM dba_objects
            WHERE owner in (select username from mig_user) 
            GROUP BY owner, OBJECT_TYPE
            )T
        GROUP BY T.OWNER
    )O
LEFT JOIN (
    SELECT OWNER, COUNT(1) AS TABLE_CNT
    FROM DBA_TABLES
    WHERE owner in (select username from mig_user) 
    GROUP BY OWNER
) TBL ON O.OWNER = TBL.OWNER
LEFT JOIN (
    SELECT OWNER, COUNT(1) AS GRANT_CNT
    FROM DBA_TAB_PRIVS
    WHERE owner in (select username from mig_user) 
    AND TABLE_NAME NOT LIKE 'BIN$%'
    GROUP BY OWNER
) G ON O.OWNER = G.OWNER
LEFT JOIN (
    SELECT OWNER, COUNT(1) AS IDX_CNT
    FROM DBA_INDEXES
    WHERE owner in (select username from mig_user) 
    GROUP BY OWNER
) IDX ON O.OWNER = IDX.OWNER
    LEFT JOIN (
    SELECT OWNER, COUNT(1) AS LOB_CNT
    FROM DBA_LOBS
    WHERE owner in (select username from mig_user)
    GROUP BY OWNER
) LOB ON O.OWNER = LOB.OWNER
LEFT JOIN (
    SELECT SCHEMA_USER, COUNT(1) AS JOB_CNT
    FROM DBA_JOBS
    WHERE SCHEMA_USER in (select username from mig_user) 
    GROUP BY SCHEMA_USER
) JOB ON O.OWNER = JOB.SCHEMA_USER
LEFT JOIN (
    SELECT OWNER, COUNT(1) AS TRIGGER_CNT
    FROM DBA_TRIGGERS
    WHERE OWNER in (select username from mig_user)
    AND TRIGGER_NAME NOT LIKE 'BIN$%'
    GROUP BY OWNER
) TRI ON O.OWNER = TRI.OWNER
LEFT JOIN (
    SELECT OWNER, COUNT(1) AS "SYN_CNT"
    FROM DBA_SYNONYMS
    WHERE OWNER in (select username from mig_user)
    AND OWNER != 'PUBLIC'
    GROUP BY OWNER
) SYN ON O.OWNER = SYN.OWNER
LEFT JOIN (
    SELECT TABLE_OWNER as "OWNER", COUNT(1) AS "PUB_SYN_CNT" 
    FROM DBA_SYNONYMS
    WHERE TABLE_OWNER in (select username from mig_user) 
    AND OWNER = 'PUBLIC'
    GROUP BY TABLE_OWNER
) PUB_SYN ON O.OWNER = PUB_SYN.OWNER 
ORDER BY O.OWNER;
set linesize 150
col owner format a30

select owner
,constraint_type
,count( constraint_name ) as "con_cnt"
from dba_constraints
where owner in (select username from dba_users where account_status='OPEN' ) 
group by owner, constraint_type
order by owner ,constraint_type;

문자 집합

Oracle과 대응되는 문자 집합을 선택합니다.

초기 파라미터

세션 개수 및 메모리 설정 등을 확인합니다.

Redo 구성

set linesize 150
set pagesize 100
column value$ format a100

select
    name,
    value$
from
    sys.props$
where
    name like '%CHARACTERSET' 
order by
    name;
select * from _vt_nls_character_set;

NLS_CHARACTERSET

DB 문자 집합

NLS_NCHAR_CHARACTERSET

National 문자 집합

US7ASCII

ASCII

KO16KSC5601

EUCKR or MSWIN949

KO16MSWIN949

UTF8

UTF8

AL16UTF16(기본값)

UTF16(기본값)

show parameter <파라미터명>

SESSIONS

세션 수를 설정합니다.

OPEN_CURSORS

세션당 열 수 있는 Cursor의 개수입니다.

UNDO_RETENTION

set linesize 150
select * from v$logfile;

select group#, bytes/1024/1024 as "size(mb)", members, archived from v$log;
show parameters undo_tablespace; set linesize 150
col tablespace_name format a40
col file_name format a50
select tablespace_name, file_name, bytes/1024/1024 "size(mb)"
,maxbytes/1024/1024 "maxsize(mb)", autoextensible 
from dba_data_files
where tablespace_name = 'UNDOTBS1' -- show parameters undo_tablespace;의 결과값 입력
col file_name format a50
select tablespace_name, file_name, bytes/1024/1024 "size mb", autoextensible 
from dba_temp_files;
select log_mode from v$database;

DB Link

전환 사용자의 DB Link 정보와 데이터가 존재하는 DB의 종류를 조사합니다.

tnsnames.ora

DB Link의 경우 사용하는 Host 정보를 확인합니다.

Job

set linesize 150
col owner format a15
col db_link format a20
col username format a20
col host format a50
select * from dba_db_links;
cat $ORACLE_HOME/network/admin/tnsnames.ora
set linesize 200
select job, schema_user, broken, instance from dba_jobs; 
set linesize 150
col interval format a50
select job, schema_user, next_date, broken, interval from dba_jobs;
SELECT *
FROM DBA_OBJECTS
WHERE OBJECT_TYPE LIKE '%CLUSTER%' 
AND OWNER NOT IN ('SYS');
set linesize 200
SELECT owner, table_name, column_name, data_type 
FROM DBA_TAB_COLS
WHERE DATA_TYPE LIKE '%XML%' 
AND OWNER NOT IN ('SYS');
SELECT *
FROM DBA_INDEXES
WHERE INDEX_TYPE LIKE '%BITMAP%';

1

Tablespace

-

2

User

BLOCKSIZE 4K

Tibero는 Tablespace마다 Block Size 지정이 가능하지 않으므로 주석 처리 합니다. 초기화 파라미터에서 DB를 생성할 때 고정되며 보통 8KB를 사용합니다.

SEGMENT SPACE MANAGEMENT MANUAL

Tibero는 AUTO 부분만 지원하므로 MANUAL 부분을 AUTO로 변경 합니다.

FLASHBACK ON

GRANT UNLIMITED TABLESPACE TO USER_NAME

Tibero는 기본으로 UNLIMITED이며 해당 문법이 지원되지 않으므로 주석 처리합니다.

ALTER USER USERNAME QUOTA UNLIMITED ON USERNAME

사용자별 QUOTA 기능이 지원되지 않으므로 주석 처리합니다.

$ tbsql sys/tibero


tbSQL


Connected to Tibero.


SQL> spool export_ddl.log Spooling is started.

SQL> @export_ddl.sql
-- spool 파일을 통해 오류 확인

SQL> spool off
Spooling is stopped: export_ddl.log
$ tbsql sys/tibero


tbSQL


Connected to Tibero.


SQL> spool export_other_ddl.log Spooling is started.

SQL> @export_other_ddl.sql
-- spool 파일을 통해 오류 확인

SQL> spool off
Spooling is stopped: export_other_ddl.log
SELECT OWNER, NAME, REFERENCED_OWNER, REFERENCED_NAME, REFERENCED_TYPE 
FROM DBA_DEPENDENCIES
WHERE TYPE='VIEW'
AND REFERENCED_TYPE NOT IN ('TABLE', 'SYNONYM') 
AND REFERENCED_NAME NOT IN ('DUAL')
AND REFERENCED_NAME NOT LIKE 'DBA_%'
AND OWNER NOT IN ('SYS', 'ORANGE','MDSYS', 'EXFSYS', 'XDB', 'SYSMAN', 'DBSNMP', 'SYSTEM' )
AND REFERENCED_OWNER NOT IN ('SYS', 'ORDSYS', 'WMSYS', 'MDSYS','EXFSYS', 'XDB',
'SYSMAN','SYSTEM','OLAPSYS', 'APEX_030200', 'CTXSYS') 
ORDER BY 1, 2;
CREATE OR REPLACE TYPE DOCUROLE_ID_OBJ IS OBJECT(DOCUROLE_ID VARCHAR2(6));
/
CREATE OR REPLACE TYPE DOCUROLE_ID_TAB IS TABLE OF DOCUROLE_ID_OBJ;
/
CREATE OR REPLACE FUNCTION USER_DOCUROLESET(PARAM IN VARCHAR2) 
RETURN DOCUROLE_ID_TAB
IS
L_DOCUROLE_ID_TAB DOCUROLE_ID_TAB := DOCUROLE_ID_TAB(); 
BEGIN
L_DOCUROLE_ID_TAB.EXTEND; 
L_DOCUROLE_ID_TAB(1).DOCUROLE_ID := 'test'; 
RETURN L_DOCUROLE_ID_TAB;
END;
/
CREATE OR REPLACE PACKAGE "PK_TYPES" AS
TYPE DOCUROLE_ID_OBJ IS RECORD(DOCUROLE_ID VARCHAR2(6)); 
TYPE DOCUROLE_ID_TAB IS TABLE OF DOCUROLE_ID_OBJ;
END;
/
CREATE OR REPLACE FUNCTION USER_DOCUROLESET(PARAM IN VARCHAR2) 
RETURN PK_TYPES.DOCUROLE_ID_TAB
IS
L_DOCUROLE_ID_TAB PK_TYPES.DOCUROLE_ID_TAB := PK_TYPES.DOCUROLE_ID_TAB(); 
N INTEGER := 0;
BEGIN 
L_DOCUROLE_ID_TAB.EXTEND;
L_DOCUROLE_ID_TAB(1).DOCUROLE_ID := 'test'; 
RETURN L_DOCUROLE_ID_TAB;
END;
/

Tibero가 더 적을 경우

Constraint가 생성되면서 자동으로 Index가 생성되는 것도 고려해야 하므로 Constraint 생성 이후에 비교합니다.

Tibero가 더 많을 경우

Table내의 LOB Column에 대응하는 Index가 자동 생성된 부분이 아닌지 확인합니다. (Oracle 11g r2에서도 동일하게 자동생성되며 Oracle 과거버전의 경우 생성 안하는 경우도 있습니다.)

alter trigger trigger_name disable;

COMMIT REFRESH

Mview를 생성할 때 생성 구문으로 지원하며 권한으로는 지원하지 않습니다.

QUERY REWRITE

Mview를 생성할 때 생성 구문으로 지원하며 권한으로는 지원하지 않습니다.

DEBUG

col owner format a20 
set pages 500
select owner, object_type, status, count(*) 
from dba_objects
group by owner, object_Type, status
order by owner, object_type, status;
set linesize 120
col object_name format A30 
col owner format a20
select owner, object_name, object_type, status 
from dba_objects
where status='INVALID';
$ tbsql sys/tibero

tbSQL

Connected to Tibero.

SQL> exec utl_recomp.recomp_serial(schema=>'MIGRATION_USER');

PSM completed.
select * from view_name where rownum < 1;
alter function function_name compile; 
alter procedure procedure_name compile;
show errors
alter index index_name rebuild;
set linesize 150
column owner format a30

select
    owner,
    count(table_name) as "table_cnt"
from
    dba_tables 
where
    owner not in ('SYS','SYSGIS','SYSCAT','PUBLIC','OUTLN','TIBERO','TIBERO1')
group by
    owner 
order by
    owner;
set linesize 150
column owner format a30

select
    owner,
    count(view_name) as "view_cnt"
from
    dba_views 
where
    owner not in ('SYS','SYSGIS','SYSCAT','PUBLIC','OUTLN','TIBERO','TIBERO1')
group by
    owner 
order by
    owner;
set linesize 150 
column owner format a30

select
    owner,
    count(1) as "synonym_cnt" 
from
    dba_synonyms
where
    owner not in ('SYS','SYSGIS','SYSCAT','PUBLIC','OUTLN','TIBERO','TIBERO1') 
group by
    owner
order by owner;
set linesize 150
column sequence_owner format a30 

select
    sequence_owner,
    count( sequence_name ) as "sequence_cnt"
from
    dba_sequences
where
    sequence_owner not in
('SYS','SYSGIS','SYSCAT','PUBLIC','OUTLN','TIBERO','TIBERO1') 
group by
    sequence_owner
order by
    sequence_owner;
set linesize 150
column owner format a30

select
    owner,
    count( name ) as "package_cnt"
from
    dba_source 
where
    type = 'PACKAGE' and
    owner not in ('SYS','SYSGIS','SYSCAT','PUBLIC','OUTLN','TIBERO','TIBERO1')
group by
    owner 
order by
    owner;
set linesize 150
column owner format a30


select
    owner,
    count( name ) as "package_body_cnt"
from
    dba_source 
where
    type = 'PACKAGE BODY' and
    owner not in ('SYS','SYSGIS','SYSCAT','PUBLIC','OUTLN','TIBERO','TIBERO1')
group by
    owner 
order by
    owner;
set linesize 150
column owner format a30

select
    owner,
    count( name ) as "function_cnt"
from
    dba_source 
where
    type = 'FUNCTION' and
    owner not in ('SYS','SYSGIS','SYSCAT','PUBLIC','OUTLN','TIBERO','TIBERO1') 
group by
    owner 
order by
    owner;
set linesize 150
column owner format a30


select
    owner,
    count( name ) as "procuedure_cnt"
from
    dba_source 
where
    type = 'PROCEDURE' and
    owner not in ('SYS','SYSGIS','SYSCAT','PUBLIC','OUTLN','TIBERO','TIBERO1')
group by
    owner 
order by
    owner;
set linesize 150
column owner format a30


select
    owner,
    count( index_name ) as "index_cnt"
from
    dba_indexes 
where
    owner not in ('SYS','SYSGIS','SYSCAT','PUBLIC','OUTLN','TIBERO','TIBERO1')
group by
    owner 
order by
    owner;    
set linesize 150
column owner format a30


select
    owner, 
    constraint_type,
    count( constraint_name ) as "constraint_cnt"
from
    dba_constraints 
where
    owner not in ('SYS','SYSGIS','SYSCAT','PUBLIC','OUTLN','TIBERO','TIBERO1')
group by
    owner, constraint_type 
order by
    owner ,constraint_type;
set linesize 150 
column col format a30

select
    owner,
    count(1) as "grant_cnt"
from
    dba_tab_privs 
where
    owner not in ('SYS','SYSGIS','SYSCAT','PUBLIC','OUTLN','TIBERO','TIBERO1')
group by
    owner 
order by
    owner;
set linesize 150
column owner format a30


select
    owner,
    count(trigger_name) as "trigger_cnt"
from
    dba_triggers
where
    owner not in ('SYS','SYSGIS','SYSCAT','PUBLIC','OUTLN','TIBERO','TIBERO1')
group by
    owner 
order by
    owner;
select 'tbl1' as table_name, count(*) as oracle_count, count(*) 
- (select count(*) from tbl1 where rownum = 1) as diff from tbl1@ora;
select * from tbl1@ora minus 
select * from tbl1;
String jdbc_url = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL"; 
String user = "oracle_username";
String passwd = "oracle_passwd"; 
Class.forName("oracle.jdbc.driver.OracleDriver");
String jdbc_url = "jdbc:tibero:thin:@127.0.0.1:8629:tibero"; 
String user = "tibero_username";
String passwd = "tibero_passwd";
Class.forName("com.tmax.tibero.jdbc.TbDriver");
DRIVER={Microsoft ODBC for Oracle}; 
server=(DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)) 
(CONNECT_DATA=(SERVICE_NAME=utf8)));UID=scott;PWD=tiger;
DRIVER={Tibero 7 ODBC Driver};SERVER=127.0.0.1;PORT=8629
;DB=t7;UID=dbtech;PWD=dbtech;

1

SQL을 작성할 때 From절에 있는 Table 또는 서브 쿼리절에 Alias를 주지 않고 Join 등을 실 행할 때 중복된 Column이 존재할 경우 Syntax Error가 발생합니다.

Alias를 주어서 중복되지 않게 처리합니다.

2

Union All 같은 쿼리를 사용하여 결과를 보려는 경우 실제 상위 쿼리는 특정 Column을 number type으로 하고, 하위 쿼리는 varchar type으로 하면 Syntax Error가 발생합니다.

1

Oracle은 order by를 주지 않아도 결과가 정렬된 형태로 나오는 경우가 있는 반면에 Tibero는 정렬된 상태로 출력되지 않을수 있습니다.

단, 대용량 테이블에서 Index 등을 강제로 태워서 일부 값만 보고자 하는 쿼리 구현의 경우는 Tibero 역시 order by를 사용하지 않아도 정렬되어 출력됩니다.

정렬된 결과를 꼭 얻어야 한다면 order by를 명시합니다.

1

PSM(=PL/SQL)을 작성한 후 컴파일을 수행할 때 내부 SQL의 Object에 대하여 실제 Object,Column 등이 존재하는지 체크해서 유효하지 않다면 Tibero는 Error를 발생합니다.

반면에 Oracle은 위와 같은 상황에서 컴파일을 성공했더라도 runtime때 Error가 발생하는 차이가 있습니다.

실제 존재하는 Object를 사용하고 정확한 Column Name을 사용합니다.

버전 정보

전환 문자 집합

전환 사용자(=Schema) 선택

출처

전환 크기

전환 검증 항목

실제 dba_object에는 삭제된 Object까지 포함($BIN~ 형식)되어 있어 정확한 Count를 위해서는dba_tables, dba_index 같은 정보를 보는 것이 좋습니다.

INVALID한 Object에 대해서 고객사 DB 담당자에게 정리요청을 하는것이 전환시간을 단축할 수 있습니다.

2) DB 생성 관련 항목

문자 집합

US7ASCII 캐릭터 셋에 한글이 들어있는 경우 목적에 따라 MSWIN949로 할 수도 있습니다. 단, 애플리케이션의 인코딩과 디코딩 부분의 변경이 필요할 수 있습니다.

KO16KSC5601, KO16MSWIN949, JA16SJIS에서 UTF8, AL32UTF8로 변경할 경우 해당 테이블 컬럼 크기를 1.5~2배 정도 늘린 후에 데이터 전환을 해야 합니다.

Oracle의 National 캐릭터 셋이 UTF8이고 Tibero가 UTF16이라면 관련 타입의 글자가 깨져서 전환되므로 동일한 설정이 필요합니다.

초기 파라미터

메모리 관련 SGA 세부항목 크기는"V$SGA"로 조회하여 확인합니다.

Redo 로그 구성

Undo와 Temp 구성

Log 모드

3) 추가 Object 확인

DB Link 확인

tnsnames.ora 파일 확인

Job 확인

Cluster Object 확인

XML Type 확인

BitMap Index 확인

2. 전환 수행

1) 전환 사전 준비

4~8번의 경우는 고객사의 Object들의 의존성에 따라 변동성이 있으므로 고객사의 상황에 맞게 변경합니다.

2) 전환 DDL 스크립트 추출

스크립트를 추출할 수 있는 다른 Tool을 사용해도 무방합니다.

데이터베이스 주요 오브젝트 DDL 스크립트 추출

데이터베이스 기타 오브젝트 DDL 스크립트 추출

3) 전환 DDL 스크립트 보정

데이터베이스 주요 오브젝트 DDL 스크립트

데이터베이스 기타 오브젝트 DDL 스크립트

기타 오브젝트는 DDL에 포함되지 않아, Oracle을 참조하여 생성합니다.

4) 전환

데이터베이스 주요 오브젝트 DDL 스크립트

컬럼 타입 부분에서 에러가 발생할 경우 “데이터 타입”의 "을 참고합니다.

데이터 전환 수행

자세한 도구 사용법은 각 도구의 매뉴얼을 참고합니다.

데이터베이스 기타 오브젝트 DDL 스크립트

Object 상태 변경

5) 전환 검증

Object 개수

데이터 검증

3. 애플리케이션 전환

1) 인터페이스 수정

2) 애플리케이션 쿼리 수정

전환 사전 준비
전환 DDL 스크립트 추출
전환 DDL 스크립트 보정
전환
Oracle
[그림 9] T-up에서 Migrator 선택
[그림 10] Type Conversion
[그림 11] Schema Objection
[그림 12] Migration Option
[그림 13] Summary
[그림 14] Data Migration
[그림 15] Result
[그림 16] 파일확인
[그림 17] T-up에서 Migrator 선택
[그림 18] Type Conversion
[그림 19] Schema Objection
[그림 20] Migration Option
[그림 21] Summary
[그림 22] Data Migration
[그림 23] Result
[그림 24] 파일확인
[그림 25] T-up에서 Migrator 선택
[그림 26] Type Conversion
[그림 27] Schema Objection
[그림 28] Migration Option
[그림 29] Summary
[그림 30] Data Migration
[그림 31.1] Result
[그림 31.2] Result

The account that owns the Oracle Application Express schema and metadata.

APEX_PUBLIC_USER

The minimally privileged account used for Oracle Application Express configuration with Oracle Application Express Listener or Oracle HTTP Server and mod_plsql.

APPQOSSYS

Used for storing and managing all data and metadata required by Oracle Quality of Service Management.

AUDSYS

The account where the unified audit data trail resides.

AURORA$ORB$UNAUTHENTICATED

Used for users who do not authenticate in Aurora/ORB

AWR_STAGE

Used to load data into the AWR from a dump file

CSMIG

User for Database Character Set Migration Utility

CTXSYS

The Oracle Text account.

DBSFWUSER

The account used to run the DBMS_SFW_ACL_ADMIN package.

DBSNMP

The account used by the Management Agent component of Oracle Enterprise Manager to monitor and manage the database.

DEMO

User for Oracle Data Browser Demonstration (last version 9.2)

DIP

The account used by the Directory Integration Platform (DIP) to synchronize the changes in Oracle Internet Directory with the applications in the database.

DMSYS

Data Mining user

DSSYS

Oracle Dynamic Services and Syndication Server

DVF

The account owned by Database Vault that contains public functions to retrieve the Database Vault Factor values.

DVSYS

There are two roles associated with this account. The Database Vault owner role manages the Database Vault roles and configurations. The Database Vault Account Manager is used to manage database user accounts. Note: Part of Oracle Database Vault user interface text is stored in database tables in the DVSYS schema. By default, only the English language is loaded into these tables. You can use the DVSYS. DBMS_MACADM.ADD_NLS_DATA procedure to add other languages to Oracle Database Vault.

EXFSYS

User to hold the dictionary, APIs for the Expression Filter

FLOWS_FILES

The account owns the Oracle Application Express uploaded files.

GGSYS

The internal account used by Oracle GoldenGate. It should not be unlocked or used for a database login.

GSMADMIN_INTERNAL

The internal account that owns the Global Data Services schema. It should not be unlocked or used for a database login.

GSMCATUSER

The account used by Global Service Manager to connect to the Global Data Services catalog.

GSMUSER

The account used by Global Service Manager to connect to the database.

HR (Human Resources)

OE (Order Entry)

SH (Sales History)

Training/ demonstration users containing the popular EMPLOYEES and DEPARTMENTS tables

LBACSYS

The Oracle Label Security administrator account. Starting with Oracle Database 18c, the LBACSYS user account is created as a schema-only account.

MDDATA

The schema used by Oracle Spatial and Graph for storing geocoder and router data.

MDSYS

The Oracle Spatial and Graph administrator account.

ORACLE_OCM

This account contains the instrumentation for configuration collection used by the Oracle Configuration Manager.

ORDPLUGINS

Object Relational Data (ORD) User used by Time Series, etc.

ORDSYS

Object Relational Data (ORD) User used by Time Series, etc.

OUTLN

The account that supports plan stability. Plan stability enables you to maintain the same execution plans for the same SQL statements. OUTLN acts as a role to centrally manage metadata associated with stored outlines.

PERFSTAT

Oracle Statistics Package (STATSPACK) that supersedes UTLBSTAT/UTLESTAT

REMOTE_SCHEDULER_AGENT

The account to disable remote jobs on a database. This account is created during the remote scheduler agent configuration. You can disable the capability of a database to run remote jobs by dropping this user.

SCOTT

ADAMS

JONES

CLARK

BLAKE

Training/ demonstration users containing the popular EMP and DEPT tables

SYS

The account used to perform database administration tasks.

SYS$UMF

The account used to administer Remote Management Framework, including the remote Automatic Workload Repository (AWR).

SYSBACKUP

The account used to perform backup and recovery tasks.

SYSDG

The account used to administer and monitor Oracle Data Guard.

SYSKM

The account used to perform encryption key management.

SYSRAC

The account used to administer Oracle Real Application Clusters (RAC).

SYSTEM

Another account used to perform database administration tasks.

TRACESVR

Oracle Trace server

TSMSYS

User for Transparent Session Migration (TSM) a Grid feature

WMSYS

The account used to store the metadata information for Oracle Workspace Manager.

XDB

The account used for storing Oracle XML DB data and metadata.

XS$NULL

The internal account that represents the absence of a database schema user in a session, and indicates an application user session is in use. XS$NULL cannot be authenticated to a database, nor can it own any database schema objects, or possess any database privileges.

Group과 Member의 개수 또는 크기 등을 확인합니다.

Undo와 Temp 구성

Undo와 Temp Tablespace 크기를 확인합니다.

Log 모드

Tibero 미지원 사항으로 일반 Index로 변경을 고려합니다.

MSWIN949

UTF8, AL32UTF8

UTF8

JA16SJIS[TILDE]

JA16SJIS[TILDE]

JA16EUC[TILDE]

JA16EUC[TILDE]

ZHS16GBK

GBK

VN8VN3

VN8VN3

Undo 보존 시간을 설정합니다.

SGA_MAX_SIZE

사용 가능한 SGA 전체 크기를 확인합니다

SGA_TARGET

SGA의 목표 크기를 설정합니다

PGA_AGGREGATE_TARGET

사용 가능한 PGA 전체 크기를 확인합니다

MEMORY_TARGET

사용 가능한 전체 메모리 크기를 설정합니다. (Oracle 11g용)

전환 사용자 또는 전체를 수행하는 Job이 없는지 확인하고, 전환할 경우 수행되어 데이터 가 변경되지 않는지 확인합니다.

Cluster Object

Tibero 미지원 Object로 일반 Table 형태로 변경을 고려합니다.

XML Type

Table 생성문 column부분 type의 sys.xmltype을 xmltype으로 변경이 필요합니다.

BitMap Index

Tibero 미지원 사항으로 일반 Index로 변경을 고려합니다.

-

3

Table

-

4

Synonym

생성할 때 Source Object가 존재하지 않아도 문제되지 않지만 추후 조회할 때 자동으로 VALID하므로 먼저 만들어주는 것이 좋습니다.

5

View

의존성 때문에 에러가 발생할 수 있습니다.

6

Sequence

-

7

Data Migration

8

psm(=pl/sql)

T-UP 또는 Table Migrator 등의 Tool을 사용하여 데이터를 전환합니다.

9

Index

package, procedure, function이 해당하며 의존성 때문에 에러가 발생할 수 있습니다.

10

Constraint

-

11

Trigger

-

12

Grant

-

13

기타(C, Java external procedure, Job 등)

-

Tibero는 파라미터를 통해서 전체모드로 FLASHBACK 기능 지원하므로 주석 처리 합니다.

TABLESPACE GROUP

TABLESPACE GROUP이 지원되지 않으므로 주석 처리 합니다. 하나의 Tablespace에 여러 데이터 파일로 분리하는 것을 검토합니다.

PL/SQL DEBUGGING 권한으로 현재 Tibero는 지원하지 않습니다.

FLASHBACK

파라미터 형태로 지원하며 권한으로는 지원하지 않습니다.

같은 Column절에서는 동일한 Type을 사용합니다.

3

PSM(=PL/SQL) 내부에 같은 이름의 변수를 선언할 경우 Syntax Error가 발생합니다.

최종 선언된 변수 이름을 사용하고 앞 부분에 선언한 같은 이름의 변수를 삭제합니다.

전환 검증
Database Installation Guide
Oracle"

업그레이드

티베로 DBMS 업그레이드 방법을 안내합니다.

개요

논리적 백업 및 복구(exp 및 imp)를 이용해 Tibero 6에서 Tibero 7로 업그레이드 방법을 안내합니다.

[Tibero6 to Tibero7 전환 구성도]

사전 준비 사항

  • Tibero 유틸리티 exp 및 imp 사용을 위한 JDK 1.7 이상 설치

  • exp 및 imp 덤프 파일을 생성, 복사할 충분한 디스크 공간

  • Tibero의 SYS 계정 또는 DBA 계정

본 문서는 총 4개의 장으로 구성됩니다.

Source DB인 Tibero6의 업그레이드 진행을 위한 작업 절차를 설명합니다.

🔎

Target DB인 Tibero 7의 작업 절차를 설명합니다.

Target DB의 Object 및 Constraint 개수와 비교하여 Object Count 및 Constraint를확인합니다.

JDBC, ODBC, DB Link 등 활용한 I/F Driver 변경을 안내합니다.

티베로 | 대한민국 대표 데이터베이스 전문 기업티베로
Logo

안내서 구성

Source DB 작업 바로가기
🔎 Target DB 작업 바로가기
🔎 검증 바로가기
🔎 I/F Driver 변경 바로가기

전환 방법

티베로 DB전환 방법의 다양한 유형을 설명합니다.

T-UP

아래는 T-UP의 데이터 전환 과정을 보여주는 그림입니다.

[그림 4] T-UP 마이그레이션 예시

특징

  • 내부적으로 JAVA의 JDBC Driver를 이용하여 Source DB와 TIbero에 접속합니다. 단, Source DB와 Tibero JDBC Drvier가 필요하고 JDK 또는 JRE가 미리 설치되어 있어야 합니다.

  • Source DB가 이기종 RDBMS라면 Source DB의 JDBC Driver도 필요합니다.

  • Source DB > T-UP > Tibero 방향으로 네트워크를 총 2번 거쳐 데이터가 이동합니다. T-UP을 기점으로 Source DB와 Tibero의 네트워크를 거쳐 데이터 이동을 하므로 대용량으로 이관할 경우 불리할 수 있습니다.

  • 전체, 사용자, 테이블 모두 가능하고 GUI 형태로 보여주므로 조작하기 쉽습니다.

  • 중간에 문제가 발생해도 멈추지 않으며 전환이 모두 완료된 후에 문제를 처리합니다.

  • Tablespace 내의 데이터 파일 경로 및 이름을 변경하려면 생성문 추출 후 미리 수동으로 생성합니다.

  • Schema(=사용자)에 대해 Default Tablespace를 변경하려면 생성문 추출 후 미리 수동으로 생성합니다.


아래는 Table Migrator의 데이터 전환 과정을 보여주는 그림입니다.

  • Command 기반으로 내부적으로 JAVA의 JDBC Driver를 이용하여 Source DB와 Tibero에 접속합니다. 단, Source DB와 Tibero JDBC Driver가 필요하고 JDK 또는 JRE가 미리 설치되어 있어야 합니다.

  • 별도의 컴퓨터(클라이언트)가 필요하지 않고 Source DB 서버 또는 Tibero 서버에서 기동합니다.

  • 중간 서버가 필요하지 않으므로 네트워크를 1번 거쳐서 데이터가 이동합니다.

  • 1개의 테이블 데이터만 이관 가능하고 대용량 테이블을 이관할 경우 유리합니다.

Table Migrator를 사용하여 DB를 전환하기 전에 이관할 Table을 미리 생성해야 합니다.


아래는 DB Link의 데이터 전환 과정을 보여주는 그림입니다.

  • Source DB 또는 Tibero에 DB Link Object를 생성합니다.

  • 중간 서버가 필요하지 않으므로 네트워크를 1번 거쳐서 데이터가 이동합니다.

  • 1개의 테이블 데이터만 이관 가능하고 대용량 테이블을 이관할 경우 유리합니다.

DB Link를 사용하여 DB를 전환하기 전에 DB Link 구성 작업을 진행합니다.


아래는 tbLoader의 데이터 전환 과정을 보여주는 그림입니다.

  • 데이터만 SAM 파일로 만들어서 한 번에 적재할 수 있습니다.

  • 대용량 데이터를 이관할 경우 유리합니다.

tbLoader를 사용하여 DB를 전환하기 전에 Source DB에서 미리 텍스트 파일(SAM 파일)을 만들어서 Tibero 서버로 복사해야 합니다.


아래는 수동 이관으로 데이터를 전환하는 과정을 보여주는 그림입니다.

  • Source DB에 클라이언트 Tool을 이용하여 스크립트를 추출한 후 Tibero에 수동으로 적용하는 방식입니다.

  • 데이터의 경우 수동으로 옮기기가 불가능하므로, T-UP과 같은 Tool을 이용하여 이관합니다.

  • 중간에 문제가 발생하면 바로 문제 처리를 한 후 다음을 진행할 수 있습니다.

  • Shell 스크립트와 연동하면 자동화할 수 있습니다.

수동이관을 사용하기 전에 클라이언트 Tool을 이용하여 미리 DDL 생성문을 추출해야 합니다.


다음은 전환 방법 적용할 때 고려사항입니다.

  • 전환을 수행할 때 한 가지 방법으로 수행하는 것이 아니라 여러 가지 방법을 혼합하여 사용할 수 있습니다.

  • 고객사에서 실제 운영을 전환할 때 최소한의 Down Time이 필요합니다. 해당 고객사에서 각 전환 방법의 테스트 및 시간 측정을 통해 최소한의 전환 시간을 확보해야 합니다.

전환 방법
적용 시기

조건절 또는 파티션 테이블 사용이 가능합니다.

T-UP

GUI 기반으로 간편하게 전환을 할 경우(전체, 사용자 모드)와 수동 이관할 때 데이터 이관 용도로 사용합니다.

Table Migrator

DB Link 구성이 어렵고 대용량 테이블 데이터를 이관할 때 사용합니다.

DB Link

사전 작업 (선택)

T-UP 사용법은 “Tibero 유틸리티 안내서”의 “T-UP” 을 참고합니다.

Table Migrator

특징

사전 작업 (필수)

Table Migrator 가이드가 필요할 경우 티맥스티베로기술지원팀에 요청해주십시오.

DB Link

특징

사전 작업 (필수)

Source DB가 Oracle일 경우 Tibero To Oracle 구성을 하는 것이 제약사항이 적습니다.

DB Link 구성 방법은 제공되는 기술문서 중 "DB Link 가이드"를 참고합니다.

tbLoader

특징

사전 작업 (필수)

tbLoader 사용법은 "Tibero 유틸리티 안내서"의 ""를 참고합니다.

수동 이관

특징

사전 작업 (필수)

수동이관 사용법은 본 가이드 문서를 참고합니다.

전환방법 선택 시 고려사항

[그림 5] Table Migrator 과정
[그림 6] DB Link 과정
[그림 7] tbLoader 과정
[그림 8] 수동 이관 과정

Table Migrator 사용이 어렵고 대용량 테이블 데이터를 이관할 때 사용합니다.

tbLoader

Source DB에서 SAM 파일 생성이 가능할 경우 사용합니다.

수동 이관

전환 난이도가 어려워 다른 전환 방법을 적용하기가 힘든 경우와 동일한 전환을 특정 기간에 걸쳐 반복적으로 수행해야 할 경우 사용합니다. (자동화 스크립트를 이용하면 2차 이상의 반복적인 수행일 경우에 간편합니다.)

tbLoader

검증

DBMS 업그레이드 검증 방법 입니다.

Source DB 페이지에서 설명한 ""의 "Object Count 확인" 및 "Constraint 확인"을 Target DB의 Object 및 Constraint 개수와 비교하여, 개수가 맞지 않다면 아래와 같이 View를 조사합니다.

Table - DBA_TABLES 
Partition Table - DBA_TAB_PARTITIONS
Subpartition Table - DBA_TAB_SUBPARTITIONS
View - DBA_VIEWS
Mview - DBA_MVIEWS
Synonym - DBA_SYNONYMS
Sequence - DBA_SEQUENCES
Package - DBA_SOURCE(TYPE = 'PACKAGE') / DBA_OBJECTS(OBJECT_TYPE= 'PACKAGE')
Package Body - DBA_SOURCE(TYPE = 'PACKAGE BODY') / DBA_OBJECTS(OBJECT_TYPE= 'PACKAGE BODY')
Function - DBA_SOURCE(TYPE = 'FUNCTION') / DBA_OBJECTS(OBJECT_TYPE= 'FUNCTION')
Procedure - DBA_SOURCE(TYPE = 'PROCEDURE') / DBA_OBJECTS(OBJECT_TYPE= 'PROCEDURE')
Index - DBA_INDEXES
Partition Index - DBA_IND_PARTITIONS
Subpartition Index - DBA_IND_SUBPARTITIONS
Constraint - DBA_CONSTRAINTS
Grant - DBA_TAB_PRIVS / DBA_ROLE_PRIVS / DBA_SYS_PRIVS
Trigger - DBA_TRIGGERS

Target DB의 Object 및 Constraint를 조회할 경우 체크 방법의 ""과 ""를 참고합니다.

또한 미지원되는 사항 이외의 데이터가 이관되지 않았다면 별도 확인이 필요합니다.

체크리스트 및 체크 방법
Object Count 확인
Constraint 확인

데이터 타입 비교

타 DBMS와 Tibero DBMS 컬럼 데이터 타입을 비교하여 설명합니다.

ORACLE

다음은 Oracle과 Tibero의 데이터 타입 비교표 입니다.

Oracle
Tibero

CHAR

CHAR


다음은 MS-SQL과 Tibero의 데이터 타입 비교표 입니다.

MS-SQL
Tibero

다음은 Sybase와 Tibero의 데이터 타입 비교표 입니다.

Sybase
Tibero

VARCHAR

VARCHAR

VARCHAR2

VARCHAR2 (내부적으로는 VARCHAR로 생성하지만 Oracle의 VARCHAR2와 동작방식이 동일)

NCHAR

NCHAR

NVARCHAR

NVARCHAR

NVARCHAR2

NVARCHAR2(내부적으로는 NVARCHAR로 생성하지만 Oracle의 NVARCHAR2와 동작 방식이 동일)

BLOB

BLOB

CLOB

CLOB

NCLOB

NCLOB

LONG

LONG

NUMBER

NUMBER

NUMERIC

NUMERIC(내부적으로 NUMBER를 생성함)

INT

INT(내부적으로 NUMBER를 생성함)

DECIMAL

DECIMAL(내부적으로 NUMBER를 생성함)

DOUBLE

NUMBER

FLOAT

FLOAT(내부적으로 NUMBER를 생성함)

REAL

REAL(내부적으로 NUMBER를 생성함)

SMALLINT

SMALLINT(내부적으로 NUMBER를 생성함)

BINARY_FLOAT

NUMBER

BINARY_DOUBLE

NUMBER

DATE

DATE

TIMESTAMP

TIMESTAMP

BFILE

TIBERO BFILE 지원하지 않음, BLOB으로 우회

RAW

RAW

LONG RAW

LONG RAW

XMLTYPE

XMLTYPE(생성문법이 일부 다르므로 문법 변경이 필요 Oracle : SYS.XMLTYPE, Tibero : XMLTYPE)

GEOMETRY

GEOMETRY

VARCHAR(MAX)

CLOB

NVARCHAR(MAX)

NCLOB

VARBINARY(MAX)

TINYINT NUMBER

NUMBER

SMALLINT NUMBER

NUMBER

MS-SQL

Sybase

BLOB

UNIQUEIDENTIFIER

VARCHAR

SQL_VARIANT LONG

RAW

BIGINT

NUMBER

NTEXT

CLOB

INT NUMBER

NUMBER

NUMERIC(P,S)

NUMBER(n,n)

DECIMAL(P,S)

NUMBER(n,n)

FLOAT(PRECISION)

NUMBER

DOUBLE(PRECISION)

NUMBER

REAL NUMBER

NUMBER

SMALLMONEY

NUMBER(10,4)

MONEY

NUMBER(19,4)

SMALLDATETIME

DATE 또는 TIMESTAMP

DATETIME

DATE 또는 TIMESTAMP

CHAR(N)

CHAR(N)

VARCHAR(N)

VARCHAR(N)

UNICHAR(N)

NCHAR(N)

UNIVARCHAR(N)

NVARCHAR(N)

NCHAR(N)

NCHAR(N)

NVARCHAR(N)

NVARCHAR(N)

BINARY(N)

CLOB

VARBINARY(N)

BLOB

BIT

NUMBER(1) 또는 CHAR(1)

TEXT CLOB

CLOB

IMAGE

BLOB