Oracle 시간대 파일 자동 업그레이드 - Amazon Relational Database Service

Oracle 시간대 파일 자동 업그레이드

TIMEZONE_FILE_AUTOUPGRADE 옵션을 사용하면 현재 시간대 파일을 RDS for Oracle DB 인스턴스의 최신 버전으로 업그레이드할 수 있습니다.

Oracle 시간대 파일 개요

Oracle 데이터베이스 시간대 파일은 다음 정보를 저장합니다.

  • 협정 세계표준시(UTC)의 오프셋

  • 일광 절약 시간(DST) 전환 시간

  • 표준 시간 및 DST의 약어

Oracle Database는 여러 버전의 시간대 파일을 제공합니다. 온프레미스 환경에서 Oracle 데이터베이스를 만들 때 시간대 파일 버전을 선택합니다. 자세한 내용은 Oracle Database Globalization Support GuideChoosing a Time Zone File(시간대 파일 선택)을 참조하세요.

DST에 대한 규칙이 변경되면 Oracle은 새 표준 시간대 파일을 게시합니다. Oracle은 분기별 Release Updates(RUs) 및 Release Update Revisions(RURs) 일정과 별도로 이러한 새 표준 시간대 파일을 릴리스합니다. 시간대 파일은 데이터베이스 호스트의 $ORACLE_HOME/oracore/zoneinfo/ 디렉터리에 있습니다. 시간대 파일 이름은 DSTv35와 같이 DSTvversion 형식을 사용합니다.

시간대 파일이 데이터 전송에 미치는 영향

Oracle Database에서 TIMESTAMP WITH TIME ZONE 데이터 형식은 타임스탬프 및 시간대 데이터를 저장합니다. TIMESTAMP WITH TIME ZONE 데이터 형식의 데이터는 연결된 시간대 파일 버전의 규칙을 사용합니다. 따라서 표준 시간대 파일을 업데이트하면 기존 TIMESTAMP WITH TIME ZONE 데이터가 영향을 받습니다.

다른 버전의 표준 시간대 파일을 사용하는 데이터베이스 간에 데이터를 전송할 때 문제가 발생할 수 있습니다. 예를 들어, 대상 데이터베이스보다 높은 시간대 파일 버전을 사용하는 소스 데이터베이스에서 데이터를 가져오려고 하면 데이터베이스에 ORA-39405 오류가 발생합니다. 이전에는 다음 방법 중 하나를 사용하여 이 오류를 해결해야 했습니다.

  • 원하는 시간대 파일을 사용하여 RDS for Oracle DB 인스턴스를 생성하고 소스 데이터베이스에서 데이터를 내보낸 다음 새 데이터베이스로 가져옵니다.

  • AWS DMS 또는 논리적 복제를 사용하여 데이터를 마이그레이션합니다.

TIZONE_파일_AUTOUPGRADE 옵션을 사용한 자동 업데이트

RDS for Oracle DB 인스턴스에 연결된 옵션 그룹에 TIMEZONE_FILE_AUTOUPGRADE 옵션이 포함되어 있으면 RDS가 시간대 파일을 자동으로 업데이트합니다. Oracle 데이터베이스에서 동일한 시간대 파일 버전을 사용하도록 하면 서로 다른 환경 간에 데이터를 이동할 때 시간이 많이 걸리는 수동 기술을 사용하지 않아도 됩니다. TIMEZONE_FILE_AUTOUPGRADE 옵션에서는 컨테이너 데이터베이스(CDB)와 비 CDB가 모두 지원됩니다.

TIMEZONE_FILE_AUTOUPGRADE 옵션을 추가할지 또는 유지 관리 기간에 추가할지 또는 유지 관리 기간에 추가할지 선택할 수 있습니다. DB 인스턴스에서 새 옵션을 적용한 후 RDS는 최신 DSTvversion 파일을 설치할 수 있는지 확인합니다. 대상 DSTv 버전은 다음에 따라 달라집니다.

  • DB 인스턴스가 현재 실행 중인 마이너 엔진 버전

  • DB 인스턴스를 업그레이드하려는 마이너 엔진 버전

