# Instance 설치

## 계정별 필요 권한

ProSync 설치를 위해서는 아래 세 가지 계정 정보가 필요하다.

* **PRS\_USER**
* **SRC\_INSTALL\_USER**
* **TAR\_INSTALL\_USER**

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

DB가 Oracle 이면서 CDB에서 설치하는 경우,  공통 권한이 필요하다 \
(예: `GRANT CONNECT TO INSTALL_USER CONTAINER=ALL;`).
{% endhint %}

### **PRS\_USER**

ProSync가 내부적으로 운영에 사용하는 테이블들을 관리하기 위한 계정이다. \
Source DB와 Target DB 모두에 생성하며, 운영 시 사용된다.

#### **Source DB가 Tibero인 경우**

```sql
CONNECT                   RESOURCE                     ALTER SYSTEM
CREATE TABLE              ALTER ANY TABLE              DROP ANY TABLE
FLASHBACK ANY TABLE       SELECT ANY TABLE             LOCK ANY TABLE
SELECT ON V$DATABASE      SELECT ON V$INSTANCE         SELECT ANY DICTIONARY
EXECUTE ON SYS.SEAF
```

#### **Source DB가 Oracle인 경우**

```sql
CONNECT                       RESOURCE                        ALTER SYSTEM
CREATE TABLE                  ALTER ANY TABLE                 DROP ANY TABLE
FLASHBACK ANY TABLE           SELECT ANY TABLE                LOCK ANY TABLE
ADMINISTER DATABASE TRIGGER   SELECT ANY DICTIONARY           EXECUTE ON SYS.DBMS_AQADM
EXECUTE ON SYS.DBMS_AQ        EXECUTE ON SYS.DBMS_AQIN        AQ_ADMINISTRATOR_ROLE
SELECT ON SYS.USER$           EXECUTE ON SYS.DBMS_AQADM_SYS   
SELECT ANY TRANSACTION  

# (12c 이상)
LOGMINING                     CREATE ANY DIRECTORY   
READ, WRITE ON DIRECTORY PRS_DICT_$INSTANCE_ID

# 권한외 필요한사전 설정
ALTER USER PRS_USER QUOTA UNLIMITED ON PRS_TS_NAME
CREATE OR REPLACE DIRECTORY PRS_DICT AS DICT_FILE_DIR
```

#### **Target DB가 Tibero 또는 Oracle이고 DML 동기화만 사용하는 경우**

```sql
CONNECT              RESOURCE              CREATE SESSION
INSERT ANY TABLE     CREATE ANY TABLE      CREATE ANY SEQUENCE
CREATE ANY INDEX     CREATE ANY TRIGGER    CREATE ANY SYNONYM
CREATE ANY VIEW      CREATE ANY PROCEDURE  UPDATE ANY TABLE
DELETE ANY TABLE     SELECT ANY TABLE      SELECT ANY DICTIONARY
ALTER SESSION        ALTER ANY TABLE       ALTER ANY INDEX
ALTER ANY TRIGGER    ALTER ANY SEQUENCE    ALTER ANY PROCEDURE
DROP ANY TABLE       DROP ANY INDEX        DROP ANY TRIGGER
DROP ANY SEQUENCE    DROP ANY VIEW         DROP ANY PROCEDURE
DROP ANY SYNONYM     COMMENT ANY TABLE
```

#### **Target DB가 Tibero 또는 Oracle인 경우**

```sql
DBA
```

#### **Target DB가 PostgreSQL인 경우**

```sql
SUPERUSER
```

### **SRC\_INSTALL\_USER**&#x20;

설치 과정에서만 사용하는 계정으로, PRS\_USER 계정을 생성하고 권한을 부여하기 위한 역할을 한다. \
설치 완료 후에는 운영과 무관하다.

#### **Tibero인 경우**

```sql
CONNECT                          CREATE USER                       DROP USER
CREATE TABLESPACE                DROP TABLESPACE                   ALTER DATABASE
ALTER SYSTEM                     ADMINISTER DATABASE TRIGGER       ALTER ANY TABLE
ALTER ANY TRIGGER                EXECUTE ANY PROCEDURE             DROP ANY PROCEDURE
DROP ANY TABLE                   DROP ANY TRIGGER                  DROP ANY SEQUENCE
GRANT ANY ROLE                   GRANT ANY PRIVILEGE               SELECT ANY TABLE
INSERT ANY TABLE                 UPDATE ANY TABLE                  SELECT ON V$LOG
SELECT ON V$PARAMETERS
SELECT ON V$DATABASE WITH GRANT OPTION  
SELECT ON V$INSTANCE WITH GRANT OPTION   
SELECT ON SYS._DD_OBJ WITH GRANT OPTION  
SELECT ON SYS._DD_USER WITH GRANT OPTION 
SELECT ON SYS._DD_IDX WITH GRANT OPTION
SELECT ON SYS._DD_IDXPART WITH GRANT OPTION 
SELECT ON SYS._DD_TBL WITH GRANT OPTION 
SELECT ON SYS._DD_TBLPART WITH GRANT OPTION
SELECT ON SYS._DD_TBLSUBPART WITH GRANT OPTION 
SELECT ON SYS._DD_COL WITH GRANT OPTION 
SELECT ON SYS._DD_ICOL WITH GRANT OPTION
EXECUTE ON SYS.SEAF WITH GRANT OPTION
```

