> For the complete documentation index, see [llms.txt](https://docs.tibero.com/prosync/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/prosync/administration/extract/key-features/source-oracle-asm.md).

# Source Oracle ASM 로그 추출

Source Oracle이 ASM(Automatic Storage Management)을 사용하는 환경에서 Redo Log와 Archive Log를 추출하는 구성과 운영 방법을 안내한다.

ProSync는 Source Oracle이 ASM(Automatic Storage Management)을 사용하는 환경에서 ASM Diskgroup에 저장된 Redo Log와 Archive Log를 추출할 수 있다.

ASM Diskgroup의 파일은 운영체제 파일 시스템에 그대로 노출되지 않으므로 일반적인 파일 읽기로는 접근할 수 없다. Extract 프로세스는 ASM 인스턴스에 직접 접속하여 Diskgroup 경로(`+`로 시작하는 경로)의 로그 파일을 읽는다.

## 지원 범위

| 구분        | 지원 대상                        |
| --------- | ---------------------------- |
| Source DB | Oracle (ASM 구성)              |
| 대상 프로세스   | Extract                      |
| 추출 대상 로그  | Online Redo Log, Archive Log |

## 동작 구조

Extract 프로세스는 읽으려는 로그 파일의 경로를 보고 읽기 경로를 결정한다.

| 로그 파일 경로                   | 읽기 경로                               |
| -------------------------- | ----------------------------------- |
| `+`로 시작하는 ASM Diskgroup 경로 | ASM 인스턴스 접속(`ASM_DB_NAME`)을 통해 읽는다. |
| 절대 경로의 파일 시스템 경로           | 파일 시스템에서 직접 읽는다.                    |

경로에 따라 읽기 경로가 결정되므로 Redo Log와 Archive Log 중 일부만 ASM Diskgroup에 저장된 혼합 구성에서도 사용할 수 있다. ASM 사용 여부를 지정하는 별도의 파라미터는 없으며, ASM 접속 정보를 설정하면 ASM 경로의 파일에 대해 ASM 읽기가 사용된다.

### I/O Worker 세션

ASM 경로의 로그를 읽을 때 Extract 프로세스는 ASM 인스턴스에 `ASM_IO_WORKERS` 개수만큼 병렬 I/O Worker 세션을 만든다. 각 Worker는 로그 파일 읽기만 수행하고, 읽어온 Redo의 분석은 로그 리더가 별도로 수행한다.

`ASM_IO_WORKERS`는 Extract 프로세스 기동 시에만 반영되므로, 값을 변경한 경우 Extract 프로세스를 재기동해야 한다.

## 사전 준비

### ASM 인스턴스 접속 별칭 등록

Extract 프로세스가 ASM 인스턴스에 접속할 별칭을 `tnsnames.ora`에 등록한다. 이 별칭을 `ASM_DB_NAME`에 설정한다.

```
+ASM =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.10)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = +ASM)
      (INSTANCE_NAME = +ASM1)
      (UR = A)
    )
  )
```

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

ASM 인스턴스는 `MOUNTED` 상태로만 기동되므로, 접속 별칭에 `(UR = A)`를 설정해야 접속이 제한되지 않는다.

RAC 환경에서는 Extract 프로세스별로 해당 노드의 ASM 인스턴스에 직접 접속하는 별칭을 사용한다.
{% endhint %}

### 계정 권한 확인

ASM 접속 계정은 ASM 인스턴스에 접속하여 Diskgroup의 파일을 읽을 수 있어야 하므로 `SYSASM` 권한을 가진 계정을 사용한다.

등록한 별칭으로 접속이 되는지 확인한다.

```bash
$ sqlplus asm_user/asm_password@+ASM as sysasm
SQL> SELECT INSTANCE_NAME, STATUS FROM V$INSTANCE;
SQL> SELECT NAME, STATE FROM V$ASM_DISKGROUP;
```

### 로그 파일 위치 확인

Redo Log와 Archive Log가 ASM Diskgroup에 저장되어 있는지 확인한다. 경로가 `+`로 시작하면 ASM 로그 추출 설정이 필요하다.

```sql
SELECT MEMBER FROM V$LOGFILE;
SHOW PARAMETER log_archive_dest
SHOW PARAMETER db_recovery_file_dest
```

## 설정 파라미터

| 파라미터             | 설명                                                                                                                       |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------ |
| ASM\_DB\_NAME    | 로그 리더가 사용할 Oracle ASM 인스턴스의 별칭(Alias)을 설정한다. ASM 경로(`+...`)의 Redo Log 및 Archive Log 접근에 필요하다. (적용: Extract)              |
| ASM\_USER        | 로그 리더가 사용할 Oracle ASM 접속 계정을 설정한다. (적용: Extract)                                                                         |
| ASM\_PWD         | `ASM_USER`의 비밀번호를 설정한다. 암호화되어 wallet에 저장되며, config 파일에는 `#encrypted`로 표시된다. (적용: Extract)                                |
| ASM\_IO\_WORKERS | ASM Redo를 읽을 때 사용할 병렬 I/O Worker 세션 수를 설정한다. 기본값은 `4`이며 `1` \~ `8` 범위로 설정할 수 있다. Extract 프로세스 기동 시에만 적용된다. (적용: Extract) |

## 설정 예시

### Extract 설정

```
SRC_DB_TYPE=ORACLE
SRC_DB_NAME=src_oracle

ASM_DB_NAME=+ASM
ASM_USER=sys
ASM_PWD=#encrypted
ASM_IO_WORKERS=4
```

`ASM_PWD=#encrypted`는 암호화된 문자열 자체가 아니라, 실제 비밀번호를 wallet 파일에서 읽으라는 표시(sentinel)이다. 따라서 config 파일만 다른 노드로 복사해서는 프로세스를 기동할 수 없으며 wallet 파일(`var/<instance>/.wallet_asm`)을 함께 이관해야 한다.

### 설치 구성

설치 config 파일에 ASM 접속 정보를 설정하면 설치 과정에서 ASM 구성이 반영된다.

```
SRC_DB_TYPE=ORACLE
SRC_DB_NAME=src_oracle
SRC_INSTALL_USER=sys
SRC_INSTALL_PWD=oracle

# (for Oracle ASM only)
ASM_DB_NAME=+ASM
ASM_USER=sys
ASM_PWD=asm_password
```

ASM 접속 정보를 설정하고 설치하면 다음이 수행된다.

* `ASM_PWD` 암호화 및 wallet 파일 저장
* 생성되는 Extract config에 ASM 파라미터 자동 기입

설치 후 생성된 Extract config에 다음 값이 기입되어 있는지 확인한다.

```
ASM_DB_NAME=+ASM
ASM_USER=sys
ASM_PWD=#encrypted
```

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

`ASM_DB_NAME`, `ASM_USER`, `ASM_PWD` 세 값을 모두 기입해야 ASM 구성이 반영된다. 하나라도 비어 있으면 별도 프롬프트 없이 ASM 구성이 생략되므로 주의한다.
{% endhint %}

## 동작 방식

### Redo Log 읽기

Extract 프로세스는 활성 Online Redo Log의 경로가 ASM Diskgroup 경로인 경우 ASM 인스턴스 접속을 통해 해당 파일을 읽는다. 읽기는 I/O Worker 세션이 병렬로 수행하고, 로그 리더는 읽어온 블록의 Redo를 분석하여 LCR을 생성한다.

### Archive Log 경로 결정

Archive Log는 다음 순서로 위치를 결정한다.

1. `ARCHIVE_LOG_DIR`이 설정된 경우 해당 디렉터리에서 Archive Log 파일을 먼저 찾는다.
2. 해당 디렉터리에서 찾지 못하거나 `ARCHIVE_LOG_DIR`이 설정되지 않은 경우 `V$ARCHIVED_LOG` 조회 결과의 ASM 경로(`+DISKGROUP/...`)로 접근한다.

`ARCHIVE_LOG_DIR`은 절대 경로의 디렉터리만 유효한 값이다. 따라서 `log_archive_dest`가 FRA(`USE_DB_RECOVERY_FILE_DEST`)이거나 ASM Diskgroup(`+...`)인 표준 ASM 구성에서는 설치 과정에서 `ARCHIVE_LOG_DIR`에 값이 기입되지 않으며, Archive Log 위치는 위의 순서에 따라 운영 중에 결정된다.

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

ASM 구성에서 `ARCHIVE_LOG_DIR`에 ASM Diskgroup 경로나 `USE_DB_RECOVERY_FILE_DEST`와 같은 값을 직접 기입하면 Extract 프로세스 기동이 실패하거나 Archive Log 추출이 진행되지 않을 수 있다. 파일 시스템 경로에 별도의 Archive Log가 있는 구성이 아니라면 `ARCHIVE_LOG_DIR`을 비워 둔다.
{% endhint %}

### ASM 접속 비밀번호 저장

`ASM_PWD`는 암호화되어 인스턴스의 wallet 파일(`var/<instance>/.wallet_asm`)에 저장된다. wallet 파일은 백업 대상에 포함해야 하며, ASM 접속 계정의 비밀번호를 변경한 경우 wallet을 다시 생성해야 한다.

## 제약사항

* ASM 로그 추출은 Source Oracle 전용이다.
* `ASM_IO_WORKERS`는 Extract 프로세스 기동 시에만 적용된다. 운영 중 변경하려면 프로세스를 재기동해야 한다.
* `ASM_IO_WORKERS`는 최대 8까지 설정할 수 있다.
* ASM 접속 정보를 설정하지 않으면 ASM 경로의 로그 파일을 읽을 수 없다.
