71 DBMS_DST

DBMS_DSTパッケージは、夏時間(DST)パッチをTimestamp with Time Zoneデータ・タイプに適用するためのインタフェースを提供しています。

この章のトピックは、次のとおりです:

71.1 DBMS_DSTの概要

夏時間が有効になるとき、また夏時間が終了するときの移行期間中は、タイム・ゾーン・データのあるタイムスタンプを処理するときにデータ損失などの問題が発生する可能性があります。DBMS_DSTパッケージでは、ルール・セットのコンテキストでこうした移行に対応できます。

71.2 DBMS_DSTのセキュリティ・モデル

DBMS_DSTパッケージは実行者権限のパッケージです。

参照:

実行者権限または定義者権限の使用方法の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

このパッケージの実行権限は、EXECUTE_CATALOG_ROLEロールに付与されています。通常、このロールは、選択したユーザーにデータ・ディクショナリのパッケージおよびプロシージャに対するEXECUTE権限を許可するために付与されます。

このパッケージを起動するユーザーには、次の権限が必要です。

  • CREATE ANY TABLE

  • ALTER ANY TABLE

  • DROP ANY TABLE

  • SELECT ANY TABLE

  • LOCK ANY TABLE

  • ALTER ANY INDEX

  • ALTER ANY TRIGGER

  • UPDATE ANY TABLE

  • EXECUTE ANY TYPE

71.3 DBMS_DSTのビュー

DBMS_DSTパッケージでは、表情報を表示するためにビューが使用されます。

これらのビューを、次の表に示します。これらの詳細は、『Oracle Databaseリファレンス』を参照してください。

表71-1 DBMS_DSTで使用されるビュー

ビュー 説明

DBA_TSTZ_TABLES

データベースのすべての表のうち、TIMESTAMP WITH TIME ZONEデータ・タイプに定義されているかTIMESTAMP WITH TIME ZONEデータ・タイプの属性を含むオブジェクト型に定義されている列を含む表に関する情報を示します。このビューの列は、ALL_TSTZ_TABLESの列と同じです。

USER_TSTZ_TABLES

現在のユーザーが所有している表のうち、TIMESTAMP WITH TIME ZONEデータ・タイプに定義されているかTIMESTAMP WITH TIME ZONEデータ・タイプの属性を含むオブジェクト型に定義されている列を含む表に関する情報を示します。このビューの列は(OWNER列を除き)、ALL_TSTZ_TABLESの列と同じです。

ALL_TSTZ_TABLES

現在のユーザーがアクセス可能な表に関する情報を表示します。表には、TIMESTAMP WITH TIME ZONEデータ・タイプまたはTIMESTAMP WITH TIME ZONEデータ・タイプの属性を含むオブジェクト・タイプで定義される列があります。

71.4 DBMS_DSTサブプログラムの要約

この表は、DBMS_DSTパッケージのサブプログラムについて説明しています。

表71-2 DBMS_DSTパッケージのサブプログラム

サブプログラム 説明

BEGIN_PREPAREプロシージャ

準備ウィンドウを開始します。

BEGIN_UPGRADEプロシージャ

アップグレード・ウィンドウを開始します。

CREATE_AFFECTED_TABLEプロシージャ

FIND_AFFECTED_TABLESプロシージャの説明に示されているスキーマを持つ表を作成します。

CREATE_ERROR_TABLEプロシージャ

ログ・エラー表を作成します。

CREATE_TRIGGER_TABLEプロシージャ

表のアップグレードを実行する前には無効になっており、アップグレード・プロセスで致命的な障害が発生したため有効化されていない、アクティブなトリガーを記録する場合に使用される表を作成します。

END_PREPAREプロシージャ

準備ウィンドウを終了します。

END_UPGRADEプロシージャ

アップグレード・ウィンドウを終了します。

FIND_AFFECTED_TABLESプロシージャ

タイムゾーンのバージョンが新しいためTSTZデータが影響を受けたすべての表を検索します。

UPGRADE_DATABASEプロシージャ

データベース内で、TSTZタイプまたはTSTZタイプを含むADTタイプに定義されている1つ以上の列を含むすべての表をアップグレードします。

UPGRADE_SCHEMAプロシージャ

スキーマの指定されたリスト内で、TSTZタイプまたはTSTZタイプを含むADTタイプに定義されている1つ以上の列を含む表をアップグレードします。

UPGRADE_TABLEプロシージャ

