Source DB 작업

본 장에서는 Source DB인 Tibero6의 업그레이드 진행을 위한 작업 절차를 설명합니다.

작업 절차는 다음과 같은 순서로 진행합니다.

  1. 체크리스트 및 체크 방법

  2. Export 수행

1. 체크리스트 및 체크 방법

Tibero 6에서 Tibero 7로 업그레이드 하기 위해 다음의 항목들을 확인합니다.

  • CHARACTERSET

  • Redo 확인

  • Undo 확인

  • Temp Tablespace 확인

  • User Tablespace 확인

  • 로그 모드 확인

  • 컨트롤 파일 확인

  • JOB 확인

  • DB Link 확인(Tibero to Tibero, Tibero to Oracle 등)

  • External Procedure 사용여부 확인

  • Wrapped PSM(PL/SQL) 확인

  • 디렉터리 확인

  • Object Count 확인

  • Constraint 확인

CHARACTERSET

NLS_CHARACTERSET과 NLS_NCHAR_CHARACTERSET의 VALUE를 확인합니다. TARGET DB를 생성할 경우 해당 내용에 맞춰 생성합니다.

SQL> SET LINESIZE 120 
SQL> COL name FOR a30
SQL> COL value FOR a20 
SQL> SELECT name, value 
FROM sys._dd_props
WHERE name like '%CHARACTERSET%'
ORDER BY 1;

NAME                                VALUE
--------------------------------    ----------
NLS_CHARACTERSET                    UTF8
NLS_NCHAR_CHARACTERSET              UTF16

Redo 확인

각 로그 그룹별 MEMBER 및 각 그룹별 size(mb)와 MEMBERS를 확인합니다.

SQL> SET LINESIZE 120
SQL> COL member FOR a50
SQL> SELECT * FROM v$logfile;

GROUP#             STATUS  TYPE   MEMBER
-----------      --------  -----------------------------
0                  ONLINE /data2/tb6/tbdata/log001.log
0                  ONLINE /data2/tb6/tbdata/log002.log
1                  ONLINE /data2/tb6/tbdata/log003.log
1                  ONLINE /data2/tb6/tbdata/log004.log
2                  ONLINE /data2/tb6/tbdata/log005.log
2                  ONLINE /data2/tb6/tbdata/log006.log

SQL> SELECT group#, bytes/1024/1024 as "size(mb)", members, archived FROM v$log;

GROUP#             size(mb)   MEMBERS    ARCHIVED
-----------      --------  -----------   -----------
0                   50        2          NO
1                   50        2          NO
2                   50        2          NO

Undo 확인

DB에서 사용중인 UNDO의 TABLESPACE_NAME과 해당 TABLESPACE가 사용중인 데이터 파일의 FILE_NAME, size, maxsize, AUTOEXTENSIBLE을 확인합니다.

SQL> SET LINESIZE 120
SQL> COL tablespace_name FOR a20
SQL> COL file_name FOR a50
SQL> SELECT tablespace_name 
FROM dba_tablespaces
WHERE contents = 'UNDO';

TABLESPACE_NAME
--------------------
UNDO


SQL> show parameter UNDO_TABLESPACE;

NAME                  TYPE      VALUE
-----------------     --------  ---------
UNDO_TABLESPACE       STRING    UNDO

SQL> SELECT tablespace_name,
file_name,
bytes/1024/1024 "size(mb)", 
maxbytes/1024/1024 "maxsize(mb)", 
autoextensible
FROM dba_data_files
WHERE tablespace_name like 'UNDO%';

TABLESPACE_NAME  FILE_NAME                    size(mb) maxsize(mb) AUTOEXTENSIBLE
---------------- ---------------------------- -------- ----------- --------------
UNDO          /data2/tb6/tbdata/undo001.tdf   400      1024        YES

Temp Tablespace 확인

Temp 파일을 쓰고 있는 TABLESPACE_NAME 및 해당 파일의 FILE_NAME, size,AUTOEXTENSIBLE, maxsize를 확인합니다.

SQL> SET LINESIZE 150
SQL> COL tablespace_name FOR a30
SQL> COL file_name FOR a50
SQL> SELECT tablespace_name,
file_name, bytes/1024/1024 "size(mb)", 
autoextensible,
maxbytes/1024/1024 "max(mb)" 
FROM dba_temp_files;

