Tibero/이관

티베로 업그레이드, 윈백 (실습)

havy 2023. 2. 9. 14:57
본 게시글에서는 실제 시나리오를 통해서 이관을 해보는 실습을 해보도록 하겠다.

 
 
tbexport/tbimport와 DB_LINK
 
1. Tibero5 Dummy Data 생성

Tibero5에서 수행
tbsql sys/tibero
 
create tablespace TBS1 datafile 'tbs1.dtf' size 3g autoextend off;
create tablespace TBS2 datafile 'tbs2.dtf' size 3g autoextend off;
 
create user USER1 identified by "1234" default tablespace TBS1;
grant connect, resource to USER1;
grant create database link to USER1;
 
create user USER2 identified by "1234" default tablespace TBS2;
grant connect, resource to USER2;
 
 
-- table 생성
create table USER1.TBL1(
c1 number,
c2 date,
c3 varchar2(20)
);
 
create table USER1.TBL2(
c1 number,
c2 date,
c3 varchar2(20)
);
 
create table USER1.TBL3(
c1 number,
c2 number,
c3 varchar2(20),
c4 varchar2(20)
);
 
 
-- data insert
insert into USER1.TBL1
select level, sysdate+level, dbms_random.string('x',20) from dual
connect by level <= 100000;
 
insert into USER1.TBL2
select level, sysdate+level, dbms_random.string('x',20) from dual
connect by level <= 100000;
 
insert into USER1.TBL3
select level, dbms_random.value(0, 10000),
dbms_random.string('x',20), dbms_random.string('x',20) from dual
connect by level <= 10000000;
 
 
-- index 생성
create unique index USER1.TBL2_PK on USER1.TBL2 (c1);
alter table USER1.TBL2 add constraint TBL2_PK primary key (c1);
 
create unique index USER1.TBL3_PK on USER1.TBL3 (c1);
alter table USER1.TBL3 add constraint TBL3_PK primary key (c1);
create index USER1.TBL3_IX1 on USER1.TBL3 (c1, c2);
create index USER1.TBL3_IX2 on USER1.TBL3 (c1, c2, c3);
 
-- dblink 생성
CREATE DATABASE LINK DB_LINK1 CONNECT TO SYS IDENTIFIED BY 'tibero' USING 'link';
 
-- tbdsn.tbrlink 접속 정보 기입 필요
link=(
    (INSTANCE=(HOST=192.168.179.76)
              (PORT=7629)
              (DB_NAME=tibero5)
    )
)
 

 
As-Is Count, export (Tib5)

Tibero5 접속 정보
ssh tibero5@192.168.179.76
password : tibero5
 
tbsql sys/tibero
 
select username from dba_users;
 
USERNAME
--------------------------------------------------------------------------------
SYS
SYSCAT
SYSGIS
OUTLN
WMSYS
TIBERO
TIBERO1
USER1
USER2
 
9 rows selected.
 
-- 이관 사이즈 확인
select owner, sum(bytes/1024/1024) as size_mb from dba_segments where owner not in ('SYS', 'SYSCAT', 'SYSGIS', 'OUTLN') group by owner;
 
OWNER                                                                                                                               SIZE_MB
-------------------------------------------------------------------------------------------------------------------------------- ----------
USER1                                                                                                                                  1724
USER2                                                                                                                                  1724
 
2 rows selected.
 
 
 
-- 이관할 테이블 count
col owner for a10
col objec_type for a15
col status for a8
SELECT OWNER, OBJECT_TYPE,STATUS, COUNT(*) FROM DBA_OBJECTS WHERE STATUS='VALID' and OBJECT_TYPE LIKE 'TABLE%' and OWNER not in ('SYS','PUBLIC','XSERVER','SYSGIS','OUTLN','SYSCAT') GROUP BY OWNER, OBJECT_TYPE,STATUS order by owner, object_type desc;
 
OWNER      OBJECT_TYPE          STATUS     COUNT(*)
---------- -------------------- -------- ----------
USER1      TABLE                VALID             3
USER2      TABLE                VALID             3
 
 
 
 
-- 이관할 인덱스 count
col owner for a10
col objec_type for a15
col status for a8
SELECT OWNER, OBJECT_TYPE,STATUS, COUNT(*) FROM DBA_OBJECTS WHERE STATUS='VALID' and OBJECT_TYPE LIKE 'INDEX%' and OWNER not in ('SYS','PUBLIC','XSERVER','SYSGIS','OUTLN','SYSCAT') GROUP BY OWNER, OBJECT_TYPE,STATUS order by owner;
 