TSTZタイプまたはTSTZタイプを含むADTタイプに定義されている1つ以上の列を含む表の指定されたリストをアップグレードします。

71.4.1 BEGIN_PREPAREプロシージャ

このプロシージャは、準備ウィンドウを開始します。準備ウィンドウが正常に開始されると、データベース・プロパティDST_UPGRADE_STATEPREPAREに設定され、データベース・プロパティSECONDARY_TT_VERSIONは新しいバージョンのタイムゾーンに設定されます。

準備ウィンドウによって、DBAは、アップグレードの影響を受けるデータを調査し、アップグレードを実行するのに最適な時期を判断できます。準備ウィンドウには、通常のデータベース操作をオーバーラップさせることができます。

構文

DBMS_DST.BEGIN_PREPARE (
   new_version                IN  BINARY_INTEGER);

パラメータ

表71-3 BEGIN_PREPAREプロシージャのパラメータ

パラメータ 説明

new_version

データベースがアップグレードされる新しいバージョンのタイムゾーン

71.4.2 BEGIN_UPGRADEプロシージャ

このプロシージャは、アップグレード・ウィンドウを開始します。

構文

DBMS_DST.BEGIN_UPGRADE (
   new_version                IN  BINARY_INTEGER,
   error_on_overlap_time      IN  BOOLEAN := FALSE,
   error_on_nonexisting_time  IN  BOOLEAN := FALSE);

パラメータ

表71-4 BEGIN_UPGRADEプロシージャのパラメータ

パラメータ 説明

new_version

データベースがアップグレードされる新しいバージョンのタイムゾーン。

error_on_overlap_time

「オーバーラップ」時間セマンティック変換エラーに関するエラーをレポートするかどうかを示すブール・フラグ。デフォルトはFALSEです。境界のケースの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

error_on_nonexisting_time

「存在しない」時間セマンティック変換エラーに関するエラーをレポートするかどうかを示すブール・フラグ。

デフォルト値はFALSEです。

71.4.3 CREATE_AFFECTED_TABLEプロシージャ

このプロシージャは、FIND_AFFECTED_TABLESプロシージャの説明に示されているスキーマを持つ表を作成します。

構文

DBMS_DST.CREATE_AFFECTED_TABLE (
   table_name      IN  VARCHAR2);

パラメータ

表71-5 CREATE_AFFECTED_TABLEプロシージャのパラメータ

パラメータ 説明

table_name

作成する表名。

使用上のノート

このプロシージャはスキーマ修飾なしでtable_nameを取り、現行のユーザー・スキーマ内で表を作成します。

71.4.4 CREATE_ERROR_TABLEプロシージャ

このプロシージャは、ログ・エラー表を作成します。

この表には次のスキーマが含まれます。

CREATE TABLE dst$error_table(
   table_owner     VARCHAR2(30),
   table_name      VARCHAR2(30),
   column_name     VARCHAR2(4000),
   rid             ROWID,
   error_number    NUMBER)

構文

DBMS_DST.CREATE_ERROR_TABLE (
   table_name      IN  VARCHAR2);

パラメータ

表71-6 CREATE_ERROR_TABLEプロシージャのパラメータ

パラメータ 説明

table_name

作成する表名。

使用上のノート

  • このプロシージャはスキーマ修飾なしでtable_nameを取り、現行のユーザー・スキーマ内で表を作成します。

  • タイム・ゾーン・データでタイム・ゾーン・ファイルおよびタイムスタンプをアップグレードするとき、エラー番号が見つかります。タイム・ゾーン・データでタイム・ゾーン・ファイルおよびタイムスタンプをアップグレードするときのエラーの処理については、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

71.4.5 CREATE_TRIGGER_TABLEプロシージャ

このプロシージャは、表のアップグレードを実行する前には無効になっており、アップグレード・プロセス中に致命的な障害が発生したため有効化されていない、アクティブなトリガーを記録する表を作成します。

次のスキーマが含まれる表。

CREATE TABLE dst_trigger_table (
trigger_owner  VARCHAR2(30),
trigger_name   VARCHAR2(30));

構文

DBMS_DST.CREATE_TRIGGER_TABLE (
   table_name     IN    VARCHAR2);

パラメータ

表71-7 CREATE_TRIGGER_TABLEプロシージャのパラメータ

パラメータ 説明

table_name

作成する表の名前

使用上のノート