#### **Oracle인 경우**&#x20;

```sql
CONNECT                     CREATE SESSION                ALTER SESSION
CREATE USER                 DROP USER                     CREATE TABLESPACE
DROP TABLESPACE             ALTER DATABASE                ALTER SYSTEM
ADMINISTER DATABASE TRIGGER ALTER ANY TABLE               ALTER ANY TRIGGER
EXECUTE ANY PROCEDURE       DROP ANY PROCEDURE            DROP ANY TABLE
DROP ANY TRIGGER            DROP ANY SEQUENCE             GRANT ANY ROLE
GRANT ANY PRIVILEGE         SELECT ANY TABLE              INSERT ANY TABLE
UPDATE ANY TABLE            ALTER USER                    SELECT ON SYS.V_$PARAMETER
SELECT ON SYS.V_$DATABASE   SELECT ON SYS.V_$INSTANCE     SELECT ON SYS.V_$LOG
SELECT ON SYS.USER$ WITH GRANT OPTION
EXECUTE ON SYS.DBMS_AQ WITH GRANT OPTION
EXECUTE ON SYS.DBMS_AQIN WITH GRANT OPTION
EXECUTE ON SYS.DBMS_AQADM WITH GRANT OPTION
EXECUTE ON SYS.DBMS_AQADM_SYS WITH GRANT OPTION
EXECUTE ON SYS.DBMS_LOGMNR WITH GRANT OPTION
EXECUTE ON SYS.DBMS_LOGMNR_D WITH GRANT OPTION
EXECUTE ON SYS.DBMS_LOGMNR_INTERNAL WITH GRANT OPTION
EXECUTE DBMS_AQADM.GRANT_SYSTEM_PRIVILEGE('MANAGE_ANY', 'PRS_INSTALL_USER')
-- PDB의 경우 common user에 대해 수행 필요
SET CONTAINER
```

{% hint style="warning" %}
**주의**

Oracle PDB에서 설치하는 경우, CDB로 container를 변경할 수 있는 common user여야 하며 CDB나 PDB에 위 권한이 없는 경우 설치에 실패할 수 있다.
{% endhint %}

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

Oracle CDB에서 설치하는 경우,  사용자 생성 시 `C##` 접두어 제약이 존재한다.\
설치 과정에서 이 제약을 해제하기 위해 `ALTER SESSION SET "_ORACLE_SCRIPT"=TRUE;` 명령을 실행하며,\
해당 명령은 SYS 계정으로 접속한 세션에서만 수행 가능하므로, CDB 환경에서는 SYS 계정으로 설치를 진행해야 한다.
{% endhint %}

#### **PostgreSQL인 경우**

```sql
SUPERUSER
```

### **TAR\_INSTALL\_USER**

SRC\_INSTALL\_USER와 마찬가지로, 설치 과정에서만 사용하는 계정이다.

#### **Tibero인 경우**

```sql
CONNECT                  CREATE USER               DROP USER
CREATE TABLESPACE        DROP TABLESPACE           EXECUTE ANY PROCEDURE
DROP ANY PROCEDURE       DROP ANY TABLE            DROP ANY SEQUENCE
GRANT ANY ROLE           GRANT ANY PRIVILEGE       SELECT ANY TABLE
INSERT ANY TABLE         SELECT ANY SEQUENCE       SELECT ON V$PARAMETERS
```

#### **Oracle인 경우**&#x20;

```sql
CONNECT                  CREATE USER               DROP USER
CREATE TABLESPACE        DROP TABLESPACE           EXECUTE ANY PROCEDURE
DROP ANY PROCEDURE       DROP ANY TABLE            DROP ANY SEQUENCE
GRANT ANY ROLE           GRANT ANY PRIVILEGE       SELECT ANY TABLE
INSERT ANY TABLE         SELECT ANY SEQUENCE       SELECT ON SYS.V_$PARAMETER
```

#### **PostgreSQL인 경우**

```sql
SUPERUSER
```

###

***

## 1. 설치 파라미터 설정

Instance를 설치하기 위해 각 계정의 설정 정보를 `$PRS_HOME/install/prs_install.cfg` 파일에 작성한다.

### **설정 템플릿 예시**

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

