# 패치 가이드

### 1. 로그 스위치 수행 (SRC DB)

4.0 기준 Abort 종료 시 이력을 저장하지 않기 때문에 로그를 처음부터 읽는다. 이를 위해 로그 스위치를 먼저 수행해야 한다.

```sql
ALTER SYSTEM SWITCH LOGFILE;
```

### 2. 프로세스 강제 종료 (SRC / TAR)

4.0 버전의 경우 `abort` 종료가 반드시 필요하다.

```bash
ADMIN> shutd man (abort);
```

### 3. 메타데이터 백업을 위한 유저 생성 (SRC / TAR)

기존 메타데이터를 백업하기 위해 별도의 백업 전용 유저를 생성하고 필요한 권한을 부여한다.

```sql
CREATE USER [백업유저이름] IDENTIFIED BY "[백업유저암호]";
GRANT CONNECT, RESOURCE, CREATE SESSION TO [백업유저이름];
GRANT INSERT ANY TABLE TO [백업유저이름];
GRANT CREATE ANY SYNONYM TO [백업유저이름];
GRANT CREATE ANY VIEW TO [백업유저이름];
```

### 4. var / config 디렉토리 이관

기존 환경의 데이터를 보존하면서 새로운 4.4.x 바이너리로 마이그레이션하기 위해 디렉토리를 재구성한다.

```bash
mv prosync/var prosync_4_4/var
mv prosync/config prosync_4_4/config
mv prosync old_prosync
mv prosync_4_4 prosync
```

### 5. prs\_install.cfg 작성

`prosync_4_4/prs_install.cfg` 파일을 생성하고 아래 내용을 포함한다.

```bash
############################################
#
# ProSync Installation Parameters
#
############################################

# (Mandatory)
INSTANCE_ID=instance
PRS_USER=prosync_user
PRS_PWD=prosync_user_password

# (Optional)
#PRS_TS_NAME=
#PRS_TS_FILE=
#PRS_TS_SIZE=
#PRS_SKIP_USER_CREATE=N
#PRS_TARGET_MIN_PRIVILEGE=N
#PRS_LOG_DIR=
#LOG_BACKUP_DIR=
#CREATE_DSN_FILE=N
#DSN_DIR=
#DSN_FILE=#need DSN_DIR

############################################
#
# ProSync Processes Informations for Instance Map
#
############################################
### (Optional)
AGENT_LIST_DELIMITER=,

### (Mandatory)
# Ext process
## Ext cnt must be the same as SRC_DB_CNT
EXT_CNT=1
EXT_AGENT_ID_LIST_0=agent1
#EXT_AGENT_ID_LIST_1=agent1,agent2

# Apply process
APPLY_PORT=7620
APPLY_AGENT_ID_LIST=agent1

# Llob process
LLOB_PORT=7630
LLOB_AGENT_ID_LIST=agent1

...
```

### 6. 메타데이터 백업 수행

기존 ProSync 환경에서 메타 정보를 백업한다.

```bash
export PREVIOUS_PRS_HOME=[old_prosync의 절대경로]
```

```bash
$PRS_HOME/install/prs_backup.sh \
  -c prs_install.cfg \
  -u [백업유저이름] \
  -p [백업유저암호]
```

{% hint style="info" %}
Oracle DB의 경우, 백업 수행하는 TABLESPACE 에 대한 쓰기 권한이 필요할 수 있다.

ALTER USER \[백업유저이름] QUOTA \[필요크기] ON \[TABLESPACE 명];

쿼리를 통하여 충분한 크기를 할당한다.
{% endhint %}

### 7. SRC DB 권한 부여&#x20;

메타데이터 수집을 위해 SRC DB에서 필요한 권한을 부여한다.

```sql
GRANT SELECT ANY DICTIONARY TO $PRS_USER;
GRANT DELETE ANY TABLE TO $PRS_USER;
```

### 8. TAR DB 권한 부여&#x20;

