

# 시간대 파일 업데이트 준비
<a name="Appendix.Oracle.Options.Timezone-file-autoupgrade.preparing"></a>

시간대 파일 업그레이드에는 준비와 업그레이드라는 두 가지 단계가 있습니다. 필수는 아니지만 준비 단계를 수행하는 것이 좋습니다. 이 단계에서는 PL/SQL 프로시저 `DBMS_DST.FIND_AFFECTED_TABLES`를 실행하여 영향을 받게 될 데이터를 찾습니다. 준비 기간에 대한 자세한 내용은 Oracle 데이터베이스 설명서에서 [시간대 데이터를 사용하여 시간대 파일 및 타임스탬프 업그레이드](https://docs.oracle.com/en/database/oracle/oracle-database/19/nlspg/datetime-data-types-and-time-zone-support.html#GUID-B0ACDB2E-4B49-4EB4-B4CC-9260DAE1567A)를 참조하세요.

**시간대 파일 업데이트를 준비하려면**

1. SQL 클라이언트를 사용하여 Oracle 데이터베이스에 연결합니다.

1. 사용된 현재 시간대 파일 버전을 확인합니다.

   ```
   SELECT * FROM V$TIMEZONE_FILE;
   ```

1. DB 인스턴스에 사용 가능한 최신 시간대 파일 버전을 확인합니다.

   ```
   SELECT DBMS_DST.GET_LATEST_TIMEZONE_VERSION FROM DUAL;
   ```

1. `TIMESTAMP WITH LOCAL TIME ZONE` 또는 `TIMESTAMP WITH TIME ZONE` 유형의 열이 있는 테이블의 총 크기를 결정합니다.

   ```
   SELECT SUM(BYTES)/1024/1024/1024 "Total_size_w_TSTZ_columns_GB"
   FROM   DBA_SEGMENTS
   WHERE  SEGMENT_TYPE LIKE 'TABLE%'
   AND    (OWNER, SEGMENT_NAME) IN
            (SELECT OWNER, TABLE_NAME
             FROM   DBA_TAB_COLUMNS
             WHERE  DATA_TYPE LIKE 'TIMESTAMP%TIME ZONE');
   ```

1. `TIMESTAMP WITH LOCAL TIME ZONE` 또는 `TIMESTAMP WITH TIME ZONE` 유형의 열이 있는 세그먼트의 이름과 크기를 결정합니다.

   ```
   SELECT OWNER, SEGMENT_NAME, SUM(BYTES)/1024/1024/1024 "SEGMENT_SIZE_W_TSTZ_COLUMNS_GB"
   FROM   DBA_SEGMENTS
   WHERE  SEGMENT_TYPE LIKE 'TABLE%'
   AND    (OWNER, SEGMENT_NAME) IN
            (SELECT OWNER, TABLE_NAME
             FROM   DBA_TAB_COLUMNS
             WHERE  DATA_TYPE LIKE 'TIMESTAMP%TIME ZONE')
   GROUP BY OWNER, SEGMENT_NAME;
   ```

1. 준비 단계를 실행합니다.
   + `DBMS_DST.CREATE_AFFECTED_TABLE` 프로시저는 영향을 받는 데이터를 저장할 테이블을 생성합니다. 이 테이블의 이름을 `DBMS_DST.FIND_AFFECTED_TABLES` 프로시저에 전달합니다. 자세한 내용은 Oracle 데이터베이스 설명서에서 [CREATE\$1AFFECTED\$1TABLE 프로시저](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_DST.html#GUID-C53BAABA-914A-404C-9CD5-823257BE0B00)를 참조하세요.
   + 이 프로시저 `CREATE_ERROR_TABLE`은 오류를 기록할 테이블을 생성합니다. 자세한 내용은 Oracle 데이터베이스 설명서에서 [CREATE\$1ERROR\$1TABLE 프로시저](https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_DST.html#GUID-6A7EA024-B02D-4486-B1D6-EF6ABF5DE507)를 참조하세요.

   다음 예에서는 영향을 받는 데이터 및 오류 테이블을 만들고 영향을 받는 테이블을 모두 찾습니다.

   ```
   EXEC DBMS_DST.CREATE_ERROR_TABLE('my_error_table')
   EXEC DBMS_DST.CREATE_AFFECTED_TABLE('my_affected_table')
   
   EXEC DBMS_DST.BEGIN_PREPARE(new_version);
   EXEC DBMS_DST.FIND_AFFECTED_TABLES('my_affected_table', TRUE, 'my_error_table');
   EXEC DBMS_DST.END_PREPARE;
   
   SELECT * FROM my_affected_table;
   SELECT * FROM my_error_table;
   ```

1. 영향을 받는 테이블과 오류 테이블을 쿼리합니다.

   ```
   SELECT * FROM my_affected_table;
   SELECT * FROM my_error_table;
   ```