Source DB 작업
Tibero6의 업그레이드 진행을 위한 Source DB 업그레이드 사전 작업 절차를 설명합니다.
작업 절차는 다음과 같은 순서로 진행합니다.
체크리스트 및 체크 방법
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 확인 (Tibero to Tibero, Tibero to Oracle 등)
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;
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/
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를 확인 합니다.
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를 확인합니다.
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