TABLESPACE_NAME  FILE_NAME                      size(mb) AUTOEXTENSIBLE max(mb)
---------------- -----------------------------  -------- -------------- --------
TEMP             /data2/tb6/tbdata/temp001.tdf  400      YES            1024        

User Tablespace 확인

Default Tablespace를 제외한 Tablespace들에 대해 TABLESPACE_NAME과 각 Tablespace에서 사용중인 데이터 파일의 FILE_NAME, size, maxsize, AUTOEXTENSIBLE을 확인합니다.

SQL> SET linesize 150
SQL> COL tablespace_name FOR a30
SQL> COL file_name FOR a50
SQL> SELECT tablespace_name, 
file_name,
bytes/1024/1024 "size(mb)", 
maxbytes/1024/1024 "maxsize(mb)", 
autoextensible
FROM dba_data_files
WHERE tablespace_name not in('SYSTEM', 'UNDO', 'USR');

TABLESPACE_NAME  FILE_NAME                    size(mb) maxsize(mb) AUTOEXTENSIBLE
---------------- ---------------------------- -------- ----------- --------------
DBTECH_TBS       /tb6/tbdata/dbtech_tbs01.dtf 50       5120        YES
DBTECH_IDX       /tb6/tbdata/dbtech_idx01.dtf 50       1024        YES

로그 모드 확인

ARCHIVELOG일 경우 LOG_ARVHIVE_DEST, LOG_ARVHIVE_FORMAT, LOG_ARVHIVE_OVERWRITE, LOG_ARVHIVE_RETRY_TIME을 확인합니다. 로그 모드 외에 기본값과 다른 값이 있다면 Target DB의 tip 파일에 설정합니다.

SQL> SELECT log_mode FROM v$database; 
LOG_MODE
---------------
ARCHIVELOG

SQL> SHOW PARAM ARCHIVE
NAME                    TYPE     VALUE
----------------------- -------- ------------------------------------------
LOG_ARCHIVE_DEST        DIRNAME  /data2/tb6/tibero6/database/tb4/archive/ 
LOG_ARCHIVE_FORMAT      STRING   log-t%t-r%r-s%s.arc
LOG_ARCHIVE_OVERWRITE   Y_N      NO 
LOG_ARCHIVE_RETRY_TIME  UINT32   60

컨트롤 파일 확인

Target DB의 데이터베이스를 생성할 때 수정한 경로 및 파일명을 참고하여, 경로 및 파일명을 알맞게 수정합니다.

SQL> alter database backup controlfile to trace 
as '/data2/tb6/tb6_export/controlfile_tb6.sql'; 
Database altered.
SQL> !cat /data2/tb6/tb6_export/controlfile_tb6.sql 
CREATE CONTROLFILE REUSE DATABASE "tb6"
LOGFILE 
GROUP 0 (
'/data2/tb6/tbdata/log001.log', 
'/data2/tb6/tbdata/log002.log' 
) SIZE 50M,
GROUP 1 (
'/data2/tb6/tbdata/log003.log', 
'/data2/tb6/tbdata/log004.log' 
) SIZE 50M,
GROUP 2 (
'/data2/tb6/tbdata/log005.log', 
'/data2/tb6/tbdata/log006.log' 
) SIZE 50M
NORESETLOGS 
DATAFILE
'/data2/tb6/tbdata/system001.tdf', 
'/data2/tb6/tbdata/undo001.tdf',
'/data2/tb6/tbdata/usr001.tdf',
'/data2/tb6/tbdata/dbtech_tbs01.dtf', 
'/data2/tb6/tbdata/dbtech_idx01.dtf' 
ARCHIVELOG
MAXLOGFILES 255
MAXLOGMEMBERS 8
MAXDATAFILES 100
CHARACTER SET MSWIN949 
NATIONAL CHARACTER SET UTF16 
;
--ALTER DATABASE MOUNT
---- Recovery is required in MOUNT mode. 
--ALTER DATABASE RECOVER AUTOMATIC; 
--ALTER DATABASE OPEN ;
---- Adding Tempfiles is required in OPEN mode.
-- ALTER TABLESPACE TEMP ADD TEMPFILE '/data2/tb6/tbdata/temp001.tdf' 
-- SIZE 400M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 1G;

JOB 확인

JOB은 이관되지 않으므로 Target DB에 수동으로 생성이 필요합니다.