このプロシージャはスキーマ修飾なしでtable_nameを取り、現行のユーザー・スキーマ内で表を作成します。

71.4.6 END_PREPAREプロシージャ

このプロシージャは、準備ウィンドウを終了します。

構文

DBMS_DST.BEGIN_PREPARE;

71.4.7 END_UPGRADEプロシージャ

このプロシージャは、アップグレード・ウィンドウを終了します。アップグレード・ウィンドウは、影響を受けるすべてのユーザー表がアップグレードされると終了されます。それ以外の場合は、OUTパラメータnum_of_failuresによって、変換されていない表の数が示されます。

構文

DBMS_DST.END_UPGRADE (
  num_of_failures    OUT  BINARY_INTEGER);

パラメータ

表71-8 END_UPGRADEプロシージャのパラメータ

パラメータ 説明

num_of_failures

途中で失敗した表の数。

71.4.8 FIND_AFFECTED_TABLESプロシージャ

このプロシージャは、タイムゾーンのバージョンが新しいためTSTZデータが影響を受けたすべての表を検索します。

このプロシージャは、準備ウィンドウでのみ起動できます。TSTZデータが影響を受けた表は、パラメータaffected_tablesによって示される表に記録されます。セマンティック・エラーは、記録が必要な場合、パラメータlog_errors_tableによって示される表に記録されます。

構文

DBMS_DST.FIND_AFFECTED_TABLES (
   affected_tables             IN  VARCHAR2 =: 'sys.dst$affected_tables',
   log_errors                  IN  BOOLEAN := FALSE,
   log_errors_table            IN  VARCHAR2 =: 'sys.dst$error_table',
   parallel                    IN  BOOLEAN := FALSE);

パラメータ

表71-9 FIND_AFFECTED_TABLESプロシージャのパラメータ

パラメータ 説明

affected_tables

次のスキーマを持つ表の名前。

CREATE TABLE dst$affected_tables (
table_owner VARCHAR2(30),
table_name VARCHAR2(30),
column_name VARCHAR2(4000),
row_count NUMBER,
error_count NUMBER)

この表はCREATE_AFFECTED_TABLEプロシージャを使用して作成できます。

log_errors

アップグレード中にエラーを記録するかどうかを示すブール・フラグ。FALSEの場合、現行の表の変換を中断した後、log_errors_tableにエラーは記録されません。TRUEの場合、log_errors_tableにエラーが記録されます。

デフォルトはFALSEです。

log_errors_table

次のスキーマを持つ表の名前。

CREATE TABLE dst$error_table (
table_owner VARCHAR2(30),
table_name VARCHAR2(30),
column_name VARCHAR2(4000),
rid ROWID,
error_number NUMBER)

この表はCREATE_ERROR_TABLEプロシージャを使用して作成できます。rid列には、問題となる行のROWIDが記録され、error_number列には対応するエラー番号が記録されます。

parallel

影響を受ける表の検出にパラレル問合せを使用するか、シリアル問合せを使用するかを示すブール・フラグ。デフォルトはFALSEです。

71.4.9 UPGRADE_DATABASEプロシージャ

このプロシージャは、データベース内で、TSTZタイプまたはTSTZタイプを含むADTタイプに定義されている1つ以上の列を含むすべての表をアップグレードします。

このプロシージャは、アップグレード・ウィンドウの開始後にのみ起動できます。各表はアトミック・トランザクションでアップグレードされます。元表およびそのマテリアライズド・ビューのログ表がアトミック・トランザクションでアップグレードされることに注意してください。

構文

DBMS_DST.UPGRADE_DATABASE  (
   num_of_failures             OUT BINARY_INTEGER,
   upgrade_data                IN  BOOLEAN := TRUE,
   parallel                    IN  BOOLEAN := FALSE,
   continue_after_errors       IN  BOOLEAN := TRUE,
   log_errors                  IN  BOOLEAN := FALSE,
   log_errors_table            IN  VARCHAR2 =: 'sys.dst$error_table' ,
   error_on_overlap_time       IN  BOOLEAN := FALSE,
   error_on_nonexisting_time   IN  BOOLEAN := FALSE,
   log_triggers_table          IN  VARCHAR2 := 'sys.dst$trigger_table');

パラメータ

表71-10 UPGRADE_DATABASEプロシージャのパラメータ

パラメータ 説明

num_of_failures

途中で失敗した表の数。

upgrade_data

