# 패치 가이드

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

###