예를 들어, 현재 시간대 파일 버전은 DSTv33일 수 있습니다. RDS가 옵션 그룹에 업데이트를 적용할 때, DB 인스턴스 파일 시스템에서 현재 DSTv34를 사용 가능하다고 판단할 수 있습니다. 그러면 RDS가 표준 시간대 파일을 DSTv34로 자동 업데이트합니다.

지원되는 RDS 릴리스 업데이트에서 사용 가능한 DST 버전을 찾으려면 Amazon Relational Database Service(Amazon RDS) for Oracle 릴리스 정보의 패치를 살펴보세요. 예를 들어 버전 19.0.0.0.ru-2022-10.rur-2022-10.r1은 패치 34533061: RDBMS - DSTV39 UPDATE - TZDATA2022C를 나열합니다.

시간대 파일 업데이트 전략

DB 엔진 업그레이드와 옵션 그룹에 TIMEZONE_FILE_AUTOUPGRADE 옵션을 추가하는 작업은 별개입니다. TIMEZONE_FILE_AUTOUPGRADE 옵션을 추가하면 더 최신 파일을 사용할 수 있는 경우 시간대 파일의 업데이트가 시작됩니다. 다음 명령(관련 옵션만 표시됨)을 즉시 또는 다음 유지 관리 기간에 실행합니다.

  • 다음 RDS CLI 명령을 사용해서만 DB 엔진을 업그레이드합니다.

    modify-db-instance --engine-version name ...
  • 다음 CLI 명령만 사용하여 TIMEZONE_FILE_AUTOUPGRADE 옵션을 추가합니다.

    add-option-to-option-group --option-group-name name --options OptionName=TIMEZONE_FILE_AUTOUPGRADE ...
  • 다음 CLI 명령을 사용하여 DB 엔진을 업그레이드하고 인스턴스에 새 옵션 그룹을 추가합니다.

    modify-db-instance --engine-version name --option-group-name name ...

업데이트 전략은 데이터베이스와 시간대 파일을 함께 업그레이드할지 아니면 이러한 작업 중 하나만 수행할지 결정합니다. 옵션 그룹을 업데이트한 다음 별도의 API 작업으로 DB 엔진을 업그레이드하는 경우 DB 엔진을 업그레이드할 때 시간대 파일 업데이트가 현재 진행 중일 수 있다는 점에 유의하세요.

이 섹션의 예에서는 다음과 같이 가정합니다.

  • TIMEZONE_FILE_AUTOUPGRADE를 DB 인스턴스와 현재 연결되어 있는 옵션 그룹에 아직 추가하지 않았습니다.

  • DB 인스턴스가 데이터베이스 버전 19.0.0.0.ru-2019-07.rur-2019-07.r1 및 표준 시간대 파일 DSTv33을 사용합니다.

  • DB 인스턴스 파일 시스템에 DSTv34 파일이 포함되어 있습니다.

  • 릴리스 업데이트 19.0.0.0.ru-2022-10.rur-2022-10.r1에 DSTv35가 포함되어 있습니다.

다음 전략을 사용하여 시간대 파일을 업데이트할 수 있습니다.

엔진을 업그레이드하지 않고 시간대 파일 업데이트

이 시나리오에서 데이터베이스는 DSTv33을 사용하고 있지만, DB 인스턴스 파일 시스템에서 DSTv34를 사용할 수 있습니다. DB 인스턴스에서 사용하는 표준 시간대 파일을 DSTv33에서 DSTv34로 업데이트하고 싶지만 엔진은 새 마이너 버전(DSTv35 포함됨)으로 업그레이드하지 않으려고 합니다.

add-option-to-option-group 명령으로 TIMEZONE_FILE_AUTOUPGRADE를 DB 인스턴스가 사용하는 옵션 그룹에 추가합니다. 옵션을 즉시 추가할지 아니면 유지 관리 기간으로 연기할지 지정합니다. RDS는 TIMEZONE_FILE_AUTOUPGRADE 옵션을 적용한 후 다음을 수행합니다.

  1. 새 DST 버전이 있는지 확인합니다.

  2. 파일 시스템에서 DSTv34를 사용할 수 있는지 확인합니다.

  3. 시간대 파일을 즉시 업데이트합니다.

