티스토리 뷰

카테고리 없음

Oracle to Tibero Migration

미니대왕님 2019. 9. 12. 17:03

1. 전환 방법 적용

 전환 방법 적용시 고려사항

    1) 전환을 수행할 때 한가지 방법으로 수행하는 것이 아니라 여러 가지 방법을 혼합하여 사용할 수 있다.


    2) 고객사에서 실제 운영을 전환할 때 최소한의 Down Time이 필요하다. (해당 고객사에서 각 전환 방법의

        테스트 및 시간측정을 통해 최소한의 전환 시간을 확보해야 한다.)



전환방법 적용시기 비고
tbMigrator GUI 기반으로 간편하게 전환을 할 경우(전체, 사용자 모드)와 수동 이관할 때 데이 터 이관 용도로 사용한다  
Table Migrator DB Link 구성이 어렵고 대용량 테이블 데이터를 이관할 때 사용한다  
DB Link Table Migrator 사용이 어렵고 대용량 테이블 데이터를 이관할 때 사용한다.  
tbLoader Source DB에서 SAM 파일 생성이 가능할 경우 사용한다.  
수동이관 전환 난이도가 어려워 다른 전환 방법을 적용하기가 힘든 경우와 동일한 전환을 특정 기간에 걸쳐 반복적으로 수행해야 할 경우 사용한다. (자동화 스크립트를 이 용하면 2차 이상의 반복적인 수행일 경우에 간편하다.)  



2. Oracle전환

본 장에서는 Oracle에서 Tibero DB로 전환하는 절차 및 방법을 설명한다.

 

2.1. 사전 점검

본 절에서는 Oracle에서 Tibero DB로 전환하기 전 점검사항에 대해서 설명한다. 사전 점점은 전환하기 전 Oracle의 특성을 파악하고 Tibero에 적용해야 하는 값들을 확인하는 중요한 절차이다.

 

2.1.1. 기본 항목

 

Oracle의 sys 또는 system 등의 DBA 권한을 가진 사용자로 접속하여 아래 정보를 확인한다.

 

항목  설명
버전 정보 Oracle 9i, 10g, 11g는 전환 사례가 많으므로 그 이외 버전에서 전환할 경우에 대 해서는 검토가 필요하다.
전환 사용자 선택 Oracle을 설치할 때 자동 생성되는 기본 사용자의 경우는 제외한다. 전환 사용자 에 대해서 고객사 담당자 확인이 필요하다.
전환 크기 전환 시간에 가장 큰 영향을 미치는 요소이다. 그 외 DISK I/O, NETWORK I/O 등 에 따라서 고객사의 전환 시간이 많이 달라질 수 있다.
전환 검증항목  전환이 완료된 후에 비교해 보는 정보이다.

버전 정보

select * from v$version;

 

사용자 조회

select username, account_status, default_tablespace, temporary_tablespace from dba_users order by 1;

 

Open된 사용자 조회

set linesize 120 set pagesize 100 select username, default_tablespace, temporary_tablespace from dba_users where account_status='OPEN' order by 1;

 

Oracle 기본 사용자

아래와 같은 사용자 이름의 경우 Oracle을 설치할 때 자동으로 생성되는 사용자로 전환할 때 제외한다. (Oracle 버전에 따라 사용자명이 일부 다를 수 있다.)

 

ANONYMOUS , BI, CTXSYS, DBSNMP, DIP, DMSYS, EXFSYS, HR, IX, SCOTT,OE, PM, SH , MDDATA, MDSYS, 
MGMT_VIEW, OLAPSYS, ORDPLUGINS, ORDSYS, SI_INFORMATN_SCHEMA, SYS, SYMAN, SYSTEM, TSMSYS,WMSYS,XDB

전환 크기

전환 대상 사용자에 속하는 Table, Index가 저장된 Tablespace만 확인한다.

 

전체 Tablespace 크기와 사용량 확인

set linesize 150 set pagesize 100 col tablespace_name format a40 select x.a tablespace_name , sum(x.b)/1024 "tot_size(mb)" , sum(x.c)/1024 "used_size(mb)" , sum(x.c)/sum(x.b)*100 rate from ( select b.tablespace_name a ,sum(bytes)/1024 b ,0 c from dba_data_files b group by b.tablespace_name union select d.tablespace_name, 0, sum(bytes)/1024 from dba_segments d group by d.tablespace_name ) x group by x.a;

