Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
타 DB에서 Tibero DB로 전환하는 방법에 대해 안내합니다.
본 문서는 총 4개의 장으로 구성됩니다.
전환 전 확인해야 할 사항에 대해서 설명합니다.
DB를 전환할 때 사용하는 방법들에 대해서 설명합니다.
타사 DB에서 Tibero DB로 전환하는 절차 및 방법을 설명합니다.
🔎 전환 바로가기
Tibero와 다른 DBMS의 컬럼 데이터 타입을 비교하여 설명한 참고자료 입니다.
🔎
업그레이드 Target DB인 Tibero 7 업그레이드 작업 절차를 설명합니다.
작업은 다음과 같은 순서로 진행합니다.
설치
IMPORT 수행
후 처리
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.shtbimport username={sys | dba계정} password=<password> port=<port_no> sid=<SID>
file=<file name> log=<log-file name> full=y script=y ignore=yusername
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=yDECLARE
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 immediatetbboot -t mounttbsql sys/tibero
SQL> alter database archivelog;tbdown immediate
tbboottbsql 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
-------------- -
ARCHIVELOGImport 할 DB의 포트 번호
sid
Import 할 DB의 이름
file
Tibero6에서 import 한 데이터 파일
log
생성될 로그 파일의 이름
ignore
이미 존재하는 스키마 객체로 인한 생성 에러 무시 여부를 결정
JDBC 4.0 SPEC를 준수합니다. (JDK 1.6이상)
JDBC 파일 : $TB_HOME/client/lib/jar/tibero6-jdbc.jar
JDBC 4.0 SPEC을 준수합니다. (JDK 1.7 이상)
JDBC 파일 : $TB_HOME/client/lib/jar/tibero7-jdbc.jar
Tibero 7 ODBC를 설치하여 기존 드라이버를 변경합니다.
OLE DB의 경우 지원이 중단되어, 아래와 같은 방법으로 우회가 필요합니다.
ADO 환경(VB)에서는 MADASQL(Microsoft에서 제공하는 제너럴 OLE DB Driver)로 우회합니다.
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에 적용한 후 관련 라이브러리를 가져옵니다.
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용어
설치
전체
패치
이관
Tools
유틸리티
인터페이스/연동
Driver
Web server
클라우드
분석
로그/덤프
모니터링/점검
TPR
빅데이터
성능
Storage
트랜잭션
튜닝
App
Language
C
COBOL
SQL
API
Interface
장애해결
보안
일반
기본관리
구조
Language
TAC/ TAS
용어
설치
전체
패치
업그레이드
이관
Tools
유틸리티
백업/복구
인터페이스/연동
Driver
Web server
클라우드
성능
Storage
통계
분석
로그/덤프
모니터링/점검
TPR
빅데이터
보안
장애해결
티맥스티베로 기술문서에 일반적으로 공통 적용되는 저작권 안내사항 입니다.
경기도 성남시 분당구 정자일로 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
티베로 DB전환 전 고려사항에 대해서 설명합니다.
다음은 DB 전환 수행 절차 입니다. 전환을 위해서는 DB 전환팀과 AP 전환 및 테스트팀이 필요합니다.
다른 DB에서 Tibero DB로 전환할 때 상황에 따라 난이도가 구분되며 난이도에 따라 전환 방법이 달라질 수 있습니다.
아래는 각 난이도에 대한 상황의 설명입니다.
전환 검증 시간을 줄이기 위하여 전환을 시작하기 전 고객사의 DB 담당자는 Source DB의 INVALID한 Object를 정리하는 것이 좋습니다.
T-UP의 Analysis 기능을 이용해 전환 전 호환성 검증을 진행합니다.
클라우드 최적화 DBMS Tibero에 대한 소개부터 처음 사용 시 필요한 정보들을 안내합니다.
쉬움
몇 개의 Schema(=사용자)로 구성되어 있습니다.
Object들 사이에 의존성이 복잡하게 구성되어 있지 않습니다.
실제 사용하는 Object들로 구성되어 있으며 모두 VALID 상태 입니다.
어려움
다수의 Schema(=사용자)로 구성되어 있으며 Object들 사이에 의존성이 복잡하게 구성되어 있습니다.
Object들이 사용되지 않는 것들이 많으며 INVALID 상태입니다.





