Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

DBDBDEEP

Tibero tbExport 본문

Tibero

Tibero tbExport

Kihwane 2022. 10. 25. 14:50

티베로 설치시, TB_HOME/clinet/bin 경로에 기본적으로 포함되는 유틸리티이다.

 

tbExport : Tibero 데이터베이스 객체의 전체나 일부를 파일로 추출한다. 

                   데이터베이스의 백업과 다른 머신간의 데이터베이스를 전송할 때 유용

 

 

tbExport 유틸리티의 특징은 다음과 같다.

  • 논리적인 백업
  • Tibero의 내부 스키마 및 데이터를 SQL 문장으로 추출한다.
  • 서로 다른 시점의 데이터
  • 여러 개의 테이블을 Export할 때 추출한 각 테이블의 데이터는 동일 시점의 데이터가 아니라 Export 작업이 실행되는 시점의 순차적인 데이터이다.
  • 테이블 정의를 저장
  • 데이터의 존재 여부에 상관 없이 테이블 정의(테이블의 DDL 스크립트)를 저장한다.

 

  • 테이블의 재구성
  • 테이블 생성 후 수많은 DML 작업으로 인해 발생한 마이그레이션이 된 로우(migrated row)나 단편화(fragmentation)를 제거한다.

 

 

 

tbExort 특징 및 사용시 고려사항

 

1. tbExport를 통해 추출한 데이터는 동일 시점이 아닌 순차적인 Export 작업 시점의 데이터임. 

    tbExport 를 통해 추출된 모든 데이터의 시점이 같지 않음. DML이 없는 시간대에 수행하도록 함.

 

2. 추출 대상 크기가 클 경우 (10G) 

   2.1 ) 예기치않은 사고에 대해 장시간 노출되므로 10G 단위로 나누어서 수행함. 

   2.2.) 작업 최소화를 위해 index, 통계정보 등 무거운 부가정보는 제외하고 데이터 이동후 별도의 SCRIPT               를  이용해서 생성한다.

   2.3 ) import시 리두로그 발생을 최소화 하기위해 추출 오브젝트 모두 nologging 처리

 

3.  추출한 운영체제 파일을 FTP 이용해서 대상 서버로 이동하는 시간 줄이기 위해

     스토리지를 통해 서버간 공유할 수 있는 공간을 설정, 해당 경로에 추출하는 것이 좋음.

 

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


 

 

tbExport 

1. 모드

 

- 전체 데이터베이스 모드 : Tibero 데이터베이스 전체를 덤프하는 모드.

                                           FULL=Y 

- 사용자 모드 : 지정된 사용자의 모든 객체를 덤프하는 모드. userlist를 지정해서 설정할 수 있음.

                         USER = TIBERO, TIBERO1, SCOTT, ..

- 테이블 모드 : tablelist로 지정된 테이블과 연관된 인덱스 등의 객체를 덤프하는 모드이다.

                        TABLE=TEST.T1,TEST.T2,TEST.T3 


2. 실행방법

 

tbexport username=test password=test sid=tibero file=tb.Exp.dat log=tbExp.log full=y

   ㄴ-> full y 이므로 전체를 덤프하는 모드이다.

 

별도로 파라미터를 설정해둔 .cfg 파일 이용가능하다!

tbexport cfgfile=tb.Exp.cfg


3. 파라미터

  ㄴ-> 파라미터 값 지정하지 않고 tbExport 실행하면 명령프롬프트에서 지정할 수 있는 파라미터의 목록과               사용법나온다.

 

필자는 tbexport 하니까 

