우리 회사 데이터베이스를 티베로로 변경하기
tbExport 0 1 99,999+

by 티베로 tbExport [2018.10.12]


가. 개요

tbExport 유틸리티는 특정 오브젝트들을 추출(export)하여 운영체제의 파일 형식으로 저장하는 기능을 제공하며, 저장된 파일은 다른(혹은 동일한) 티베로 데이터베이스에서 언제든지 다시 불러들여(import) 사용할 수 있다

따라서 사용자는 해당 유틸리티를 통해 주요 오브젝트들을 손쉽게 이동할 수 있으며 별도의 저장매체에 복사하여 안전하게 백업할 수도 있다. 다만 tbExport 수행 자체가 많은 운영체제/데이터베이스 자원을 사용하므로 데이터베이스 부하가 적은 시간에 작업하는것이 바람직하다.

또한 손쉽게 많은 데이터를 추출할 수 있는 만큼 해당 유틸리티를 사용할 수 있는 사용자를 철저히 통제하여 보안사고가 발생하지 않도록 주의를 기울여야 한다(tbExport는 DBA 권한 혹은 SELECT ANY DICTIONARY 권한이 필요하므로 해당 권한은 꼭 필요한 사용자에게만 부여하도록 한다).

나. tbExport 특징 및 사용 시 고려 사항

1. tbExport를 통해 추출한 데이터는 동일 시점이 아닌 순차적인 Export 작업 시점의 데이터이다. 따라서 추출하는 오브젝트의 DML이 없는 시간대에 수행하도록 한다.

2. 추출 대상 테이블의 크기가 클 경우(10G 이상) 다음을 고려한다.

2-1) 작업 시간이 지나치게 길어질 경우 중간에 예기치 않은 사고에 대한 실패위험에 장시간 노출되므로 약 10G 단위로 나누어 수행한다(예를 들어, 특정 데이터베이스 유저가 10G 테이블 한개, 8G 테이블 한개, 1G 미만 테이블 10개를 보유하고 있다면 세 번에 나누어 작업한다).

2-2) 작업 시간을 최소화하기 위해 index, 통계 정보 등 무거운 부가 정보는 제외하고 데이터 이동 후 별도의 SCRIPT를 통해 생성한다(tbExport는 특정 테이블 선택 시 연관된 객체(인덱스, 제약조건, 권한, 통계 정보 등)가 모두 함께 추출된다).

2-3) 차후 import시 리두로그 발생을 최소화하기 위해 추출 오브젝트들을 모두 nologging 처리하고 추출한다.

3. 추출한 운영체제 파일을 FTP 등을 통해 이관 대상 서버로 이동하는 시간을 줄이기 위해서는 스토리지 등을 통해 서버간 공유할 수 있는 공간을 설정하여 해당 경로에 추출하는 것이 좋다.

4. 추출하는 오브젝트들의 현황 정보(오브젝트 타이별 개수, 크기, 권한, VAILD정보 등)를 저장하여 향후 이관의 정상여부 판단 시 사용한다.

다. tbExport 모드 및 매개변수

tbExport 모드는 추출 오브젝트의 단위를 의미하며 총 세 가지(전체 데이터베이스 모드, 사용자 모드, 테이블 모드)가 존재한다.