新しいタイムゾーン・パッチ・ファイルを使用してTSTZデータを変換するか(TRUE)、変換しないでおくか(FALSE)を示すブール・フラグ。デフォルトはTRUEです。

parallel

PDML(パラレルDML)を使用して表を変換するか、シリアルDMLを使用して表を変換するかを示すブール・フラグ。デフォルトはFALSEです。

continue_after_errors

現行の表でアップグレードが失敗した後に続行するかどうかを示すブール・フラグ。

デフォルトはTRUEです。

log_errors

アップグレード中にエラーを記録するかどうかを示すブール・フラグ。FALSEの場合、現行の表の変換を中断した後、log_errors_tableにエラーは記録されません。TRUEの場合、log_errors_tableにエラーが記録されます。

デフォルトはFALSEです。

log_errors_table

次のスキーマを持つ表の名前。

CREATE TABLE dst$error_table (
table_owner VARCHAR2(30),
table_name VARCHAR2(30),
column_name VARCHAR2(4000),
rid ROWID,
error_number NUMBER)

この表はCREATE_ERROR_TABLEプロシージャを使用して作成できます。rid列には、問題となる行のROWIDが記録され、error_number列には対応するエラー番号が記録されます。

error_on_overlap_time

「オーバーラップ」時間セマンティック変換エラーに関するエラーをレポートするかどうかを示すブール・フラグ。

デフォルトはTRUEです。

error_on_nonexisting_time

「存在しない」時間セマンティック変換エラーに関するエラーをレポートするかどうかを示すブール・フラグ。

デフォルトはTRUEです。

log_triggers_table

アップグレード前は無効になっており、アップグレード実行時に致命的な障害のため有効化されていないトリガーを記録する表。

71.4.10 UPGRADE_SCHEMAプロシージャ

このプロシージャは、スキーマの指定されたリスト内で、TSTZタイプまたはTSTZタイプを含むADTタイプに定義されている1つ以上の列を含む表をアップグレードします。

このプロシージャは、アップグレード・ウィンドウの開始後にのみ起動できます。各表はアトミック・トランザクションでアップグレードされます。元表およびそのマテリアライズド・ビューのログ表がアトミック・トランザクションでアップグレードされることに注意してください。

構文

DBMS_DST.UPGRADE_SCHEMA (
   num_of_failures             OUT BINARY_INTEGER,
   schema_list                 IN  VARCHAR2,
   upgrade_data                IN  BOOLEAN := TRUE,
   parallel                    IN  BOOLEAN := FALSE,
   continue_after_errors       IN  BOOLEAN := TRUE,
   log_errors                  IN  BOOLEAN := FALSE,
   log_errors_table            IN  VARCHAR2 =: 'sys.dst$error_table' ,
   error_on_overlap_time       IN  BOOLEAN := FALSE,
   error_on_nonexisting_time   IN  BOOLEAN := FALSE,
   log_triggers_table          IN  VARCHAR2 := 'sys.dst$trigger_table');

パラメータ

表71-11 UPGRADE_SCHEMAプロシージャのパラメータ

パラメータ 説明

num_of_failures

途中で失敗した表の数。

schema_list

スキーマ名のリスト(カンマで区切られた文字列)。

upgrade_data

新しいタイムゾーン・パッチ・ファイルを使用してTSTZデータを変換するか(TRUE)、変換しないでおくか(FALSE)を示すブール・フラグ。デフォルトはTRUEです。

parallel

PDML(パラレルDML)を使用して表を変換するか、シリアルDMLを使用して表を変換するかを示すブール・フラグ。デフォルトはFALSEです。

continue_after_errors

現行の表でアップグレードが失敗した後に続行するかどうかを示すブール・フラグ。デフォルトはTRUEです。

log_errors

アップグレード中にエラーを記録するかどうかを示すブール・フラグ。FALSEの場合、現行の表の変換を中断した後、log_errors_tableにエラーは記録されません。TRUEの場合、log_errors_tableにエラーが記録されます。

デフォルトはFALSEです。

log_errors_table

次のスキーマを持つ表の名前。

CREATE TABLE dst$error_table (
table_owner VARCHAR2(30),
table_name VARCHAR2(30),
column_name VARCHAR2(4000),
rid ROWID,
error_number NUMBER)

この表はCREATE_ERROR_TABLEプロシージャを使用して作成できます。rid列には、問題となる行のROWIDが記録され、error_number列には対応するエラー番号が記録されます。