전체 합계

select sum(x.b)/1024 "tot(mb)", sum(x.c)/1024 "used(mb)" from ( select sum(bytes)/1024 b, 0 c from dba_data_files b union select 0, sum(bytes)/1024 from dba_segments d ) x;

전환 검증항목

Object 상태별 개수 확인

col owner format a20
set pages 500


select owner, object_type, status, count(*) from dba_objects where owner in (select username from dba_users where account_status='OPEN' ) group by owner, object_Type, status order by owner, object_type, status;

참고 1.

실제 dba_object에는 삭제된 Object까지 포함($BIN~ 형식)되어 있어 정확한 Count를 위해서는 dba_tables, dba_index 같은 정보를 보는 것이 좋다. 2. INVALID한 Object에 대해서 고객사 DB 담당자에게 정리요청을 하는것이 전환시간을 단축할 수 있다.

 

Object 개수 확인

 

WITH mig_user AS
( SELECT username FROM dba_users WHERE account_status='OPEN' AND username NOT IN('SYS', 'SYSTEM', 'WMSYS','EXFSYS', 'XDB', 'ORDSYS' ,'MDSYS','SYSMAN') ) SELECT O.OWNER ,NVL(TBL.TABLE_CNT, 0) AS "TABLE_CNT" ,O.VIEW_CNT ,O.DBLINK_CNT ,O.SEQ_CNT ,O.PKG_CNT ,O.PKGBODY_CNT ,O.PROC_CNT ,O.FUNC_CNT ,O.TYPE_CNT ,O.TYPEBODY_CNT ,O.LIB_CNT ,TRI.TRIGGER_CNT ,NVL(SYN.SYN_CNT,0) AS "SYN_CNT" ,NVL(PUB_SYN.PUB_SYN_CNT,0) AS "PUB_SYN_CNT" ,NVL(IDX.IDX_CNT, 0) AS "IDX_CNT" ,NVL(G.GRANT_CNT, 0) AS "GRANT_CNT" ,NVL(LOB.LOB_CNT, 0) AS "LOB_CNT" ,NVL(JOB.JOB_CNT, 0) AS "JOB_CNT" FROM ( SELECT T.OWNER ,SUM( DBLINK_CNT ) AS "DBLINK_CNT" ,SUM( VIEW_CNT ) AS "VIEW_CNT" ,SUM( SEQ_CNT ) AS "SEQ_CNT" ,SUM( PKG_CNT ) AS "PKG_CNT" ,SUM( PKGBODY_CNT ) AS "PKGBODY_CNT" ,SUM( PROC_CNT ) AS "PROC_CNT" ,SUM( FUNC_CNT ) AS "FUNC_CNT" ,SUM( TYPE_CNT ) AS "TYPE_CNT" ,SUM( TYPEBODY_CNT ) AS "TYPEBODY_CNT" ,SUM( LIB_CNT ) AS "LIB_CNT" FROM ( SELECT OWNER ,CASE WHEN OBJECT_TYPE = 'DATABASE LINK' THEN COUNT(1) ELSE 0 END AS "DBLINK_CNT" ,CASE WHEN OBJECT_TYPE = 'VIEW' THEN COUNT(1) ELSE 0 END AS "VIEW_CNT" ,CASE WHEN OBJECT_TYPE = 'SEQUENCE' THEN COUNT(1) ELSE 0 END AS "SEQ_CNT" ,CASE WHEN OBJECT_TYPE = 'PACKAGE' THEN COUNT(1) ELSE 0 END AS "PKG_CNT" ,CASE WHEN OBJECT_TYPE = 'PACKAGE BODY' THEN COUNT(1) ELSE 0 END AS "PKGBODY_CNT" ,CASE WHEN OBJECT_TYPE = 'PROCEDURE' THEN COUNT(1) ELSE 0 END AS "PROC_CNT" ,CASE WHEN OBJECT_TYPE = 'FUNCTION' THEN COUNT(1) ELSE 0 END AS "FUNC_CNT" ,CASE WHEN OBJECT_TYPE = 'TYPE' THEN COUNT(1) ELSE 0 END AS "TYPE_CNT" ,CASE WHEN OBJECT_TYPE = 'TYPE BODY' THEN COUNT(1) ELSE 0 END AS "TYPEBODY_CNT" ,CASE WHEN OBJECT_TYPE = 'LIBRARY' THEN COUNT(1) ELSE 0 END AS "LIB_CNT" FROM dba_objects WHERE owner in (select username from mig_user) GROUP BY owner, OBJECT_TYPE) T GROUP BY T.OWNER ) O
LEFT JOIN ( SELECT OWNER, COUNT(1) AS TABLE_CNT FROM DBA_TABLES WHERE owner in (select username from mig_user) GROUP BY OWNER ) TBL ON O.OWNER = TBL.OWNER LEFT JOIN ( SELECT OWNER, COUNT(1) AS GRANT_CNT FROM DBA_TAB_PRIVS WHERE owner in (select username from mig_user) AND TABLE_NAME NOT LIKE 'BIN$%' GROUP BY OWNER ) G ON O.OWNER = G.OWNER LEFT JOIN ( SELECT OWNER, COUNT(1) AS IDX_CNT FROM DBA_INDEXES WHERE owner in (select username from mig_user) GROUP BY OWNER ) IDX ON O.OWNER = IDX.OWNER LEFT JOIN ( SELECT OWNER, COUNT(1) AS LOB_CNT FROM DBA_LOBS WHERE owner in (select username from mig_user) GROUP BY OWNER ) LOB ON O.OWNER = LOB.OWNER LEFT JOIN ( SELECT SCHEMA_USER, COUNT(1) AS JOB_CNT FROM DBA_JOBS WHERE SCHEMA_USER in (select username from mig_user) GROUP BY SCHEMA_USER ) JOB ON O.OWNER = JOB.SCHEMA_USER LEFT JOIN ( SELECT OWNER, COUNT(1) AS TRIGGER_CNT FROM DBA_TRIGGERS WHERE OWNER in (select username from mig_user) AND TRIGGER_NAME NOT LIKE 'BIN$%' GROUP BY OWNER ) TRI ON O.OWNER = TRI.OWNER LEFT JOIN ( SELECT OWNER, COUNT(1) AS "SYN_CNT" FROM DBA_SYNONYMS WHERE OWNER in (select username from mig_user) AND OWNER != 'PUBLIC' GROUP BY OWNER ) SYN ON O.OWNER = SYN.OWNER LEFT JOIN ( SELECT TABLE_OWNER as "OWNER", COUNT(1) AS "PUB_SYN_CNT" FROM DBA_SYNONYMS WHERE TABLE_OWNER in (select username from mig_user) AND OWNER = 'PUBLIC' GROUP BY TABLE_OWNER ) PUB_SYN ON O.OWNER = PUB_SYN.OWNER ORDER BY O.OWNER;