OWNER      OBJECT_TYPE          STATUS     COUNT(*)
---------- -------------------- -------- ----------
USER1      INDEX                VALID             4
USER2      INDEX                VALID             4
 
 
-- 이관할 기타 Object
col owner for a10
col objec_type for a15
SELECT OWNER, OBJECT_TYPE, COUNT(*) FROM DBA_OBJECTS WHERE OBJECT_TYPE not in ('INDEX','TABLE') and OWNER not in ('SYS','PUBLIC','XSERVER','SYSGIS','OUTLN','SYSCAT') GROUP BY OWNER, OBJECT_TYPE order by owner, object_type desc;
 
OWNER      OBJECT_TYPE            COUNT(*)
---------- -------------------- ----------
USER1      DATABASE LINK                 1
WMSYS      TYPE BODY                     1
WMSYS      TYPE                          1
WMSYS      FUNCTION                      1
 
 
-- 데이터 count
select 'select count(*) from ' || OWNER || '.' || TABLE_NAME || ' union all' from dba_tables where owner='USER1'
order by TABLE_NAME;
 
'SELECTCOUNT(*)FROM'||OWNER||'.'||TABLE_NAME||'UNIONALL'
------------------------------------------------------------------------------------------------------------------------------------------------------
select count(*) from USER1.TBL1 union all
select count(*) from USER1.TBL2 union all
select count(*) from USER1.TBL3 union all
   >> 복사 후 붙여넣기
 
 
select count(*) from USER1.TBL1 union all
select count(*) from USER1.TBL2 union all
select count(*) from USER1.TBL3;
 
  COUNT(*)
----------
    100000
    100000
  10000000
 
 
-- db link 조회
select * from dba_db_links;
 
OWNER
--------------------------------------------------------------------------------
DB_LINK
--------------------------------------------------------------------------------
USERNAME
--------------------------------------------------------------------------------
HOST
--------------------------------------------------------------------------------
CREATED
--------------------------------
USER1
DB_LINK1
SYS
link
2023/02/02 22:44:10
 
1 row selected.
 
 
alter session set current_schema=user1;
select * from v$instance@db_link1;
 
INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------------------------------
DB_NAME
----------------------------------------
HOST_NAME                                                       PARALLEL
--------------------------------------------------------------- --------
   THREAD# VERSION  STARTUP_TIME                     STATUS
---------- -------- -------------------------------- ----------------
SHUTDOWN_PENDING
----------------
              0 tibero5
tibero5
finlin                                                          NO
         0 5SP1     2023/02/02 22:11:34              NORMAL
NO
 
 
1 row selected.
 
 
이관할 데이터 사이즈와 카운트가 끝났다면 exit 후 tbexport 수행

 
tbexport username=sys password=tibero sid=tibero5 port=7629 file=/home/tibero5/work/exp_full.dmp log=/home/tibero5/work/exp_full.log full=y script=y
 
수행 후 생성되는 exp_full.log 파일에서 DDL 스크립트 확인 가능

 템프는 이관이 안되므로 따로 추가
Target import, count (Tib6)

su - tibero6
 
vi exp_full.log
 
테이블스페이스 생성 구문 확인
 
CREATE TABLESPACE "TBS1" DATAFILE
        '/home/tibero5/tibero5/database/tibero5/tbs1.dtf' SIZE 3221225472
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
/
CREATE TABLESPACE "TBS2" DATAFILE
        '/home/tibero5/tibero5/database/tibero5/tbs2.dtf' SIZE 3221225472
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
/
 
   >> Target 환경에 맞게 수정 후 sys계정에서 수행
 
CREATE TABLESPACE "TBS1" DATAFILE
        '/tibero/tibero6/database/tibero6/tbs1.dtf' SIZE 3221225472
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
/
CREATE TABLESPACE "TBS2" DATAFILE
        '/tibero/tibero6/database/tibero6/tbs2.dtf' SIZE 3221225472
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
/
 
-- datafile 경로 확인
select FILE_NAME from dba_data_files where TABLESPACE_NAME in ('TBS1', 'TBS2');
 
FILE_NAME
--------------------------------------------------------------------------------
/tibero/tibero6/database/tibero6/tbs1.dtf
/tibero/tibero6/database/tibero6/tbs2.dtf
 
2 rows selected.
 
 
--tbimport 수행
tbimport username=sys password=tibero sid=tibero6 port=8629 file=/tibero/work/export/exp_full.dmp log=/tibero/work/export/imp_full.log dpl=y full=y script=y
 
import 결과는 imp_full.log 파일을 통해 확인 가능
 
 
tbsql sys/tibero
 