시간대 파일 및 DB 엔진 버전 업그레이드

이 시나리오에서 데이터베이스는 DSTv33을 사용하고 있지만, DB 인스턴스 파일 시스템에서 DSTv34를 사용할 수 있습니다. 엔진 업그레이드 중 DB 엔진을 마이너 버전 19.0.0.0.ru-2022-10.rur-2022-10.r1(DSTv35 포함됨)로 업그레이드하고, 표준 시간대 파일을 DSTv35로 업데이트하려고 합니다. 따라서 목표는 DSTv34를 건너뛰고 표준 시간대 파일을 DSTv35로 직접 업데이트하는 것입니다.

엔진과 시간대 파일을 함께 업그레이드하려면 --option-group-name--engine-version 옵션과 함께 modify-db-instance를 실행합니다. 명령을 즉시 실행하거나 유지 관리 기간으로 연기할 수 있습니다. In --option-group-nameTIMEZONE_FILE_AUTOUPGRADE 옵션이 포함된 옵션 그룹을 지정하세요. 예:

aws rds modify-db-instance --db-instance-identifier my-instance \ --engine-version new-version \ ----option-group-name og-with-timezone-file-autoupgrade \ --apply-immediately

RDS는 엔진을 19.0.0.0.ru-2022-10.rur-2022-10.r1으로 업그레이드하기 시작합니다. TIMEZONE_FILE_AUTOUPGRADE 옵션이 적용된 후 RDS는 새 DST 버전을 확인하고, 19.0.0.0.ru-2022-10.rur-2022-10.r1에서 DSTv35를 사용할 수 있는지 확인한 후 즉시 DSTv35로 업데이트를 시작합니다.

엔진을 즉시 업그레이드한 다음 시간대 파일을 업그레이드하려면 작업을 순서대로 수행합니다.

  1. 다음 CLI 명령을 사용해서만 DB 엔진을 업그레이드합니다.

    aws rds modify-db-instance \ --db-instance-identifier my-instance \ --engine-version new-version \ --apply-immediately
  2. 다음 CLI 명령을 사용하여 인스턴스에 연결된 옵션 그룹에 TIMEZONE_FILE_AUTOUPGRADE 옵션을 추가합니다.

    aws rds add-option-to-option-group \ --option-group-name og-in-use-by-your-instance \ --options OptionName=TIMEZONE_FILE_AUTOUPGRADE \ --apply-immediately

시간대 파일 업데이트 없이 DB 엔진 버전 업그레이드

이 시나리오에서 데이터베이스는 DSTv33을 사용하고 있지만, DB 인스턴스 파일 시스템에서 DSTv34를 사용할 수 있습니다. DB 엔진을 버전 19.0.0.0.ru-2022-10.rur-2022-10.r1(DSTv35 포함됨)로 업그레이드하되, 표준 시간대 파일 DSTv33은 유지하려고 합니다. 다음과 같은 이유로 이 전략을 선택할 수 있습니다.

  • 데이터가 TIMESTAMP WITH TIME ZONE 데이터 형식을 사용하지 않습니다.

  • 데이터가 TIMESTAMP WITH TIME ZONE 데이터 형식을 사용하지만 시간대 변경의 영향을 받지 않습니다.

  • 추가 가동 중지 시간을 허용할 수 없기 때문에 시간대 파일 업데이트를 연기하려고합니다.