```sql
GRANT LOCK ANY TABLE TO $PRS_USER;
GRANT CREATE ANY TABLE TO $PRS_USER;
GRANT CREATE ANY SEQUENCE TO $PRS_USER;
GRANT CREATE ANY INDEX TO $PRS_USER;
GRANT CREATE ANY TRIGGER TO $PRS_USER;
GRANT CREATE ANY SYNONYM TO $PRS_USER;
GRANT CREATE ANY VIEW TO $PRS_USER;
GRANT CREATE ANY PROCEDURE TO $PRS_USER;
GRANT SELECT ANY DICTIONARY TO $PRS_USER;
GRANT ALTER ANY TABLE TO $PRS_USER;
GRANT ALTER ANY INDEX TO $PRS_USER;
GRANT ALTER ANY TRIGGER TO $PRS_USER;
GRANT ALTER ANY SEQUENCE TO $PRS_USER;
GRANT ALTER ANY PROCEDURE TO $PRS_USER;
GRANT DROP ANY TABLE TO $PRS_USER;
GRANT DROP ANY INDEX TO $PRS_USER;
GRANT DROP ANY TRIGGER TO $PRS_USER;
GRANT DROP ANY SEQUENCE TO $PRS_USER;
GRANT DROP ANY VIEW TO $PRS_USER;
GRANT DROP ANY PROCEDURE TO $PRS_USER;
GRANT DROP ANY SYNONYM TO $PRS_USER;
GRANT COMMENT ANY TABLE TO $PRS_USER;

-- target db oracle인 경우
GRANT SELECT ON SYS.OBJ$ TO $PRS_USER;
GRANT SELECT ON SYS.USER$ TO $PRS_USER;
GRANT SELECT ON SYS.COL$ TO $PRS_USER;
GRANT SELECT ON SYS.SEQ$ TO $PRS_USER;
```

### 9. prs\_obj\_group1.list 생성 및 메타 정보 이관

```bash
cp $PRS_HOME/install/templates/prs_obj_group1.list.template \
  $PRS_HOME/install/prs_obj_group1.list
```

{% hint style="info" %}
**참고**

`{$INSTANCE_NAME}.PRS_OBJ_LIST`에 대한 정보는 `prs_backup.sh`를 통해 `backup_user` 스키마에 저장되며, `prs_meta.sh` 실행 시 해당 정보가 자동으로 참조된다. 따라서 `prs_obj_group1.list` 파일을 별도로 작성할 필요는 없으며, 시스템이 해당 파일의 존재 여부만을 확인하므로 파일이 경로에 존재하기만 하면 된다.
{% endhint %}

#### 메타 정보 이관 예시

```bash
$PRS_HOME/install/prs_meta.sh -c prs_install.cfg
```

### 10. Config 파일 수정

#### 10.1. 각 process별 cfg 파일 내 파라미터 수정

* LISTENER\_PORT  제거
* TOP\_ID 제거
* Log 및 Backup Log 경로 수정

#### 10.2. `vf.cfg` 삭제 확인

#### 10.3. `prs_mgr.cfg` → `prs_agent_{agent_id}.cfg` 으로 변경&#x20;

### 11. Agent 설치

4.4.x 버전부터는 Agent 설치가 Instance 설치와 분리되었기 때문에, 패치 작업 전에 반드시 Agent 설치를 완료해야 한다. 자세한 설치 방법은 [Agent 설치](https://app.gitbook.com/o/oQn7rHANgwIKDC4Eh3ul/s/egN6DU2rh3Fx2LZgpQGo/undefined-2/prosync-1/agent) 문서를 참고한다.

### 12. prs\_top.map 변경 사항

4.4.x 부터는 `prs_top.map`에서 `prs_instance.map`으로 변경되었다.

#### 4.0 형식

```bash
MGR=(ID=lmgr)(HOST=localhost)(PORT=7600)

Prosync=(
    EXT1=(MGR=lmgr)(HOST=localhost)(PORT=7610)(PROGRAM=prs_ext)
    APPLY1=(MGR=lmgr)(HOST=localhost)(PORT=7620)(PROGRAM=prs_apply)
    LLOB=(MGR=lmgr)(HOST=localhost)(PORT=7630)(PROGRAM=prs_llob)
    VF=(MGR=lmgr)(HOST=localhost)(PORT=7640)(PROGRAM=prs_vf)
)
```

#### 4.4.x 형식

<pre class="language-bash"><code class="lang-bash">AGENT=(ID=agent1)(HOST=172.19.0.11)(PORT=7600)
<strong>
</strong>Prosync=(
    EXT1=(AGENT=agent1)(PROGRAM=prs_ext)
    APPLY1=(AGENT=agent1)(PORT=7620)(PROGRAM=prs_apply)
    LLOB=(AGENT=agent1)(PORT=7630)(PROGRAM=prs_llob)
)


</code></pre>

* localhost 제약 제거
* Instance에서 Host 제거 및 MGR → Agent로 변경
* ext process에서 Port 제거
* verify process삭제

### 13. ProSync 재기동

4.4.x부터는 manager 대신 agent를 사용하기 때문에 agent 기동 명령어도 `man(ager)`에서 `age(nt)`로 변경되었다.

```bash
ADMIN> start age(nt) {AGENT_ID}
ADMIN> start {INSTANCE_ID}
```

###


---

# Agent Instructions: 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:

```
GET https://docs.tibero.com/prosync/patch.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