SQL> SET LINESIZE 150
SQL> COL what FOR a30
SQL> COL interval FOR a30
SQL> COL username FOR a20
SQL> alter session set NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
SQL> SELECT job as job_no, 
b.username,
what,
to_char(next_date, 'yyyy/mm/dd HH24:MI:SS') as next_date, 
interval,
broken
FROM dba_jobs a, dba_users b 
WHERE a.schema_user=b.user_id;


JOB_NO USERNAME WHAT                        NEXT_DATE           INTERVAL  BROKEN
------ -------- --------------------------- ------------------- --------- ------
1       DBTECH  dbms_output.put_line('ok');  2013/06/30 00:00:00 SYSDATE+1 N

DB Link는 이관되지 않으므로 Target DB에 수동으로 생성이 필요합니다.


SQL> SET LINESIZE 150
SQL> COL owner FOR a15
SQL> COL db_link FOR a20
SQL> COL username FOR a20
SQL> COL host FOR a10
SQL> COL created FOR a10
SQL> SELECT owner, db_link, username, host, created FROM dba_db_links;
--------------- -------------------- -------------------- ---------- ----------
DBTECH
TBLINK
DB_LINK
DBTECH2
tb6
2013/06/12


SQL> SET LINESIZE 150
SQL> COL owner FOR a15
SQL> COL db_link FOR a20
SQL> COL username FOR a20
SQL> COL host FOR a10
SQL> COL created FOR a10
SQL> SELECT owner, db_link, username, host, created FROM dba_db_links;
OWNER           DB_LINK              USERNAME             HOST       CREATED
--------------- -------------------- -------------------- ---------- ----------
DBTECH          TBLINK                DBTECH2             tb6        2013/06/12

External Procedure 사용여부 확인

외부 참조 라이브러리를 확인하여 결과가 존재할 경우 후처리 파일인 so 및 class 파일을 Target DB의 동일 경로에 복사하거나 Target DB에서 재컴파일 합니다. 라이브러리는 이관되지 않으므로 Target DB에 수동으로 생성이 필요합니다.

다음은 외부 참조 라이브러리의 확인 예시 입니다.

C External Procedure

SQL> SET LINESIZE 120
SQL> COL owner FOR a10
SQL> COL library_name FOR a30
SQL> COL file_spec FOR a50
SQL> COL status FOR a10
SELECT owner, library_name, file_spec, status FROM dba_libraries;

JAVA External Procedure

SET LINESIZE 120
COL owner FOR a10
COL name FOR a30
COL source FOR a50
SELECT owner, name, source FROM dba_java_classes;

다음은 JAVA의 Class 위치 확인 예시 입니다.

SQL> SHOW PARAM JAVA_CLASS_PATH;
NAME             TYPE     VALUE
---------------- -------- --------------------------
JAVA_CLASS_PATH  DIRNAME  /data2/tb6/tbdata/java/

JAVA External Procedure에서 외부 라이브러리를 참조할 때 $TB_HOME/bin/tbjavac와 $TB_HOME/client/bin/tbjavaepa 설정을 확인합니다.

Wrapped PSM(PL/SQL) 확인

Wrapped PL/SQL은 DB에서 내용을 조회할 수 없으므로 수동으로 생성하기 위한 생성문을 얻을 수 없습니다. 그래서 이관을 위해서는 원본 생성문이 필요합니다. Wrapped PSM(PL/SQL)은 이관되지 않으므로 Target DB에 수동으로 생성이 필요합니다.

다음은 Wrapped PSM(PL/SQL) 확인 예시 입니다.

SQL> SET LINESIZE 120
SQL> COL owner FOR a30
SQL> COL object_name FOR a40
SQL> SELECT owner, object_name, functionable, wrapped 
FROM dba_procedures
WHERE wrapped = 'YES';
OWNER                      OBJECT_NAME              FUNCTIONABLE WRAPPED
------------------------- ------------------------- ------------ -------
DBTECH                     WRAP_TEST                NO           YES

디렉터리 확인

External table에서 사용하는 디렉터리가 존재하는지 확인한 후 디렉터리가 존재한다면 해당 파일을 Target DB 시 스템 경로에 맞게 복사 및 재생성합니다.

SQL> SET LINESIZE 120
SQL> COL name FOR a20
SQL> COL path FOR a60
SQL> SELECT * FROM dba_directories;
NAME                 PATH
-------------------- ----------------------
SAM                  /data2/tb6/DIR_SAM

Object Count 확인

쿼리 수행 후 나온 조회 결과를 저장하고 Object Count를 확인 합니다.