전략은 다음 가능성 중 어느 것에 해당하는지에 따라 달라집니다.

  • DB 인스턴스가 TIMEZONE_FILE_AUTOUPGRADE를 포함하는 옵션 그룹과 연결되어 있지 않습니다. RDS가 시간대 파일을 업데이트하지 않도록 modify-db-instance 명령으로 새 옵션 그룹을 지정하지 마세요.

  • DB 인스턴스가 현재 TIMEZONE_FILE_AUTOUPGRADE를 포함하는 옵션 그룹과 연결되어 있습니다. 단일 modify-db-instance 명령 내에서 DB 인스턴스를 TIMEZONE_FILE_AUTOUPGRADE를 포함하지 않는 옵션 그룹에 연결하고 DB 엔진을 19.0.0.0.ru-2022-10.rur-2022-10.r1로 업그레이드합니다.

시간대 파일 업데이트 중 가동 중지 시간

RDS가 시간대 파일을 업데이트하면 TIMESTAMP WITH TIME ZONE을 사용하는 기존 데이터가 변경될 수 있습니다. 이 경우 주요 고려 사항은 가동 중지 시간입니다.

주의

TIMEZONE_FILE_AUTOUPGRADE 옵션을 추가하면 엔진 업그레이드의 가동 중지 시간이 길어질 수 있습니다. 대규모 데이터베이스의 시간대 데이터를 업데이트하는 데에는 몇 시간 또는 며칠이 걸릴 수 있습니다.

시간대 파일 업데이트에 소요되는 시간은 다음과 같은 요인에 따라 달라집니다.

  • 데이터베이스의 TIMESTAMP WITH TIME ZONE 데이터 양

  • DB 인스턴스 구성

  • DB 인스턴스 클래스

  • 스토리지 구성

  • 데이터베이스 구성

  • 데이터베이스 파라미터 설정

다음을 수행할 때 추가 가동 중지 시간이 발생할 수 있습니다.

  • DB 인스턴스가 오래된 시간대 파일을 사용할 때 옵션 그룹에 옵션 추가

  • 새 엔진 버전에 시간대 파일의 새 버전이 포함되어 있을 때 Oracle 데이터베이스 엔진 업그레이드

참고

시간대 파일을 업데이트하는 동안 RDS for Oracle는 PURGE DBA_RECYCLEBIN을 호출합니다.

시간대 파일 업데이트 준비

시간대 파일 업그레이드에는 준비와 업그레이드라는 두 가지 단계가 있습니다. 필수는 아니지만 준비 단계를 수행하는 것이 좋습니다. 이 단계에서는 PL/SQL 프로시저 DBMS_DST.FIND_AFFECTED_TABLES를 실행하여 영향을 받게 될 데이터를 찾습니다. 준비 기간에 대한 자세한 내용은 Oracle 데이터베이스 설명서에서 시간대 데이터를 사용하여 시간대 파일 및 타임스탬프 업그레이드를 참조하세요.

시간대 파일 업데이트를 준비하려면
  1. SQL 클라이언트를 사용하여 Oracle 데이터베이스에 연결합니다.

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

    SELECT * FROM V$TIMEZONE_FILE;
  3. DB 인스턴스에 사용 가능한 최신 시간대 파일 버전을 확인합니다.

    SELECT DBMS_DST.GET_LATEST_TIMEZONE_VERSION FROM DUAL;
  4. 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');
  5. 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;
  6. 준비 단계를 실행합니다.

    • DBMS_DST.CREATE_AFFECTED_TABLE 프로시저는 영향을 받는 데이터를 저장할 테이블을 생성합니다. 이 테이블의 이름을 DBMS_DST.FIND_AFFECTED_TABLES 프로시저에 전달합니다. 자세한 내용은 Oracle 데이터베이스 설명서에서 CREATE_AFFECTED_TABLE 프로시저를 참조하세요.

    • 이 프로시저 CREATE_ERROR_TABLE은 오류를 기록할 테이블을 생성합니다. 자세한 내용은 Oracle 데이터베이스 설명서에서 CREATE_ERROR_TABLE 프로시저를 참조하세요.

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

    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;
  7. 영향을 받는 테이블과 오류 테이블을 쿼리합니다.

    SELECT * FROM my_affected_table; SELECT * FROM my_error_table;

시간대 파일 자동 업그레이드 옵션 추가

