본문 바로가기

DB/Tibero

[Tibero] tbexport & tbimport

(우리 회사 데이터베이스를 티베로로 변경하기) 발췌본

가. 개요

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 확인
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    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 수행

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

1. TEST 오브젝트 생성
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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 계정의 모든 오브젝트 추출)
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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) 추출)
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 유저 모드 - 특정 테이블을 제외하고 추출하기
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 유저 모드 - 인덱스 제외하고 추출하기
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 추출하기
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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)
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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%'"\"]와 같이 입력해야 한다).

 
1
2
3
4
5
6
7
8
9
10
11
12
13
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별 개수 정보는 확인하는 것이 바람직하다.

 
1
2
3
4
5
6
7
8
9
10
11
12
-- 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 현황이 변경될 것이므로 반드시 별도의 오브젝트에 백업해야 한다.

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

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

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

출처

http://www.gurubee.net/lecture/4167

 

tbExport

가. 개요 tbExport 유틸리티는 특정 오브젝트들을 추출(export)하여 운영체제의 파일 형식으로 저장하는 기능을 제공하며, 저장된 파일은 다른(혹..

www.gurubee.net

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

가. 개요

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 쿼리 & 통계 수집 생성 쿼리
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    -- 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 확인
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    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하기

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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하기

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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

출처

http://www.gurubee.net/lecture/4168

 

tbImport

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

www.gurubee.net