# (Mandatory)
INSTANCE_ID=
PRS_USER=prosync
PRS_PWD=

# (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=
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

############################################
#
# Source database informations
#
############################################

# (Mandatory)
SRC_DB_TYPE=TIBERO
SRC_DB_NAME=
SRC_INSTALL_USER=
SRC_INSTALL_PWD=

# (Optional)
#AUTO_ADD_SUPP_LOG=Y
#SRC_SKIP_TS_CREATE=N

# (Number Of Database Instances)
#SRC_DB_CNT=1

# (Dsn)
#SRC_DB_REAL_NAME=
#SRC_DB_IP_0=
#SRC_DB_PORT_0=
#SRC_DB_IP_1=
#SRC_DB_PORT_1=

# (for Cluster, only Extract Needed)
#SRC_DB_ALIAS_0=
#SRC_DB_ALIAS_1=

# (for ORACLE DB Only) 
#SUPP_LOG_LVL_ALL=N
#AUTO_SYNC_ON_CREATE=N 

# (for Oracle Logminer only)
# Oracle 11g or less, use utl_file_dir instead of DICT_FILE_DIR
#USE_LOGMNR=Y
#DICT_FILE_DIR=

# (for MySQL only)
#PRS_EXT_IP=

############################################
#
# Target database informations
#
############################################

# (Mandatory)
TAR_DB_TYPE=TIBERO
TAR_DB_NAME=
TAR_INSTALL_USER=
TAR_INSTALL_PWD=

# (Optional)
#TAR_SKIP_TS_CREATE=N

# (Number Of Database Instances)
#TAR_DB_CNT=1

# (Dsn)
#TAR_DB_REAL_NAME=
#TAR_DB_IP_0=
#TAR_DB_PORT_0=
#TAR_DB_IP_1=
#TAR_DB_PORT_1=

# (for MySQL only)
#PRS_APPLY_IP=

# (for multi thread)
#GROUP_NUM=1