해당 결과는 “검증”에서 이관된 Object Count를 확인하는 기준으로 사용됩니다.

SQL> SET LINESIZE 150
SQL> SET PAGES 500
SQL> COL owner FOR a20
SQL> SELECT owner, object_type, status, count(*)
FROM dba_objects
WHERE owner not in ('SYS', 'SYSCAT', 'SYSGIS', 'OUTLN')
GROUP BY owner, object_Type, status
ORDER BY owner, object_type, status;

OWNER 			 OBJECT_TYPE 		  STATUS  COUNT(*)
-------------------- --------------------        ------- ----------
DBTECH			 DATABASE LINK 		  VALID 	1
DBTECH 			 FUNCTION 		  VALID 	3
DBTECH 			 INDEX 			  VALID 	9
DBTECH 			 JAVA 			  VALID 	1
DBTECH			 LIBRARY 		  VALID 	1
DBTECH 			 PROCEDURE 		  VALID 	3
DBTECH			 SEQUENCE 		  VALID 	3
DBTECH 			 SYNONYM 		  VALID 	6
DBTECH 			 TABLE 			  VALID 	10
DBTECH 			 TRIGGER		  VALID	 	2
DBTECH 		         VIEW 			  VALID		1
DBTECH2			 FUNCTION 		  VALID		1
DBTECH2			 INDEX 			  VALID		7
DBTECH2			 LOB 			  VALID		2
DBTECH2			 PACKAGE 		  VALID		2
DBTECH2			 PACKAGE BODY 		  VALID		2
DBTECH2			 PROCEDURE 	  	  VALID		4
DBTECH2			 SEQUENCE 		  VALID		1
DBTECH2			 TABLE 			  VALID		7
DBTECH2			 TRIGGER 		  VALID 	1
DBTECH2			 VIEW 			  VALID 	1
PUBLIC 			 SYNONYM 		  VALID	        565
TIBERO 			 TABLE 			  VALID 	1

Constraint 확인

쿼리 수행 후 나온 조회 결과를 저장하고 Constraint를 확인합니다.

해당 결과는 “검증”에서 이관된 Constraint 를 확인하는 기준으로 사용됩니다.

SQL> SET LINESIZE 150
SQL> COL owner FOR a30
SQL> SELECT owner
,constraint_type
,count(constraint_name) as con_cnt
FROM dba_constraints
WHERE owner not in ('SYS', 'SYSCAT', 'SYSGIS', 'OUTLN')
GROUP BY owner, constraint_type
ORDER BY owner ,constraint_type;
OWNER 				CONSTRAINT_TYPE           CON_CNT
------------------------------ ---------------         ----------
DBTECH				C 				21
DBTECH				O 				0
DBTECH	 			P 				7
DBTECH	 			R 				3
DBTECH	 			U 				1
DBTECH2	 			C 				7
DBTECH2	 			P 				7
DBTECH2	 			R 				1

2. Export 수행

(1) DB에 연결된 모든 애플리케이션 종료

Export 하는 동안 데이터 변경이 일어나지 않게 하려면 Source DB에 연결된 모든 애플리케이션을 종료합니다.

다음은 접속된 세션 확인 예시 입니다.

SQL> SELECTcount(*) FROM v$session;

COUNT(*)
---------- -
2

(2) JOB 수행 중지

Export 하는 동안 JOB이 수행되면 데이터 변경이 일어날 수 있으므로 JOB 수행을 중지합니다.

다음은 JOB 번호가 100번인 JOB을 중지하는 예시 입니다.

BEGIN
DBMS_JOB.BROKEN(100, true);
END;
/

(3) tbexport

tbexport의 Database(FULL) 모드로 수행합니다.

다음은 tbexport의 사용 방법 입니다.

tbexport username={sys | dba계정} password=<password> port=<port_no> sid=<SID> 
file=<file name> log=<log-file name> full=y script=y
항목
설명

username

Export 할 DB 계정으로 sys 계정 또는 dba 계정 중에서 하나를 선택

password

Export 할 DB 계정의 비밀번호

port

Export 할 DB의 포트 번호

sid

Export 할 DB의 이름.

file

생성될 파일 이름

log

생성될 로그 파일의 이름

다음은 Source DB 서버에서 Tibero 6 버전의 tbexport 사용 예시 입니다.

tbexport username=sys password=pwd port=8629 sid=tibero6
file=tibero6_all.dat log=tibero6_exp.log full=y script=y

Last updated