에러가 나서 JDK를 설치해줬다. 

  • CFGFILE
    • CFG 파일 경로 (tbExp.cfg)
    • command-line 으로 파라미터를 설정하는 것이 아니라 별도로 파라미터를 기록해둔 파일을 이용해서 사용하는 경우 해당 파일의 파일명을 기입
  • COMPRESS
    • Y | N
    • 추출하는 동시에 압축을 수행하고자하는 경우 Y로 선언하며, 이 때에는 단일 스레드로만 동작
  • CONSTRAINT    Export Constraint: Y/N, default: Y
    • Y | N
    • CONSTRAINT 추출 여부 (CONSTRAINT는 제약조건임)
  • CONSISTENT
    • Y | N
    • tbExport 수행 시점 기준 consistency 보장 여부
  • ENCRYPTION
    • ALL | DATA_ONLY | ENCRYPTED_COLUMNS_ONLY | METADATA_ONLY | NONE
    • AES-128 알고리즘으로 암호화 할 대상 지정
  • ENCRYPTION_PASSWORD
    • password
    • 암호화를 진행하는 경우 덤프 파일에 적용할 암호 설정
  • EXCLUDE
    • 스키마 및 schema.table 제외
    • EXCLUDE=schema:\"=\'TIBERO\'/table:LIKE \'T%\'\"
    • EXCLUDE=schema:\"IN\'USER1\'\"
    • 여러개 스키마 제외
    • EXCLUDE=schema:\"=\'TIBERO\'\"
    • EXCLUDE=schema:\"=\'USER1\'\"
    • 여러개 테이블 제외
    • EXCLUDE=table:\"LIKE\'E%\'\"
    • EXCLUDE=table:\"LIKE\'E%\'\"
    • 특정 사용자나 테이블을 제외하고 추출
  • FULL
    • Y | N
    • 전체 데이터베이스 모드로 추출할지 여부
  • USER
    • 데이터베이스 사용자 리스트
    • 사용자 모드로 추출하고자하는 경우, 사용자 리스트
  • TABLE
    • 테이블 리스트
    • 테이블 모드로 추출하고자하는 경우, 테이블 리스트
  • GEOM_ASBYTES Export the geometry columns as bytes, default: N

 

  • GRANT
    • Y | N
    • 추출 대상 데이터베이스의 권한을 그대로 추출할지 여부
  • INDEX
    • Y | N
    • INDEX 추출 여부
  • INLINE_CONSTRAINT
    • Y | N
    • INDEX 추출은 INDEX 생성 구문으로 추출하는데, CONSTRAINT를 추출할 때 INDEX 생성 구문에 INLINE으로 할 지 여부
  • FILE
    • 파일명
    • 덤프 파일명 지정
  • LOG
    • 파일명
    • 작업로그 파일명 지정
  • LOGDIR
    • 파일경로
    • 작업로그 경로 지정
  • NO_PACK_DIR
    • 파일경로
    • 데이터베이스를 추출한 뒤 단일 파일로 packing하지 않고자 하는 경우, 덤프 파일이 쌓일 경로를 지정. tbexport는 데이터베이스를 추출할 때, 객체 단위로 추출하여 단일 파일로 패킹하기 때문에 덤프파일의 두 배 가량의 여유 공간이 필요. 추출하는 서버에 여유 공간이 없는 경우 사용.
  • OVERWRITE
    • Y | N
    • 동일한 이름의 파일이 존재하는 경우 overwrite 여부
  • IP
    • IP=192.168.29.137
    • Tibero 서버 IP 주소
  • PORT
    • PORT=8629
    • Tibero 서버 Listener Port
  • SID
    • SID=TIBERO
    • Tibero 서버의 Database Name
  • USERNAME
    • USERNAME=TEST
    • tbexport 프로그램이 데이터베이스를 추출하기 위해 데이터베이스 서버에 접근할 사용자. 추출하고자 하는 객체들에 대한 충분한 권한이 필요.
  • PASSWORD
    • PASSWORD=TEST
    • USERNAME 사용자의 DB 접근 암호
  • SAVE_CREDENTIAL
    • 아래 활용 예에서 사용 방법 별도 설명
    • 추출을 위해 DB 서버 접근시, EXPIMP_WALLET 시스템 환경변수로 지정된 Credential 파일에 암호화하여 저장된 Username과 password 사용
  • QUERY
    • QUERY='\where rownum>10\'
    • Export될 데이터에 where 필터를 지정
  • REMAP_TABLESPACE
    • REMAP_TABLESPACE=USR1:USR3,USR2:USR4
    • 추출시 테이블스페이스 명을 변경.
  • REMAP_TABLE
    • REMAP_TABLE=T1:T3,T2:T4
    • 추출시 테이블 명을 변경
  • ROWS
    • Y | N
    • 데이터를 추출할 지 여부. N 으로 설정하는 경우 테이블 구조만 추출
  • SCRIPT
    • Y | N
    • 추출된 DDL Script를 로그에 포함시킬지 여부
  • TEMP_DIR
    • 파일경로
    • raw 덤프 파일들이 임시로 사용될 경로 지정
  • THREAD_CNT
    • Number (default: 4)
    • 테이블을 추출할 때 사용되는 Thread 개수 지정

자세한건 온라인 메뉴얼에도 나와있다.

 


4. 테스트 실시

SQL> select table_name from user_tables;

TABLE_NAME
--------------------------------------------------------------------------------
T1
T2
T3

3 rows selected.


tbExport 유저 모드 - 특정 유저 추출하기      (TEST 계정으로 TEST 계정의 모든 오브젝트 추출한다)

 

[tibero@tibero ~]$ tbexport USERNAME=sys PASSWORD=tibero SID=tibero PORT=8629 FILE=/home/tibero/tbexport/exptest.dat LOG=/home/tibero/tbexport/exptest.log USER=test

 

tbexport 6.0

