> For the complete documentation index, see [llms.txt](https://docs.tibero.com/technical-guides/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tibero.com/technical-guides/topics/upgrade/source-db-operations.md).

# Source DB 작업

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

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

1. 체크리스트 및 체크 방법
2. Export 수행

## 1. 체크리스트 및 체크 방법 <a href="#bookmark3" id="bookmark3"></a>

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를 생성할 경우 해당 내용에 맞춰 생성합니다.

<pre><code>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
--------------------------------    ----------
<strong>NLS_CHARACTERSET                    UTF8
</strong>NLS_NCHAR_CHARACTERSET              UTF16
</code></pre>

### 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의 데이터베이스를 생성할 때 수정한 경로 및 파일명을 참고하여, 경로 및 파일명을 알맞게 수정합니다.&#x20;

```
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에 수동으로 생성이 필요합니다.&#x20;

```

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에 수동으로 생성이 필요합니다.

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

**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/
```

{% hint style="info" %}
JAVA External Procedure에서 외부 라이브러리를 참조할 때 $TB\_HOME/bin/tbjavac와 $TB\_HOME/client/bin/tbjavaepa 설정을 확인합니다.
{% endhint %}

### Wrapped PSM(PL/SQL) 확인

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

다음은 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를 확인 합니다.&#x20;

{% hint style="info" %}
해당 결과는[ “검증”](/technical-guides/topics/upgrade/validation.md)에서 이관된 Object Count를 확인하는 기준으로 사용됩니다.
{% endhint %}

```
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를 확인합니다.&#x20;

{% hint style="info" %}
해당 결과는 [“검증”](/technical-guides/topics/upgrade/validation.md)에서 이관된 Constraint 를 확인하는 기준으로 사용됩니다.
{% endhint %}

```
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에 연결된 모든 애플리케이션 종료&#x20;

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

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

```
SQL> SELECTcount(*) FROM v$session;

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

### (2) JOB 수행 중지

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

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

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

### (3) tbexport&#x20;

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
```

<table><thead><tr><th width="171">항목</th><th>설명</th></tr></thead><tbody><tr><td>username</td><td>Export 할 DB 계정으로 sys 계정 또는 dba 계정 중에서 하나를 선택</td></tr><tr><td>password</td><td>Export 할 DB 계정의 비밀번호</td></tr><tr><td>port</td><td>Export 할 DB의 포트 번호</td></tr><tr><td>sid</td><td>Export 할 DB의 이름.</td></tr><tr><td>file</td><td>생성될 파일 이름</td></tr><tr><td>log</td><td>생성될 로그 파일의 이름</td></tr></tbody></table>

다음은 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
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.tibero.com/technical-guides/topics/upgrade/source-db-operations.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
