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

by 티베로 tbImport [2018.10.12]


가. 개요

tbImport 유틸리티는 tbExport로 추출한 파일을 다른(혹은 동일한) 티베로 데이터베이스에 저장하는 기능을 수행한다.

tbImport의 수행은 tbExport와 달리 데이터가 변경되거나 오브젝트가 신규 구성(혹은 재구성)되므로 다음을 고려하여 tbExport보다 신중하게 작업 시간대를 선택하여야 한다.

1. tbImport 대상 오브젝트 및 관련 오브젝트들과 연관된 업무(조회, 변경 등)가 없어야 한다.

2. tbImport 작업 이후 데이터 및 오브젝트들의 이상 여부 검증 및 조치 시간이 충분해야 한다

3. tbImport 작업 또한 자원을 많이 사용하는 무거운 업무이므로 데이터베이스 부하가 적은 시간대여야 한다.

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

1. tbExport 시에 추출 대상 테이블의 크기가 클 경우 인덱스, 제약 조건, 통계 정보는 제외하고 추출할 것을 권고하였다. tbImport 작업 역시 해당 조건들을 제외하고 저장할 수 있는 옵션을 제공하므로 해당 조건들은 제외하고 import 후에수동 생성하는 것이 성능 및 데이터 검증면에서 매우 유리하다(물론 크기가 작은 경우는 단계별로 나누지 말고 한 번에 작업하는 것이 편리하다).

2. 이관 대상 데이터베이스에 동일한 테이블이 이미 존재할 경우에는 해당 테이블의 제약 조건에 따라 데이터가 이관되며 이로 인해 tbImport 수행 속도가 지연되고 몇몇 데이터가 제약 조건에 해당되어 누락될 수 있다. tbExport 시에 추출한 오브젝트들은 모두 생성 script를 포함하므로 이관 대상 데이터베이스의 동일한 오브젝트들은 모두 DROP하고 이관하는 것이 성능/검증면에서 모두 유리하다

3. 이미 존재하는 동일 오브젝트들의 DROP이 불가능하다면 최소한 다음 사항들을 고려하여 작업하는 것을 권고한다.

3-1. 제약 조건, 인덱스는 이관 전 DROP(혹은 비활성화)하고 이관 이후 생성(혹은 활성화한다).

3-2. 리두로그 발생을 최소화하기 위해 이관 전 nologging 처리하고 이관 후 logging 처리한다.

4. tbImport 이후 기존에 백업해둔 object 정보와 이관 대상 데이터베이스의 dba_objects 정보를 비교하여 이관 정상 여부를 검증해야 한다(대부분의 invaild 오브젝트 문제는 연관된 object가 신규생성(혹은 재생성)되는 과정에서 invaild가 된 것이므로 단순히 compile해주는 것만으로 해결이 가능하다).