Constraint 개수 확인

set linesize 150
column owner format a30


select owner ,constraint_type ,count( constraint_name ) as "con_cnt" from dba_constraints where owner in (select username from dba_users where account_status='OPEN' ) group by owner, constraint_type order by owner ,constraint_type;

2.1.2. DB 생성 관련 항목

Oracle의 sys 또는 system 등의 DBA 권한을 가진 사용자로 접속하여 아래의 정보를 확인하고, Tibero 설 치 과정 중 CREATE DATABASE를 수행할 경우 아래의 정보를 참고하여 DB를 생성한다.

항목 설명
캐릭터 셋 Oracle과 대응되는 캐릭터 셋을 선택한다.
초기 파라미터 세션 개수 및 메모리 설정 등을 확인한
Redo 구성 Group과 Member의 개수 또는 크기 등을 확인한다.
Undo와 Temp 구성 Undo와 Temp Tablespace 크기를 확인한다.
Log 모드 Tibero 미지원 사항으로 일반 Index로 변경을 고려한다

 

문서다운로드 :  https://www.google.com/search?q=%ED%8B%B0%EB%B2%A0%EB%A1%9C+%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98&oq=%ED%8B%B0%EB%B2%A0%EB%A1%9C+%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98&aqs=chrome..69i57j69i59j35i39l2j69i61j69i60.2314j0j7&sourceid=chrome&ie=UTF-8https://technet.tmaxsoft.com/download.do?filePath=/nas/technet/technet/upload/kss/tbook/tibero/2014/05/&fileName=FILE-20140103-000078_140528091051_1.pdf

댓글