# (for TDE(transparent data encryption) synchronization)
#USE_TDE=N
```

### **설치 파라미터** <a href="#install-prameter" id="install-prameter"></a>

<table><thead><tr><th width="201.33331298828125">파라미터</th><th>설명</th></tr></thead><tbody><tr><td><code>INSTANCE_ID</code></td><td>ProSync를 설치하기 위한 ID. 사용자가 관리 목적으로 임의로 지정한 ID를 입력한다. 이 값은 Tablespace name으로 유효한 형식이어야 하며, 숫자로 시작할 수 없다. (필수 항목)</td></tr><tr><td><code>PRS_USER</code></td><td>ProSync 운영을 위해 소스 및 Target DB에 생성할 사용자 이름</td></tr><tr><td><code>PRS_PWD</code></td><td>PRS_USER의 암호. 설정하지 않으면 설치 중에 입력받는다.</td></tr><tr><td><code>PRS_TS_NAME</code></td><td>ProSync 운영 데이터를 저장할 테이블스페이스 이름. PostgreSQL의 경우, 파라미터 미지원. (기본값: <code>[INSTANCE_ID]_ts</code>)</td></tr><tr><td><code>PRS_TS_FILE</code></td><td>ProSync 운영 데이터를 저장할 테이블스페이스 파일명. PostgreSQL의 경우, 파라미터 미지원. (기본값:<code>[INSTANCE_ID]_ts.dtf</code>)</td></tr><tr><td><code>PRS_TS_SIZE</code></td><td>ProSync 운영 데이터를 저장할 테이블스페이스 크기. PostgreSQL의 경우, 파라미터 미지원. (기본값: 1G)</td></tr><tr><td><code>PRS_SKIP_USER_CREATE</code></td><td>ProSync 운영에 사용되는 데이터베이스 사용자를 생성하지 않고 기존 사용자를 사용할 경우 설정 (기본값: N)</td></tr><tr><td><code>PRS_TARGET_MIN_PRIVILEGE</code></td><td>Target DB 사용자에게 최소 권한만 부여해 DML 동기화만 수행할 경우 설정 (기본값: <code>N</code>)</td></tr><tr><td><code>PRS_LOG_DIR</code></td><td>ProSync운영 중 생성되는 로그 파일의 저장 경로 (기본값: <code>$PRS_HOME/var/{INSTANCE_ID}/logs</code>)</td></tr><tr><td><code>LOG_BACKUP_DIR</code></td><td>이전 로그 파일을 저장할 경로 (기본값: <code>$PRS_HOME/var/{INSTANCE_ID}/logs/backup</code>)</td></tr><tr><td><code>CREATE_DSN_FILE</code></td><td>프로싱크가 사용 할 tbdsn.tbr/tnsnames.ora/pg_service.conf 파일을 생성하려는 경우 설정(기본값: N)</td></tr><tr><td><code>DSN_DIR</code></td><td>프로싱크가 db 접속에 사용할 tbdsn.tbr/tnsnames.ora/pg_service.conf 파일이 위치한 경로. 설정하지 않거나 존재하지 않는 경우, 시스템 기본 값 사용</td></tr><tr><td><code>DSN_FILE</code></td><td>프로싱크가 db 접속에 사용할 tbdsn.tbr/pg_service.conf 파일 명. 설정하지 않거나 존재하지 않는 경우, 시스템 기본 값 사용</td></tr><tr><td><code>AGENT_LIST_DELIMITER</code></td><td>Agent 정보가 2개 이상일 경우 구분자로 사용할 문자. 현재는 Agent 1개 사용 권장</td></tr><tr><td><code>EXT_CNT</code></td><td>Ext 프로세스 수. Source DB 수와 동일하게 설정 (필수 항목)</td></tr><tr><td><code>EXT_AGENT_ID_LIST</code></td><td>Ext 프로세스에 연결할 Agent ID. EXT_CNT 수만큼 입력 (필수 항목)</td></tr><tr><td><code>APPLY_PORT</code></td><td>Apply 프로세스의 포트 번호 (필수 항목)</td></tr><tr><td><code>APPLY_AGENT_ID_LIST</code></td><td>Apply 프로세스에 연결할 Agent ID (필수 항목)</td></tr><tr><td><code>LLOB_PORT</code></td><td>Llob 프로세스의 포트 번호 (필수 항목)</td></tr><tr><td><code>LLOB_AGENT_ID_LIST</code></td><td>Llob 프로세스에 연결할 Agent ID (필수 항목)</td></tr><tr><td><code>SRC_DB_TYPE</code></td><td>Source DB 종류. (TIBERO / ORACLE / POSTGRE) (필수 항목)</td></tr><tr><td><code>SRC_DB_NAME</code></td><td>Source DB의 별칭(Alias). (필수 항목)</td></tr><tr><td><code>SRC_INSTALL_USER</code></td><td>Source DB 접속용 계정. 설치에 필요한 권한을 갖춘 계정이어야 함. (필수 항목)</td></tr><tr><td><code>SRC_INSTALL_PWD</code></td><td>SRC_INSTALL_USER의 암호. 설정하지 않으면 설치 중 입력받음.</td></tr><tr><td><code>AUTO_ADD_SUPP_LOG</code></td><td>동기화 대상 테이블에 supplemental log를 자동 추가할지 여부. (기본값: Y)</td></tr><tr><td><code>SRC_SKIP_TS_CREATE</code></td><td>테이블스페이스를 생성하지 않고 기존 것을 사용할 경우 설정. (기본값: N)</td></tr><tr><td><code>SRC_DB_CNT</code></td><td>클러스터 환경에서 노드 수. (기본값: 1)</td></tr><tr><td><code>SRC_DB_REAL_NAME</code></td><td>Source DB의 DB Name.</td></tr><tr><td><code>SRC_DB_IP</code></td><td>Source DB의 IP 주소. </td></tr><tr><td><code>SRC_DB_PORT</code></td><td>Source DB의 포트 번호.</td></tr><tr><td><code>SRC_DB_ALIAS_[n]</code></td><td>클러스터 환경에서 각 노드의 DB 별칭. SRC_DB_CNT 수만큼 입력.</td></tr><tr><td><code>SUPP_LOG_LVL_ALL</code></td><td>supplemental log를 걸 때 level 설정 여부. Y 설정 시 database level로 설정됨. (기본값: N )</td></tr><tr><td><code>AUTO_SYNC_ON_CREATE</code></td><td>ProSync 설치 이후 CREATE 문으로 생성된 테이블 및 시퀀스를 자동으로 동기화 대상에 등록할지 여부를 지정 (Oracle 전용, 기본값: N)</td></tr><tr><td><code>USE_LOGMNR</code></td><td>Oracle LogMiner를 통해 로그를 추출할 경우 설정. (기본값: N)</td></tr><tr><td><code>DICT_FILE_DIR</code></td><td>Oracle LogMiner 사용 시 dict 파일 저장 위치. Oracle 유저가 접근 가능해야 함.</td></tr><tr><td><code>PRS_EXT_IP</code></td><td>for mysql only </td></tr><tr><td><code>TAR_DB_TYPE</code></td><td>Target DB 종류. (TIBERO / ORACLE / POSTGRESQL) (필수 항목)</td></tr><tr><td><code>TAR_DB_NAME</code></td><td>Target DB 별칭(Alias). (필수 항목)</td></tr><tr><td><code>TAR_INSTALL_USER</code></td><td>Target DB 접속용 계정. 설치 권한을 갖춘 계정이어야 함. (필수 항목)</td></tr><tr><td><code>TAR_INSTALL_PWD</code></td><td><code>TAR_INSTALL_USER</code>의 암호. 설정하지 않으면 설치 중 입력받음.</td></tr><tr><td><code>TAR_SKIP_TS_CREATE</code></td><td>테이블스페이스를 생성하지 않고 기존 것을 사용할 경우 설정. (기본값:  N)</td></tr><tr><td><code>TAR_DB_REAL_NAME</code></td><td>Target DB의 DB Name.</td></tr><tr><td><code>TAR_DB_IP</code></td><td>Target DB의 IP 주소.</td></tr><tr><td><code>TAR_DB_PORT</code></td><td>Target DB의 포트 번호. </td></tr><tr><td><code>PRS_APPLY_IP</code></td><td>for mysql only </td></tr><tr><td><code>GROUP_NUM</code></td><td>Multi-Grouping 모드에서 replay group 수. (기본값: 1)</td></tr><tr><td><code>USE_TDE</code></td><td><code>TDE_WALLET_PWD</code>를 수동으로 입력받기 위한 설정. Y로 설정 시 설치 중 사용자 입력 요구.</td></tr></tbody></table>

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

특수문자 사용 시 이스케이프 처리가 필요하다.&#x20;

(예: PRS\_PWD="example123!@#" -> PRS\_PWD=\\"example123\\!\\@\\#\\")

또한, IP 주소 입력 시 VIP(Virtual IP) 대신 실제 IP 주소를 사용할 것을 권장한다.
{% endhint %}

### **설정 예시**

아래는 파라미터를 설정한 예시이다.

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

############################################
#
# Source database informations
#
############################################

# (Mandatory)
SRC_DB_TYPE=TIBERO
SRC_DB_NAME=src_tibero
SRC_INSTALL_USER=sys
SRC_INSTALL_PWD=tibero

# (Optional)
#AUTO_ADD_SUPP_LOG=Y
#SRC_SKIP_TS_CREATE=N
#AUTO_SYNC_ON_CREATE=N

# (Number Of Database Instances)
#SRC_DB_CNT=1

# (Dsn)
#SRC_DB_REAL_NAME=
#SRC_DB_IP_0=
#SRC_DB_PORT_0=
#SRC_DB_IP_1=
#SRC_DB_PORT_1=

# (for Cluster, only Extract Needed)
#SRC_DB_ALIAS_0=
#SRC_DB_ALIAS_1=

# (for ORACLE DB Only) 
#SUPP_LOG_LVL_ALL=N
#AUTO_SYNC_ON_CREATE=N 

# (for Oracle Logminer only)
# Oracle 11g or less, use utl_file_dir instead of DICT_FILE_DIR
#USE_LOGMNR=Y
#DICT_FILE_DIR=

# (for MySQL only)
#PRS_EXT_IP=

############################################
#
# Target database informations
#
############################################

# (Mandatory)
TAR_DB_TYPE=TIBERO
TAR_DB_NAME=tar_tibero
TAR_INSTALL_USER=sys
TAR_INSTALL_PWD=tibero

# (Optional)
#TAR_SKIP_TS_CREATE=N

# (Number Of Database Instances)
#TAR_DB_CNT=1

# (Dsn)
#TAR_DB_REAL_NAME=
#TAR_DB_IP_0=
#TAR_DB_PORT_0=
#TAR_DB_IP_1=
#TAR_DB_PORT_1=

# (for MySQL only)
#PRS_APPLY_IP=

# (for multi thread)
#GROUP_NUM=1

# (for TDE(transparent data encryption) synchronization)
#USE_TDE=N

```