5. 통계 정보를 제외하고 tbImport했다면 수동 생성해야 한다.

  • [참고 6-11] invalid object compile 쿼리 & 통계 수집 생성 쿼리
  •  -- invaild object의 compile 쿼리 생성
     -- (package body는 나머지 type들과 compile 쿼리가 상이하여 구분하여 생성)
     
    SELECT 'ALTER ' ||'PACKAGE'||' '||OWNER||'.'||OBJECT_NAME||' COMPILE BODY;' AS COMPDDL
      FROM DBA_OBJECTS 
     WHERE OWNER = 'TESTOWNER' 
       AND STATUS = 'INVALID' 
       AND OBJECT_TYPE = 'PACKAGE BODY'
     ORDER BY OBJECT_TYPE, OBJECT_NAME;
    
    SELECT 'ALTER ' ||OBJECT_TYPE||' '||OWNER||'.'||OBJECT_NAME||' COMPILE;' AS COMPDDL
      FROM DBA_OBJECTS 
     WHERE OWNER = 'TESTOWNER' 
       AND STATUS = 'INVALID' 
       AND OBJECT_TYPE  'PACKAGE BODY'
     ORDER BY OBJECT_TYPE, OBJECT_NAME;
     
    -- tbImport 대상 테이블들의 통계 정보 수집 쿼리 생성
    SELECT 'EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>'''||OWNER||''',
            TABNAME=>'''||TABLE_NAME||''',ESTIMATE_PERCENT=>100, 
            METHOD_OPT=>''FOR ALL COLUMNS SIZE 200'');' 
      FROM DBA_TABLES 
     WHERE OWNER ='TESTOWNER' 
     ORDER BY OWNER,TABLE_NAME;
    

다. tbImport 모드 및 매개변수

tbImport 모드 또한 총 세 가지(전체 데이터베이스 모드, 사용자 모드, 테이블 모드)가 존재하며 tbExport 모드와 관계없이 동작된다.

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

  • [참고 6-12] tbImport option 확인
  • tibero:/tibero # tbimport
    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: tbimport [PARAMETER1=VALUE] [PARAMETER2=VALUE] ...
    Parameters:
     BIND_BUF_SIZE Specify the buffer size of DPL stream, default: 1M(1048576)
     CFGFILE Config file name
     COMMIT Commit after the insertion, default: N
     CONSTRAINT Import Constraint: Y/N, default: Y
     DBLINK Import DB Link: Y/N, default: Y
     --- (이하 생략)
    

  • [표 6-5] tbImport option(출처 : http://technet.tmaxsoft.com)
  • 매개변수 기본값 설명
    CFGFILE Import 환경 파일 이름
    USERNAME Import를 수행하는 사용자 계정
    PASSWORD Import를 수행하는 사용자 암호
    IP localhost Import 대상 티베로 서버 IP
    PORT 8629 Import 대상 티베로 서버 Port
    SID Import 대상 티베로 서버 SID
    FILE default.dat Import 수행 시 생성되는 파일 이름
    LOGDIR Import의 로그가 기록될 파일을 저장할 디렉터리 이름을 입력한다.
    LOG tbExpImp_[년]_[월]_[일]_[시분초].log Import 수행 시 생성되는 파일 이름
    FULL N Import 모드, 전체 데이터베이스 대상
    USER Import 모드, 특정 사용자에 대상 (복수지정 가능)
    TABLE Import 모드, 특정 테이블에 대상 (복수지정 가능)
    FROMUSER FROM TO USER 모드에서 tbImport를 통해 변경이 될 원래의 소유자를 지정
    TOUSER FROM TO USER 모드에서 tbImport를 통해 신규로 오브젝트들을 소유할 소유자를 지정
    COMMIT N insert작업 후에 commit을 수행(insert 작업의 단위는 다음과 같다.)
    -CPL로 import할 때 기본적으로 bindinsertbuffersize인 1MB를 넘었을 때 commit을 수행한다.
    만약 LONG, LONG RAW 컬럼이 있다면 ROW 단위로 commit을 수행한다.
    -DPL로 import할 때 BIND_BUF_SIZE로 지정된 크기를 넘었을때 commit을 수행한다
    INDEX Y 인덱스 Import 여부
    GRANT Y 권한 Import 여부
    CONSTRAINT Y 제약 조건 Import 여부
    ROLE Y 롤 Import 여부
    ROWS Y 통계 정보 Import 여부
    TEMP_DIR Import를 수행할 때 임시 덤프 파일들이 생성될 디렉터리 지정
    NATIONAL_CHARSET Export 문자 셋 Export한 언어 셋을 설정
    SAVE_CREDENTIAL 암호화한 USERNAME과 PASSWORD를 사용할 때 설정 사용 방법)
    -SAVE_CREDENTIAL 옵션을 사용하여 EXPIMP_WALLET 암호화 파일을 생성
    -SAVE_CREDENTIAL=[EXPIMP_WALLET_FILE_NAME]
    -인식 우선순위 : commandline>cfgfile>EXPIMP_WALLET 파일
    예시)
    SAVE_CREDENTIAL=/tmp/.expimp
    USERNAME=usernamePASSWORD=password
    exportSAVE_CREDENTIAL=/tmp/.expimp(환경변수 설정)

라. tbImport 수행

1. 유저 모드로 추출했던 파일(exptest02.dat) 인덱스 제외하고 1개 테이블(TABLE01)만 tbImport하기
SQL> drop table tiberotest.table01;
Table 'TIBEROTEST.TABLE01' dropped.

tibero:/tibero/exptest # tbimport USERNAME=sys
PASSWORD=xxxxx SID=xxxxx PORT=11111 FILE=/tibero/exptest/exptest02.dat
LOG=/tibero/exptest/imptest02.log TABLE=TIBEROTEST.TABLE01 INDEX=N

# tbImport 역시 CFG 파일 사용이 가능하다.

tbimport 6.0 (FS04) 120037 TmaxData Corporation Copyright (c) 2008-. All
rights reserved.
Unpacking the file...
Import character set: MSWIN949
the TABLE: TIBEROTEST.TABLE01: Thu Nov 17 15:17:36 KST 2016
Import national character set: UTF-16
 importing schema: "TIBEROTEST"
   importing table "TABLE01"
     [3]TIBEROTEST.TABLE01 4/4 rows imported.
Import completed successfully: Thu Nov 17 15:17:36 KST 2016

tibero:/tibero/exptest # tbsql tiberotest/xxxxx

SQL> select index_name from user_indexes;
INDEX_NAME
-------------------------------
TABLE02IX
TABLE03IX <--TABLE01IX는 제외되었음이 확인된다.

2. REMAP_TABLESPACE로 추출했던 파일(exptest07)의 유저를 변경(TIBEROTEST >TIBERO)하여 tbImport하기
tibero:/tibero/exptest # tbimport USERNAME=sys
PASSWORD=xxxxx SID=xxxxx PORT=11111 FILE=/tibero/exptest/exptest07.dat
LOG=/tibero/exptest/imptest07.log
FROMUSER=tiberotest TOUSER=tibero

(import 후 확인)

tibero:/tibero/exptest # tbsql sys/password

SQL> select owner, table_name, tablespace_name 
     from dba_tables 
     where table_name in('TABLE01', 'TABLE02') order by 2;

OWNER       TABLE_NAME  TABLESPACE_NAME
----------- ----------- --------------
TIBERO       TABLE01    USERS
TIBEROTEST   TABLE01    COMDATA 
--user와 tablespace가 변경되었음이 확인된다.
TIBERO       TABLE02    USERS
TIBEROTEST   TABLE02    COMDATA

tbimport 6.0 (FS04) 120037 TmaxData Corporation Copyright (c) 2008-. All
rights reserved.
Unpacking the file...
Import character set: MSWIN949
FROM_USER TIBEROTEST TO_USER TIBERO: Thu Nov 17 15:23:49 KST 2016
Import national character set: UTF-16
 importing from schema: "TIBEROTEST" to schema "TIBERO"
  importing table "TABLE01"
  [3] TIBERO.TABLE01 4/4 rows imported.
  importing index "TABLE01IX"
  importing table "TABLE02"
  [0] TIBERO.TABLE02 4/4 rows imported.
  importing index "TABLE02IX"
Import completed successfully: Thu Nov 17 15:23:51 KST 2016

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

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

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

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

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