error_on_overlap_time

「オーバーラップ」時間セマンティック変換エラーに関するエラーをレポートするかどうかを示すブール・フラグ。

デフォルトはTRUEです。

error_on_nonexisting_time

「存在しない」時間セマンティック変換エラーに関するエラーをレポートするかどうかを示すブール・フラグ。

デフォルトはTRUEです。

log_triggers_table

アップグレード前は無効になっており、アップグレード実行時に致命的な障害のため有効化されていないトリガーを記録する表。

71.4.11 UPGRADE_TABLEプロシージャ

このプロシージャは、TSTZタイプまたはTSTZタイプを含むADTタイプに定義されている1つ以上の列を含む表の指定されたリストをアップグレードします。

構文

DBMS_DST.UPGRADE_TABLE  (
   num_of_failures             OUT BINARY_INTEGER,
   table_list                  IN  VARCHAR2,
   upgrade_data                IN  BOOLEAN := TRUE,
   parallel                    IN  BOOLEAN := FALSE,
   continue_after_errors       IN  BOOLEAN := TRUE,
   log_errors                  IN  BOOLEAN := FALSE,
   log_errors_table            IN  VARCHAR2 =: 'sys.dst$error_table' ,
   error_on_overlap_time       IN  BOOLEAN := FALSE,
   error_on_nonexisting_time   IN  BOOLEAN := FALSE,
   log_triggers_table          IN  VARCHAR2 := 'sys.dst$trigger_table',
   atomic_upgrade              IN  BOOLEAN := FALSE);

パラメータ

表71-12 UPGRADE_TABLEプロシージャのパラメータ

パラメータ 説明

num_of_failures

途中で失敗した表の数。

table_list

表名のリスト(カンマで区切られた文字列)。

upgrade_data

新しいタイムゾーン・パッチ・ファイルを使用してTSTZデータを変換するか(TRUE)、変換しないでおくか(FALSE)を示すブール・フラグ。

デフォルトはTRUEです。

parallel

PDML(パラレルDML)を使用して表を変換するか、シリアルDMLを使用して表を変換するかを示すブール・フラグ。

デフォルトはFALSEです。

continue_after_errors

現行の表でアップグレードが失敗した後に続行するかどうかを示すブール・フラグ。

デフォルトはTRUEです。

log_errors

アップグレード中にエラーを記録するかどうかを示すブール・フラグ。FALSEの場合、現行の表の変換を中断した後、log_errors_tableにエラーは記録されません。TRUEの場合、log_errors_tableにエラーが記録されます。

デフォルトはFALSEです。

log_errors_table

次のスキーマを持つ表の名前。

CREATE TABLE dst$error_table (
table_owner VARCHAR2(30),
table_name VARCHAR2(30),
column_name VARCHAR2(4000),
rid ROWID,
error_number NUMBER)

この表はCREATE_ERROR_TABLEプロシージャを使用して作成できます。ridパラメータによって、問題となる行のROWIDおよび対応するエラー番号が記録されます。

error_on_overlap_time

「オーバーラップ」時間セマンティック変換エラーに関するエラーをレポートするかどうかを示すブール・フラグ。

デフォルトはTRUEです。

error_on_nonexisting_time

「存在しない」時間セマンティック変換エラーに関するエラーをレポートするかどうかを示すブール・フラグ。

デフォルトはTRUEです。

log_triggers_table

アップグレード前は無効になっており、アップグレード実行時に致命的な障害のため有効化されていないトリガーを記録する表。

atomic_upgrade

リストされた表をアトミックに(単一のトランザクションで)変換するかどうかを示すブール・フラグ。FALSEの場合、各表は独自のトランザクションで変換されます。

デフォルトはFALSEです。

使用上のノート

このプロシージャは、アップグレード・ウィンドウの開始後にのみ起動できます。表のリストは、次の部分的な順序付けを満たしている必要があります。

  1. 元表にマテリアライズド・ビューのログ表が含まれている場合、ログ表はリストの次の項目である必要があります。

  2. リストにマテリアライズド・ビューのコンテナ表が表示されている場合、マテリアライズド・ビューの「アップグレードされていない」元表およびログ表は、その表のリスト内でコンテナ表の前に表示される必要があります。

元表およびそのマテリアライズド・ビュー・ログ表は、atomic_upgradeTRUEに指定して、アトミック・トランザクションでアップグレードする必要があります。