###

***

## 2. Instance 설치

설정 파일(`prs_install.cfg`)이 준비된 후에는 다음과 같이 설치 스크립트를 실행한다.

```bash
$ . prs_install.sh [option] [config file] [list file]
```

### **사용 가능한 옵션**

| 옵션   | 설명                                         |
| ---- | ------------------------------------------ |
| `-h` | 도움말 출력                                     |
| `-c` | 사용할 환경설정 파일 지정 (기본값: `prs_install.cfg`)    |
| `-l` | 동기화 리스트 파일 지정 (기본값: `prs_obj_group1.list`) |

### **설치 예시**

옵션 없이 기본 설정 파일로 설치를 수행하는 경우

```bash
$ cd $PRS_HOME/install
$ . prs_install.sh
```

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

`prs_install.sh` 파일을 실행한 후 `prs_install.cfg`에 패스워드 옵션을 입력하지 않은 경우 각 계정에 대한 패스워드를 순서대로 입력해야 한다.
{% endhint %}

{% hint style="warning" %}
주의

`prs_install.sh` 파일 실행 시, 메타 테이블 및 트리거 생성중 ddl 발생하는 경우 이를 감지하지 못할 수 있으며  이후 동기화를 실패할 수 있다.
{% endhint %}

### **설치 결과 예시**

