タイムゾーンファイル更新の準備 - Amazon Relational Database Service

タイムゾーンファイル更新の準備

タイムゾーンファイルのアップグレードには、準備とアップグレードの 2 つの段階があります。必須ではありませんが、準備ステップを実行することを強く推奨します。このステップでは、PL/SQL ステップ DBMS_DST.FIND_AFFECTED_TABLES を実行することによって影響を受けるデータを調べます。準備ウィンドウの詳細については、Oracle Database ドキュメントの Upgrading the Time Zone File and Timestamp with Time Zone Data を参照してください。

タイムゾーンファイル更新の準備を行うには
  1. SQL クライアントを使用して、Oracle Database に接続します。

  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 Database ドキュメントの CREATE_AFFECTED_TABLE Procedure を参照してください。

    • このプロシージャ CREATE_ERROR_TABLE は、エラーを記録するテーブルを作成します。詳細については、Oracle Database ドキュメントの CREATE_ERROR_TABLE Procedure を参照してください。

    次の例では、影響を受けるデータとエラーテーブルを作成し、影響を受けるすべてのテーブルを検索します。

    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;