select username from dba_users;
 
USERNAME
--------------------------------------------------------------------------------
SYSCAT
SYSGIS
OUTLN
TIBERO
TIBERO1
WMSYS
USER1
USER2
SYS
 
9 rows selected.
 
--data count
select count(*) from USER1.TBL1 union all
select count(*) from USER1.TBL2 union all
select count(*) from USER1.TBL3;
 
  COUNT(*)
----------
    100000
    100000
  10000000
 
 
 
-- 이관된 object 확인
select object_name, object_type from dba_objects where owner='USER1';
OBJECT_NAME
--------------------------------------------------------------------------------------------------------------------------------
OBJECT_TYPE
-----------------------
TBL1
TABLE
 
TBL2
TABLE
 
TBL3
TABLE
 
TBL3_IX2
INDEX
 
TBL3_PK
INDEX
 
TBL2_PK
INDEX
 
TBL3_IX1
INDEX
 
DB_LINK1
DATABASE LINK
 
8 rows selected.
 
 
-- dblink 조회
tbdsn.tbr에 접속정보 추가
link=(
    (INSTANCE=(HOST=192.168.179.76)
              (PORT=7629)
              (DB_NAME=tibero5)
    )
)
 
tbsql user1/1234
select * from v$instance@DB_LINK1;
 
INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------------------------------
DB_NAME
----------------------------------------
HOST_NAME                                                       PARALLEL
--------------------------------------------------------------- --------
   THREAD# VERSION
---------- --------
STARTUP_TIME
----------------------------------------------------------------
STATUS           SHUTDOWN_PENDING
---------------- ----------------
              0 tibero5
tibero5
finlin                                                          NO
         0 5SP1
2023/02/02
NORMAL           NO
 
 
 

 
dblink 이관

-- 이관을 위해 기존 user drop 후 재생성
tbsql sys/tibero
drop user user2 cascade;
 
create user USER2 identified by "1234" default tablespace TBS2;
grant connect, resource to USER2;
grant create database link to USER2;
 
 
-- 데이터 없이 테이블만 import
tbimport username=sys password=tibero sid=tibero6 port=8629 file=/tibero/work/export/exp_full.dmp log=/tibero/work/export/imp_user2.log user=user2 script=y index=n constraint=n rows=n
 
-- dblink 생성 후 이관
tbsql user2/1234
CREATE DATABASE LINK DB_LINK2 CONNECT TO SYS IDENTIFIED BY 'tibero' USING 'link';
 
insert into USER2.TBL1 select * from USER2.TBL1@DB_LINK2;
insert into USER2.TBL2 select * from USER2.TBL2@DB_LINK2;
insert into USER2.TBL3 select * from USER2.TBL3@DB_LINK2;
commit;
 
-- 데이터 외 나머지 object(index, PK) import
tbimport username=sys password=tibero sid=tibero6 port=8629 file=/tibero/work/export/exp_full.dmp log=/tibero/work/export/imp_user2_idx.log user=user2 script=y rows=n
 
 
 
tbsql sys/tibero
--data count
select count(*) from USER2.TBL1 union all
select count(*) from USER2.TBL2 union all
select count(*) from USER2.TBL3;
 
  COUNT(*)
----------
    100000
    100000
  10000000
 
 
-- 이관된 object 확인
select object_name, object_type from dba_objects where owner='USER2';
OBJECT_NAME
 
OBJECT_NAME
--------------------------------------------------------------------------------
OBJECT_TYPE
-----------------------
TBL3
TABLE
 
TBL1
TABLE
 
TBL2
TABLE
 
TBL3_IX2
INDEX
 
TBL3_PK
INDEX
 
TBL2_PK
INDEX
 
TBL3_IX1
INDEX
 
DB_LINK2
DATABASE LINK
 
8 rows selected.
 

 
T-UP
T-UP Script 추출 방법

접속 정보 입력 후 Next
 
 
 
 
 
 

 
이관할 Object 선택 후 Refresh
Next
 
 
 

DDL Script 경로를 지정하지 않으면 실행 파일이 있는 위치에 생성
Next
 
 
 
 
Target DB 접속 정보 입력하고 아래 화면이 나올 때 까지 Next

 
 
DDL Execution, Data Transfer 옵션을 체크하지 않았기 때문에 스크립트만 생성하고 이관되지 않음
DDL_script.sql 파일 생성 확인
 

 
 
 
 
 
 
 
 
 
 
 
 
DDL_script.sql 에서 필요한 내용 Target 환경에 맞게 수정 후 sys 계정에서 수행
 