```bash
*******************************************************************************
* Check System Parameters (1/5)
********************************************************************************
Checking system type... Linux
Checking PRS_HOME... /home/prosync/example
Checking TB_HOME... /home/tibero/tibero7
Checking ORACLE_HOME... not found
Checking psql ... available
Checking psql service ...not found

********************************************************************************
* Check Installation Parameters (2/5)
********************************************************************************
Checking configuration file... ok
Checking prs_instance.map file... ok
Checking Instance Id from prs_instance.map...
* instance information for instance was not found. It will be written in this script...
ok
Checking proecsses infos...
* Checking Ext processes Informations... EXT_CNT: 1
* Delimiter: [,]
   * Ext[0] process's Agent Id List 
       * Agent ID[agent1]
       * [agent1] found.
* Checking Apply process Informations...
* Checking Apply Port..
   * APPLY_PORT=[7620]
* Checking Apply process's Agent Id List..
       * Agent ID[agent1]
       * [agent1] found.
* Checking Llob process Informations...
* Checking Llob Port..
   * LLOB_PORT=[7630]
* Checking Llob process's Agent Id List..
       * Agent ID[agent1]
       * [agent1] found.

Checking INSTANCE_ID... instance
Checking PRS_USER... prosync_user
Checking PRS_TS_NAME... instance_ts
Checking PRS_TS_FILE... instance_ts.dtf
Checking PRS_TS_SIZE... 1G
Checking PRS_EXT_IP... %
Checking PRS_APPLY_IP... %
Checking SRC_DB_CNT... 1
Checking SRC_DB_TYPE... TIBERO
Checking SRC_INSTALL_USER... sys
Checking SRC_DB_NAME... src_tibero
Checking source connection(1/2)... ok
Checking source connection(2/2)... ok
_list_create: Variable TAR_DB_IP_0 is undefined or empty.
_list_create: Variable TAR_DB_PORT_0 is undefined or empty.
Checking TAR_DB_TYPE... TIBERO
Checking TAR_INSTALL_USER... sys
Checking TAR_DB_NAME... tar_tibero
Checking target connection [tar_tibero](1/2)... ok
Checking target connection [tar_tibero](2/2)... ok

********************************************************************************
* Install to Source Database (3/5)
********************************************************************************
Checking archived log mode... ok
Usage: _list_get <list> <index>
Checking log mining parameters [src_tibero]... ok
Usage: _list_get <list> <index>
Get Archive log directory [src_tibero]... ok
Get Archive log format [src_tibero]... ok
Dropping ProSync objects... ok
Dropping ProSync tablespace... DROP TABLESPACE instance_ts INCLUDING CONTENTS AND DATAFILES;

done

ok
Creating ProSync tablespace... ok
Dropping ProSync user... ok
Creating ProSync user... ok
Granting privileges... ok
Granting privileges for trigger... ok
Creating ProSync internal tables... ok
Creating ProSync internal package... ok
Creating ProSync internal trigger... ok
Prosync user prosync_user to uppercase PROSYNC_USER... ok
Checking source object file(group num : 1)... ok
Building source object for TEST.%... ok
Building source object for TEST%.%... ok
Adding table supplemental log... 6, and one for prosync
  "PROSYNC_USER"."PRS_DUMMY_TBL" : Supplemental logging set
  "TEST"."T1" : supplemental log already exists, continue.
  "TEST"."T2" : supplemental log already exists, continue.
  "TEST"."T3" : supplemental log already exists, continue.
  "TEST"."T4" : supplemental log already exists, continue.
  "TEST"."T5" : supplemental log already exists, continue.
  prosync_user.PRS_DUMMY_TBL : supplemental log already exists, continue.
Counting total source objects... 6
Generating initial DDL history... ok
Checking initial DDL history... ok
Insert default value in PRS_DUMMY_TBL...ok
Querying NLS_CHARACTERSET... UTF8
Querying NLS_NCHAR_CHARACTERSET... UTF16
Switching logfile... ok
Usage: _list_get <list> <index>
Querying current log sequence [src_tibero]... 188
Querying current snapshot#... 4306566

********************************************************************************
* Install to Target Database (4/5)
********************************************************************************
Dropping ProSync objects... ok
Dropping ProSync tablespace... DROP TABLESPACE instance_ts INCLUDING CONTENTS AND DATAFILES;

done

ok
Creating ProSync tablespace... ok
Dropping ProSync user... ok
Creating ProSync user... ok
Granting privileges... ok
Creating ProSync internal tables... ok
Usage: _list_get <list> <index>
Generating initial construct history [src_tibero (group 1)]... ok
Generating initial commit history... ok

********************************************************************************
* Generate Configuration Parameters (5/5)
********************************************************************************
Generating Wallet... ok
Usage: _list_get <list> <index>
Generating Extract [src_tibero] configuration...  ok
Generating Apply [tar_tibero] configuration...  ok
Generating LONG/LOB configuration...  ok
Generating instance map to prs_instance.map ...


********************************************************************************
* ProSync is installed successfully on Thu, 17 Apr 2025 14:38:38 +0900.
*
*   PRS_HOME     = /home/prosync/example
*   Binary Path  = /home/prosync/example/bin
*   ProSync User = prosync_user
*
*   Archived Log Path     = /home/tibero/tibero7/database/tibero/archive/
*   Archived Log Format   = log-t%t-r%r-s%s.arc
*   Initial log sequence# = 188
*
*   Initial change# (TSN) = 4306566 
*
********************************************************************************

```

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