각 모드는 tbExport 수행 시 매개변수 값을 지정하는 것으로 선택이 가능하며 매개변수는 tbExport 모드 외에도 다음과 같은 종류들이 존재하고 이는 tbexport 명령어로도 조회가 가능하다.

  • [참고 6-9] tbexport option 확인
  • tibero:/tibero # tbexport
    tbexport
    tbexport 6.0 (FS04) 120037 TmaxData Corporation Copyright (c) 2008-. All
    rights reserved.
    Patch files (FS04_CS_1601_b FS04_98340l FS04_103133a FS04_107483h
    FS04_110122a FS04_110306a FS04_111154b FS04_111345a FS04_111475a
    FS04_111665b FS04_111692a FS04_111922a FS04_111938c FS04_111941b
    FS04_111942a FS04_111944a FS04_112043c FS04_112166a FS04_112371a
    FS04_112481a FS04_112511a FS04_112530e FS04_112689e FS04_113174j
    FS04_113191b FS04_113587a FS04_113651a FS04_113708a FS04_113737a
    FS04_114105a FS04_114246a)
    
    Usage: tbexport [PARAMETER1=VALUE] [PARAMETER2=VALUE] ...
    Parameters:
     CFGFILE Config file name
     CONSTRAINT Export Constraint: Y/N, default: Y
     CONSISTENT Consistent Mode: Y/N, default: N
     EXCLUDE Limit the export to specific objects
     FILE Export dump file name, default: default.dat
     --- (이하 생략)
    

  • [표 6-4] tbexport option(출처 : http://technet.tmaxsoft.com)
  • 매개변수 기본값 설명
    CFGFILE Export 환경 파일 이름
    USERNAME Export를 수행하는 사용자 계정
    PASSWORD Export를 수행하는 사용자 암호
    IP localhost Export 대상 티베로 서버 IP
    PORT 8629 Export 대상 티베로 서버 Port
    SID Export 대상 티베로 서버 SID
    FILE default.dat Export 수행 시 생성되는 파일 이름
    OVERWRITE N Export 수행 시 생성되는 파일 이름이 존재할 경우 덮어쓸지 여부
    LOG tbExpImp_[년]_[월]_[일]_[시분초].log Export 수행 시 생성되는 파일 이름
    FULL N Export 모드, 전체 데이터베이스 대상
    USER Export 모드, 특정 사용자에 대상(복수지정 가능)
    TABLE Export 모드, 특정 테이블에 대상 (복수지정 가능)
    EXCLUDE Export할 때 제외할 특정 유저, 테이블 설정(사용법 아래 사례 참조)
    INDEX Y 인덱스 Export 여부
    GRANT Y 권한 Export 여부
    CONSTRAINT Y 제약 조건 Export 여부
    ROWS Y 통계 정보 Export 여부
    SCRIPTS N Export시 DDL 스크립트를 보여줄지 여부
    THREAD_CNT 4 Export하기 위해 사용하는 스레드 개수
    QUERY Export될 데이터에 필터 조건을 지정(사용법은 아래의 사례 참조)
    모드에 상관없이 동작하지만, 원하지 않는 테이블에도 적용될 수 있으므로 주의한다.
    REMAP_TABLESPACE Export시 본래의 테이블 스페이스를 다른 테이블 스페이스로 변경
    (예시1) 테이블 스페이스 USR1에서 USR3으로 변경 REMAP_TABLESPACE=usr1:usr3
    (예시2) 여러 개의 테이블 스페이스 변경 설정 REMAP_TABLESPACE=usr1:usr3,usr2:usr4
    TEMP_DIR Export를 수행할 때 임시 덤프 파일들이 생성될 디렉터리 지정
    SAVE_CREDENTIAL 암호화한 USERNAME과 PASSWORD를 사용할 때 설정
    NO_PACK_DIR 압축을 해제한 덤프 파일이 저장되는 디렉터리 이 옵션이 지정되면 파일 매개변수에 설정된 값은 무시됨
    INLINE_CONSTRAINT N Export를 수행할 때 스크립트를 InlineConstraint로 출력할지 여부를 설정
    Y:inlineConstraint로 출력(NotNull에만 지원)
    N:Out-of-lineConstraint로 출력
    GEOM_ASBYTES geometry컬럼에 대해 WKB 또는 bytes로 얻어올지 여부를 결정
    티베로 6이상 서버에서 Geometry 컬럼 데이터를 WKB 포맷으로 저장하기 때문에 export나 import할 때 이 옵션 을 사용하면 성능면에서 이점을 얻을 수 있다. export할 때 geom_asbytes 옵션을 ‘Y’로 설정하면 st_asbinary 같은 함수를 사용하지 않고 LOB 그대로 처리한다.

  • [그림 6-5] tbExport/tbImport Mode
  • tbExport/tbImport Mode

라. tbExport 수행

tbExport가 제공하는 다양한 매개변수들을 필요한 상황에 알맞게 적용하는 방법을 다음 수행 예시들을 통해 자세히 살펴보자.

1. TEST 오브젝트 생성
CREATE TABLE TIBEROTEST.TABLE01
     ( col1 VARCHAR2(2 BYTE)
     , col2 VARCHAR2(2 BYTE)
     , col3 VARCHAR2(2 BYTE)
     , col4 VARCHAR2(2 BYTE))
     TABLESPACE COMDATA;
     
CREATE TABLE TIBEROTEST.TABLE02 
     ( col1 VARCHAR2(2 BYTE)
     , col2 VARCHAR2(2 BYTE)
     , col3 VARCHAR2(2 BYTE)
     , col4 VARCHAR2(2 BYTE))
     TABLESPACE COMDATA;
     
CREATE TABLE TIBEROTEST.TABLE03 
     ( col1 VARCHAR2(2 BYTE)
     , col2 VARCHAR2(2 BYTE)
     , col3 VARCHAR2(2 BYTE)
     , col4 VARCHAR2(2 BYTE))
     TABLESPACE COMDATA;

CREATE INDEX TIBEROTEST.TABLE01IX ON TIBEROTEST.TABLE01 (col1) TABLESPACE COMDATA;
CREATE INDEX TIBEROTEST.TABLE02IX ON TIBEROTEST.TABLE02 (col1) TABLESPACE COMDATA;
CREATE INDEX TIBEROTEST.TABLE03IX ON TIBEROTEST.TABLE03 (col1) TABLESPACE COMDATA;

GRANT SELECT, INSERT, UPDATE, DELETE ON TIBEROTEST.TABLE01 TO PUBLIC;
GRANT SELECT, INSERT, UPDATE, DELETE ON TIBEROTEST.TABLE02 TO PUBLIC;
GRANT SELECT, INSERT, UPDATE, DELETE ON TIBEROTEST.TABLE03 TO PUBLIC;

CREATE PUBLIC SYNONYM TABLE01 FOR TIBEROTEST.TABLE01;
CREATE PUBLIC SYNONYM TABLE02 FOR TIBEROTEST.TABLE02;
CREATE PUBLIC SYNONYM TABLE03 FOR TIBEROTEST.TABLE03;

INSERT INTO TIBEROTEST.TABLE01 VALUES('01','02','03','04');
INSERT INTO TIBEROTEST.TABLE01 VALUES('11','12','13','14');
INSERT INTO TIBEROTEST.TABLE01 VALUES('21','22','23','24');
INSERT INTO TIBEROTEST.TABLE01 VALUES('31','32','33','34');
INSERT INTO TIBEROTEST.TABLE02 VALUES('01','02','03','04');
INSERT INTO TIBEROTEST.TABLE02 VALUES('11','12','13','14');
INSERT INTO TIBEROTEST.TABLE02 VALUES('21','22','23','24');
INSERT INTO TIBEROTEST.TABLE02 VALUES('31','32','33','34');
INSERT INTO TIBEROTEST.TABLE03 VALUES('01','02','03','04');
INSERT INTO TIBEROTEST.TABLE03 VALUES('11','12','13','14');
INSERT INTO TIBEROTEST.TABLE03 VALUES('21','22','23','24');
INSERT INTO TIBEROTEST.TABLE03 VALUES('31','32','33','34');
COMMIT;

2. tbExport 유저 모드 - 특정 유저 추출하기(SYS 계정으로 TIBEROTEST 계정의 모든 오브젝트 추출)
tibero:/tibero/exptest # tbexport USERNAME=sys
PASSWORD=xxxxx SID=xxxxx PORT=11111 FILE=/tibero/exptest/exptest02.dat
LOG=/tibero/exptest/exptest02.log
USER=tiberotest

tbexport 6.0 (FS04) 120037 TmaxData Corporation Copyright (c) 2008-. All
rights reserved.
the USER: tiberotest: Thu Nov 17 14:00:15 KST 2016
Export national character set: UTF-16
 exporting schema: "TIBEROTEST"
  exporting tables
   [0] TIBEROTEST.TABLE01 4 rows expected
   [1] TIBEROTEST.TABLE02 4 rows expected
   [2] TIBEROTEST.TABLE03 4 rows expected
 exporting indexes
Packing the file...
Export completed successfully: Thu Nov 17 14:00:24 KST 2016

3. tbExport 테이블 모드-특정 테이블 추출하기(SYS 계정으로 TIBEROTEST 계정의 2개 테이블(TABLE01, TABLE02) 추출)
tibero:/tibero/exptest # tbexport USERNAME=sys
PASSWORD=xxxxx SID=xxxxx PORT=11111 FILE=/tibero/exptest/exptest03.dat
LOG=/tibero/exptest/exptest03.log
TABLE=TIBEROTEST.TABLE01,TIBEROTEST.TABLE02

tbexport6.0(FS04) 120037 TmaxData Corporation Copyright (c) 2008-. All rights reserved.
the TABLE:TIBEROTEST.TABLE01,TIBEROTEST.TABLE02: Thu Nov17 14:00:57 KST 2016
Export national character set:UTF-16
 exporting table: "TIBEROTEST"."TABLE01"
 exporting table: "TIBEROTEST"."TABLE02"
   [0] TIBEROTEST.TABLE01 4 rows expected
   [1] TIBEROTEST.TABLE02 4 rows expected
 exporting indexes
 exporting object privileges
 exporting indexes
 exporting object privileges
Packing the file...
Export completed successfully:Thu Nov 17 14:01:06 KST 2016

4. tbExport 유저 모드 - 특정 테이블을 제외하고 추출하기
tibero:/tibero/exptest # tbexport USERNAME=sys
PASSWORD=xxxxx SID=xxxxx PORT=11111 FILE=/tibero/exptest/exptest04.dat
LOG=/tibero/exptest/exptest04.log
USER=tiberotest exclude=table:"\"=\'TABLE01\'"\"
exclude=table:"\"=\'TABLE02\'"\"

# exclude 변수에는 equal(=) 조건 외에 like 조건도 다음과 같이 사용이 가능하다.
# exclude=table:"\"LIKE\'TABLE01%\'"\"

tbexport6.0(FS04) 120037 TmaxData Corporation Copyright (c) 2008-. All
rights reserved.
the USER:tiberotest:Thu Nov 1714:26:05 KST 2016
Export national character set:UTF-16
 exporting schema: "TIBEROTEST"
  exporting tables
   [0] TIBEROTEST.TABLE03 4 rows expected
  exporting indexes
Packing the file...
Export completed successfully:Thu Nov 17 14:26:15 KST 2016

5. tbExport 유저 모드 - 인덱스 제외하고 추출하기
tibero:/tibero/exptest # tbexport USERNAME=sys
PASSWORD=xxxxx SID=xxxxx PORT=11111
FILE=/tibero/exptest/exptest02.dat LOG=/tibero/exptest/exptest02.log
USER=tiberotest INDEX=N

tbexport6.0(FS04) 120037 TmaxData Corporation Copyright (c) 2008-. All
rights reserved.
the USER:tiberotest:Thu Nov 1714:46:02 KST 2016
Export national character set:UTF-16
 exporting schema: "TIBEROTEST"
  exporting tables
   [0] TIBEROTEST.TABLE01 4 rows expected
   [2] TIBEROTEST.TABLE03 4 rows expected
   [1] TIBEROTEST.TABLE02 4 rows expected
Packing the file...
Export completed successfully:Thu Nov 17 14:46:08 KST 2016

6. tbExport 테이블 모드 - QUERY 변수로 특정 ROW 추출하기
tibero:/tibero/exptest # tbexport USERNAME=sys
PASSWORD=xxxxx SID=xxxxx PORT=11111
FILE=/tibero/exptest/exptest06.dat LOG=/tibero/exptest/exptest06.log
TABLE=TIBEROTEST.TABLE01,TIBEROTEST.TABLE02 QUERY="\"WHERE COL1 LIKE'3%'"\"

tbexport6.0(FS04) 120037 TmaxData Corporation Copyright (c) 2008-. All
rights reserved.
the TABLE:TIBEROTEST.TABLE01,TIBEROTEST.TABLE02:Thu Nov 17 14:50:11 KST 2016
Export national character set:UTF-16
 exporting table: "TIBEROTEST"."TABLE01"
 exporting table: "TIBEROTEST"."TABLE02"
   [1] TIBEROTEST.TABLE02 1 rows expected
   [0] TIBEROTEST.TABLE01 1 rows expected
 exporting indexes
 exporting object privileges
 exporting indexes
 exporting object privileges
Packing the file...
Export completed successfully:Thu Nov 17 14:50:19 KST 2016

7. tbExport 테이블 모드 - REMAP_TABLESPACE 변수로 TABLESPACE 변경하여 추출하기(COMDATA > USERS)
tibero:/tibero/exptest #tbexport USERNAME=sys
PASSWORD=xxxxx SID=xxxxx PORT=11111 FILE=/tibero/exptest/exptest07.dat
LOG=/tibero/exptest/exptest07.log
TABLE=TIBEROTEST.TABLE01, TIBEROTEST.TABLE02
REMAP_TABLESPACE=COMDATA:USERS

# 수행 로그에는 TABLESPACE가 변경된 것이 확인되지는 않는다. 
# tbimport 사례에서 실제로 exptest07.dat를 수행한 이후 
# TABLESPACE가 변경되었는지 확인해보자

the TABLE: TIBEROTEST.TABLE01, TIBEROTEST.TABLE02: Thu Nov 17 14:56:19
KST 2016
Export national character set: UTF-16
 exporting table: "TIBEROTEST"."TABLE01"
 exporting table: "TIBEROTEST"."TABLE02"
   [0] TIBEROTEST.TABLE01 4 rows expected
   [1] TIBEROTEST.TABLE02 4 rows expected exporting indexes
 exporting object privileges
 exporting indexes
 exporting object privileges
Packing the file...
Export completed successfully: Thu Nov 17 14:56:26 KST 2016

8. tbExport - CFG 파일을 활용하여 추출하기

CFG 파일을 활용하면 일반 에디터에 작성하는 것처럼 매개변수 파일들을 설정할수 있으므로 실수할 확률이 적고 편리하다. 다만, 매개변수 종류에 따라 cfgfile을 사용하지 않았을 때의 입력값과 차이가 나는 것이 다수 존재하므로 주의해야 한다

(예 : QUERY 변수 사용 시 cfgfile의 경우 [QUERY=WHERE COL1 LIKE '3%']와 같이 입력하고 cfgfile을 사용하지 않았을 때는 [QUERY="\" WHERE COL1LIKE '3%'"\"]와 같이 입력해야 한다).

tibero:/tibero/exptest # vi tbExportCfg01.cfg
<--vi editor를 통해 매개변수 설정
----------------------------------------------------------------
USERNAME=sys
PASSWORD=xxxxx
SID=xxxxx
PORT=11111
FILE=/tibero/exptest/exptest08.dat
LOG=/tibero/exptest/exptest08.log
USER=tiberotest
----------------------------------------------------------------
tibero:/tibero/exptest # tbexport cfgfile=tbExportCfg01.cfg 
<-- cfg 파일을 지정하여 tbExport 수행

TbExport 파일을 차후에 TbImport했을 때 원하는 오브젝트들이 모두 정확하게 이관되었는지를 확인하기 위해 모든 테이블의 ROW 데이터를 하나하나 비교해 볼 수는 없지만 최소한 오브젝트 타입, STATUS별 개수 정보는 확인하는 것이 바람직하다.

-- object type, status별 개수 확인
SELECT OBJECT_TYPE, STATUS, SUM(1) AS NUM_OBJ
FROM DBA_OBJECTS WHERE OWNER = 'TESTOWNER'
GROUP BY OBJECT_TYPE, STATUS ORDER BY OBJECT_TYPE, STATUS;

------------ ------- ----------
object_type  status  num_obj
------------ ------- ----------
index        vaild       295
procedure    valid         6
procedure    invaild       1
--(이하생략)

이관 전후 status 개수 차이가 존재할 때 어떤 오브젝트가 invaild 되었는지를 확인하기 위해서는 dba_objects 자체를 백업해두는 것이 좋다. 특히 단편화(fragmentation) 제거 목적 등으로 동일 데이터베이스에 tbImport를 할 경우는 tbImport 이후 dba_objects 현황이 변경될 것이므로 반드시 별도의 오브젝트에 백업해야 한다.

-- dba_objects 백업
CREATE TABLE BACKUP_OBJECTS 
    AS 
SELECT * FROM DBA_OBJECTS WHERE OWNER = ‘TESTOWNER’;

만약 추출 대상 오브젝트들과 관계된 오브젝트들이 다른 계정에도 다수 존재한다면 해당 계정의 정보도 모두 함 께 추출해야 한다(불확실할 경우 전체 정보를 추출한다). 특정 오브젝트를 포함하는 다른 오브젝트는 다음과 같이 DBA_SOURCE를 통해 파악이 가능하다

 --관계된 오브젝트 찾기
SELECT DISTINCT NAME, OWNER 
  FROM DBA_SOURCE 
 WHERE UPPER(TEXT) LIKE ‘%OBJECT명%’;

  • - 해당 강좌는 도서 " [우리 회사 데이터베이스를 티베로로 변경하기]"의 내용을 옮겼습니다.
  • - 해당 도서는 기간계 DBMS(DATABASE MANAGEMENT SYSTEM)를 티베로로 전환하는 실제 프로젝트를 수행한 실무자가 DBMS 전환 과정과 실제 적용 사례, 문제 해결 과정 등을 자세하게 설명하고 있습니다.

- 강좌 URL : http://www.gurubee.net/lecture/4167

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입