옵션을 옵션 그룹에 추가하면 옵션 그룹은 다음 상태 중 하나가 됩니다.

  • 기존 옵션 그룹은 현재 하나 이상의 DB 인스턴스에 연결되어 있습니다. 옵션을 추가하면 이 옵션 그룹을 사용하는 모든 DB 인스턴스가 자동으로 다시 시작됩니다. 이로 인해 잠시 중단됩니다.

  • 기존 옵션 그룹은 DB 인스턴스에 연결되어 있지 않습니다. 옵션을 추가한 다음 기존 옵션 그룹을 기존 DB 인스턴스 또는 새 DB 인스턴스와 연결할 계획입니다.

  • 새 옵션 그룹을 생성하고 옵션을 추가합니다. 새 옵션 그룹을 기존 DB 인스턴스 또는 새 DB 인스턴스와 연결할 계획입니다.

콘솔

DB 인스턴스에 시간대 파일 자동 업그레이드 옵션을 추가하려면
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  2. 탐색 창에서 옵션 그룹을 선택합니다.

  3. 사용할 옵션 그룹을 결정합니다. 새 옵션 그룹을 생성하거나 기존 옵션 그룹을 사용합니다. 기존 옵션 그룹을 사용하려면 다음 단계로 건너뛰십시오. 그렇지 않으면 다음 설정을 사용하여 사용자 지정 DB 옵션을 생성합니다.

    1. Engine(엔진)에서 DB 인스턴스에 대한 Oracle Database 에디션을 선택합니다.

    2. 메이저 엔진 버전에서 DB 인스턴스의 버전을 선택합니다.

    자세한 내용은 옵션 그룹 생성 단원을 참조하십시오.

  4. 수정하려는 옵션 그룹을 선택한 다음 옵션 추가를 선택합니다.

  5. 옵션 추가 창에서 다음과 같이 합니다.

    1. TIMEZONE_FILE_AUTOUPGRADE를 선택합니다.

    2. 옵션을 추가하는 즉시 연동된 모든 DB 인스턴스에서 옵션을 활성화하려면 Apply Immediately에서 Yes를 선택합니다. No(기본 설정)를 선택하면 다음 유지 관리 기간에 연동된 모든 DB 인스턴스에서 옵션이 활성화됩니다.

  6. 원하는 대로 설정이 되었으면 옵션 추가를 선택합니다.

AWS CLI

다음 예에서는 AWS CLI add-option-to-option-group 명령을 사용하여 TIMEZONE_FILE_AUTOUPGRADE 옵션을 myoptiongroup이라는 옵션 그룹에 추가합니다.

대상 LinuxmacOS, 또는Unix:

aws rds add-option-to-option-group \ --option-group-name "myoptiongroup" \ --options "OptionName=TIMEZONE_FILE_AUTOUPGRADE" \ --apply-immediately

Windows의 경우:

aws rds add-option-to-option-group ^ --option-group-name "myoptiongroup" ^ --options "OptionName=TIMEZONE_FILE_AUTOUPGRADE" ^ --apply-immediately

시간대 파일을 업데이트 한 후 데이터 확인

시간대 파일을 업데이트한 후 데이터를 확인하는 것이 좋습니다. 준비 단계 동안 RDS for Oracle는 다음 테이블을 자동으로 생성합니다.

  • rdsadmin.rds_dst_affected_tables - 업데이트의 영향을 받는 데이터가 포함된 테이블을 나열합니다.

  • rdsadmin.rds_dst_error_table - 업데이트 중에 발생한 오류를 나열합니다.

이러한 테이블은 준비 기간에 생성하는 테이블과는 별개입니다. 업데이트 결과를 보려면 다음과 같이 테이블을 쿼리합니다.

SELECT * FROM rdsadmin.rds_dst_affected_tables; SELECT * FROM rdsadmin.rds_dst_error_table;

영향을 받는 데이터 및 오류 테이블의 스키마에 대한 자세한 내용은 Oracle 설명서에서 FIND_AFFECTED_TABLES Procedure를 참조하세요.