설치 중 오류가 발생하면, 오류가 발생한 지점과 관련된 메시지를 출력한 뒤 설치를 중단한다.&#x20;

자세한 오류 내용은 디버깅을 위해 로그 파일(`prs_install.log`)에 기록되며, 이를 통해 원인을 확인할 수 있다.
{% endhint %}

###

***

## **3. 설치 결과 확인**

설치가 완료되면 다음 디렉터리에서 결과 파일을 확인할 수 있다.

```bash
$ cd $PRS_HOME/config
$ ls -al
total 55
drwxr-xr-x  3 users users 4096 Apr 16 15:42 .
drwxr-xr-x 15 users users 4096 Apr 14 15:08 ..
-rw-r--r--  1 users users  547 Apr 17 14:38 instance_apply1.cfg
-rw-r--r--  1 users users  574 Apr 17 14:38 instance_ext1.cfg
-rw-r--r--  1 users users  470 Apr 17 14:38 instance_llob.cfg
-rw-r--r--  1 users users  352 Apr  3 16:19 prs_adm.cfg
-rw-r--r--  1 users users  367 Feb 27 19:22 prs_agent_agent1.cfg
-rw-r--r--  1 users users  367 Apr 16 15:32 prs_agent_agent2.cfg
-rw-r--r--  1 users users  367 Apr 16 15:32 prs_agent_agent3.cfg
-rw-r--r--  1 users users  367 Apr 16 15:32 prs_agent_agent4.cfg
-rw-r--r--  1 users users 1272 Apr 16 15:32 prs_instance.map
drwxr-xr-x  2 users users 4096 Apr 14 15:08 templates
-rw-r--r--  1 users users    5 Feb 27 13:06 variant
```

**주요 파일 설명**

* `<instance_id>_ext1.cfg`: ext process의 설정 파일
* `<instance_id>_apply1.cfg`: apply process의 설정 파일
* `<instance_id>_llob.cfg`: llob process의 설정 파일
* `prs_adm.cfg`: admin process의 설정 파일

### **생성된 설정 파일 예제**

#### **prs\_instance.map** 예시

```bash
#--------------------------------------------------------
# Appended by prs_install.sh at Thu Apr 17 02:38:37 PM KST 2025
#

instance=(
    EXT1=(AGENT=agent1)(PROGRAM=prs_ext)
    APPLY1=(AGENT=agent1)(PORT=7620)(PROGRAM=prs_apply)
    LLOB=(AGENT=agent1)(PORT=7630)(PROGRAM=prs_llob)
)
```

#### **instance\_ext1.cfg** 예시

```bash
################################################################################
#
# ProSync (Ext) Initialization Parameters
#
################################################################################

LOG_LEVEL=3

PRS_USER=prosync_user
PRS_PWD=#encrypted

EXTRACT_NUM=1

SRC_DB_TYPE=TIBERO
SRC_DB_NAME=src_tibero

ARCHIVE_LOG_DIR=/home/tibero/tibero7/database/tibero/archive/
ARCHIVE_LOG_FORMAT=log-t%t-r%r-s%s.arc

LOG_DIR=/home/prosync/example/var/instance/log
LOG_BACKUP_DIR=/home/prosync/example/var/instance/log/backup
```

#### **instance\_apply1.cfg** 예시

```bash
################################################################################
#
# ProSync (Apply) Initialization Parameters
#
################################################################################

LOG_LEVEL=3

PRS_USER=prosync_user
PRS_PWD=#encrypted

APPLY_NUM=1

TAR_DB_TYPE=TIBERO
TAR_DB_NAME=tar_tibero

SRC_DB_CNT=1

MAP=(TABLE DEFAULT)

DDL=(INCLUDE DEFAULT, TYPE=('ALTER TABLE','TRUNCATE TABLE'))

LOG_DIR=/home/prosync/example/var/instance/log
LOG_BACKUP_DIR=/home/prosync/example/var/instance/log/backup

```

#### **instance\_llob.cfg** 예시