CREATE TABLESPACE "TBS4" DATAFILE
             '/tibero/tibero6/database/tibero6/TBS4.dtf' SIZE 1g
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
/
CREATE TABLESPACE "TBS3" DATAFILE
             '/tibero/tibero6/database/tibero6/TBS3.dtf' SIZE 1g
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
/
 
CREATE USER "USER3" IDENTIFIED BY tibero
DEFAULT TABLESPACE "TBS3"
/
CREATE USER "USER4" IDENTIFIED BY tibero
DEFAULT TABLESPACE "TBS4"
/
   >> password tibero로 추출
  
GRANT CONNECT TO "USER3"
/
GRANT RESOURCE TO "USER3"
/
GRANT CONNECT TO "USER4"
/
GRANT RESOURCE TO "USER4"
/
 
CREATE TABLE "USER3"."EXCEPT" (
             "C1" NUMBER,
             "C2" DATE,
             "C3" VARCHAR2(20 BYTE)
)
TABLESPACE "TBS3"
PCTFREE 10
PCTUSED 0
INITRANS 1
MAXTRANS 255
LOGGING
NOCOMPRESS
DISABLE ROW MOVEMENT
NOPARALLEL
/
CREATE TABLE "USER3"."TBL1" (
             "C1" NUMBER,
             "C2" DATE,
             "C3" VARCHAR2(20 BYTE)
)
TABLESPACE "TBS3"
PCTFREE 10
PCTUSED 0
INITRANS 1
MAXTRANS 255
LOGGING
NOCOMPRESS
DISABLE ROW MOVEMENT
NOPARALLEL
/
CREATE TABLE "USER3"."TBL2" (
             "C1" NUMBER NOT NULL,
             "C2" DATE,
             "C3" VARCHAR2(20 BYTE)
)
TABLESPACE "TBS3"
PCTFREE 10
PCTUSED 0
INITRANS 1
MAXTRANS 255
LOGGING
NOCOMPRESS
DISABLE ROW MOVEMENT
NOPARALLEL
/
 
 
CREATE TABLE "USER4"."TBL1" (
                 "C1" NUMBER,
                 "C2" DATE,
                 "C3" VARCHAR2(20 BYTE)
)
TABLESPACE "TBS4"
PCTFREE 10
PCTUSED 0
INITRANS 1
MAXTRANS 255
LOGGING
NOCOMPRESS
DISABLE ROW MOVEMENT
NOPARALLEL
/
CREATE TABLE "USER4"."TBL2" (
                 "C1" NUMBER,
                 "C2" DATE,
                 "C3" VARCHAR2(20 BYTE)
)
TABLESPACE "TBS4"
PCTFREE 10
PCTUSED 0
INITRANS 1
MAXTRANS 255
LOGGING
NOCOMPRESS
DISABLE ROW MOVEMENT
NOPARALLEL
/
 
 
테이블 생성 후 아래 단계까지 재수행
 
 
 

 
 
 
 
 

 
Data Transfer, DDL Execution 체크 후 이관 진행
 
 
SQL> select count(*) from USER3."EXCEPT";
 
  COUNT(*)
----------
    100000
 
1 row selected.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Table Migrator
 
 
 
 

cd work/migrator/
unzip final_tbmig.zip
cd migrator
 
-- Migrator 설정
   아래 설정들 수정
vi CPL.prop
 
SOURCE_TYPE=ORACLE
SOURCE_URL=jdbc:oracle:thin:@192.168.179.76:13232:XE
SOURCE_USER=SYSTEM
SOURCE_PASSWORD=oracle
SOURCE_SCHEMA=USER4
 
TARGET_URL=jdbc:internal:thin:@localhost:8629:tibero6
TARGET_SCHEMA=USER4
 
 
 
-- 설정 후 이관 대상 테이블에 대해 수행
sh migrator.sh PROPERTY_FILE=CPL.prop SOURCE_TABLE=TBL1
sh migrator.sh PROPERTY_FILE=CPL.prop SOURCE_TABLE=TBL2
 
 
인덱스가 있었다면 별도로 생성해야함
DPL 기능 + Shell Script 형태로 작성을 하여 수행하면 속도와 효율이 극적으로 향상
 
 

 
 
 



 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

'Tibero > 이관' 카테고리의 다른 글

이관 후 검증 쿼리  (0) 2023.11.30
이관 스크립트 (db link)  (0) 2023.08.21
이관 스크립트 (expimp)  (0) 2023.08.21
이관 전 확인할 사전정보  (0) 2023.08.21
티베로 업그레이드, 윈백 (이론)  (0) 2023.02.09