Tibero DBMS는 고성능, 고가용성 및 확장성의 문제를 해결하는 엔터프라이즈 데이터베이스관리시스템 입니다.
현재 기업의 비즈니스는 폭발적인 데이터의 증가와 다양한 환경 및 플랫폼의 등장으로 빠르게 확장되고 있습니다. 새로운 비즈니스 환경이 도래함에 따라 보다 더 효율적이고 유연한 데이터 서비스와 정보의 처리, 데이터 관리 기능이 필요하게 되었습니다.
기존 DB의 단점을 보완하기 위해 Tibero 는 독자적인 Tibero Thread Architecture를 채택, 구현했습니다.
한정된 서버 프로세스의 CPU 및 메모리 등의 시스템 리소스를 효율적으로 사용하면서 뛰어난 성능과 안정성 및 확장성을 보장하고 편리한 개발 환경과 관리 기능을 제공합니다.
RDBMS 환경에서 요구되는 주요 기능인 분산 데이터베이스 링크(Distributed Database Link), 데이터 이중화(Data Replication), 데이터베이스 클러스터(Data Cluster), 병렬 질의 처리 (Parallel Query Processing) 등의 기능을 갖추고 있습니다.
Tibero6의 업그레이드 진행을 위한 Source DB 업그레이드 사전 작업 절차를 설명합니다.
작업 절차는 다음과 같은 순서로 진행합니다.
체크리스트 및 체크 방법
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 UTF16SQL> 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 NOSQL> 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 YESSQL> 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 YESSQL> 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 60SQL> 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 NSQL> 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/12SQL> 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 YESSQL> SET LINESIZE 120
SQL> COL name FOR a20
SQL> COL path FOR a60
SQL> SELECT * FROM dba_directories;
NAME PATH
-------------------- ----------------------
SAM /data2/tb6/DIR_SAMSQL> 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 1SQL> 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 1SQL> SELECTcount(*) FROM v$session;
COUNT(*)
---------- -
2BEGIN
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=yusername
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=yExport 할 DB의 포트 번호
sid
Export 할 DB의 이름.
file
생성될 파일 이름
log
생성될 로그 파일의 이름
Oracle to Tibero DB 전환 절차 및 방법을 설명합니다.
타사 DB에서Tibero DB로 전환하기 전 점검사항에 대해서 설명합니다.
사전 점검은 전환하기 전 Oracle의 특성을 파악하고 Tibero에 적용해야 하는 값들을 확인하는 중요한 절차입니다.
Oracle의 sys 또는 system 등의 DBA 권한을 가진 사용자로 접속하여 아래 정보를 확인합니다.
버전 정보
전환 Oracle 버전을 확인합니다.
Oracle과 Tibero간 대응되는 문자 집합을 사용합니다.
Oracle의 'sys' 또는 'system' 계정 등의 DBA 권한이 있는 사용자로 접속한 후 조회합니다.
사용자 조회 아래는 전체 사용자 목록입니다.
Open된 사용자 조회 아래는 현재 Open 사용자를 조회하는 쿼리입니다.
Oracle 기본 사용자 아래와 같은 사용자 이름의 경우 Oracle을 설치할 때 자동으로 생성되는 사용자로 전환할 때 제외합니다. (Oracle 버전에 따라 사용자명이 일부 다를 수 있습니다.)
전환 대상 사용자에 속하는 Table, Index가 저장된 Tablespace만 확인합니다. 아래는 Tablespace 전체에 대하여 확인하는 예제입니다.
전체 Tablespace 크기와 사용량 확인
전체 합계
전환 대상 사용자에 대해당하는 정보만 확인합니다.
Object 상태별 개수 확인
Object 개수 확인
전환 완료 후 Oracle과 Object 개수를 비교할 때 검증용으로 사용합니다.
Constraint 개수 확인
Oracle의 sys 또는 system 등의 DBA 권한을 가진 사용자로 접속하여 아래의 정보를 확인하고, Tibero 설치 과정 중 CREATE DATABASE를 수행할 경우 아래의 정보를 참고하여 DB를 생성합니다.
아래는 DB 생성관련 항목에 대한 설명입니다.
문자 집합 정보를 확인합니다.
Oracle
Tibero
확인 결과 항목에 대한 설명은 아래와 같습니다.
아래는 Oracle과 Tibero의 문자 집합 대응 정보입니다.
National 문자 집합
초기 파라미터 정보를 확인합니다.
아래는 Oracle에서 전환할 때 확인해야 할 초기 파라미터입니다.
Tibero에서 Redo 로그를 생성할 경우 참고하며 파일 크기를 동일하거나 더 크게 생성해 줍니다.
아래는 Redo를 확인하는 예입니다.
Tibero에서 Undo와 Temp를 생성할 경우 참고하며 파일 크기를 동일하거나 더 크게 생성합니다.
아래는 Undo Tablespace를 확인하는 예입니다.
아래는 Temp Tablespace 확인 예입니다.
아래는 Log 모드를 확인하는 예입니다.
만약, ARCHIVE LOG 모드라면 전환 시간 단축을 위해 전환이 모두 완료된 후에 모드를 변경합니다.
아래는 추가로 확인해야 할 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가 발생하는 경우
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
VIETNAMESEselect 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.oraset 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.logSELECT 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 errorsalter 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을 사용합니다.
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가 발생합니다.
최종 선언된 변수 이름을 사용하고 앞 부분에 선언한 같은 이름의 변수를 삭제합니다.
























티베로 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 변경을 안내합니다.
티베로 DB전환 방법의 다양한 유형을 설명합니다.
아래는 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

Table Migrator 사용이 어렵고 대용량 테이블 데이터를 이관할 때 사용합니다.
tbLoader
Source DB에서 SAM 파일 생성이 가능할 경우 사용합니다.
수동 이관
전환 난이도가 어려워 다른 전환 방법을 적용하기가 힘든 경우와 동일한 전환을 특정 기간에 걸쳐 반복적으로 수행해야 할 경우 사용합니다. (자동화 스크립트를 이용하면 2차 이상의 반복적인 수행일 경우에 간편합니다.)




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