```bash
################################################################################
#
# ProSync (llob) Initialization Parameters
#
################################################################################

LOG_LEVEL=3

PRS_USER=prosync_user
PRS_PWD=#encrypted

SRC_DB_TYPE=TIBERO
SRC_DB_NAME=src_tibero

LLOB_FLASHBACK_ERROR=CURRENT

LOG_DIR=/home/prosync/example/var/instance/log
LOG_BACKUP_DIR=/home/prosync/example/var/instance/log/backup 
```

#### **prs\_adm.cfg** 예시

```bash
################################################################################
#
# ProSync (Admin) Initialization Parameters
#
################################################################################
LOG_LEVEL=3
LOG_DIR=/home/prosync/example/var/admin/log
LOG_BACKUP_DIR=/home/prosync/example/var/admin/log/backup
```

### **Var 디렉토리 확인**

Instance 설치가 성공적으로 완료되면, `$PRS_HOME/var` 디렉토리 하위에 다음과 같은 서브 디렉토리가 자동으로 생성된다:

* admin
* instance\_id

이 디렉토리들 하위에는  해당 프로세스의 실행 로그 파일들이나 dump 파일, prosync 운영에 필요한 파일들이 저장된다.

```
# tree 결과예제
.
├── admin
├── agent
└── instance
```

### **메타 테이블 생성 확인**

설치가 완료되면 Source DB 및 Target DB에 ProSync 운영에 필요한 메타 테이블과 객체들이 생성된다.&#x20;

아래는 정상적으로 생성되었는지 확인해야 할 주요 메타 테이블 및 객체 목록이다.

#### Source DB

* **동기화 및 추출 이력 관리 테이블**

| 테이블명                       | 설명                                                                           |
| -------------------------- | ---------------------------------------------------------------------------- |
| `PRS_DDL_HIST`             | DDL 발생에 따른 DD 이미지 정보 관련 히스토리 테이블                                             |
| `PRS_DD_COL`               | 동기화 대상 테이블의 컬럼 정보                                                            |
| `PRS_DD_CON`               | DB constraint 정보를 저장                                                         |
| `PRS_DD_ENC`               | 암호화된 컬럼 관련 정보                                                                |
| `PRS_DD_SEQ_TBL`           | Data Dictionary에 대한 시퀀스와 그 때의 오브젝트 정보를 가지고 있다. 이 테이블은 추가적으로 drop된 여부까지 판단한다. |
| `PRS_DD_SGMT`              | 동기화 대상 테이블의 세그먼트 ID 정보를 저장                                                   |
| `PRS_DD_TBL`               | 동기화 대상 테이블 이름 정보를 저장                                                         |
| `PRS_DD_USR`               | Source DB 사용자 정보를 저장                                                         |
| `PRS_DD_SEQ`               | Data Dictionary용 시퀀스                                                         |
| `PRS_DICT_HIST`            | TSN 기준 Dictionary 파일 이름 저장                                                   |
| `PRS_DUMMY_TBL`            | Dummy log를 생성시키기 위해 dummy dml을 수행하는 테이블                                      |
| `PRS_IMPORTED_ARCHIVE_LOG` | Oracle 로그마이너 모드에서 특정 archive log 지정 시 사용                                     |
| `PRS_INSTALL_HIST`         | 설치한 유저 정보 및 설치 시간 저장                                                         |
| `PRS_IPARAM`               | ProSync 파라미터 정보를 저장                                                          |
| `PRS_LOGMNR_INFO`          | Oracle 로그마이너 추출 관련 정보를 저장                                                    |
| `PRS_OBJ_LIST`             | 동기화 대상 오브젝트 ID 정보를 저장                                                        |
| `PRS_TXINFO`               | 트랜잭션 정보 저장 테이블                                                               |

* **동기화 및 추출 관련 PACKAGE 및 TRIGGER**

| 객체명           | 설명                           |
| ------------- | ---------------------------- |
| `PRS_DD_META` | `PRS_DDL_TRG`가 이미지 관리를 위해 사용 |
| `PRS_DUMMY`   | Dummy 부하 생성을 위한 PACKAGE      |
| `PRS_DDL_TRG` | DD 이미지 관리를 위한 Trigger        |

#### Target DB

* **동기화 및 추출 이력 관리 테이블**

| 테이블명                    | 설명                           |
| ----------------------- | ---------------------------- |
| `PRS_INSTALL_HIST`      | 설치 정보 저장                     |
| `PRS_CONST_HIST`        | 반영된 리두/아카이브 로그 정보 저장         |
| `PRS_CONST_SEQ`         | 반영된 리두/아카이브 로그 정보의 시퀀스 저장    |
| `PRS_LCT`               | 반영 스레드가 마지막으로 반영한 TX의 정보를 저장 |
| `PRS_COMMITTED_TX_LIST` | Source DB에서 커밋된 TX 정보 저장     |

###