Copyright 2015 TmaxData Co., Ltd. All Rights Reserved.

 

the USER: test: Tue Oct 25 13:48:22 KST 2022
Export national character set: UTF-16
  exporting schema:"TEST"
    exporting tables
      [2] TEST.T3                                              no rows exported.
      [1] TEST.T2                                              no rows exported.
      [0] TEST.T1                                               1 rows exported.
    exporting indexes
    exporting constraints
Packing the file...
Export completed successfully : Tue Oct 25 13:48:33 KST 2022

 

 

 

tbExport 유저모드 - 특정 테이블을 제외하고 추출

 

[tibero@tibero ~]$ tbexport USERNAME=sys PASSWORD=tibero SID=tibero PORT=8629 FILE=/home/tibero/tbexport/exptest.dat LOG=/home/tibero/tbexport/exptest.log USER=test exclude=table:"\"=\'T2\'"\"exclude=table:"\"\'T3\'"\"

 

 


tbExport 테이블 모드 - 특정 테이블 추출하기 (SYS 계정으로 TEST 계정의 1개 테이블 추출한다)

 

[tibero@tibero ~]$ tbexport USERNAME=sys PASSWORD=tibero SID=tibero PORT=8629 FILE=/home/tibero/tbexport/exptest1.dat LOG=/home/tibero/tbexport/exptest1.log TABLE=TEST.T1

 

tbexport 6.0

Copyright 2015 TmaxData Co., Ltd. All Rights Reserved.

the TABLE: TEST.T1: Tue Oct 25 13:53:24 KST 2022
Export national character set: UTF-16
    exporting table: "TEST"."T1"
      [0] TEST.T1                                               1 rows exported.
    exporting indexes
    exporting constraints 
Packing the file...
Export completed successfully : Tue Oct 25 13:53:28 KST 2022

 


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

 

CFG 파일을 활용하면 일반 에디터에 작성하는 것처럼 매개변수 파일들을 설정할수 있으므로 실수할 확률이 적고 편리하다.

다만, 매개변수 종류에 따라 cfgfile을 사용하지 않았을 때의 입력값과 차이가 나는 것이 다수 존재하므로 주의해야 한다

 

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

 

 

[tibero@tibero tbexport]$ vi tbExportCfg.cfg

 

USERNAME=sys
PASSWORD=tibero
SID=tibero
PORT=8629
FILE=/home/tibero/tbexport/exptestcfg.dat
LOG=/home/tibero/tbexport/exptestcfg.log
USER=test

 

[tibero@tibero tbexport]$ tbexport cfgfile=tbExportCfg.cfg 

 

tbexport 6.0

Copyright 2015 TmaxData Co., Ltd. All Rights Reserved.

the USER: test: Tue Oct 25 14:28:06 KST 2022
Export national character set: UTF-16
  exporting schema:"TEST"
    exporting tables
      [0] TEST.T1                                               1 rows exported.
      [2] TEST.T3                                              no rows exported.
      [1] TEST.T2                                              no rows exported.
    exporting indexes
    exporting constraints
Packing the file...
Export completed successfully : Tue Oct 25 14:28:07 KST 2022

 

 


tbExport 파일을 차후에 tbImport 했을 때 원하는 오브젝트들이 모두 정확히 이관되었는지 확인하기 위해 모든 테이블의 ROW 데이터를 하나하나 비교해 볼 수는 없다.

하지만 최소한 오브젝트 타입, STATUS별 개수 정보는 확인하는 것이 바람직 하다.

 

-- object type, status별 개수 확인

 

SELECT OBJECT_TYPE, STATUS, SUM(1) AS NUM_OBJ
FROM DBA_OBJECTS WHERE OWNER = 'TEST'
GROUP BY OBJECT_TYPE, STATUS ORDER BY OBJECT_TYPE, STATUS;

 

만약 STAUTS 개수 차이가 존재하게 되면 어떤 오브젝트가 invalid 되었는지를 확인하기 위해서 dba_object 자체를 백업해 두는 것이 좋다.  '단편화' 제거 목적으로 동일 데이터베이스에 Import 할 경우 반드시 별도의 오브젝트에 백업한다.

 

 

 

확인을 했으면 백업을 시켜놓을 수 있다.

CREATE TABLE BACKUP_OBJECTS

    AS

SELECT * FROM DBA_OBJECTS WHERE OWNER = 'TEST'

 

 

또한 추출 대상 오브젝트들과 관계된 오브젝트들이 많다면 (다른계정에도 다수 존재한다면) 해당 계정의 정보도 함께 추출한다.

특정 오브젝트를 포함하는 다른 오브젝트는 다음과 같이 DBA_RESOURCE를 통해 파악할 수 있다.

 

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

 

 

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