4 DBMS_WMパッケージ: リファレンス

Workspace ManagerのDBMS_WMパッケージには、この製品の使用可能な機能を実行するPL/SQLサブプログラム(プロシージャおよびファンクション)が含まれています。この章では、各サブプログラムのリファレンス情報を示します。

注:

ほとんどのWorkspace Managerサブプログラムはプロシージャですが、ファンクションもあります。(ファンクションは値を戻しますが、プロシージャは値を戻しません。)

ほとんどのファンクションの名前は、Get で始まります(GetConflictWorkspaceおよびGetWorkspaceなど)。

各サブプログラムは、アルファベット順に示します。論理グループに基づいたサブプログラムの簡単な説明については、「DBMS_WMサブプログラムのカテゴリ」を参照してください。

Workspace Managerのサブプログラムで発生する可能性があるエラー(例外)については、「Workspace Managerのエラー・メッセージ」を参照してください。各エラーの原因と推奨する処置が記載されています。

次に、構文上の注意を示します。

  • Workspace Manager PL/SQLパッケージ用のDBMS_WMパブリック・シノニムは、サブプログラム名とともに使用する必要があります。DBMS_WMパブリック・シノニムは、書式およびすべての例に含まれます。

  • サブプログラム・コールは、引用符で囲まれたリテラル値を除き、大/小文字が区別されません。たとえば、次に示すコード行の抜粋は、すべて有効で、意味的に同一です。

    EXECUTE DBMS_WM.CreateWorkspace ('NEWWORKSPACE');
    EXECUTE dbms_wm.createworkspace ('NEWWORKSPACE');
    EXECUTE dBms_Wm.cReatEwoRksPace ('NEWWORKSPACE');

注:

DBMS_WMプロシージャを他のプロシージャから実行する場合、権限チェックでは、定義者の権限または現在アクティブな権限を持つデータベース・ユーザーの権限のいずれがプロシージャに含まれているかが考慮されます。

4.1 Add_Topo_Geometry_Layer

トポロジにバージョン対応のフィーチャー表からトポロジ・ジオメトリ・レイヤーを追加します。

構文

DBMS_WM.Add_Topo_Geometry_Layer(     
  topology        IN VARCHAR2,      
  table_name      IN VARCHAR2,      
  column_name     IN VARCHAR2,      
  tg_layer_type   IN VARCHAR2);

パラメータ

表4-1 Add_Topo_Geometry_Layerプロシージャのパラメータ

パラメータ 説明
topology

指定した列内のトポロジ・ジオメトリを含むトポロジ・ジオメトリ・レイヤーを追加するトポロジを指定します。このトポロジは、SDO_TOPO.CREATE_TOPOLOGYプロシージャを使用して作成する必要があります。

table_name

column_nameで指定した列を含むトポロジ・ジオメトリ・レイヤー表の名前を指定します。

column_name

トポロジに追加するトポロジ・ジオメトリ・レイヤー内でトポロジ・ジオメトリを含んでいる(SDO_TOPO_GEOMETRY型の)列の名前。

tg_layer_type

トポロジ・ジオメトリ・レイヤーの型: POINTLINECURVEまたはPOLYGON

使用上の注意

このプロシージャの構文と意味は、SDO_TOPO.ADD_TOPO_GEOMETRY_LAYERプロシージャと同じです。このプロシージャの詳細は、『Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイド』を参照してください。ただし、バージョン対応のフィーチャー表からトポロジにトポロジ・ジオメトリ・レイヤーを追加するには、SDO_TOPO.ADD_TOPO_GEOMETRY_LAYERではなくDBMS_WM.Add_Topo_Geometry_Layerを使用する必要があります。Workspace Managerでのトポロジのサポートの詳細は、「Spatial and Graphトポロジ・サポート」を参照してください。

このプロシージャを指定のトポロジに対して初めてコールすると、<topology-name>_RELATION$表が作成されます。詳細は、『Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイド』を参照してください。

topologytable_nameまたはcolumn_nameが存在しない場合、topologyまたはtable_nameがバージョン対応でない場合、あるいはtg_layer_typeがサポートされている値でない場合は、例外が発生します。

次の例では、トポロジ・ジオメトリ・レイヤーをCITY_DATAトポロジに追加します。トポロジ・ジオメトリ・レイヤーは、LAND_PARCELS表のFEATURE列にあるポリゴンのジオメトリで構成されます。

EXECUTE DBMS_WM.Add_Topo_Geometry_Layer('CITY_DATA', 'LAND_PARCELS', 'FEATURE', 'POLYGON');

4.2 AddAsParentWorkspace

複数の親を持つ作業領域環境で、作業領域を子作業領域に親作業領域として追加します。

構文

DBMS_WM.AddAsParentWorkspace(
   workspace         IN VARCHAR2,
   parent_workspace  IN VARCHAR2,
   auto_commit       IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-2 AddAsParentWorkspaceプロシージャのパラメータ

パラメータ 説明
workspace

親作業領域を追加する作業領域の名前。名前は大/小文字が区別されます。

parent_workspace

workspaceの親作業領域として追加する作業領域の名前。名前は大/小文字が区別されます。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

このプロシージャは、複数の親を持つ作業領域機能に対するサポートの一部です。詳細は、「複数の親を持つ作業領域」を参照してください。workspaceの親作業領域が1つのみの場合は、このプロシージャを実行するとworkspaceが複数の親を持つ作業領域になります。workspaceがすでに複数の親を持つ作業領域である場合は、このプロシージャはworkspaceに別の親作業領域を追加します。

次の条件に1つでも該当する場合は、例外が発生します。

  • Workspace Managerシステム・パラメータALLOW_MULTI_PARENT_WORKSPACESの値がOFFである。

  • Workspace Managerシステム・パラメータCR_WORKSPACE_MODEまたはNONR_WORKSPACE_MODE (workspaceが連続的にリフレッシュされるかどうかに応じて該当する方)の値が、OPTIMISTIC_LOCKINGである。

  • workspaceまたはparent_workspaceが存在しない。

  • parent_workspaceがすでにworkspaceの祖先階層に存在する。

  • auto_commitTRUEであり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。

  • workspace内のバージョン対応表のデータのビューに、主キー制約違反、参照整合性制約違反または一意制約違反がある。

次の例は、Workspace4Workspace3の親作業領域として追加します。(「複数の親を持つ作業領域」の階層図を参照)

-- Allow multiparent workspaces. (Required for AddAsParentWorkspace)
EXECUTE DBMS_WM.SetSystemParameter ('ALLOW_MULTI_PARENT_WORKSPACES', 'ON');
-- Make Workspace3 multiparent by adding Workspace4 as a parent.
EXECUTE DBMS_WM.AddAsParentWorkspace ('Workspace3', 'Workspace4');

4.3 AddUserDefinedHint

ユーザー定義ヒントを追加します。つまり、特定のバージョン対応表またはすべてのバージョン対応表でDBMS_WMパッケージにより実行されるSQL文のパフォーマンスを改善するため、デフォルトのオプティマイザ・ヒントを変更(オーバーライド)します。

構文

DBMS_WM.AddUserDefinedHint(
   hint_id   IN NUMBER,
   table_id  IN VARCHAR2 DEFAULT NULL,
   hint      IN VARCHAR2 DEFAULT NULL);

パラメータ

表4-3 AddUserDefinedHintプロシージャのパラメータ

パラメータ 説明
hint_id

ユーザーが定義ヒントを一意に識別する数値ID。Workspace Managerにより1つ以上のSQL文に使用された、既存のヒントIDと一致する必要があります。

table_id

ヒントを適用する表の名前です。この名前は大/小文字が区別されません。この値がNULLの場合、すべてのバージョン対応表でヒントを指定するすべてのSQL文にヒントが使用されます。

hint

オプティマイザ・ヒントのテキストです。オプティマイザ・ヒントの説明は、『Oracle Database SQLチューニング・ガイド』のオプティマイザ・ヒントの使用に関する章を参照してください。

使用上の注意

すべてのDBMS_WMパッケージ操作でパフォーマンスに納得がいかない場合で、アプリケーションの追跡方法およびSQLオプティマイザ・ヒントの使用方法がわかる場合のみ、このプロシージャを使用します。追跡の詳細は、『Oracle Database SQLチューニング・ガイド』のアプリケーション追跡ツールに関する章を参照してください。

トレース出力では、ユーザー定義のヒントを許容するDBMS_WMパッケージを使用するSQL文はすべて、1つ以上のコメントを次の形式で含んでいます。

/* WM$SQL (hint_id) (table_id) */

パフォーマンス不足の文を識別し、改善するオプティマイザ・ヒントがわかる場合、AddUserDefinedHintプロシージャを使用して、特定のヒントIDに使用されるヒントを指定します。また、特定の表のヒントIDにのみ関連付けられている特定のヒントを使用するか、またはすべての表に関連付けられているヒントを使用するかを示すことができます。

table_idパラメータを指定すると、指定されたヒントはSQL文がヒントIDを使用して表にアクセスするときのみ使用され、Workspace Managerのデフォルトのヒントは他の表で使用されます。table_idパラメータがNULLの場合、指定されたヒントは任意のDBMS_WM文でヒントIDが使用されるときに使用されます。

hintパラメータにオブジェクト名(索引名など)を指定する場合、table_id parameterパラメータにはNULLを使用できません。

ユーザー定義ヒント内であればすべての表の別名を使用できます。ただし、標準のスコープルールが適用されます。

ユーザー定義ヒントを削除する(つまり、ヒントIDに関連したデフォルトのヒントを使用させる)には、RemoveUserDefinedHintプロシージャを使用します。

次に示す例では、SQL文がSCOTT.TABLE1にヒントID 1101を指定するときに、TABLE1表および関連するすべてのWorkspace Managerのインフラストラクチャに全体スキャンを指定しています。

EXECUTE DBMS_WM.AddUSerDefinedHint (1101, 'scott.table1', 'full(t1)');

4.4 AlterSavepoint

セーブポイントの定義を変更します。

構文

DBMS_WM.AlterSavepoint(
   workspace      IN VARCHAR2,
   sp_name        IN VARCHAR2,
   sp_description IN VARCHAR2);

パラメータ

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

パラメータ 説明
workspace

セーブポイントが作成された作業領域の名前。名前は大/小文字が区別されます。

sp_name

セーブポイントの名前。名前は大/小文字が区別されます。

sp_description

セーブポイントに関する説明。

使用上の注意

セーブポイントの現行の定義については、ALL_WORKSPACE_SAVEPOINTSメタデータ・ビュー(「ALL_WORKSPACE_SAVEPOINTS」を参照)にあるセーブポイントのDESCRIPTION列の値を調べてください。

ユーザーが作業領域またはセーブポイントの所有者でない、またはWM_ADMINシステム権限を取得していない場合は、例外が発生します。

次の例は、NEWWORKSPACE作業領域内のセーブポイントSP1の定義を変更します。

EXECUTE DBMS_WM.AlterSavepoint ('NEWWORKSPACE', 'SP1', 'First set of changes for scenario');

4.5 AlterVersionedTable

バージョン対応表を変更し、有効期間サポートの追加、制約名の変更または索引名の変更を行います。

構文

DBMS_WM.AlterVersionedTable(
   table_name         IN VARCHAR2,
   alter_option       IN VARCHAR2,
   parameter_options  IN VARCHAR2 DEFAULT NULL,
   ignore_last_error  IN BOOLEAN DEFAULT FALSE);

パラメータ

表4-5 AlterVersionedTableプロシージャのパラメータ

パラメータ 説明
table_name

有効期間サポートを追加するバージョン対応表の名前。この名前は大/小文字が区別されません。

alter_option

次の値のうち1つ。有効期間サポートを追加するADD_VALID_TIME、DDLに変更を加えるDDL、制約名を変更するRENAME_CONSTRAINT、索引を再作成するREBUILD_INDEX、索引名を変更するRENAME_INDEX、既存のバージョン対応表のビューが有効期間に2つのスカラー列を使用する必要があるかどうかを指定するUSE_SCALAR_TYPES_FOR_VALIDTIMEまたはUSE_WM_PERIOD_FOR_VALIDTIME

索引名または制約名を変更する場合に、このプロシージャの使用が必須であるかオプションであるかなど、これらのオプションについては、「使用上の注意」を参照してください。

parameter_options

指定したalter_optionパラメータ値に有効なキーワードを含む引用符付き文字列(一般書式'keyword=value, keyword2=value2, ...'を使用)。各alter_optionパラメータ値に有効なキーワードについては、「使用上の注意」を参照してください。

ignore_last_error

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、AlterVersionedTableプロシージャに対する前回のコール中に発生した最後のエラー(ある場合)は無視されます。最後のエラーに関する情報はUSER_WM_VT_ERRORS静的データ・ディクショナリ・ビューおよびALL_WM_VT_ERRORS静的データ・ディクショナリ・ビュー(「Workspace Managerの静的データ・ディクショナリ・ビュー」を参照)に格納されます。詳細は、「使用上の注意」を参照してください。

FALSE (デフォルト)を指定すると、AlterVersionedTableプロシージャに対する前回のコール中に発生した最後のエラー(ある場合)は無視されません。

使用上の注意

このプロシージャを使用し、既存のバージョン対応表に対して有効期間サポートの追加、制約名の変更または索引名の変更を行います。有効期間サポートを追加する方法の詳細は、「既存の表に対する有効期間サポートの追加」を参照してください。

alter_optionの値がADD_VALID_TIMEの場合は、次のparameter_optionsキーワードの1つ以上を指定できます。まったく指定しなくてもかまいません。

  • validFrom: 既存のすべての行のWM_VALID列に設定する期間の開始。デフォルト値は、現在のタイムスタンプです。

  • validTill: 既存のすべての行のWM_VALID列に設定する期間の終了。デフォルト値はUNTIL_CHANGEDです。

  • fmt:日付書式です。デフォルト値は'mmddyyyyhh24miss'です。オプションはTO_TIMESTAMP_TZファンクションと同じです(『Oracle Database SQL言語リファレンス』を参照)。

  • nlsparam: グローバリゼーション・サポート・オプション。オプションとデフォルトは、日付変換用のTO_CHAR関数のnlsparam引数と同じです(『Oracle Database SQL言語リファレンス』を参照)。

alter_option値がDDLの場合、このプロシージャのために現在サポートされている操作は、表パーティションの追加、マージおよび分割です。SYSDBA権限が必要で、次のparameter_optionsキーワードを指定する必要があります。

  • ddl: 実行されるDDL(データ定義言語)文。DDL文は、完全修飾された実表(SCOTT.EMPがバージョン対応表である場合のSCOTT.EMP_LTなど)を参照する必要があります。

  • force: 値trueを指定すると、このプロシージャでDDL文の実行が正式にサポートされているかどうかにかかわらず、Workspace ManagerはDDL文の実行を試行します。値false (デフォルト)を指定すると、Workspace ManagerはDDL文の実行を試行しません。したがってDDL文を実行するには、'force=true'を明示的に指定してデフォルト値をオーバーライドする必要がありますが、この操作について十分な知識がない場合は'force=true'を指定しないでください。

alter_optionの値がRENAME_CONSTRAINTの場合は、次のparameter_optionsキーワードを両方とも指定する必要があります。

  • constraint_name: 名前を変更する制約の現行の名前。この名前は大/小文字が区別されません。

  • new_constraint_name: 新規の制約名。この名前は大/小文字が区別されません。

alter_optionの値がRENAME_INDEXの場合は、次のparameter_optionsキーワードをすべて指定する必要があります。

  • index_owner: 名前を変更する索引を所有しているスキーマの名前。スキーマ名は大/小文字が区別されません。

  • index_name: 名前を変更する索引の現行の名前。この名前は大/小文字が区別されません。

  • new_index_name: 新規の索引名。この名前は大/小文字が区別されません。

バージョン対応表の制約または索引の名前が26文字を超えている場合に、その制約または索引の名前を変更するには、AlterVersionedTableプロシージャを使用する必要があります。RENAME句を指定したALTER TABLE文(制約の場合)またはALTER INDEX文(索引の場合)を使用することはできません。AlterVersionedTableプロシージャを使用する場合は、BeginDDLプロシージャのコールとCommitDDLプロシージャのコールの間にこのプロシージャを組み込む必要はありまえん。

バージョン対応表の制約名または索引名が26文字以下の場合に、その制約名または索引名を変更するには、AlterVersionedTableプロシージャを使用する方法と、BeginDDLプロシージャとCommitDDLプロシージャのコールの間にRENAME句を指定したALTER TABLE文(制約の場合)またはALTER INDEX文(索引の場合)を使用する方法があります(「バージョン対応表と関連するDDL操作」を参照)。

alter_optionの値がREBUILD_INDEXの場合、index_ownerキーワードおよびindex_nameキーワードを指定して、索引を所有しているデータベース・ユーザーおよび索引名を確認する必要があります。またROWIDを除いて、reverseキーワードまたはnoreverseキーワードを指定して、索引ブロックのバイト数を逆順で格納するかどうかを指定できます。

alter_option値のUSE_SCALAR_TYPES_FOR_VALIDTIMEおよびUSE_WM_PERIOD_FOR_VALIDTIMEは、既存のバージョン対応表のビューを変更し、Workspace Managerシステム・パラメータUSE_SCALAR_TYPES_FOR_VALIDTIME (「Workspace Managerのシステム・パラメータ」を参照)の現行の設定と一貫性を持たせる場合にのみ使用できます。たとえば、Workspace Managerシステム・パラメータUSE_SCALAR_TYPES_FOR_VALIDTIMEONに設定する場合で、既存のバージョン対応表MYTABLEにWM_VALID (WM_PERIOD型) 1列を使用して有効期間範囲を示すビューがある場合、AlterVersionedTableプロシージャをコールし、alter_option 値にUSE_SCALAR_TYPES_FOR_VALIDTIMEを指定して、TIMESTAMP WITH TIME ZONE型の2列を使用するようMY_TABLEのビューを変更できます。

alter_optionパラメータを使用して、Workspace Managerシステム・パラメータUSE_SCALAR_TYPES_FOR_VALIDTIMEの現在の値をオーバーライドすることはできません。このシステム・パラメータ値がONの場合、alter_optionパラメータ値はUSE_SCALAR_TYPES_FOR_VALIDTIMEである必要があり、このシステム・パラメータ値がOFFの場合、alter_optionパラメータ値はUSE_WM_PERIOD_FOR_VALIDTIMEである必要があります。

parameter_options文字列内のパラメータ値に対して二重引用符を使用することができます。たとえば、次の2つの指定は、意味的に同一です。

'index_owner=scott, index_name=my_index, new_index_name=my_new_index'
'index_owner="scott", index_name="my_index", new_index_name="my_new_index"'

AlterVersionedTableプロシージャのコールに失敗した場合は、エラーの原因を解決して再試行する必要があります。SQL文およびエラー・メッセージについては、USER_WM_VT_ERRORS静的データ・ディクショナリ・ビューおよびALL_WM_VT_ERRORS静的データ・ディクショナリ・ビューを参照してください。エラーの原因を修正してから、ignore_last_errorパラメータ値をデフォルトのFALSEにしてAlterVersionedTableプロシージャを再度コールします。その後もコールが正常に実行されず、エラーの原因を修正できず、このエラーを無視する場合は、ignore_last_errorパラメータ値をTRUEに指定してAlterVersionedTableプロシージャをコールします。ただし、エラーを無視する場合は、ユーザーの責任で行ってください。

次の条件に1つでも該当する場合は、例外が発生します。

  • table_nameが存在しない。

  • alterOptionsADD_VALID_TIMEでない。

次の例は、MY_TABLE表を作成し、有効期間サポートなしでバージョン対応にしてから、有効期間サポートを追加します。有効期間サポートを追加した後のWM_VALID列には、デフォルトの有効期間が含まれます。

CREATE TABLE my_table (id NUMBER PRIMARY KEY);
EXECUTE DBMS_WM.EnableVersioning ('my_table');
INSERT INTO my_table VALUES (1);
SELECT * FROM my_table;

        ID
----------
         1

EXECUTE DBMS_WM.AlterVersionedTable('my_table', 'ADD_VALID_TIME');
SELECT * FROM my_table;

        ID
----------
WM_VALID(VALIDFROM, VALIDTILL)
--------------------------------------------------------------------------------
         1
WM_PERIOD('09-JUN-2003 10:04:13 -04:00', NULL)

次の例は、SCOTT.MY_TABLE表を作成し、その表のVALUE列に索引MY_INDEXを作成して、表をバージョン対応にしてから、索引名をMY_NEW_INDEXに変更します。

CREATE TABLE scott.my_table (id NUMBER PRIMARY KEY, value INTEGER);
CREATE INDEX scott.my_index on scott.my_table(value);
EXECUTE DBMS_WM.EnableVersioning ('scott.my_table');
EXECUTE DBMS_WM.AlterVersionedTable ('scott.my_table', 'RENAME_INDEX',
  'index_owner=scott, index_name=my_index, new_index_name=my_new_index');

4.6 AlterWorkspace

作業領域の定義を変更します。

構文

DBMS_WM.AlterWorkspace(
   workspace              IN VARCHAR2,
   workspace_description  IN VARCHAR2);

パラメータ

表4-6 AlterWorkspaceプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

workspace_description

作業領域に関する説明。

使用上の注意

作業領域の現行の定義については、ALL_WORKSPACESメタデータ・ビュー(「ALL_WORKSPACES」を参照)にあるセーブポイントのDESCRIPTION列の値を調べてください。

ユーザーがワークスペース所有者ではないか、WM_ADMINシステム権限を持っていない場合は、例外が発生します。

次の例は、NEWWORKSPACE作業領域の定義を変更します。

EXECUTE DBMS_WM.AlterWorkspace ('NEWWORKSPACE', 'Testing proposed scenario B');

4.7 BeginBulkLoading

バージョン対応表のバルク・ロード処理を開始します。

構文

DBMS_WM.BeginBulkLoading(
   table_name            IN VARCHAR2,
   workspace             IN VARCHAR2,
   version               IN INTEGER DEFAULT NULL,
   check_for_duplicates  IN BOOLEAN DEFAULT TRUE,
   ignore_last_error     IN BOOLEAN DEFAULT FALSE,
   single_transaction    IN BOOLEAN DEFAULT FALSE,
   savepoint_name        IN DEFAULT LATEST);

パラメータ

表4-7 BeginBulkLoadingプロシージャのパラメータ

パラメータ 説明
table_name

データのバルク・ロード先となるバージョン対応表の名前。この名前は大/小文字が区別されません。

workspace

バルク・ロードを実行する作業領域の名前。名前は大/小文字が区別されます。

version

(今回のリリースでは、無視されます。リリース12.1より古いリリースでは、これはGetBulkLoadVersionファンクションから戻されるバージョン番号でした。)

check_for_duplicates

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト)を指定すると、主キー列に同じ値を持つ行がバルク・ロードするデータにあるかどうかがチェックされます。重複レコードの場合は、最小ROWID値を持つレコードのみが表に保管され、残りのレコードはCommitBulkLoadingプロシージャのコールで指定した廃棄表に移動します。このパラメータの詳細は、「使用上の注意」を参照してください。

FALSEを指定すると、主キー列に同じ値を持つ行がバルク・ロードするデータにあるかどうかはチェックされません。

ignore_last_error

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、BeginBulkLoadingプロシージャに対する前回のコール中に発生した最後のエラー(ある場合)は無視されます。最後のエラーに関する情報はUSER_WM_VT_ERRORS静的データ・ディクショナリ・ビューおよびALL_WM_VT_ERRORS静的データ・ディクショナリ・ビュー(「Workspace Managerの静的データ・ディクショナリ・ビュー」を参照)に格納されます。詳細は、「使用上の注意」を参照してください。

FALSE (デフォルト)を指定すると、BeginBulkLoadingプロシージャに対する前回のコール中に発生した最後のエラー(ある場合)は無視されません。

single_transaction

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、Workspace ManagerはCommitBulkLoadingプロシージャのコール後に実行される各ステップの後に内部コミット操作を実行しません。かわりに、必要なステップをすべて実行した後にのみコミットを実行します。TRUEを指定すると、バージョン対応表に対しても問合せを実行できます。

FALSE(デフォルト)を指定すると、Workspace ManagerはCommitBulkLoadingプロシージャのコール後に実行される各ステップの後に内部コミット操作を実行するのみでなく、CommitBulkLoadingまたはRollbackBulkLoading操作が完了するまで表に対する問合せを禁止します。

このパラメータの詳細は、「使用上の注意」を参照してください。

savepoint_name

データをバルク・ロードする作業領域内のバージョン。これを指定する場合は、LATESTまたはROOT_VERSIONを指定する必要があります。

LATEST(デフォルト)は、作業領域内の現行のバージョンです。

ROOT_VERSIONはルート・バージョン(バージョン番号0(ゼロ)、LIVE作業領域内)です。ルート・バージョンは他のすべてのバージョンの祖先であるため、ルート・バージョンのデータは他のすべての作業領域から参照可能です(LIVE以外の作業領域に更新済のデータがない場合)。ROOT_VERSIONを指定できるのは、workspaceLIVEの場合のみです。

使用上の注意

バージョン対応表へのデータのバルク・ロードを開始する前に、BeginBulkLoadingプロシージャをコールする必要があります。バルク・ロード・セッションを終了するには、CommitBulkLoadingプロシージャ(データのロードによる変更をコミットする場合)またはRollbackBulkLoadingプロシージャ(データのロードによる変更をロールバックする場合)をコールする必要があります。Workspace Managerでのバルク・ロードの詳細は、「バージョン対応表へのバルク・ロード」を参照してください。

single_transactionFALSE (デフォルト)の場合、BeginBulkLoadingプロシージャは表の内部Workspace Managerビューをいくつか削除して、表に対するDML操作と特定のWorkspace Manager操作を回避します。ただしこれにより、指定したバージョン対応表を使用した問合せもできなくなります。single_transactionパラメータの値に関係なく、特にFALSEの場合は、アプリケーションやユーザーが表へのアクセスを必要としていない時期に、バルク・ロードをできるかぎりすばやく完了する必要があります。指定した表を使用するバルク・ロード・セッションの場合は、BeginBulkLoadingプロシージャおよびCommitBulkLoadingプロシージャのsingle_transactionパラメータの値を同じにする必要があります。

check_for_duplicatesパラメータの値をTRUEにしても、バージョン対応表の既存のデータはチェックされません。バルク・ロード対象データを含むバージョン(作業領域の最新バージョンまたはルート・バージョン)の既存の行の主キー値が、バルク・ロード対象データの行と同一の場合の動作は、表に対する履歴オプションの設定に応じて異なります。VIEW_WO_OVERWRITEが設定されている場合、新規にロードされる行は同じ主キー値を持つ既存の行に連鎖します。VIEW_WO_OVERWRITEが設定されていない場合、新規データはバルク・ロードされず、かわりに廃棄表に移動します。

BeginBulkLoadingプロシージャのコールに失敗した場合は、エラーの原因を解決して再試行する必要があります。SQL文およびエラー・メッセージについては、USER_WM_VT_ERRORS静的データ・ディクショナリ・ビューおよびALL_WM_VT_ERRORS静的データ・ディクショナリ・ビューを参照してください。エラーの原因を修正してから、ignore_last_errorパラメータ値をデフォルトのFALSEにしてBeginBulkLoadingプロシージャを再度コールします。その後もコールが正常に実行されず、エラーの原因を修正できず、このエラーを無視する場合は、ignore_last_errorパラメータ値をTRUEに指定してBeginBulkLoadingプロシージャをコールします。ただし、エラーを無視する場合は、ユーザーの責任で行ってください。

パフォーマンスが重要な場合は、重複レコードのチェックが必要かどうかを慎重に考慮してください。これは、check_for_duplicatesの値をTRUE(デフォルト)に設定すると、Workspace Managerで追加の内部処理が実行されるためです。

次の条件に1つでも該当する場合は、例外が発生します。

  • table_nameが存在しない。

  • table_nameがバージョン対応でない。

  • ユーザーが表を所有していないか、WM_ADMINシステム権限を持っていません。

次の例は、W1作業領域でEMP表へのバルク・ロード操作を開始します。

EXECUTE DBMS_WM.BeginBulkLoading ('EMP', 'W1');

4.8 BeginDDL

指定された表に対してDDLセッションを開始します。

構文

DBMS_WM.BeginDDL(
   table_name  IN VARCHAR2);

パラメータ

表4-8 BeginDDLプロシージャのパラメータ

パラメータ 説明
table_name

バージョン対応表の名前。この名前は大/小文字が区別されません。

使用上の注意

このプロシージャは、DDLセッションを開始し、table_nameと同じ名前に_LTS が追加された表名の特別な表を作成します。このプロシージャをコールした後、その表に対して、または表に基づいた索引またはトリガーに対して1つ以上のDDL操作を実行し、その後、CommitDDLプロシージャまたはRollbackDDLプロシージャをコールできます。

このプロシージャは、特別な表<table-name>_LTSを作成する他に、他のオブジェクトも作成します。

  • <table-name>_LTS表には、<table-name>表と同じトリガー、列および索引があります。

  • <table-name>表に参照整合性制約がある各親表の場合、同じ制約がthe <table-name>_LTS 表に定義されます。

  • <table-name>_LTS表のトリガー、列および参照整合性制約は、<table-name>表の対応するトリガー、列および参照整合性制約と同じ名前になります。

  • <table-name>表の各索引の場合、<table-name>_LTS表の対応する索引の名前は、<index-name>_LTS形式になります。

  • <table-name>_LTS表の主キー制約の名前は、<primary-key>_LTS 形式になります。

  • <table-name>_LTS表のすべての一意制約の名前は、<unique-constraint-name>_LTS形式になります。

バージョン対応表に関連するDDL操作を実行する方法の詳細は、「バージョン対応表と関連するDDL操作」を参照してください。

次の条件に1つでも該当する場合は、例外が発生します。

  • table_nameが存在しない、またはバージョン対応ではない。

  • table_nameにドメイン索引が定義され、ユーザーにCREATE TABLE権限およびCREATE SEQUENCE権限が直接付与されていない。

  • オープン状態のDDLセッションがtable_nameに存在する。(この表を指定してBeginDDLプロシージャがすでにコールされているが、CommitDDLプロシージャまたはRollbackDDLプロシージャがまだコールされていない状態。)

次の例は、DDLセッションを開始し、COLA_MARKETING_BUDGET_LTSという名前の特別な表を使用してCOMMENTSという列をCOLA_MARKETING_BUDGET表に追加し、変更をコミットしてDDLセッションを終了します。

EXECUTE DBMS_WM.BeginDDL('COLA_MARKETING_BUDGET');
ALTER TABLE cola_marketing_budget_lts ADD (comments VARCHAR2(100));
EXECUTE DBMS_WM.CommitDDL('COLA_MARKETING_BUDGET');

4.9 BeginResolve

競合解消セッションを開始します。

構文

DBMS_WM.BeginResolve(
   workspace  IN VARCHAR2);

パラメータ

表4-9 BeginResolveプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

使用上の注意

このプロシージャは、競合解決セッションを開始します。このプロシージャの実行中は、作業領域は1WRITERモードにアクセス制限されます。詳細は、「作業領域のフリーズおよびアンフリーズ」を参照してください。

このプロシージャをコールした後、必要に応じて、競合が発生している表に対してResolveConflictsプロシージャを実行し、その後、CommitResolveプロシージャまたはRollbackResolveプロシージャをコールできます。競合解決の詳細は、「マージまたはリフレッシュ操作前に行う競合の解消」を参照してください。

次の条件に1つでも該当する場合は、例外が発生します。

  • workspace内にオープン状態のデータベース・トランザクションが1つ以上ある。

  • BeginResolveプロシージャを実行するユーザーが、workspaceおよびその親作業領域に対するアクセス権を取得していない。

次の例は、Workspace1で競合解消セッションを開始します。

EXECUTE  DBMS_WM.BeginResolve ('Workspace1');

4.10 ChangeWorkspaceType

連続的にリフレッシュされない作業領域を連続的にリフレッシュされるように変更します。(連続的にリフレッシュされる作業領域については、「連続的にリフレッシュされる作業領域」を参照してください。)

構文

DBMS_WM.ChangeWorkspaceType(
   workspace       IN VARCHAR2,
   workspace_type  IN VARCHAR2 DEFAULT DBMS_WM.CR_WORKSPACE_TYPE,
   auto_commit     IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-10 ChangeWorkspaceTypeプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

workspace_type

連続的にリフレッシュされるように、DBMS_WM.CR_WORKSPACE_TYPE(デフォルト)を指定する必要があります。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

このリリースでは、連続的にリフレッシュされない作業領域から連続的にリフレッシュされる作業領域への変更のみができます。逆の変更はできません。

次の条件に1つでも該当する場合は、例外が発生します。

  • ユーザーはworkspaceの所有者ではなく、WM_ADMINシステム権限を持っていません。

  • workspace_typeが有効でない。

  • auto_commitTRUEであり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。

  • 作業領域のタイプを変更できない。たとえば、Workspace Managerシステム・パラメータCR_WORKSPACE_MODEPESSIMISTIC_LOCKINGに設定されていても、NONCR_WORKSPACE_MODEパラメータがOPTIMISTIC_LOCKINGに設定されており、連続的にリフレッシュされる作業領域にバージョニングされたデータが存在する場合は、変更できません。

次の例は、NEWWORKSPACE作業領域のタイプを、連続的にリフレッシュされないタイプから連続的にリフレッシュされるタイプに変更します。

EXECUTE DBMS_WM.ChangeWorkspaceType ('NEWWORKSPACE');

4.11 CommitBulkLoading

バルク・ロードによる変更をコミットして、バージョン対応表のバルク・ロード処理を終了します。

構文

DBMS_WM.CommitBulkLoading(
   table_name            IN VARCHAR2,
   discards_table        IN VARCHAR2,
   check_for_duplicates  IN BOOLEAN DEFAULT TRUE,
   enforceUCFlag         IN BOOLEAN DEFAULT TRUE,
   enforceRICFlag        IN BOOLEAN DEFAULT TRUE,
   ignore_last_error     IN BOOLEAN DEFAULT FALSE,
   single_transaction    IN BOOLEAN DEFAULT FALSE);

パラメータ

表4-11 CommitBulkLoadingプロシージャのパラメータ

パラメータ 説明
table_name

データのバルク・ロード先となったバージョン対応表の名前。この名前は大/小文字が区別されません。

discards_table

廃棄レコードが挿入される表の名前。この名前は大/小文字が区別されません。この表が存在しない場合は作成されます。

check_for_duplicates

ブール値(TRUEまたはFALSE)。注: リリース12.1以降はこのパラメータは無視され、BeginBulkLoadingプロシージャのコールの値が使用されます。

TRUE(デフォルト)を指定すると、主キー列に同じ値を持つ行がバルク・ロードするデータにあるかどうかがチェックされます。重複レコードの場合は、最小ROWID値を持つレコードのみが表に保管され、残りのレコードは廃棄表に移動します。このパラメータの詳細は、「使用上の注意」を参照してください。

FALSEを指定すると、主キー列に同じ値を持つ行がバルク・ロードするデータにあるかどうかはチェックされません。

enforceUCFlag

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト)を指定すると、to_tableに定義された一意制約が規定され、バルク・ロード操作がその制約に違反しないことが保証されます。

FALSEを指定すると、バルク・ロード操作にはto_tableに定義された一意制約が規定されません。

enforceRICFlag

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト)を指定すると、to_tableに定義された参照整合性制約が規定され、バルク・ロード操作がその制約に違反しないことが保証されます。

FALSEを指定すると、バルク・ロード操作にはto_tableに定義された参照整合性制約が規定されません。

ignore_last_error

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、CommitBulkLoadingプロシージャに対する前回のコール中に発生した最後のエラー(ある場合)は無視されます。最後のエラーに関する情報はUSER_WM_VT_ERRORS静的データ・ディクショナリ・ビューおよびALL_WM_VT_ERRORS静的データ・ディクショナリ・ビュー(「Workspace Managerの静的データ・ディクショナリ・ビュー」を参照)に格納されます。詳細は、「使用上の注意」を参照してください。

FALSE (デフォルト)を指定すると、CommitBulkLoadingプロシージャに対する前回のコール中に発生した最後のエラー(ある場合)は無視されません。

single_transaction

ブール値(TRUEまたはFALSE)。注: リリース12.1以降はこのパラメータは無視され、BeginBulkLoadingプロシージャのコールの値が使用されます。

TRUEを指定すると、Workspace ManagerはCommitBulkLoadingプロシージャのコール後に実行される各ステップの後に内部コミット操作を実行しません。かわりに、必要なステップをすべて実行した後にのみコミットを実行します。

FALSE(デフォルト)を指定すると、Workspace Managerでは、CommitBulkLoadingプロシージャのコール後に実行される各ステップの後に内部コミット操作が実行されます。

このパラメータには、table_nameに表を指定してBeginBulkLoadingプロシージャのコール時と同じ値を指定する必要があります。

使用上の注意

バージョン対応表へのデータのバルク・ロードに関する要件の詳細は、「バージョン対応表へのバルク・ロード」を参照してください。

このプロシージャは、新規にロードされたデータのバージョニング・メタデータを生成し、新規にロードされたデータを表の既存のバージョニング済データと同期化します。また、新規にロードされたデータに対して一意制約と参照制約を規定することもできます。BeginBulkLoadingプロシージャで削除されたビューがすべて再作成されます。

check_for_duplicatesパラメータの値をTRUEにしても、バージョン対応表の既存のデータはチェックされません。バルク・ロード対象データを含むバージョン(作業領域の最新バージョンまたはルート・バージョン)の既存の行の主キー値が、バルク・ロード対象データの行と同一の場合の動作は、表に対する履歴オプションの設定に応じて異なります。VIEW_WO_OVERWRITEが設定されている場合、新規にロードされる行は同じ主キー値を持つ既存の行に連鎖します。VIEW_WO_OVERWRITEが設定されていない場合、新規データはバルク・ロードされず、かわりに廃棄表に移動します。

CommitBulkLoadingプロシージャのコールに失敗した場合は、エラーの原因を解決して再試行する必要があります。SQL文およびエラー・メッセージについては、USER_WM_VT_ERRORS静的データ・ディクショナリ・ビューおよびALL_WM_VT_ERRORS静的データ・ディクショナリ・ビューを参照してください。エラーの原因を修正してから、ignore_last_errorパラメータ値をデフォルトのFALSEにしてCommitBulkLoadingプロシージャを再度コールします。その後もコールが正常に実行されず、エラーの原因を修正できず、このエラーを無視する場合は、ignore_last_errorパラメータ値をTRUEに指定してCommitBulkLoadingプロシージャをコールします。ただし、エラーを無視する場合は、ユーザーの責任で行ってください。

パフォーマンスに関連して次の考慮事項があります。

  • check_for_duplicatesの値をTRUEにすると、処理の所要時間が長くなります。enforceUCFlagまたはenforceRICFlagの値をTRUEにすると、処理の所要時間が長くなる場合があります。

  • パフォーマンスが重要な場合は、重複レコードのチェックが必要かどうかを慎重に考慮してください。

  • 表に一意制約または参照制約がない場合は、enforceUCFlagまたはenforceRICFlagパラメータをTRUEに設定してもパフォーマンスにはあまり影響しません。

次の条件に1つでも該当する場合は、例外が発生します。

  • table_nameが存在しない。

  • table_nameがバージョン対応でない。

  • 表に対してBeginBulkLoadingプロシージャがコールされていない。

  • ユーザーが表を所有していないか、WM_ADMINシステム権限を持っていません。

次の例は、バルク・ロード操作中にEMP表に対して行われた変更をコミットし、廃棄レコードを保持する表としてDISCARDSを指定します。

EXECUTE DBMS_WM.CommitBulkLoading ('EMP', 'DISCARDS');

4.12 CommitDDL

DDLセッション中に指定された表に対して行われたDDL(データ定義言語)変更をコミットし、DDLセッションを終了します。

構文

DBMS_WM.CommitDDL(
   table_name                  IN VARCHAR2,
   ignore_last_error           IN BOOLEAN DEFAULT FALSE,
   enforce_unique_constraints  IN BOOLEAN DEFAULT FALSE,
   enforce_RICs                IN BOOLEAN DEFAULT FALSE);

パラメータ

表4-12 CommitDDLプロシージャのパラメータ

パラメータ 説明
table_name

バージョン対応表の名前。この名前は大/小文字が区別されません。

ignore_last_error

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、CommitDDLプロシージャに対する前回のコール中に発生した最後のエラー(ある場合)は無視されます。最後のエラーに関する情報はUSER_WM_VT_ERRORS静的データ・ディクショナリ・ビューおよびALL_WM_VT_ERRORS静的データ・ディクショナリ・ビュー(「Workspace Managerの静的データ・ディクショナリ・ビュー」を参照)に格納されます。詳細は、「使用上の注意」を参照してください。

FALSE (デフォルト)を指定すると、CommitDDLプロシージャに対する前回のコール中に発生した最後のエラー(ある場合)は無視されません。

enforce_unique_constraints

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、表の既存のバージョニング済データに対して、table_nameで定義された一意制約が規定されます。これにより、DDL変更を原因とする制約違反は確実になくなりますが、Workspace Managerでは操作の実行所要時間が長くなります。

FALSE(デフォルト)を指定すると、表の既存のバージョニング済データに対して、table_nameで定義された一意制約は規定されません。

enforce_RICs

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、表の既存のバージョニング済データに対して、table_nameで定義された参照整合性制約が規定されます。これにより、変更を原因とする制約違反は確実になくなりますが、Workspace Managerでは操作の実行所要時間が長くなります。

FALSE(デフォルト)を指定すると、表の既存のバージョニング済データに対して、table_nameで定義された参照整合性制約は規定されません。

使用上の注意

このプロシージャは、DDLセッション中に、バージョン対応表に加えられた変更およびバージョン対応表に基づく索引、トリガー、参照整合性制約に加えられた変更をコミットします。また、BeginDDLプロシージャによって作成された特別な表<table-name>_LTSを削除します。

バージョン対応表に関連するDDL操作を実行する方法の詳細は、「バージョン対応表と関連するDDL操作」を参照してください。

enforce_unique_constraintsおよびenforce_RICsパラメータの設定は、既存のバージョニング済データにのみ適用され、表に対する将来のDML操作について既存の制約が規定されるかどうかには影響しません。

CommitDDLプロシージャのコールが正常に実行されない場合、表は一貫性のない状態になります。これが発生した場合、エラーの原因を修正してください。SQL文およびエラー・メッセージについては、USER_WM_VT_ERRORS静的データ・ディクショナリ・ビューおよびALL_WM_VT_ERRORS静的データ・ディクショナリ・ビューを参照してください。たとえば、表領域のサイズが列を追加するのに十分でないことが原因でCommitDDLプロシージャが失敗した可能性があります。エラーの原因を修正してから、ignore_last_errorパラメータ値をデフォルトのFALSEにしてCommitDDLプロシージャを再度コールします。その後もコールが正常に実行されず、エラーの原因を修正できず、このエラーを無視する場合は、ignore_last_errorパラメータ値をTRUEに指定してCommitDDLプロシージャをコールします。ただし、エラーを無視する場合は、ユーザーの責任で行ってください。

次の条件に1つでも該当する場合は、例外が発生します。

  • table_nameが存在しない、またはバージョン対応ではない。

  • table_nameにドメイン索引が定義され、ユーザーにCREATE TABLE権限およびCREATE SEQUENCE権限が直接付与されていない。

  • オープン状態のDDLセッションがtable_nameに存在しない。(この表を指定してBeginDDLプロシージャがコールされていないか、CommitDDLプロシージャまたはRollbackDDLプロシージャがすでにコールされている状態。)

無効なDDL操作を実行する、CommitDDLプロシージャがコールされたときに例外が発生します。サポートされているDDL操作の詳細は、「バージョン対応表と関連するDDL操作」を参照してください。

次の例は、DDLセッションを開始し、COLA_MARKETING_BUDGET_LTSという名前の特別な表を使用してCOMMENTSという列をCOLA_MARKETING_BUDGET表に追加し、変更をコミットしてDDLセッションを終了します。

EXECUTE DBMS_WM.BeginDDL('COLA_MARKETING_BUDGET');
ALTER TABLE cola_marketing_budget_lts ADD (comments VARCHAR2(100));
EXECUTE DBMS_WM.CommitDDL('COLA_MARKETING_BUDGET');

4.13 CommitResolve

競合解消セッションを終了し、BeginResolveプロシージャの実行以降に作業領域内で行われたすべての変更を保存します(永続的な変更にします)。

構文

DBMS_WM.CommitResolve(
   workspace  IN VARCHAR2);

パラメータ

表4-13 CommitResolveプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

使用上の注意

このプロシージャは、(BeginResolveプロシージャによって開始された)現行の競合解消セッションを終了し、その競合解消セッションの開始以降に作業領域内で行われたすべての変更を保存します。このプロシージャとは対照的に、RollbackResolveプロシージャはすべての変更を廃棄します。

競合解消の詳細は、「マージまたはリフレッシュ操作前に行う競合の解消」を参照してください。

次の条件に1つでも該当する場合は、例外が発生します。

  • workspace内にオープン状態のデータベース・トランザクションが1つ以上ある。

  • プロシージャが、WM_ADMINシステム権限を持っていないユーザー、またはworkspaceに対してBeginResolveプロシージャを実行していないユーザーによってコールされた。

次の例は、Workspace1での競合解消セッションを終了し、すべての変更を保存します。

EXECUTE  DBMS_WM.CommitResolve ('Workspace1');

4.14 CompressWorkspace

作業領域内の削除可能なセーブポイントを削除し、その作業領域のWorkspace Managerメタデータ構造を最小化します。(削除可能なセーブポイントの詳細は、「セーブポイントの使用」を参照してください。)

構文

DBMS_WM.CompressWorkspace(
   workspace                   IN VARCHAR2,
   compress_view_wo_overwrite  IN BOOLEAN
   firstSP                     IN VARCHAR2 DEFAULT NULL,
   secondSP                    IN VARCHAR2 DEFAULT NULL,
   auto_commit                 IN BOOLEAN DEFAULT TRUE,
   commit_in_batches           IN BOOLEAN DEFAULT FALSE,
   batch_size                  IN VARCHAR2 DEFAULT 'PRIMARY_KEY_RANGE',
   remove_latest_deleted_rows  IN BOOLEAN DEFAULT FALSE);

または

DBMS_WM.CompressWorkspace(
   workspace          IN VARCHAR2,
   firstSP            IN VARCHAR2 DEFAULT NULL,
   secondSP           IN VARCHAR2 DEFAULT NULL,
   auto_commit        IN BOOLEAN DEFAULT TRUE,
   commit_in_batches  IN BOOLEAN DEFAULT FALSE,
   batch_size         IN VARCHAR2 DEFAULT 'PRIMARY_KEY_RANGE',
   remove_latest_deleted_rows  IN BOOLEAN DEFAULT FALSE);

パラメータ

表4-14 CompressWorkspaceプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

compress_view_wo_overwrite

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、バージョニングが有効なときにVIEW_WO_OVERWRITEが指定された場合でも、影響を受けるセーブポイント間の履歴情報が削除されます。

FALSEを指定すると、バージョニングが有効なときにVIEW_WO_OVERWRITEが指定された場合、(影響を受けるセーブポイント間の)表の履歴情報は削除されません。(表に対してVIEW_WO_OVERWRITEが指定されていない場合、この表の履歴情報はこのパラメータ値に関係なく削除されます。)このパラメータを指定しないプロシージャ形式を使用すると、FALSEが想定されます。

firstSP

最初のセーブポイント。セーブポイント名は大/小文字が区別されます。

workspaceおよびfirstSPのみが指定されている場合は、作業領域の作成とfirstSPの間の削除可能なすべてのセーブポイント(firstSPは含まない)が削除されます。

workspacefirstSPおよびsecondSPが指定されている場合は、firstSP (firstSPが削除可能なセーブポイントの場合は、これも含む)からsecondSP(secondSPは含まない)までの削除可能なすべてのセーブポイントが削除されます。

workspaceのみが指定されている(セーブポイントは指定されていない)場合は、その作業領域内の削除可能なすべてのセーブポイントが削除されます。

secondSP

2番目のセーブポイント。firstSP (firstSPが削除可能なセーブポイントの場合は、これも含む)からsecondSP (secondSPは含まない)までの削除可能なすべてのセーブポイントが削除されます。

ただし、secondSPLATESTの場合は、firstSP (firstSPが削除可能なセーブポイントの場合は、これも含む)から作業領域の最後までの削除可能なすべてのセーブポイントが削除されます。

セーブポイント名は大/小文字が区別されます。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

commit_in_batches

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、バージョン対応表のbatch_size行に対する圧縮操作後に内部コミット操作が実行されます。バージョン対応表の多数の行が圧縮の影響を受ける場合、実質的にはOracleデータベース・リソース(ロールバック・セグメントやUNDO表領域など)が使用される可能性があるため、定期的なコミット操作を実行することが有効であるか、または実行する必要があります。TRUEを指定した場合は、auto_commit値にもTRUEを指定する必要があります。

FALSE(デフォルト)を指定すると、圧縮操作中には内部コミット操作が実行されません。

batch_size

commit_in_batchesTRUEの場合は内部コミット操作のバッチ・サイズです。それ以外の場合、このパラメータは無視されます。指定する場合は、TABLEまたはPRIMARY_KEY_RANGEを指定する必要があります。

TABLEを指定すると、圧縮が必要な各バージョン対応表の圧縮後に、内部コミット操作が実行されます。

PRIMARY_KEY_RANGEを指定すると、各表は異なる主キー値範囲のバッチに分割され、圧縮が必要な各バージョン対応表の行バッチがそれぞれ圧縮された後に、内部コミット操作が実行されます。影響を受ける各バージョン対応表に関連付けられた<table_name>_LT表に対してDBMS_STATS.GATHER_TABLE_STATSプロシージャを使用するなどの方法で、事前に主キーの最初の列に関する統計を生成しておく必要があります。詳細は、「使用上の注意」を参照してください。次の例は、ヒストグラム統計を生成します。

EXECUTE DBMS_STATS.GATHER_TABLE_STATS('', 'cola_marketing_budget_lt', estimate_percent=>50, method_opt=>'FOR COLUMNS SIZE 50 product_id');

remove_latest_deleted_rows

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、workspaceLIVEの場合に、削除済で競合解消に悪影響を及ぼさないLATEST行が削除されます。(他の作業領域については、値TRUEは無視されます。)

FALSE(デフォルト)を指定すると、削除済のLATEST行は保持されます。

使用上の注意

作業領域内の明示的セーブポイント(すべてまたは一部)が不要になった場合は、その作業領域を圧縮できます。圧縮操作は、次の理由から有効です。

  • セーブポイントを削除した後、セーブポイント名を再利用できます。(既存のセーブポイントと同じ名前のセーブポイントは作成できません。)

  • Workspace Manager構造に使用されるディスク記憶域が減ります(表の行数、索引、Workspace Managerメタデータが減ります)。

  • ディスク領域の使用量が減るため、Workspace Managerの操作の実行時パフォーマンスが向上します。

このプロシージャは、子作業領域と依存性がない暗黙的セーブポイントのみを削除します。このような削除できないセーブポイントが存在する場合、レンジ全体を1つの単位として圧縮できません。ただし、このようなセーブポイントは、RemoveWorkspaceプロシージャを使用して削除したり、RefreshWorkspaceプロシージャを使用して移動したりできます。

このプロシージャの実行中、現行の作業領域はNO_ACCESSモードにアクセス制限されます。詳細は、「作業領域のフリーズおよびアンフリーズ」を参照してください。

作業領域(LIVE作業領域は除く)にセッションが存在する場合、またはユーザーがGotoDate操作、または作業領域内のセーブポイントを指定してGotoSavepoint操作を実行した場合、その作業領域は圧縮できません。

compress_view_wo_overwriteパラメータを指定しないでこのプロシージャを使用すると、FALSEが指定されたものとみなされます。

VIEW_WO_OVERWRITEおよび他の履歴オプションの詳細は、EnableVersioningプロシージャの情報を参照してください。

1年以上経過した履歴データを削除するなど、履歴データのサブセットを定期的にパージする場合、パージ実行日の各指定削除ポイントにセーブポイントを作成するように計画します。たとえば、2005年の履歴データを1年経過したときに削除する計画であれば、セーブポイントを2006年1月1日に作成します。その後、2007年1月1日にCompressWorkspaceプロシージャをコールして作業領域名および2006年1月1日のセーブポイントを指定し、2006年より前に発生したすべての履歴を削除します。

バージョン対応表を主キー範囲のバッチ単位で圧縮できるかどうかを調べるには、WM_COMPRESS_BATCH_SIZESメタデータ・ビューのBATCH_SIZE列の値をチェックします。詳細は、「WM_COMPRESS_BATCH_SIZES」を参照してください。

batch_sizeに値PRIMARY_KEY_RANGEを指定するには、まず主キーの最初の列についてヒストグラム統計(NUMBERINTEGERDATETIMESTAMPCHARまたはVARCHAR2型の列の場合)あるいは一般統計(NUMBERINTEGERDATEまたはTIMESTAMP型の列の場合)を生成する必要があります。DBMS_STATS.GATHER_TABLE_STATSプロシージャは、一般統計を生成します。NUMBERINTEGERDATEまたはTIMESTAMP型の列についてヒストグラム統計ではなく一般統計が使用可能な場合に、batch_sizePRIMARY_KEY_RANGEとして指定すると、Workspace Managerシステム・パラメータNUMBER_OF_COMPRESS_BATCHESを使用してバッチ数が計算されます。統計の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

指定された作業領域内の現在のバージョンを圧縮する必要がある場合、Workspace Managerは作業領域の共有半排他ロックを取得しようとします。このロックが取得されていない場合、エラーは発生しませんが、現在のバージョンは圧縮されません。(「Workspace Managerの操作に適用されるロック」を参照してください。)

auto_commitTRUEであり、オープン状態のトランザクションがある場合、ユーザーが、修正が必要なすべての表(トリガーによって変更される表なども含む)に対する十分な権限を持たなければ、例外が発生します。また、ユーザーがworkspaceにアクセスおよび変更をマージする権限を持たない場合にも例外が発生します。

作業領域およびそのすべての子作業領域を圧縮するには、CompressWorkspaceTreeプロシージャを使用します。

次の例は、NEWWORKSPACEを圧縮します。

EXECUTE DBMS_WM.CompressWorkspace ('NEWWORKSPACE');

次の例は、NEWWORKSPACEを圧縮して、この作業領域の作成とセーブポイントSP1の間のすべての明示的セーブポイントを削除します。

EXECUTE DBMS_WM.CompressWorkspace ('NEWWORKSPACE', 'SP1');

次の例は、NEWWORKSPACEを圧縮して、明示的セーブポイントSP1SP2の間のすべての明示的セーブポイント(SP2は含まない)を削除します。

EXECUTE DBMS_WM.CompressWorkspace ('NEWWORKSPACE', 'SP1', 'SP2');

次の例は、B_focus_1を圧縮し、firstSPパラメータおよびsecondSPパラメータにデフォルト値を指定(すべての明示的セーブポイントを削除)して、auto_commitパラメータにFALSEを指定します。

EXECUTE DBMS_WM.CompressWorkspace ('B_focus_1', auto_commit => FALSE);

次の例は、COLA_MARKETING_BUDGET_LT表を分析し、次の文に必要なヒストグラム統計を生成してから、B_focus_1を圧縮します。CompressWorkspaceプロシージャのコールは、firstSPsecondSPおよびauto_commitパラメータにデフォルト値を受け入れ、commit_in_batchesパラメータにTRUEを指定し、batch_sizeパラメータにPRIMARY_KEY_RANGEを指定します。

EXECUTE DBMS_STATS.GATHER_TABLE_STATS('', 'cola_marketing_budget_lt', estimate_percent=>50, method_opt=>'FOR COLUMNS SIZE 50 product_id');
EXECUTE DBMS_WM.CompressWorkspace ('B_focus_1', NULL, NULL, NULL, TRUE, 'PRIMARY_KEY_RANGE');

4.15 CompressWorkspaceTree

作業領域およびそのすべての子作業領域内の削除可能なセーブポイントを削除します。(削除可能なセーブポイントの詳細は、「セーブポイントの使用」を参照してください。)また、影響を受ける作業領域のWorkspace Managerメタデータ構造を最小化し、セーブポイントの削除によって不要となったデータを排除します。

構文

DBMS_WM.CompressWorkspaceTree(
   workspace                   IN VARCHAR2,
   compress_view_wo_overwrite  IN BOOLEAN DEFAULT FALSE,
   auto_commit                 IN BOOLEAN DEFAULT TRUE,
   commit_in_batches           IN BOOLEAN DEFAULT FALSE,
   batch_size                  IN VARCHAR2 DEFAULT 'PRIMARY_KEY_RANGE',
   remove_latest_deleted_rows  IN BOOLEAN DEFAULT FALSE);

パラメータ

表4-15 CompressWorkspaceTreeプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

compress_view_wo_overwrite

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、バージョニングが有効なときにVIEW_WO_OVERWRITEが指定された場合でも、履歴情報が削除されます。

FALSE(デフォルト)を指定すると、EnableVersioningでVIEW_WO_OVERWRITEが指定された場合、表の履歴情報は削除されません。(表に対してVIEW_WO_OVERWRITEが指定されていない場合、この表の履歴情報はこのパラメータ値に関係なく削除されます。)

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

commit_in_batches

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、バージョン対応表のbatch_size行に対する圧縮操作後に内部コミット操作が実行されます。バージョン対応表の多数の行が圧縮の影響を受ける場合、実質的にはOracleデータベース・リソース(ロールバック・セグメントやUNDO表領域など)が使用される可能性があるため、定期的なコミット操作を実行することが有効であるか、または実行する必要があります。TRUEを指定した場合は、auto_commit値にもTRUEを指定する必要があります。

FALSE(デフォルト)を指定すると、圧縮操作中には内部コミット操作が実行されません。

batch_size

commit_in_batchesTRUEの場合は内部コミット操作のバッチ・サイズです。それ以外の場合、このパラメータは無視されます。指定する場合は、TABLEまたはPRIMARY_KEY_RANGEを指定する必要があります。

TABLEを指定すると、圧縮が必要な各バージョン対応表の圧縮後に、内部コミット操作が実行されます。

PRIMARY_KEY_RANGEを指定すると、各表は異なる主キー値範囲のバッチに分割され、圧縮が必要な各バージョン対応表の行バッチがそれぞれ圧縮された後に、内部コミット操作が実行されます。影響を受ける各バージョン対応表に関連付けられた<table_name>_LT表に対してDBMS_STATS.GATHER_TABLE_STATSプロシージャを使用するなどの方法で、事前に主キーの最初の列に関する統計を生成しておく必要があります。詳細は、「使用上の注意」を参照してください。次の例は、ヒストグラム統計を生成します。

EXECUTE DBMS_STATS.GATHER_TABLE_STATS('', 'cola_marketing_budget_lt', estimate_percent=>50, method_opt=>'FOR COLUMNS SIZE 50 product_id');

remove_latest_deleted_rows

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、workspaceLIVEの場合に、削除済で競合解消に悪影響を及ぼさないLATEST行が削除されます。(workspaceパラメータに他の値が指定されている場合、値TRUEは無視されます。)

FALSE(デフォルト)を指定すると、削除済のLATEST行は保持されます。

使用上の注意

影響を受ける作業領域内の明示的セーブポイントが不要になった場合(たとえば、これらのセーブポイントのいずれにも移動またはロールバックする必要がない場合)は、作業領域およびそのすべての子作業領域を圧縮できます。たとえば、「作業領域階層」に示す階層では、Workspace1を指定してCompressWorkspaceTree操作を実行すると、Workspace1、Workspace2およびWorkspace3が圧縮されます。(データベースの作業領域階層の詳細は、「作業領域階層」を参照してください。)

圧縮操作は、次の理由から有効です。

  • セーブポイントを削除した後、セーブポイント名を再利用できます。(既存のセーブポイントと同じ名前のセーブポイントは作成できません。)

  • Workspace Managerの操作の実行時パフォーマンスが向上します。

  • Workspace Manager構造に使用されるディスク記憶域が減ります。

このプロシージャの実行中、現行の作業領域はNO_ACCESSモードにアクセス制限されます。詳細は、「作業領域のフリーズおよびアンフリーズ」を参照してください。

作業領域(LIVE作業領域は除く)にセッションが存在する場合、またはユーザーがGotoDate操作、または作業領域内のセーブポイントを指定してGotoSavepoint操作を実行した場合、その作業領域は圧縮できません。

バージョン対応表を主キー範囲のバッチ単位で圧縮できるかどうかを調べるには、WM_COMPRESS_BATCH_SIZESメタデータ・ビューのBATCH_SIZE列の値をチェックします。詳細は、「WM_COMPRESS_BATCH_SIZES」を参照してください。

batch_sizeに値PRIMARY_KEY_RANGEを指定するには、まず主キーの最初の列についてヒストグラム統計(NUMBERINTEGERDATETIMESTAMPCHARまたはVARCHAR2型の列の場合)あるいは一般統計(NUMBERINTEGERDATEまたはTIMESTAMP型の列の場合)を生成する必要があります。DBMS_STATS.GATHER_TABLE_STATSプロシージャは、一般統計を生成します。NUMBERINTEGERDATEまたはTIMESTAMP型の列についてヒストグラム統計ではなく一般統計が使用可能な場合に、batch_sizePRIMARY_KEY_RANGEとして指定すると、Workspace Managerシステム・パラメータNUMBER_OF_COMPRESS_BATCHESを使用してバッチ数が計算されます。統計の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

auto_commitTRUEであり、オープン状態のトランザクションがある場合、ユーザーが、修正が必要なすべての表(トリガーによって変更される表なども含む)に対する十分な権限を持たなければ、例外が発生します。また、ユーザーがworkspaceにアクセスおよび変更をマージする権限を持たない場合にも例外が発生します。

CompressWorkspaceTree操作が、影響を受ける作業領域のいずれかで正常に実行されなかった場合は、操作全体がロールバックされ、すべての作業領域が圧縮されません。

影響を受ける作業領域内の現行バージョンが、1つ以上の他のバージョンとともに圧縮可能な範囲内にある場合、その作業領域に対する共有半排他ロックの取得が試行されます。取得できなかった場合、エラーは発生しませんが、現在のバージョンは圧縮されません。 (「Workspace Managerの操作に適用されるロック」を参照してください。)

単一の作業領域を圧縮(すべてまたは一部の明示的セーブポイントを削除)するには、CompressWorkspaceプロシージャを使用します。

次の例は、NEWWORKSPACEおよびそのすべての子作業領域を圧縮します。

EXECUTE DBMS_WM.CompressWorkspaceTree ('NEWWORKSPACE');

次の例は、NEWWORKSPACEおよびそのすべての子作業領域を圧縮し、compress_view_wo_overwriteパラメータにデフォルト値を指定して、auto_commitパラメータにFALSEを指定します。

EXECUTE DBMS_WM.CompressWorkspaceTree ('NEWWORKSPACE', auto_commit => FALSE);

次の例は、NEWWORKSPACEとそのすべての子作業領域を圧縮し、compress_view_wo_overwriteおよびauto_commitパラメータにデフォルト値を受け入れ、commit_in_batchesパラメータにTRUEを指定し、batch_sizeパラメータにPRIMARY_KEY_RANGEを指定します。

EXECUTE DBMS_WM.CompressWorkspaceTree ('NEWWORKSPACE', NULL, NULL, TRUE, 'PRIMARY_KEY_RANGE');

4.16 CopyForUpdate

バージョン対応表内のラージ・オブジェクト(LOB)列(BLOB、CLOBまたはNCLOB)を変更します。このプロシージャは、バージョン対応表にLOB列がある場合にのみ、使用します。

構文

DBMS_WM.CopyForUpdate(
   table_name    IN VARCHAR2,
   where_clause  IN VARCHAR2 DEFAULT '');

パラメータ

表4-16 CopyForUpdateプロシージャのパラメータ

パラメータ 説明
table_name

1つ以上のLOB列を含む表の名前。この名前は大/小文字が区別されません。

where_clause

影響を受ける行を識別するWHERE句(WHEREキーワードを除く)。たとえば、department_id = 20です。

副問合せの場合を除き、WHERE句には主キー列のみを指定できます。この副問合せは、主キーではない列を参照できますが、バージョン対応表は参照できません。

where_clauseパラメータが指定されていない場合は、table_name内のすべての行が影響を受けます。

使用上の注意

このプロシージャは、1つ以上のLOB列を含むバージョン対応表にのみ使用します。DBMS_LOBパッケージを使用して実行される更新ではバージョニング・ビューに対してINSTEAD OFトリガーが起動されないため、CopyForUpdateプロシージャを使用する必要があります。Workspace Managerは、バージョニング・ビューに対するINSTEAD OFトリガーを作成して、copy-on-writeセマンティクスを実装します。(非LOB列の場合は、更新操作を直接実行でき、トリガーも機能します。)

次の例は、表TABLE1DOC_ID = 1であるドキュメントのSOURCE_CLOB列を更新します。

  Declare 
    clob_var 
  Begin
     /* This procedure copies the LOB columns if necessary, that is, 
        if the row with doc_id = 1 has not been versioned in the 
        current version */
     dbms_wm.copyForUpdate('table1', 'doc_id = 1');

     select source_clob into clob_var
     from   table1
     where  doc_id = 1 for update;

     dbms_lob.write(clob_var,<amount>, <offset>, buff);

  End;

4.17 CopyWorkspace

指定された作業領域で変更されたすべての行を、ターゲット作業領域にコピーします。

構文

DBMS_WM.CopyWorkspace(
   source_workspace  IN VARCHAR2,
   target_workspace  IN VARCHAR2);

パラメータ

表4-17 CopyWorkspaceプロシージャのパラメータ

パラメータ 説明
source_workspace

ソース作業領域の名前。名前は大/小文字が区別されます。

target_workspace

ターゲット作業領域の名前。名前は大/小文字が区別されます。

使用上の注意

このプロシージャは、ソース作業領域で変更されたすべての行を、ターゲット作業領域にコピーします。validtimeオプションを使用していない表のみがコピーされます。2つの作業領域間では競合チェックが実行されないため、ターゲット作業領域にすでに存在している行はすべてオーバーライドされます。ソース作業領域に存在している行ごとに、適切なDMLがターゲット作業領域で実行されます。たとえば、ソースに挿入された行がターゲットにすでに存在している場合、ターゲットの行がソースの列値で更新されます。あるいは、行がソースで更新されているが、その行がターゲットから削除されている場合、その行はターゲットに挿入されます。

すべての行がターゲット作業領域にコピーされると、データの有効性を維持するため、すべての一意制約、チェック制約および外部キー制約がターゲット作業領域に対して適用されます。制約違反が検出されると、エラーが発生し、操作はロールバックされます。

ソースの行が排他モードまたは共有モードでロックされている場合は、行をターゲットにコピーできずにエラーが発生します。同様に、ターゲット作業領域でSetWorkspaceLockModeONプロシージャを以前に実行してデフォルト・ロック・モードが設定されている場合にも、行がすでにバージョニングされていることが原因でエラーが発生します。そのため、ソース作業領域またはターゲット作業領域のいずれかで、作業領域排他ロック以外のロックを有効にしないことをお薦めします。また、ターゲット作業領域で即時ロック設定が使用されている場合には、行をターゲット表領域にコピーしようとするとエラーが発生します。

ターゲット作業領域に対する変更は、現在のオープン・トランザクションで実行されます。オープン・トランザクションがない場合は、新しいトランザクションが開始されます。

次の条件に1つでも該当する場合は、例外が発生します。

  • ターゲット作業領域とソース作業領域が同じ作業領域である。

  • ターゲット作業領域またはソース作業領域のパラメータが'LIVE'である。

  • ターゲット作業領域またはソース作業領域のパラメータがNULLである。

  • ユーザーに、両方の作業領域と、ソース作業領域で変更されたすべてのバージョン対応表に対するACCESS権限がない。

次の例は、child_1作業領域で変更されたすべての行をchild_2にコピーします。両方の作業領域は、LIVEの子作業領域です。

EXECUTE DBMS_WM.CopyWorkspace('child_1', 'child_2');

4.18 CreateSavepoint

現行バージョンのセーブポイントを作成します。

構文

DBMS_WM.CreateSavepoint(
  workspace       IN VARCHAR2,
  savepoint_name  IN VARCHAR2,
  description     IN VARCHAR2 DEFAULT NULL,
  auto_commit     IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-18 CreateSavepointプロシージャのパラメータ

パラメータ 説明
workspace

セーブポイントを作成する作業領域の名前。名前は大/小文字が区別されます。

savepoint_name

作成するセーブポイントの名前。名前は大/小文字が区別されます。

description

作成するセーブポイントの定義

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

セーブポイントに対応付けられた明示的な権限はありません。作業領域に対するアクセス権を取得しているすべてのユーザーは、作業領域内にセーブポイントを作成できます。

作業領域にユーザーが含まれている間はこのプロシージャを実行できます。オープン状態のデータベース・トランザクションが作業領域にある場合も実行できますが、これらのトランザクションによってバージョン対応表が変更されていない場合に限ります。

このプロシージャの実行中、現行の作業領域はREAD_ONLYモードにアクセス制限されます。詳細は、「作業領域のフリーズおよびアンフリーズ」を参照してください。

次の条件に1つでも該当する場合は、例外が発生します。

  • ユーザーが作業領域内の最新バージョンにいない(たとえば、ユーザーがGotoDateプロシージャをコールした場合)。

  • workspaceが存在しない。

  • savepoint_nameがすでに存在する。

  • auto_commitTRUEであり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。

  • ユーザーが、指定された作業領域に移動するための権限を取得していない。

次の例は、NEWWORKSPACE作業領域内にSavepoint1という名前のセーブポイントを作成します。

EXECUTE DBMS_WM.CreateSavepoint ('NEWWORKSPACE', 'Savepoint1');

4.19 CreateWorkspace

データベース内に新しい作業領域を作成します。

構文

DBMS_WM.CreateWorkspace(
   workspace    IN VARCHAR2,
   description  IN VARCHAR2 DEFAULT NULL,
   auto_commit  IN BOOLEAN DEFAULT TRUE);

または

DBMS_WM.CreateWorkspace(
  workspace    IN VARCHAR2,
  isrefreshed  IN BOOLEAN,
  description  IN VARCHAR2 DEFAULT NULL,
  auto_commit  IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-19 CreateWorkspaceプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。この名前は、大/小文字が区別され、一意である(他に同じ名前の作業領域がない)必要があります。名前には、" (二重引用符)、' (一重引用符)、` (グレーブ・アクセント記号)、| (縦棒)は使用しないでください。

isrefreshed

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、作業領域が連続的にリフレッシュされます。連続的にリフレッシュされる作業領域(「連続的にリフレッシュされる作業領域」を参照)では、親作業領域内で行われた変更は、データ変更が親作業領域内でコミットされるか、別の子作業領域から親作業領域にマージされるたびに、その作業領域に自動的に適用されます。そのため、RefreshWorkspaceプロシージャをコールして変更を適用する必要はありません。連続的にリフレッシュされる作業領域の詳細は、「使用上の注意」を参照してください。

FALSEを指定すると、作業領域は連続的にリフレッシュされません。作業領域をリフレッシュするには、RefreshWorkspaceプロシージャをコールする必要があります。

isrefreshedパラメータを含まない構文を使用すると、作業領域は連続的にリフレッシュされません。

description

作業領域に関する説明。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

新しい作業領域は、現行の作業領域の子です。セッションが明示的に作業領域内に入らなかった場合、それはLIVEデータベース作業領域内にあり、新しい作業領域はLIVE作業領域の子です。データベースの作業領域階層の詳細は、「作業領域階層」を参照してください。

作業領域の所有者は、CreateWorkspaceプロシージャ(またはCreateWorkspaceプロシージャを実行した別のプロシージャ)を実行したユーザーです。作業領域の作成時に有効な権限を持っていたユーザーではありません。

暗黙的セーブポイントは、現在の作業領域の現行バージョンで作成されます。(現行バージョンは、現在の作業領域の最新バージョンである必要はありません。)セーブポイント(明示的および暗黙的)の詳細は、「セーブポイントの使用」を参照してください。

このプロシージャの実行中、現行の作業領域はREAD_ONLYモードにアクセス制限されます。詳細は、「作業領域のフリーズおよびアンフリーズ」を参照してください。

このプロシージャは、作成された作業領域に暗黙的に移動しません。作業領域に移動するには、GotoWorkspaceプロシージャを使用します。

次のルールは、連続的にリフレッシュされる作業領域(isrefreshed値はTRUE)に適用されます。

  • 連続的にリフレッシュされる作業領域を作成するには、セッションがその作業領域の最新バージョンである必要があります。

  • 連続的にリフレッシュされる作業領域については、SetLockingOFFプロシージャまたはSetWorkspaceLockModeOFFプロシージャを使用して、ロックをオフにすることはできません。

次の条件に1つでも該当する場合は、例外が発生します。

  • workspaceがすでに存在する。

  • auto_commitTRUEであり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。

  • ユーザーが、作業領域を作成するための権限を取得していない。

次の例は、データベース内にNEWWORKSPACEという名前の作業領域を作成します。

EXECUTE DBMS_WM.CreateWorkspace ('NEWWORKSPACE');

4.20 Delete_Topo_Geometry_Layer

トポロジ・ジオメトリ・レイヤーをトポロジから削除します。

構文

DBMS_WM.Delete_Topo_Geometry_Layer(
     topology     IN VARCHAR2,
     table_name   IN VARCHAR2,
     column_name  IN VARCHAR2);

パラメータ

表4-20 Delete_Topo_Geometry_Layerプロシージャのパラメータ

パラメータ 説明
topology

指定した列内のトポロジ・ジオメトリを含むトポロジ・ジオメトリ・レイヤーから削除するトポロジを指定します。このトポロジは、SDO_TOPO.CREATE_TOPOLOGYプロシージャを使用して作成する必要があります。

table_name

column_nameで指定した列を含むトポロジ・ジオメトリ・レイヤー表の名前を指定します。

column_name

トポロジから削除するトポロジ・ジオメトリ・レイヤー内でトポロジ・ジオメトリを含んでいる(SDO_TOPO_GEOMETRY型の)列の名前。

使用上の注意

このプロシージャの構文と意味は、SDO_TOPO.DELETE_TOPO_GEOMETRY_LAYERプロシージャと同じです。このプロシージャの詳細は、『Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイド』を参照してください。ただし、バージョン対応のフィーチャー表のトポロジ・ジオメトリ・レイヤーをトポロジから削除するには、SDO_TOPO.DELETE_TOPO_GEOMETRY_LAYERではなくDBMS_WM.Delete_Topo_Geometry_Layerを使用する必要があります。Workspace Managerでのトポロジのサポートの詳細は、「Spatial and Graphトポロジ・サポート」を参照してください。

このプロシージャは、指定したトポロジ・ジオメトリ・レイヤーに関連付けられているデータを、エッジ表、ノード表およびフェース表から削除します(『Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイド』を参照)。

topologyまたはtable_nameがバージョン対応でない場合、またはtable_nametopology内の唯一のフィーチャー表の場合は、例外が発生します。

次の例は、CITY_DATAトポロジからLAND_PARCELS表のFEATURE列のジオメトリに基づくトポロジ・ジオメトリ・レイヤーを削除します。

EXECUTE DBMS_WM.Delete_Topo_Geometry_Layer('CITY_DATA', 'LAND_PARCELS', 'FEATURE');

4.21 DeleteSavepoint

バージョン対応表内のセーブポイントおよび関連する行を削除します。

構文

DBMS_WM.DeleteSavepoint(
   workspace                   IN VARCHAR2,
   savepoint_name              IN VARCHAR2,
   compress_view_wo_overwrite  IN BOOLEAN DEFAULT FALSE,
   auto_commit                 IN BOOLEAN DEFAULT TRUE,
   commit_in_batches           IN BOOLEAN DEFAULT FALSE,
   batch_size                  IN VARCHAR2 DEFAULT 'PRIMARY_KEY_RANGE');

パラメータ

表4-21 DeleteSavepointプロシージャのパラメータ

パラメータ 説明
workspace

セーブポイントが作成された作業領域の名前。名前は大/小文字が区別されます。

savepoint_name

削除するセーブポイントの名前。名前は大/小文字が区別されます。

compress_view_wo_overwrite

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、バージョニングが有効なときにVIEW_WO_OVERWRITEが指定された場合でも、履歴情報が削除されます。

FALSE(デフォルト)を指定すると、EnableVersioningでVIEW_WO_OVERWRITEが指定された場合、表の履歴情報は削除されません。(表に対してVIEW_WO_OVERWRITEが指定されていない場合、この表の履歴情報はこのパラメータ値に関係なく削除されます。)

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

commit_in_batches

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、バージョン対応表のbatch_size行に対する圧縮操作後に内部コミット操作が実行されます。バージョン対応表の多数の行がセーブポイント削除の影響を受ける場合、実質的にはOracleデータベース・リソース(ロールバック・セグメントやUNDO表領域など)が使用される可能性があるため、定期的なコミット操作を実行することが有効であるか、または実行する必要があります。TRUEを指定した場合は、auto_commit値にもTRUEを指定する必要があります。

FALSE(デフォルト)を指定すると、セーブポイント削除操作中には内部コミット操作が実行されません。

batch_size

commit_in_batchesTRUEの場合は内部コミット操作のバッチ・サイズです。それ以外の場合、このパラメータは無視されます。指定する場合は、TABLEまたはPRIMARY_KEY_RANGEを指定する必要があります。

TABLEを指定すると、圧縮が必要な各バージョン対応表の圧縮後に、内部コミット操作が実行されます。

PRIMARY_KEY_RANGEを指定すると、各表は異なる主キー値範囲のバッチに分割され、圧縮が必要な各バージョン対応表の行バッチがそれぞれ圧縮された後に、内部コミット操作が実行されます。影響を受ける各バージョン対応表に関連付けられた<table_name>_LT表に対してDBMS_STATS.GATHER_TABLE_STATSプロシージャを使用するなどの方法で、事前に主キーの最初の列に関する統計を生成しておく必要があります。詳細は、「使用上の注意」を参照してください。次の例は、ヒストグラム統計を生成します。

EXECUTE DBMS_STATS.GATHER_TABLE_STATS('', 'cola_marketing_budget_lt', estimate_percent=>50, method_opt=>'FOR COLUMNS SIZE 50 product_id');

使用上の注意

セーブポイントが不要になった場合(たとえば、そのセーブポイントに移動またはロールバックする必要がない場合)は、それを削除できます。

セーブポイントの削除は、次の理由から有効です。

  • セーブポイントを削除した後、セーブポイント名を再利用できます。(既存のセーブポイントと同じ名前のセーブポイントは作成できません。)

  • Workspace Managerの操作の実行時パフォーマンスが向上します。

  • Workspace Manager構造に使用されるディスク記憶域が減ります。

このプロシージャの実行中、現行の作業領域はNO_ACCESSモードにアクセス制限されます。詳細は、「作業領域のフリーズおよびアンフリーズ」を参照してください。

セーブポイントを削除するには、WM_ADMINシステム権限を持っているか、作業領域またはセーブポイントの所有者である必要があります。

セッションにオープン状態のデータベース・トランザクションがある場合、またはユーザーがGotoDate操作、または作業領域内のセーブポイントを指定したGotoSavepoint操作を実行した場合、このプロシージャは実行できません。

batch_sizeに値PRIMARY_KEY_RANGEを指定するには、まず主キーの最初の列についてヒストグラム統計(NUMBERINTEGERDATETIMESTAMPCHARまたはVARCHAR2型の列の場合)あるいは一般統計(NUMBERINTEGERDATEまたはTIMESTAMP型の列の場合)を生成する必要があります。DBMS_STATS.GATHER_TABLE_STATSプロシージャは、一般統計を生成します。NUMBERINTEGERDATEまたはTIMESTAMP型の列についてヒストグラム統計ではなく一般統計が使用可能な場合に、batch_sizePRIMARY_KEY_RANGEとして指定すると、Workspace Managerシステム・パラメータNUMBER_OF_COMPRESS_BATCHESを使用してバッチ数が計算されます。統計の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

次の条件に1つでも該当する場合は、例外が発生します。

  • workspaceにセッションがすでに1つ以上ある(作業領域がLIVEの場合は除く)。

  • workspaceが存在しない。

  • savepoint_nameが存在しない。

  • savepoint_nameは、削除可能なセーブポイントではない。(削除可能なセーブポイントの詳細は、「セーブポイントの使用」を参照してください。)

  • auto_commitTRUEであり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。

  • ユーザーが、指定された作業領域に移動するための権限を取得していない。

次の例は、NEWWORKSPACE作業領域内のSavepoint1という名前のセーブポイントを削除します。

EXECUTE DBMS_WM.DeleteSavepoint ('NEWWORKSPACE', 'Savepoint1');

4.22 DisableVersioning

バージョン対応表内に作成された行のサポート構造をすべて削除します。

構文

DBMS_WM.DisableVersioning(
   table_name         IN VARCHAR2,
   force              IN BOOLEAN DEFAULT FALSE,
   ignore_last_error  IN BOOLEAN DEFAULT FALSE,
   isTopology         IN BOOLEAN DEFAULT FALSE,
   keepWMValid        IN BOOLEAN DEFAULT TRUE,
   undo_space         IN VARCHAR2 DEFAULT NULL;

パラメータ

表4-22 DisableVersioningプロシージャのパラメータ

パラメータ 説明
table_name

表の名前または(isTopologyTRUEの場合は) Oracle Spatial and Graphトポロジ、あるいはマルチレベルの参照整合性制約に基づいて関連する表の名前のカンマ区切りリスト。(マルチレベルの参照整合性制約については、「参照整合性サポート」を参照してください。)表名は大/小文字が区別されません。

force

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、バージョニングが使用禁止になる前に、LIVE以外の作業領域内にあるすべてのデータが強制的に廃棄されます。

FALSE (デフォルト)を指定すると、table_nameLIVE以外の作業領域で変更され、table_nameを変更した作業領域がまだ存在する場合に、バージョニングを無効にできません。

ignore_last_error

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、DisableVersioningプロシージャに対する前回のコール中に発生した最後のエラー(ある場合)が無視されます。最後のエラーに関する情報はUSER_WM_VT_ERRORS静的データ・ディクショナリ・ビューおよびALL_WM_VT_ERRORS静的データ・ディクショナリ・ビュー(「Workspace Managerの静的データ・ディクショナリ・ビュー」を参照)に格納されます。詳細は、「使用上の注意」を参照してください。

FALSE (デフォルト)を指定すると、DisableVersioningプロシージャに対する前回のコール中に発生した最後のエラー(ある場合)は無視されません。

isTopology

ブール値(TRUEまたはFALSE)。

TRUEは、table_nameパラメータに指定した値が(データベース表の名前ではなく)Oracle Spatial and Graphトポロジの名前であることを示します。詳細は、「Spatial and Graphトポロジ・サポート」を参照してください。

FALSE (デフォルト)は、table_nameパラメータに指定した値がOracle Spatialトポロジの名前ではないことを示します。

keepWMValid

ブール値(TRUEまたはFALSE)。表の有効期間サポート(「Workspace Managerの有効期間のサポート」を参照)が使用可能になっている場合にのみ適用されます。

TRUE(デフォルト)を指定すると、WM_VALID列とその列のデータすべてがプロシージャの完了後も表に保持されます。

FALSEを指定すると、プロシージャの結果としてWM_VALID列とその列のデータすべてが削除されます。各主キー値の現行の行のみが保持されます。

undo_space

UNLIMITED文字列(制限を指定しない場合)、またはバージョン対応操作に使用可能なUNDO領域の最大バイト数。たとえば、1 MBの場合は'1048576'に設定します。指定した値により、Workspace Managerシステム・パラメータUNDO_SPACE (「Workspace Managerのシステム・パラメータ」を参照)の値がオーバーライドされます。

使用上の注意

このプロシージャは、EnableVersioningプロシージャによる処理を元に戻すために使用します。このプロシージャは、行のバージョニングのためのWorkspace Managerインフラストラクチャ(サポート構造)を削除しますが、LIVE作業領域内のユーザー・データには影響しません。作業領域階層およびすべてのセーブポイントは引き続き存在しますが、すべての行はLIVE作業領域内と同じになります。(LIVE作業領域内にあるバージョン非対応の表の行に複数のバージョンがある場合は、その行の最新バージョンのみが保持されます)。

table_nameに有効期間サポートが設定されている場合(「Workspace Managerのシステム・パラメータ」を参照)、このプロシージャはWM_VALID列とその列のデータすべてを削除します。WM_VALID列の削除が原因で主キー制約違反となる場合は、現在の時刻に有効な行のみが保持されます。

DisableVersioningプロシージャのコールが正常に実行されない場合、表は一貫性のない状態になります。この状態が発生した場合は、エラーの原因を修正し(SQL文およびエラー・メッセージについては、USER_WM_VT_ERRORS静的データ・ディクショナリ・ビューおよびALL_WM_VT_ERRORS静的データ・ディクショナリ・ビューを参照)、その後、ignore_last_errorパラメータ値をデフォルトのFALSEにしてDisableVersioningプロシージャを再度コールする必要があります。その後もコールが正常に実行されず、エラーの原因を修正できず、このエラーを無視する場合は、ignore_last_errorパラメータ値をTRUEに指定してDisableVersioningプロシージャをコールします。ただし、エラーを無視する場合は、ユーザーの責任で行ってください。

DisableVersioningプロシージャが正常に実行されない原因の一部を、次に示します。

  • 表の作業領域内のデータ量が多すぎるため、DisableVersioningプロシージャに必要なUNDO表領域のサイズが不十分である。

  • ユーザー定義トリガーをバージョン対応表からバージョン非対応表へ転送中に、コンパイル・エラーが発生した。

forceの値がFALSEで、次の条件に1つでも該当する場合は、DisableVersioning操作が正常に実行されません。

  • LIVE作業領域以外の作業領域内のユーザーが表を変更している。

  • LIVE作業領域以外の作業領域内に表のバージョン対応行がある。

表のバージョニングを無効にできるのは、表の所有者またはWM_ADMINシステム権限が付与されているユーザーのみです。

バージョン対応表およびバージョン対応表を所有するユーザーは削除できません。まず、関連する表(1つまたは複数)に対するバージョニングを使用禁止にする必要があります。

表がバージョン対応でない場合は、例外が発生します。

Oracle Spatial and Graphトポロジの表に関するWorkspace Managerのサポートの詳細は、「Spatial and Graphトポロジ・サポート」を参照してください。

次の例は、EMPLOYEE表に対するバージョニングを使用禁止にします。

EXECUTE DBMS_WM.DisableVersioning ('employee');

次の例は、EMPLOYEE表に対するバージョニングを使用禁止にし、DisableVersioningプロシージャに対する前回のコール中に発生した最後のエラーを無視します。

EXECUTE DBMS_WM.DisableVersioning ('employee', ignore_last_error => true);

次の例は、マルチレベルの参照整合性制約があるEMPLOYEE表、DEPARTMENT表およびLOCATION表に対するバージョニングを使用禁止にします。

EXECUTE DBMS_WM.DisableVersioning('employee,department,location');

4.23 EnableVersioning

表をバージョン対応にし、表が複数バージョンの行をサポートできるように、必要な構造を作成します。

構文

DBMS_WM.EnableVersioning(
   table_name     IN VARCHAR2,
   hist           IN VARCHAR2 DEFAULT 'NONE',
   isTopology     IN BOOLEAN DEFAULT FALSE,
   validTime      IN BOOLEAN DEFAULT FALSE,
   undo_space     IN VARCHAR2 DEFAULT NULL,
   validTimeRange IN WM_PERIOD DEFAULT NULL);

パラメータ

表4-23 EnableVersioningプロシージャのパラメータ

パラメータ 説明
table_name

表の名前または(isTopologyTRUEの場合は) Oracle Spatial and Graphトポロジ、あるいはマルチレベルの参照整合性制約に基づいて関連する表の名前のカンマ区切りリスト。(マルチレベルの参照整合性制約については、「参照整合性サポート」を参照してください。)表名の長さは25文字以下にしてください。この表では、WM_またはWM$で始まる名前の列は使用できません。表名および列名には、引用符で囲む必要のある文字(!?*など)は使用できません。表名には、大/小文字の区別はありません。

hist

table_nameに対する変更を追跡するための履歴オプション。次の値のいずれかを指定する必要があります。

NONE: 表に対する変更のタイムスタンプは追跡されません。(これがデフォルトです。)限定された履歴情報を格納するために<table_name>_HISTという名前のビュー(「xxx_HISTビュー」を参照)が作成されますが、このビューには、表の同一バージョンに対する最新の変更のみが表示され、WM_CREATETIME列とWM_RETIRETIME列は含まれていません。バージョンに対する変更の履歴は保持されず、同一バージョン内の行に対する後続の変更によって、それより前の変更が上書きされます。

VIEW_W_OVERWRITE: 上書きを伴う(W_OVERWRITE)オプションです。履歴情報を格納するために<table_name>_HISTという名前のビュー(「xxx_HISTビュー」を参照)が作成されますが、このビューには、表の同一バージョンに対する最新の変更のみが表示されます。バージョンに対する変更の履歴は保持されず、同一バージョン内の行に対する後続の変更によって、それより前の変更が上書きされます。

VIEW_WO_OVERWRITE: 上書きを伴わない(WO_OVERWRITE)オプションです。履歴情報を格納するために<table_name>_HISTという名前のビュー(「xxx_HISTビュー」を参照)が作成され、このビューには、表の同一バージョンに対するすべての変更が表示されます。バージョンに対する変更の履歴は保持され、同一バージョン内の行に対する後続の変更によってそれより前の変更が上書きされません。

isTopology

ブール値(TRUEまたはFALSE)。

TRUEは、table_nameパラメータに指定した値が(データベース表の名前ではなく)Oracle Spatial and Graphトポロジの名前であることを示します。詳細は、「Spatial and Graphトポロジ・サポート」を参照してください。

FALSE (デフォルト)は、table_nameパラメータに指定した値がOracle Spatialトポロジの名前ではないことを示します。

validTime

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、有効期間サポートが組み込まれます。Workspace Managerによる有効期間のサポートについては、「Workspace Managerの有効期間のサポート」を参照してください。

FALSE(デフォルト)を指定すると、有効期間サポートは組み込まれません。

undo_space

UNLIMITEDを含む文字列(制限を指定しない場合)、またはバージョン対応操作に使用可能なUNDO領域の最大バイト数。たとえば、1 MBの場合は'1048576'に設定します。指定した値により、Workspace Managerシステム・パラメータUNDO_SPACE (「Workspace Managerのシステム・パラメータ」を参照)の値がオーバーライドされます。

validTimeRange

オブジェクト・タイプWM_PERIOD (「WM_PERIODデータ型」を参照)はWM_VALID列に初期有効期間範囲を指定します。値を指定する場合、validTimeパラメータ値をTRUEに指定する必要があります。デフォルトでは、有効期間サポートが含まれる場合、有効期間範囲は現在のシステム時間から変更されるまでです。

使用上の注意

バージョン対応の表には、定義済の主キーが必要です。主キーをコンポジット(複数列)主キーにすることもできます。

表のバージョニングを有効にできるのは、表の所有者またはWM_ADMINシステム権限が付与されているユーザーのみです。

バージョン対応表およびバージョン対応表を所有するユーザーは削除できません。まず、関連する表(1つまたは複数)に対するバージョニングを使用禁止にする必要があります。

SYSが所有する表はバージョン対応にできません。また、バージョン対応表はSYSが所有する関連索引またはトリガーを持つことができません。

リダクション・ポリシーが定義されている表は、バージョン対応にはできません。

不可視列が含まれている表は、バージョン対応にはできません。

遅延可能制約が設定されている表は、バージョン対応にはできません。

GENERATED BY DEFAULTで作成されたID列を含む表は、バージョン対応にはできません。ただし、GENERATED BY DEFAULT ON NULLとして定義されているID列は許可されています。

表にID列が含まれている場合は、BY DEFAULT ON NULLオプションとBY DEFAULTオプションの動作は同じであり、INSERT文の列値がNULLに評価されると常に、次の値を取得するためシーケンスにアクセスします。(この動作を変更するには、UseDefraultValuesForNullsプロシージャを使用します。)

次の条件に1つでも該当する場合は、例外が発生します。

  • table_nameがすでにバージョン対応である。

  • table_nameに表のリストが含まれ、その中の任意の表が、リストに含まれていない表との間に参照整合性制約を持つ。

  • table_nameに名前がWM_またはWM$で始まる列が含まれている。

  • table_nameまたは表の任意の関連オブジェクト(列、索引、およびトリガーなど)の名前に、引用符で囲まれた識別子が含まれている。

表がバージョン対応であり、VIEW_WO_OVERWRITE histオプションが指定されている場合は、SetWoOverwriteOFFプロシージャおよびSetWoOverwriteONプロシージャをコールすることによって、後でこのオプションを使用禁止にし、再度使用可能にできます。

履歴オプションを使用すると、変更の記録および監査を行うことができます。

履歴オプションは、GotoDateプロシージャの動作に影響します。詳細は、そのプロシージャの「使用上の注意」を参照してください。

1年以上経過した履歴データを削除するなど、履歴データのサブセットを定期的にパージする場合、パージ実行日の各指定削除ポイントにセーブポイントを作成するように計画します。たとえば、2005年の履歴データを1年経過したときに削除する計画であれば、セーブポイントを2006年1月1日に作成します。その後、2007年1月1日にCompressWorkspaceプロシージャをコールして作業領域名および2006年1月1日のセーブポイントを指定し、2006年より前に発生したすべての履歴を削除します。

Oracle Spatial and Graphトポロジの表に関するWorkspace Managerのサポートの詳細は、「Spatial and Graphトポロジ・サポート」を参照してください。

現在の注意および制限事項には、次のものが含まれます。

  • バージョン対応表に参照整合性制約がある場合は、「参照整合性のサポート」に示す考慮点および制限事項に注意してください。

  • バージョン対応表にトリガーを定義している場合は、「バージョン対応表に対するトリガー」に示す考慮点および制限事項に注意してください。

  • 表に定義されている制約および権限は、バージョン対応表に引き継がれます。

  • バージョン対応表に対するDDL操作には、「バージョン対応表と関連するDDL操作」で説明されている手順と制限事項が適用されます。

  • 索引構成表は、バージョン対応にすることができません。

  • オブジェクト表は、バージョン対応にすることができません。

  • 1つ以上のLONGデータ型の列を含む表は、バージョン対応にすることができません。

  • ALLOW_NESTED_TABLE_COLUMNS Workspace Managerシステム・パラメータがONに設定されている場合を除き、1つ以上のネストした表の列を含む表は、バージョン対応にすることができません。

  • リダクション・ポリシーが定義されている表は、バージョン対応にはできません。

次の例は、EMPLOYEE表に対するバージョニングを使用可能にします。

EXECUTE DBMS_WM.EnableVersioning('employee');

次の例は、マルチレベルの参照整合性制約があるEMPLOYEE表、DEPARTMENT表およびLOCATION表に対するバージョニングを使用可能にします。

EXECUTE DBMS_WM.EnableVersioning('employee,department,location');

4.24 Export

バージョン対応表からステージング表にデータ(すべての行、または複数のパラメータの組合せで限定された行)をエクスポートします。

構文

DBMS_WM.Export(
   table_name          IN VARCHAR2,
   staging_table       IN VARCHAR2,
   workspace           IN VARCHAR2,
   where_clause        IN VARCHAR2 DEFAULT NULL,
   export_scope        IN VARCHAR2 DEFAULT DBMS_WM.EXPORT_MODIFIED_DATA_ONLY,
   after_savepoint_name  IN VARCHAR2 DEFAULT NULL,
   as_of_savepoint_name  IN VARCHAR2 DEFAULT NULL,
   after_instant       IN DATE DEFAULT NULL,
   as_of_instant       IN DATE DEFAULT NULL,
   versioned_db        IN BOOLEAN DEFAULT TRUE,
   overwrite_existing_data  IN BOOLEAN DEFAULT FALSE,
   auto_commit         IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-24 Exportプロシージャのパラメータ

パラメータ 説明
table_name

エクスポートするデータを含む表の名前。この名前は大/小文字が区別されません。

staging_table

エクスポートするデータを保持する表の名前。25文字以下である必要があります。この名前は大/小文字が区別されません。表が存在しない場合は、指定した名前とWorkspace Managerのエクスポート操作およびインポート操作に適した構造を持つ新規の表が作成されます。(ステージング表の詳細は、「使用上の注意」を参照してください。)

workspace

データのエクスポート元となる作業領域の名前。名前は大/小文字が区別されます。

where_clause

エクスポートする行を識別するWHERE句(WHEREキーワードを除く)。たとえば、department_id = 20です。

副問合せの場合を除き、WHERE句には主キー列のみを指定できます。この副問合せは、主キーではない列を参照できますが、バージョン対応表は参照できません。

where_clauseパラメータが指定されていない場合は、table_name内のすべての行がエクスポートされます。

export_scope

エクスポート操作の有効範囲(データ量)。

DBMS_WM.EXPORT_ALL_DATAを指定すると、workspace内の関連データがすべてエクスポートされます。

DBMS_WM.EXPORT_MODIFIED_DATA_ONLY(デフォルト)を指定すると、workspace内で挿入、更新または削除された関連データのみがエクスポートされます。

after_savepoint_name

セーブポイントの名前。このセーブポイントの後に挿入、更新または削除されたデータのみがエクスポートされます。

after_savepoint_nameまたはas_of_savepoint_nameを指定しなければ、セーブポイントはエクスポート対象データの判別時に無視されます。

セーブポイント関連と時点関連のパラメータに関するガイドラインは、「使用上の注意」を参照してください。

as_of_savepoint_name

セーブポイント名。セーブポイントの作成時点で作業領域に存在するデータのみがエクスポートされます。

after_savepoint_nameまたはas_of_savepoint_nameを指定しなければ、セーブポイントはエクスポート対象データの判別時に無視されます。

セーブポイント関連と時点関連のパラメータに関するガイドラインは、「使用上の注意」を参照してください。

after_instant

日付/時刻指定。この時点の後に挿入、更新または削除されたデータのみがエクスポートされます。

after_instantまたはas_of_instantを指定しなければ、時刻はエクスポート対象データの判別時に無視されます。

セーブポイント関連と時点関連のパラメータに関するガイドラインは、「使用上の注意」を参照してください。

as_of_instant

日付/時刻指定。この時点で作業領域に存在していたデータのみがエクスポートされます。

after_instantまたはas_of_instantを指定しなければ、時刻はエクスポート対象データの判別時に無視されます。

セーブポイント関連と時点関連のパラメータに関するガイドラインは、「使用上の注意」を参照してください。

versioned_db

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト)を指定すると、バージョニング情報を含むステージング表が作成されます。

FALSEを指定すると、ユーザー定義列とユーザーが参照可能なデータのみを含むステージング表が作成されます。

overwrite_existing_data

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、エクスポートされるデータでステージング表の既存のデータが上書きされます。

FALSE(デフォルト)を指定すると、ステージング表の既存のデータがすべて保持され、エクスポートされたデータが既存のデータと競合する場合は例外が発生します。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

バージョン対応表table_namewhere_clauseexport_scopeパラメータおよびworkspace内の時間またはセーブポイント関連パラメータを満たすデータが、すべてステージング表(staging_tableパラメータ)にエクスポートされます。

エクスポートする各データ行は、workspaceで挿入、更新または削除されたデータ(変更済データ)、またはworkspaceで変更されていないが表示できるデータ(祖先データ)のいずれかとみなされます。データがLIVE作業領域からエクスポートされる場合は、すべてが変更済データです。作業領域が作成され、そこでバージョニングされたデータがないときにExportプロシージャがコールされる場合、データはすべて祖先データです。

初めてバージョン対応表からデータをエクスポートするときには、ステージング表が存在しないようにしてください。したがってステージング表は作成できません。プロシージャによって、staging_tableパラメータに指定された名前を使用してステージング表が作成されるようにします。ステージング表には、元の表(table_nameパラメータ)のすべての列と、Workspace Managerが使用するいくつかの列が含まれます。

ステージング表の作成後は、元の表に対して列名やデータ型の変更または主キー制約の変更や削除などのDDL操作を実行していなければ、ステージング表を元の表からの後続のエクスポート操作で使用できます。元の表に対してこの種の変更を行った場合は、Workspace Managerで新規ステージング表を作成できるように、Exportプロシージャをコールする前にステージング表を削除してください。(既存のステージング表のデータを上書きする場合は、overwrite_existing_dataTRUEとして指定する必要があります。)

ステージング表は、現行のユーザーのスキーマに存在する必要があります。また、他のスキーマにある場合、現行のユーザーにはCREATE ANY TABLE権限とINSERT ANY TABLE権限が必要です。

セーブポイント関連および時点関連パラメータafter_savepoint_nameas_of_savepoint_nameafter_instantas_of_instantのうち、1つのみを指定することをお薦めします。after_savepoint_nameafter_instantを指定すると、この2つのパラメータの相互作用により複雑な結果になる可能性があります。after_savepoint_nameas_of_savepoint_nameafter_instantas_of_instant、またはas_of_savepoint_nameas_of_instantのパラメータの組合せは指定できません。

versioned_dbTRUEの場合、ステージング表にはすべてのユーザー定義列と3つのメタデータ列があります。追加された3つのメタデータ列は、WM$DELETEDROWと、内部で使用する2つの不可視列(WM$FLAGおよびWM$WORKSPACE)です。WM$DELETEDROW列を使用して、その行が、ソース作業領域の削除されたフォームに含まれていたかどうかを判断できます。

次の条件に1つでも該当する場合は、例外が発生します。

  • 指定した表、作業領域またはセーブポイントが存在しない。

  • table_nameにネストした表列が含まれている。

  • table_nameに、WM_PERIOD型のWM_VALIDという名前の列が含まれている。(つまり、有効期間のサポートがある表ではこのプロシージャはサポートされていません。詳細は、「Workspace Managerの有効期間のサポート」を参照してください。)

  • staging_tableは存在するが、エクスポート操作に有効な形式ではない。

  • staging_tableが現行のユーザーのスキーマ内になく、現行のユーザーがCREATE TABLE権限とINSERT TABLE権限を取得していない。

  • ユーザーがworkspaceに対するACCESS_WORKSPACE権限、またはACCESS_ANY_WORKSPACE権限を持っていない。

  • overwrite_existing_dataFALSEで、エクスポートする必要のあるデータがすでにstaging_tableに存在する。

  • auto_commitTRUEであり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。

また、「インポートおよびエクスポートの考慮点」も参照してください。

次の例は、B_Focus_2作業領域のCOLA_MARKETING_BUDGET表からCOLA_MARKETING_BUDGET_STGステージング表にすべてのデータをエクスポートします。(EXECUTE文は、実際には1行で指定します。)

EXECUTE DBMS_WM.Export(table_name => 'COLA_MARKETING_BUDGET', staging_table => 'COLA_MARKETING_BUDGET_STG', workspace => 'B_focus_2');

4.25 Export_Schemas

Workspace Managerに関連するすべてのものを含むダンプ・ファイルを作成します。Oracle Data Pump Exportユーティリティを使用します。

構文

DBMS_WM.Export_Schemas(
   job_name           IN VARCHAR2,
   alt_schema         IN VARCHAR2 DEFAULT 'WMSYS_N',
   ignore_last_error  IN BOOLEAN DEFAULT FALSE);

パラメータ

表4-25 Export_Schemasプロシージャのパラメータ

パラメータ 説明
job_name

エクスポート操作に使用するデータ・ポンプ・ジョブの名前。

alt_schema

Workspace Managerメタデータの一時的な格納に使用するデータベース・スキーマの名前。デフォルトはWMSYS_Nです。このスキーマは、プロシージャがコールされる時点では存在することはできません。プロシージャが正常に完了すると、自動的に削除されます。

ignore_last_error

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、Export_Schemasプロシージャに対する前回のコール中に発生した最後のエラー(ある場合)は無視されます。最後のエラーに関する情報はDBA_WM_VT_ERRORS静的データ・ディクショナリ・ビュー(「Workspace Managerの静的データ・ディクショナリ・ビュー」を参照)に格納されます。詳細は、「使用上の注意」を参照してください。

FALSE (デフォルト)を指定すると、Export_Schemasプロシージャに対する前回のコール中に発生した最後のエラー(ある場合)は無視されません。

使用上の注意

注:

ダンプ・ファイルを作成するにはクラウド内のユーザーがアクセスできないローカル・ファイル・システムへのアクセスが必要であるため、DBMS_WM.Export_SchemasはOracle Cloudでは実行できません。

このプロシージャは、バージョン対応表、参照整合性制約のバージョン対応表の親表、およびすべての内部Workspace Managerメタデータからなるすべてのスキーマを含むダンプ・ファイルを作成します。ダンプ・ファイルには、含まれるすべてのスキーマについて、Workspace Managerに関連するオブジェクトのみでなく、スキーマ内のすべてのオブジェクトおよびデータが含まれます。他のスキーマはすべて除外されます。

このプロシージャは、既存のデータ・ポンプ・エクスポート・ジョブを使用します。DBMS_DATAPUMP.OPENプロシージャを使用してこのジョブを作成するときに、operationパラメータをEXPORTに設定し、modeパラメータをSCHEMAに設定する必要があります。また、DBMS_WM.Export_Schemasをコールする前に、ダンプ・ファイルとログ・ファイルを指定する必要があります。エクスポート対象を変更または制限するプロシージャ(DBMS_DATAPUMP.METADATA_FILTERなど)をこのジョブに対して実行することはできません。SYSDBA権限を使用しているときにデータ・ポンプ・ジョブを作成しないようにしてください。

WMSYSスキーマはOracle Data Pump Exportユーティリティでエクスポートできないため、必要なデータの一部を保持するために一時スキーマが必要です。alt_schemaパラメータで指定されるこのスキーマは、このプロシージャをコールする前に存在することはできません。このスキーマは生成されるダンプ・ファイルに含まれるため、ターゲット・データベースに存在していないスキーマである必要があります。

データ・ポンプ・ユーティリティの使用方法の詳細は、『Oracle Databaseユーティリティ』を参照してください。

注:

Export_Schemasは、エクスポートの一貫性を保てるように、データベースが静止状態にあることを自動的に確認しません。関連するすべての表を検出して、1つずつエクスポートします。そのため、このプロシージャがコールされるときに表が変更されないようにする必要があります。そのためには、エクスポート・パラメータFLASHBACK_TIME=SYSTIMESTAMPを使用します。(元のエクスポートの場合、パラメータCONSISTENT=Yに同じ効果があります。)

詳細は、このブログ記事を参照してください。

Export_Schemasプロシージャのコールが失敗した場合は、エラーの原因を修正してください。DBA_WM_VT_ERRORS静的データ・ディクショナリ・ビューでSTATE列がEXPORTと同等のものを調べ、SQL文とエラー・メッセージを確認してください。エラーの原因を修正してから、ignore_last_errorパラメータ値をデフォルトのFALSEにしてExport_Schemasプロシージャを再度コールします。その後もコールが正常に実行されず、エラーの原因を修正できず、このエラーを無視する場合は、ignore_last_errorパラメータ値をTRUEに指定してExport_Schemasプロシージャをコールします。ただし、エラーを無視する場合は、ユーザーの責任で行ってください。

Export_Schemasプロシージャが失敗した場合にこのプロシージャを再度実行する必要があり、このプロシージャの行がDBA_WM_VT_ERRORS静的データ・ディクショナリ・ビューに存在する場合には、このプロシージャは引き続き指定された元のデータ・ポンプ・ジョブを使用します(新しいジョブを作成する必要はありません)。ただし、実行中のSQL文が元のジョブを使用しようとしたが、そのジョブが存在しない場合は、ignore_last_errorパラメータをTRUEに設定し、Export_Schemasプロシージャを実行する必要がありします。正常に完了したら、Export_Schemasプロシージャをもう一度実行します。

全データベースのエクスポートまたはDBMS_WM.Export_Schemasプロシージャのいずれかを使用してバージョン対応トポロジをエクスポートするには、事前に次の操作を実行する必要があります。

  1. トポロジの所有者としてデータベースに接続します。

  2. SDO_TOPO.PREPARE_FOR_EXPORTプロシージャを実行し、<topology-name>_EXP$という形式の名前のトポロジ・エクスポート情報表を作成します。この表には、USER_SDO_TOPO_INFOビューおよびALL_SDO_TOPO_INFOビューと同じ列が含まれます。

次の条件に1つでも該当する場合は、例外が発生します。

  • job_nameが存在しない。

  • alt_schemaがすでに存在する。

  • 実行ユーザーにDATAPUMP_EXP_FULL_DATABASEロールが付与されていない。

  • WMSYSスキーマまたは必要なユーザー・スキーマにエラーがある。

また、「インポートおよびエクスポートの考慮点」も参照してください。

次の例は、EXPORT_OWM_SCHEMASという名前のOracle Data Pumpジョブを使用して、Workspace Managerメタデータをエクスポートします。DUMP_DIRディレクトリがすでに作成されているものとします。

DECLARE
  job_name varchar2(128) := 'EXPORT_OWM_SCHEMAS' ;
  dpj number ;
BEGIN
  dpj := dbms_datapump.open('EXPORT', 'SCHEMA', null, job_name, 'COMPATIBLE') ;
  dbms_datapump.add_file(dpj, 'owm_schema.dmp', 'DUMP_DIR') ;
  dbms_datapump.add_file(dpj, 'owm_schema_export.log', 'DUMP_DIR', filetype=>dbms_datapump.KU$_FILE_TYPE_LOG_FILE) ;
  dbms_wm.export_schemas(job_name) ;
  dbms_datapump.detach(dpj);

exception when others then
  dbms_datapump.detach(dpj);
  raise ;
END;
/ 

4.26 FindRICSet

参照整合性制約の関係により、指定した表とともにバージョン対応にする必要のある表を検索します。

構文

DBMS_WM.FindRICSet(
   table_name    IN VARCHAR2,
   result_table  IN VARCHAR2);

パラメータ

表4-26 FindRICSetプロシージャのパラメータ

パラメータ 説明
table_name

参照整合性制約の関係により、一緒にバージョン対応にする必要のある他のすべての表を検索する表の名前。この名前は大/小文字が区別されません。

result_table

結果を保持する表の名前。この名前は大/小文字が区別されません。

この表には、それぞれVARCHAR2型のTABLE_OWNER列とTABLE_NAME列が必要です。表が存在しない場合は、この名前を持つ新規の表と必須列が作成されます。

使用上の注意

Workspace Managerには、参照整合性制約に関連する様々な考慮事項があります。参照整合性制約については、「参照整合性サポート」を参照してください。場合によっては、表をバージョン対応表にする前に、この表に影響する参照整合性制約内にある他の表をバージョン対応表にする必要があります。FindRICSetプロシージャでは、このような他の表をすべて検出できます。

結果を表示するには、このプロシージャをコールする前にSET SERVEROUTPUT ON文を使用します。

結果表が現行のユーザーのスキーマ内にない場合は、次の要件が適用されます。

  • 結果表が存在しない場合、現行のユーザーはCREATE ANY TABLE権限を取得している必要があります。

  • 結果表が存在する場合、現行のユーザーは表への挿入に必要な権限を取得している必要があります。

次の条件に1つでも該当する場合は、例外が発生します。

  • table_nameが存在しない。

  • result_tableが存在するが、有効な形式ではない。

  • result_tableが存在し、現行のユーザーは表への挿入に必要な権限を取得していない。

  • result_tableが存在せず、現行のユーザーのスキーマ以外のスキーマに指定されており、現行のユーザーはCREATE ANY TABLE権限を取得していない。

次の例は、2つの表(EMPLOYEESDEPARTMENTS)を作成します。この場合、DEPARTMENTS.MANAGER_IDEMPLOYEES.EMPLOYEE_IDを参照する外部キー関係が含まれています。次の例ではその後、EMPLOYEESおよびDEPARTMENTSがバージョン対応である場合に、バージョン対応にする必要がある表をすべて検出します。

結果は、EMPLOYEES表をバージョン対応にする場合はEMPLOYEES表とDEPARTMENTS表の両方をバージョン対応にする必要がありますが、DEPARTMENTS表をバージョン対応にする場合は他の表をバージョン対応にする必要がないことを示しています。

create table employees (employee_id number primary key, employee_name varchar2(30));
create table departments (dept_id number primary key, manager_id number references employees(employee_id));

-- Check RICs; result table does not already exist.
EXECUTE DBMS_WM.FindRICSet('EMPLOYEES', 'EMPLOYEES_RESULTS');
SELECT * FROM employees_results;

TABLE_OWNER                    TABLE_NAME                                       
------------------------------ ------------------------------                   
WM_DEVELOPER                   EMPLOYEES                                        
WM_DEVELOPER                   DEPARTMENTS                                      

EXECUTE DBMS_WM.FindRICSet('DEPARTMENTS', 'DEPARTMENTS_RESULTS');
SELECT * FROM departments_results;

TABLE_OWNER                    TABLE_NAME                                       
------------------------------ ------------------------------                   
WM_DEVELOPER                   DEPARTMENTS 

4.27 FreezeWorkspace

作業領域へのアクセスおよび作業領域内で変更を行うユーザーの権限を制限します。

構文

DBMS_WM.FreezeWorkspace(
   workspace     IN VARCHAR2,
   freezemode    IN VARCHAR2 DEFAULT 'NO_ACCESS',
   freezewriter  IN VARCHAR2 DEFAULT NULL,
   force         IN BOOLEAN DEFAULT FALSE);

または

DBMS_WM.FreezeWorkspace(
   workspace         IN VARCHAR2,
   session_duration  IN BOOLEAN,
   freezemode        IN VARCHAR2 DEFAULT 'NO_ACCESS',
   freezewriter      IN VARCHAR2 DEFAULT NULL,
   force             IN BOOLEAN DEFAULT FALSE);

パラメータ

表4-27 FreezeWorkspaceプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

session_duration

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、FreezeWorkspaceプロシージャをコールしたセッションがデータベースから切断された場合に、作業領域へのアクセス制限が解除されます。この値は、すべてのアクセス制限モードについて有効です。

FALSEを指定すると、FreezeWorkspaceプロシージャをコールしたセッションがデータベースから切断された場合に、作業領域へのアクセス制限は解除されません。

freezemode

アクセス制限された作業領域のモード。次の値のいずれかを指定する必要があります。

NO_ACCESS: セッションは作業領域内に入ることができません。(これがデフォルトです。)

READ_ONLY: セッションは作業領域内に入ることができますが、書込み操作(挿入、更新、削除)を行うことはできません。

1WRITER: セッションは作業領域内に入ることができますが、書込み操作(挿入、更新、削除)を実行できるのは1人のユーザーのみです(freezewriterパラメータを参照)。

1WRITER_SESSION: セッションが作業領域に入ることはできますが、書込み操作(挿入、更新、削除)を実行できるのは、(データベース・ユーザーではなく)FreezeWorkspaceプロシージャをコールしたデータベース・セッションのみです。作業領域へのアクセス制限は、FreezeWorkspaceプロシージャをコールしたセッションがデータベースから切断されたときに解除されます。

WM_ONLY: Workspace Managerの操作のみが許可されます。セッションはデータ値を直接変更できませんが、子作業領域を作業領域にマージし、その作業領域でセーブポイントを作成できます。

freezewriter

作業領域内で変更を行うことができるユーザー。freezemode1WRITERの場合にのみ、指定できます。デフォルト値はUSER(現行のユーザー)です。

force

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、作業領域は、すでにアクセス制限されている場合でも、強制的にアクセス制限されます。たとえば、この値を指定すると、最初にUnfreezeWorkspaceプロシージャをコールしなくても、freezemodeパラメータに異なる値を指定して作業領域をアクセス制限できます。

FALSE(デフォルト値)を指定すると、すでにアクセス制限されている作業領域はアクセス制限されません。

使用上の注意

session_durationパラメータを含まないプロシージャ構文を指定することは、このパラメータにFALSEを指定することと同じです。つまり、FreezeWorkspaceプロシージャをコールしたセッションがデータベースから切断された場合に、作業領域へのアクセス制限は解除されません。

次の条件に1つでも該当する場合、操作が正常に実行されません。

  • workspaceがすでにアクセス制限されている(forceTRUEの場合は除く)。

  • workspace内にセッションがあり、freezemodeNO_ACCESSに指定されている(または、デフォルトでこの値になっている)。

  • session_durationFALSEに、freezemode1WRITER_SESSIONに指定されている。

freezemodeREAD_ONLYまたは1WRITERであり、アクティブなデータベース・トランザクションがある場合は、作業領域をアクセス制限できません。

次の条件に1つでも該当する場合は、作業領域をアクセス制限できます。

  • 指定された作業領域の所有者である。

  • 指定された作業領域に対するWM_ADMINFREEZE_ANY_WORKSPACE権限またはFREEZE_WORKSPACE権限を持っている。

LIVE作業領域は、freezemodeREAD_ONLYまたは1WRITERの場合にのみ、アクセス制限できます。

FreezeWorkspaceによる処理を元に戻すには、UnfreezeWorkspaceプロシージャを使用します。

次の例は、NEWWORKSPACE作業領域をアクセス制限します。

EXECUTE DBMS_WM.FreezeWorkspace ('NEWWORKSPACE');

4.28 GetBulkLoadVersion

BeginBulkLoadingプロシージャのコールとSQL*Loader制御ファイルで指定できるバージョン番号を戻します。

注:

Oracle Databaseリリース12.1では、このファンクションは不要です。このファンクションは常にNULL値を戻します。

構文

DBMS_WM.GetBulkLoadVersion(
   workspace      IN VARCHAR2,
   savepoint_var  IN VARCVHAR2 DEFAULT 'LATEST') RETURN INTEGER;

パラメータ

表4-28 GetBulkLoadVersionファンクションのパラメータ

パラメータ 説明
workspace

バルク・ロードのバージョンを戻す作業領域の名前。名前は大/小文字が区別されます。

savepoint_var

データをバルク・ロードする作業領域内のバージョン。LATESTまたはROOT_VERSIONを指定する必要があります。

LATEST(デフォルト)は、作業領域内の現行のバージョンです。

ROOT_VERSIONは、ルート・バージョン(バージョン番号0(ゼロ)、LIVE作業領域内)です。ルート・バージョンは他のすべてのバージョンの祖先であるため、ルート・バージョンのデータは他のすべての作業領域から参照可能です(LIVE以外の作業領域に更新済のデータがない場合)。ROOT_VERSIONを指定できるのは、workspaceLIVEの場合のみです。

使用方法

Oracle Databaseリリース12.1では、このファンクションは不要です。このファンクションは常にNULL値を戻します。BeginBulkLoadingプロシージャは、作業領域名とオプションのセーブポイント名に基づいてバルク・ロード・バージョンを自動的に決定します。(ただし、以前のリリースで有効なバルク・ロード・プロセスは引き続きサポートされます。)

バージョン対応表へのデータのバルク・ロードを開始する前に、BeginBulkLoadingプロシージャをコールする必要があります。バルク・ロード・セッションを終了するには、CommitBulkLoadingプロシージャ(データのロードによる変更をコミットする場合)またはRollbackBulkLoadingプロシージャ(データのロードによる変更をロールバックする場合)をコールする必要があります。Workspace Managerでのバルク・ロードの詳細は、「バージョン対応表へのバルク・ロード」を参照してください。

次の条件に1つでも該当する場合は、例外が発生します。

  • workspaceが存在しない。

  • savepoint_varが有効な値ではない。

  • savepoint_varROOT_VERSIONであるが、workspaceLIVEではない。

次の例は、W1作業領域のバルク・ロード・バージョン番号を取得し、その作業領域内でEMP表へのバルク・ロード操作を開始します。

DECLARE
  version INTEGER;
BEGIN
  SELECT DBMS_WM.GetBulkLoadVersion ('W1') INTO version FROM DUAL;
  DBMS_WM.BeginBulkLoading ('EMP', 'W1', version);
END;
/

4.29 GetConflictWorkspace

SetConflictWorkspaceプロシージャを実行したセッションの作業領域の名前を戻します。

構文

DBMS_WM.GetConflictWorkspace() RETURN VARCHAR2;

パラメータ

なし。

使用上の注意

SetConflictWorkspaceプロシージャが実行されていない場合は、現行の作業領域の名前が戻されます。

次の例は、セッションがSetConflictWorkspaceプロシージャを実行した作業領域の名前を表示します。

SELECT DBMS_WM.GetConflictWorkspace FROM DUAL;

GETCONFLICTWORKSPACE                                                            
-----------------------------------------------------------------------------
B_focus_2  

4.30 GetDiffVersions

SetDiffVersions操作が実行されたセッションの作業領域とセーブポイントのペアの名前を戻します。

構文

DBMS_WM.GetDiffVersions() RETURN VARCHAR2;

パラメータ

なし。

使用上の注意

戻される文字列の形式は「(WS1,SP1),(WS2,SP2)」です。この形式は、カッコも含め、戻された文字列の一部を後でSetDiffVersionsプロシージャへのコールで使用する場合に有効です。

次の例は、セッションがSetDiffVersions操作を実行した作業領域とセーブポイントのペアの名前を表示します。

SELECT DBMS_WM.GetDiffVersions FROM DUAL;

GETDIFFVERSIONS                                                                 
--------------------------------------------------------------------------------
(B_focus_1, LATEST), (B_focus_2, LATEST) 

4.31 GetLockMode

現行のセッションのロック・モードを戻します。これによって、バージョン対応行、および前回のバージョン内の対応する行にアクセスできるかどうかが決まります。

構文

DBMS_WM.GetLockMode() RETURN VARCHAR2;

パラメータ

なし。

使用上の注意

このファンクションは、ESCまたはNULLを戻します。

  • E(排他)、S(共有)およびC(引継ぎ)の詳細は、SetLockingONプロシージャのlockmodeパラメータの説明を参照してください。

  • NULLは、ロック操作が無効であることを示します。(SetLockingOFFプロシージャをコールすると、この設定になります。)

Workspace Managerのロックの詳細は、「Workspace Managerでのロック管理」を参照してください。また、SetLockingONプロシージャおよびSetLockingOFFプロシージャの説明も参照してください。

次の例は、セッションのロック・モードを表示します。

SELECT DBMS_WM.GetLockMode FROM DUAL;

GETLOCKMODE                                                                     
--------------------------------------------------------------------------------
C

4.32 GetMultiWorkspaces

バージョン対応表の複数作業領域ビューで参照できる作業領域の名前を戻します。

構文

DBMS_WM.GetMultiWorkspaces() RETURN VARCHAR2;

パラメータ

なし。

使用上の注意

このプロシージャは、複数作業領域ビュー(「xxx_MWビュー」を参照)で参照できる作業領域の名前を戻します。

複数作業領域ビューで参照できる作業領域がない場合は、NULLが戻されます。複数の作業領域名が戻される場合は、名前がカンマで区切られます(たとえば、workspace1,workspace2,workspace3)。

複数作業領域ビューで作業領域を表示するには、SetMultiWorkspacesプロシージャを使用します。

次の例は、複数作業領域ビューで参照できる作業領域の名前を表示します。

SELECT DBMS_WM.GetMultiWorkspaces FROM DUAL;

4.33 GetOpContext

現行のセッションに対する現行の操作のコンテキストを戻します。

構文

DBMS_WM.GetOpContext() RETURN VARCHAR2;

パラメータ

なし。

使用上の注意

このファンクションは、次の値のいずれかを戻します。

  • DML: 現行の操作は、ユーザーが実行したデータ操作言語(DML)によって開始される操作です。

  • IMPORT: 現在の操作はImportプロシージャ・コールによって開始されています。

  • MERGE_REMOVE: 現行の操作は、remove_workspaceパラメータをTRUEに設定してMergeWorkspaceプロシージャをコールするか、remove_dataパラメータをTRUEに設定してMergeTableプロシージャをコールすることによって開始されています。

  • MERGE_NOREMOVE: 現行の操作は、remove_workspaceパラメータをFALSEに設定してMergeWorkspaceプロシージャをコールするか、remove_dataパラメータをFALSEに設定してMergeTableプロシージャをコールすることによって開始されています。

  • WORKSPACE_COPY: 現在の操作はCopyWorkspaceプロシージャ・コールによって開始されています。

戻り値は、現行の操作に基づいて適切な処置を行うために、ユーザー定義トリガーで使用できます。

次の例は、現行の操作のコンテキストを表示します。

SELECT DBMS_WM.GetOpContext FROM DUAL;

GETOPCONTEXT                                                                     
--------------------------------------------------------------------------------
DML

4.34 GetOriginalDDL

EnableVersioningプロシージャのコール前に存在していたバージョン対応表の元のDDLを戻します。

構文

DBMS_WM.GetOriginalDDL
   table_id   IN VARCHAR2,
   ddl_stmts  IN OUT KU$_DDLS;

または

DBMS_WM.GetOriginalDDL
   table_id  IN VARCHAR2,
   ddl_clob  IN OUT CLOB;

パラメータ

表4-29 GetOriginalDDLプロシージャのパラメータ

パラメータ 説明
table_id

表を作成するための元のDDLを戻す表の名前。この名前は大/小文字が区別されません。

ddl_stmts

表の作成、表の索引やトリガーの作成、および権限付与のための元のDDL文。

KU$DLLS型は、TABLE OF KU$_DD Lとして定義されます。KU$DDL型は、(DDLTEXT CLOB, PARSEDITEMS KU$_PARSED_ITEMS)として定義されます。KU$_PARSED_ITEMS型は、TABLE OF KU$_PARSED_ITEMとして定義されます。KU$_PARSED_ITEM型は、(ITEM VARCHAR2(30), VALUE VARCHAR2(4000), OBJECT_ROW NUMBER)として定義されます。

ddl_clob

(ddl_stmtsと同じ情報ですが、CLOB型を使用します。)

使用方法

EnableVersioningプロシージャがコールされると、表に対し、その構造と関連オブジェクトの構造を変更するDDL文が実行されます。(ここでの変更内容については「バージョン対応表のインフラストラクチャ」でいくつか説明しています。)GetOriginalDDLプロシージャは、表をバージョン非対応として表す一連のDDL文(CREATE TABLE、CREATE INDEX、CREATE TRIGGER、GRANTなど)を戻します。これらの文を使用して、別のスキーマまたは別のデータベース内でバージョン非対応の形式で表を作成できます。作成されたこの新しい表は、バージョン対応にするか、またはバージョン非対応の形式で使用できます。

次のいずれかの場合に例外が発生します。

  • table_idが存在しない。

  • table_idへのアクセス権がない。

次の例は、COLA_MARKETING_BUDGET表に対する元のDDL文を、KU$_DLLS型の変数に戻します。

DECLARE
  original_ddl KU$_DDLS;
BEGIN
  DBMS_WM.GetOriginalDDL('cola_marketing_budget', 
                         original_ddl);
END;
/

4.35 GetPhysicalTableName

バージョン対応表について物理表の名前(<table_name>_LT形式)を戻します。

構文

DBMS_WM.GetPhysicalTableName(
   table_owner  IN VARCHAR2,
   table_name   IN VARCHAR2) RETURN VARCHAR2;

パラメータ

表4-30 GetPhysicalTableNameファンクションのパラメータ

パラメータ 説明
table_owner

table_nameを所有するスキーマの名前。

table_name

関連付けられた物理表の名前を戻すバージョン対応表の名前。

使用方法

table_nameがバージョン対応表の場合、このファンクションは、EnableVersioningプロシージャのコール時にWorkspace Managerで作成された表の名前(<table_name>_LT形式の名前)を戻します。この<table_name>_LT表の詳細は、「バージョン対応表のインフラストラクチャ」を参照してください。

table_nameがバージョン対応表でない場合、このファンクションはtable_nameを戻します。そのため、このファンクションを使用して表がバージョン対応かどうか(つまり、<table_name>_LT形式の名前と表の元の名前のどちらが戻されるか)をチェックすることもできます。

ファンクションを実行しているユーザーに表へのアクセス権がない場合、またはこの表が存在しない場合、ファンクションはNULL値を戻します。

次の例は、COLA_MARKETING_BUDGET表がバージョン対応になった後で、その表に関連付けられた物理表の名前を表示します。

SELECT DBMS_WM.GetPhysicalTableName('wm_developer', 'cola_marketing_budget')
   FROM DUAL;

DBMS_WM.GETPHYSICALTABLENAME('WM_DEVELOPER','COLA_MARKETING_BUDGET')            
--------------------------------------------------------------------------------
COLA_MARKETING_BUDGET_LT 

4.36 GetPrivs

指定された作業領域に対して現行のユーザーが取得しているすべての権限のリストを戻します。このリストでは、権限がカンマで区切られます。

構文

DBMS_WM.GetPrivs(
   workspace  IN VARCHAR2) RETURN VARCHAR2;

パラメータ

表4-31 GetPrivsファンクションのパラメータ

パラメータ 説明
workspace

権限のリストを戻す作業領域の名前。名前は大/小文字が区別されます。

使用方法

Workspace Managerの権限の詳細は、「Workspace Managerでの権限管理」を参照してください。

次の例は、現行のユーザーがB_focus_2作業領域に対して取得している権限を表示します。

SELECT DBMS_WM.GetPrivs ('B_focus_2') FROM DUAL;

DBMS_WM.GETPRIVS('B_FOCUS_2')                                                        
--------------------------------------------------------------------------------
ACCESS,MERGE,CREATE,REMOVE,ROLLBACK 

4.37 GetSessionInfo

現行の作業領域およびセッション・コンテキストに関する情報を取得します。

構文

DBMS_WM.GetSessionInfo(
   workspace     OUT VARCHAR2,
   context       OUT VARCHAR2,
   context_type  OUT VARCHAR2);

パラメータ

表4-32 GetSessionInfoプロシージャのパラメータ

パラメータ 説明
workspace

現行のセッションがある作業領域の名前。

context

作業領域内の現在のセッションのコンテキスト。LATEST、セーブポイント名、特定の時点(日付形式'DD-MON-YYYY HH24:MI:SS')のいずれかとして表されます。(詳細は、「使用上の注意」を参照してください。)

context_type

作業領域内の現行のセッション・コンテキストの種類。値にはLATEST (contextLATESTの場合)、SAVEPOINT (contextがセーブポイント名の場合)またはINSTANT (contextが時点の場合)のいずれかを指定します。

使用上の注意

このプロシージャは、GotoWorkspace操作、GotoSavepoint操作およびGotoDate操作を組み合せて実行した後など、セッションの場所(作業領域およびコンテキスト)を知る必要がある場合に有効です。

プロシージャが正常に実行された後のcontextパラメータの値は、次のいずれかです。

  • LATEST: 現在、セッションはLATEST論理セーブポイント(「セーブポイントの使用」を参照)にあり、作業領域内で行われた変更が表示されます。セッションが作業領域に入ると(GotoWorkspaceプロシージャを使用)、コンテキストは自動的にLATESTに設定されます。

  • セーブポイント名: 現在、セッションは作業領域内のセーブポイントにあります。最新バージョンの作業領域で変更が行われても、セッションではこれらの変更は表示されませんが、セーブポイント作成時のデータの静的ビューが表示されます。GotoSavepointプロシージャがコールされた後、セッション・コンテキストはセーブポイント名に設定されます。

  • 特定の時点: 現在、セッションは特定の時点に設定されています。最新バージョンの作業領域で変更が行われても、セッションではこれらの変更は表示されませんが、特定の時点におけるデータの静的ビューが表示されます。GotoDateプロシージャがコールされた後、セッション・コンテキストはある時点に設定されます。

セッション・コンテキストの詳細は、「Workspace Managerのセッション・コンテキスト情報」を参照してください。

次の例は、現行の作業領域およびセッション・コンテキストに関する情報を取得し、表示します。

DECLARE
  current_workspace VARCHAR2(128);
  current_context VARCHAR2(128);
  current_context_type VARCHAR2(128);
BEGIN
  DBMS_WM.GetSessionInfo(current_workspace, 
                         current_context, 
                         current_context_type);
  DBMS_OUTPUT.PUT_LINE('Session currently in workspace: ' ||current_workspace);
  DBMS_OUTPUT.PUT_LINE('Session context is: ' ||current_context);
  DBMS_OUTPUT.PUT_LINE('Session context is on: ' ||current_context_type);
END;
/
Session currently in workspace: B_focus_2                                       
Session context is: LATEST                                                      
Session context is on: LATEST                                                   

PL/SQL procedure successfully completed.

4.38 GetSystemParameter

Workspace Managerシステム・パラメータの値を戻します。

構文

DBMS_WM.GetSytstemParameter(
   name   IN VARCHAR2) RETURN VARCHAR2;

パラメータ

表4-33 GetSystemParameterプロシージャのパラメータ

パラメータ 説明
name

値を設定するWorkspace Managerシステム・パラメータの名前。この名前には、ALLOW_CAPTURE_EVENTSALLOW_MULTI_PARENT_WORKSPACESALLOW_NESTED_TABLE_COLUMNSCR_WORKSPACE_MODEFIRE_TRIGGERS_FOR_NONDML_EVENTSNONCR_WORKSPACE_MODEのいずれかを指定する必要があります。

使用上の注意

」Workspace Managerのシステム・パラメータの詳細は、「Workspace Managerのシステム・パラメータ」を参照してください。

name値が有効でない場合は、例外が発生します。

次の例は、複数の親を持つ作業領域(「複数の親を持つ作業領域」を参照)が許可されるかどうかをチェックします。

SELECT DBMS_WM.GetSystemParameter ('ALLOW_MULTI_PARENT_WORKSPACES') FROM DUAL;

DBMS_WM.GETSYSTEMPARAMETER('ALLOW_MULTI_PARENT_WORKSPACES')                     
--------------------------------------------------------------------------------
ON 

4.39 GetValidFrom

現行のセッションの有効期間のValidFrom属性を戻します。(有効期間のサポートの詳細は、「Workspace Managerの有効期間のサポート」を参照してください。)

構文

DBMS_WM.GetValidFrom() RETURN TIMESTAMP WITH TIME ZONE;

パラメータ

なし。

使用上の注意

セッションの有効期間を設定するには、SetValidTimeプロシージャを使用します。

現行のセッションの有効期間のValidTill属性を取得するには、GetValidTillファンクションを使用します。

次の例は、現行のセッションの有効期間のValidFrom属性を表示します。

SELECT DBMS_WM.GetValidFrom FROM DUAL;

GETVALIDFROM
---------------------------------------------------------------------------
01-JAN-1995 12:00:00 -04:00

4.40 GetValidTill

現行のセッションの有効期間のValidTill属性を戻します。(有効期間のサポートの詳細は、「Workspace Managerの有効期間のサポート」を参照してください。)

構文

DBMS_WM.GetValidTill() RETURN TIMESTAMP WITH TIME ZONE;

パラメータ

なし。

使用上の注意

セッションの有効期間を設定するには、SetValidTimeプロシージャを使用します。

現行のセッションの有効期間のValidFrom属性を取得するには、GetValidFromファンクションを使用します。

次の例は、現行のセッションの有効期間のValidTill属性を表示します。

SELECT DBMS_WM.GetValidTill FROM DUAL;

GETVALIDTILL
---------------------------------------------------------------------------
01-JAN-1996 12:00:00 -04:00

4.41 GetVersion

Workspace Managerの現行バージョンを戻します。

構文

DBMS_WM.GetVersion() RETURN VARCHAR2;

パラメータ

なし。

使用上の注意

戻される値は、WM_INSTALLATIONビューでNAME列値がOMW_VERSIONのVALUE列の値と同じです。

次の例は、Workspace Managerのバージョン番号を表示します。

SELECT DBMS_WM.GetVersion FROM DUAL;

GETOPCONTEXT                                                                     
--------------------------------------------------------------------------------
12.2.0.1.0

4.42 GetWMMetadataSpace

Workspace Managerのメタデータの格納に現在使用されているバイト数を戻します。

構文

DBMS_WM.GetWMMetadataSpace() RETURN NUMBER;

パラメータ

なし。

使用上の注意

Workspace Managerのメタデータ(ビュー、内部表およびその他のオブジェクト)は、デフォルトでWMSYSユーザーのデフォルト表領域に格納されます。Workspace Managerメタデータのサイズは直接制御できませんが、その位置はMove_Procプロシージャを使用してメタデータを異なる表領域に移動することで制御できます。GetWMMetadataSpaceファンクションを使用すると、Workspace Managerメタデータの移動先とみなしている表領域で使用可能にする必要のある最小領域の概算を判断できます。

次の例は、Workspace Managerのメタデータの格納に現在使用されているバイト数を表示します。

SELECT DBMS_WM.GetWMMetadataSpace FROM DUAL;
 
GETWMMETADATASPACE                                                              
------------------                                                              
           6750208 

4.43 GetWorkspace

セッションの現行の作業領域を戻します。

構文

DBMS_WM.GetWorkspace() RETURN VARCHAR2;

パラメータ

なし。

使用上の注意

なし。

次の例は、セッションの現行の作業領域を表示します。

SELECT DBMS_WM.GetWorkspace FROM DUAL;

GETWORKSPACE                                                                        
--------------------------------------------------------------------------------
B_focus_2  

4.44 GotoDate

現行の作業領域内の指定された日付および時刻またはそれに近い時点のセーブポイントに移動します。

構文

DBMS_WM.GotoDate(
   in_date   IN VARCHAR2,
   fmt       IN VARCHAR2 DEFAULT 'mmddyyyyhh24miss',
   nlsparam  IN VARCHAR2 DEFAULT NULL,
   tsWtz     IN BOOLEAN DEFAULT FALSE);

パラメータ

表4-34 GotoDateプロシージャのパラメータ

パラメータ 説明
in_date

作業領域の読取り専用ビューの日付および時刻。(詳細は、「使用上の注意」を参照してください。)

in_dateがVARCHAR2文字列の場合は、tsWtzパラメータの値に応じて日付文字列またはタイム・ゾーン付きタイムスタンプです。

fmt

日付フォーマット。オプションはTO_TIMESTAMP_TZファンクションと同じです。このファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

デフォルト: 'mmddyyyyhh24miss'

nlsparam

グローバリゼーション・サポートのオプション。オプションはTO_TIMESTAMP_TZファンクションと同じです。このファンクションの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

tsWtz

タイム・ゾーン・フラグ付きタイムスタンプ。ブール値(TRUEまたはFALSE)。

TRUEは、in_dateがタイム・ゾーン情報を含むタイムスタンプとみなされることを意味します。

FALSE(デフォルト)は、in_dateが日付文字列であることを意味します。

使用上の注意

指定された日付および時刻、またはそれに近い時点の現行の作業領域に対する読取り専用ビューが表示されます。正確な時点は、EnableVersioningプロシージャで設定されるか、あるいはSetWoOverwriteOFFプロシージャまたはSetWoOverwriteONプロシージャで変更される、バージョン対応表内のデータの変更追跡用の履歴オプションによって異なります。

  • NONE: 読取り専用ビューは、in_date以降の最初のセーブポイントを反映します。

  • VIEW_W_OVERWRITE: 読取り専用ビューは、2つのセーブポイント間にin_dateがあり、2つのセーブポイント間でデータが変更された場合を除き、in_date時点で有効なデータ値を反映します。この場合、セーブポイント間で変更されたデータが、空のデータとして表示されるか、または前の値が表示されることがあります。完全かつ正確なデータのビューを取得するには、表をバージョン対応にするときにVIEW_WO_OVERWRITE履歴オプションを指定します。

  • VIEW_WO_OVERWRITE: 読取り専用ビューは、in_date時点で有効なデータ値を反映します。

履歴オプションの詳細は、EnableVersioningプロシージャのhistパラメータの説明を参照してください。

次のシナリオは、VIEW_WO_OVERWRITE設定の影響を示します。次の一連のイベントを想定してください。

  1. 行内のMANAGER_NAME値はAdamsです。

  2. セーブポイントSP1が作成されます。

  3. MANAGER_NAME値がBaxterに変更されます。

  4. (ステップ7で)in_dateに指定される時点に到達します。

  5. MANAGER_NAME値がChangに変更されます。(したがって、最初のセーブポイントと2番目のセーブポイントの間に、in_dateの前後で値が変更されています。)

  6. セーブポイントSP2が作成されます。

  7. ステップ4で発生した時点をin_dateに指定して、GotoDate操作が実行されます。

前述の使用例では、次のことに注意してください。

  • 有効な履歴オプションはVIEW_WO_OVERWRITEです。ステップ7の後のMANAGER_NAME値はBaxterです。ステップ5の後、バージョン対応表には3つの行が含まれており、各行のMANAGER_NAME値は異なります(AdamsBaxterChang)。これは、それぞれの変更が行の新しいコピーで行われるためです。

  • 有効な履歴オプションがVIEW_W_OVERWRITEである場合、ステップ7以降は値が表示されません。ステップ3および5の更新は行の同一コピーに対して行われ、ステップ3の更新はステップ5の更新で上書きされます。その結果、ステップ5以降のバージョン対応表には、MANAGER_NAMEAdamsおよびChangを持つ2行が含まれます。特定時点で有効だったMANAGER_NAME値(Baxter)が上書きされているため、行は参照できません。

  • 有効な履歴オプションはNONEです。ステップ7の後のMANAGER_NAME値はChangです。これは、指定された特定の時点の後の最初のセーブポイントがSP2であるためです。ステップ5以降のバージョン対応表には、MANAGER_NAMEAdamsおよびChangを持つ2行が含まれます。

GotoDateプロシージャは、ユーザーが作業領域内に存在する間に実行する必要があります。このプロシージャに対応付けられた明示的な権限はありません。

次の例は、現在有効な履歴オプションによって、2004年6月8日の午前0時時点またはそれに近い時点に移動します。

EXECUTE DBMS_WM.GotoDate ('08-JUN-04', 'DD-MON-YY');

4.45 GotoSavepoint

現行の作業領域内の指定されたセーブポイントに移動します。

構文

DBMS_WM.GotoSavePoint(
   savepoint_name  IN VARCHAR2 DEFAULT 'LATEST');

パラメータ

表4-35 GotoSavepointプロシージャのパラメータ

パラメータ 説明
savepoint_name

セーブポイントの名前。名前は大/小文字が区別されます。savepoint_nameが指定されていない場合、デフォルト値はLATESTです。

使用上の注意

セーブポイント作成時の作業領域の読取り専用ビューが表示されます。このプロシージャは、RollbackToSPプロシージャをコールして特定のセーブポイントにロールバックし、そのセーブポイント以降のすべての行を削除する前に、異なるセーブポイントの作業領域を調べる場合に有効です。

この操作は、ユーザーが作業領域内に存在する間に実行できます。この操作に対応付けられた明示的な権限はありません。

セーブポイントにロールバックしない場合は、パラメータをNULLに設定してGotoSavepointプロシージャをコールすると、作業領域内の現在アクティブなバージョンに移動できます。(これによって、GotoWorkspaceプロシージャをコールして作業領域を指定した場合と同様の結果が得られます。)

LATESTセーブポイントなどのセーブポイントの詳細は、「セーブポイントの使用」を参照してください。

次の例は、Savepoint1という名前のセーブポイントに移動します。

EXECUTE DBMS_WM.GotoSavepoint ('Savepoint1');

4.46 GotoWorkspace

現行のセッションを指定された作業領域に移動します。

構文

DBMS_WM.GotoWorkspace(
   workspace  IN VARCHAR2);

パラメータ

表4-36 GotoWorkspaceプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

使用上の注意

作業領域に移動すると、そこでデータに対する変更を行うことができます。

LIVEデータベースに移動するには、workspaceLIVEに指定します。ユーザー(自分自身を含む)が作業領域内にいる場合は多くの操作が禁止されるため、作成された作業領域に対して操作を実行する前にLIVE作業領域に移動すると便利です。

次の条件に1つでも該当する場合は、例外が発生します。

  • workspaceが存在しない。

  • ユーザーがworkspaceに対するACCESS_WORKSPACE権限を取得していない。

  • workspaceNO_ACCESSモードにアクセス制限されている(FreezeWorkspaceプロシージャを参照)。

次の例は、NEWWORKSPACE作業領域内に移動する例です。ユーザーは、その作業領域内の最新バージョンで作業を開始します。

EXECUTE DBMS_WM.GotoWorkspace ('NEWWORKSPACE');

次の例は、LIVEデータベース作業領域内に移動する例です。デフォルトでは、データベースに接続したユーザーは、この作業領域内に置かれます。

EXECUTE DBMS_WM.GotoWorkspace ('LIVE');

4.47 GrantGraphPriv

複数の親を持つグラフ作業領域に対する権限を、ユーザーおよびロールに付与します。grant_optionパラメータを指定すると、権限受領者は指定された権限を他のユーザーおよびロールに付与できます。

構文

DBMS_WM.GrantGraphPriv(
   priv_types      IN VARCHAR2,
   leaf_workspace  IN VARCHAR2,
   grantee         IN VARCHAR2,
   node_types      IN VARCHAR2 DEFAULT '(''R'',''I'',''L'')',
   grant_option    IN VARCHAR2 DEFAULT 'NO',
   auto_commit     IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-37 GrantGraphPrivプロシージャのパラメータ

パラメータ 説明
priv_types

権限を表す1つ以上のキーワードの文字列。(Workspace Managerの権限の詳細は、「Workspace Managerでの権限管理」を参照してください。)権限キーワードを区切るにはカンマを使用します。使用可能なキーワードは、ACCESS_WORKSPACEMERGE_WORKSPACECREATE_WORKSPACEREMOVE_WORKSPACEROLLBACK_WORKSPACEおよびFREEZE_WORKSPACEです。

leaf_workspace

非循環有向グラフ内のリーフ作業領域の名前。(リーフ作業領域、非循環有向グラフなど、複数の親を持つ作業領域に関連する概念の詳細は、「複数の親を持つ作業領域」を参照してください。)名前は大/小文字が区別されます。

grantee

priv_typesを付与するユーザー(PUBLICユーザー・グループでも可)またはロールの名前。

node_types

権限を付与するノードのタイプを表す文字のリスト(文字をカッコで囲み、カンマで区切る): R (グラフのルート)、I (指定された中間ノード)、L (グラフのリーフ)。デフォルトでは、すべてのタイプのノードです。

grant_option

YESを指定してGrant Optionを権限受領者に対して使用可能にするか、またはNO(デフォルト値)を指定してGrant Optionを権限受領者に対して使用禁止にします。Grant Optionを使用すると、granteeは、leaf_workspaceで指定された作業領域に対するpriv_typesで指定された権限を他のユーザーおよびロールに付与できます。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

このプロシージャとは対照的に、GrantWorkspacePriv は複数の親を持つグラフ作業領域以外の作業領域に対する作業領域レベルのWorkspace Manager権限を付与します。

ユーザーが複数のソースから権限を取得し、それらのソースのいずれかにその権限に対するGrant Optionがある場合、ユーザーもその権限に対するGrant Optionを取得します。たとえば、ユーザーSCOTTにはgrant_optionNOに指定したACCESS_WORKSPACE権限が付与されているが、PUBLICユーザー・グループにはgrant_optionYESに指定したACCESS_WORKSPACE権限が付与されていると想定します。ユーザーSCOTTPUBLICのメンバーであるため、ユーザーSCOTTには、Grant Option付きのACCESS_WORKSPACE権限が付与されています。

WM_ADMIN_ROLEロールには、Grant Optionが付いたすべてのWorkspace Manager権限があります。WM_ADMIN_ROLEロールは自動的にDBAロールに付与されます。

その他のすべてのWorkspace Manager権限には、ACCESS_WORKSPACE権限またはACCESS_ANY_WORKSPACE権限が必要です。

複数の親を持つグラフ作業領域に対する作業領域レベルの権限を取り消すには、RevokeGraphPriv プロシージャを使用します。

次の条件に1つでも該当する場合は、例外が発生します。

  • granteeがデータベース内の有効なユーザーまたはロールでない。

  • ユーザーがpriv_typesを付与するための権限を取得していない。

  • auto_commitTRUEであり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。

次の例は、ユーザーSmithが、NEWWORKSPACE作業領域がリーフ作業領域である非循環有向グラフ内のすべてのタイプのノードにアクセスできるようにし、これらの作業領域内の変更をマージできるようにします。また、Smithが、リーフ作業領域に対する2つの指定された権限を他のユーザーに付与できるようにします。

DBMS_WM.GrantGraphPriv ('ACCESS_WORKSPACE, MERGE_WORKSPACE', 'NEWWORKSPACE', 'Smith', 'YES');

4.48 GrantPrivsOnPolicy

指定されたOracle Label Security(OLS)ポリシーを含む表に対してEnableVersioningプロシージャをコールするために必要な権限を付与します。

構文

DBMS_WM.GrantPrivsOnPolicy(
   policy_name  IN VARCHAR2);

パラメータ

表4-38 GrantPrivsOnPolicyプロシージャのパラメータ

パラメータ 説明
policy_name

権限が付与される必要のあるポリシーの名前

使用上の注意

このプロシージャにより、OLSポリシーに対して必要な権限がWMSYSスキーマに付与されます。これらの権限は、作業領域操作を実行する際に必要です。同じポリシーによって保護される複数の表をバージョン対応にする必要がある場合、このプロシージャを実行する必要があるのは1回だけです。

次の例は、my_policyというポリシーに対して必要な権限を付与します。

EXECUTE DBMS_WM.GrantPrivsOnPolicy('my_policy');

4.49 GrantSystemPriv

(特定の作業領域に制限されない)システム・レベルの権限をユーザーおよびロールに付与します。grant_optionパラメータを指定すると、権限受領者は指定された権限を他のユーザーおよびロールに付与できます。

構文

DBMS_WM.GrantSystemPriv(
   priv_types    IN VARCHAR2,
   grantee       IN VARCHAR2,
   grant_option  IN VARCHAR2 DEFAULT 'NO',
   auto_commit   IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-39 GrantSystemPrivプロシージャのパラメータ

パラメータ 説明
priv_types

権限を表す1つ以上のキーワードの文字列。(Workspace Managerの権限の詳細は、「Workspace Managerでの権限管理」を参照してください。)権限キーワードを区切るにはカンマを使用します。使用可能なキーワードは、ACCESS_ANY_WORKSPACEMERGE_ANY_WORKSPACECREATE_ANY_WORKSPACEREMOVE_ANY_WORKSPACEROLLBACK_ANY_WORKSPACEおよびFREEZE_ANY_WORKSPACEです。

grantee

priv_typesを付与するユーザー(PUBLICユーザー・グループでも可)またはロールの名前。

grant_option

YESを指定してGrant Optionを権限受領者に対して使用可能にするか、またはNO(デフォルト値)を指定してGrant Optionを権限受領者に対して使用禁止にします。Grant Optionを使用すると、granteepriv_typesで指定された権限を他のユーザーおよびロールに付与できます。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

このプロシージャとは対照的に、GrantWorkspacePriv プロシージャは、ANYを含まないキーワードを使用して作業領域レベルのWorkspace Manager権限を付与し、workspaceパラメータを含みます。

ユーザーが複数のソースから権限を取得し、それらのソースのいずれかにその権限に対するGrant Optionがある場合、ユーザーもその権限に対するGrant Optionを取得します。たとえば、ユーザーSCOTTにはgrant_optionNOに指定したACCESS_ANY_WORKSPACE権限が付与されているが、PUBLICユーザー・グループにはgrant_optionYESに指定したACCESS_ANY_WORKSPACE権限が付与されていると想定します。ユーザーSCOTTPUBLICのメンバーであるため、ユーザーSCOTTには、Grant Option付きのACCESS_ANY_WORKSPACE権限が付与されています。

WM_ADMIN_ROLEロールには、Grant Optionが付いたすべてのWorkspace Manager権限があります。WM_ADMIN_ROLEロールは自動的にDBAロールに付与されます。

その他のすべてのWorkspace Manager権限には、ACCESS_WORKSPACE権限またはACCESS_ANY_WORKSPACE権限が必要です。

Workspace Managerのシステム・レベルの権限を付与されているユーザーを確認するには、DBA_WM_SYS_PRIVSメタデータ・ビューを調べます。詳細は、「DBA_WM_SYS_PRIVS」を参照してください。

システム・レベルの権限を取り消すには、RevokeSystemPriv プロシージャを使用します。

次の条件に1つでも該当する場合は、例外が発生します。

  • granteeがデータベース内の有効なユーザーまたはロールでない。

  • ユーザーがgrant priv_typesを付与するための権限を取得していない。

  • auto_commitTRUEであり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。

次の例は、ユーザーSmithがデータベース内のすべての作業領域にアクセスできるようにしますが、SmithACCESS_ANY_WORKSPACE権限を他のユーザーに付与することは許可しません。

EXECUTE DBMS_WM.GrantSystemPriv ('ACCESS_ANY_WORKSPACE', 'Smith', 'NO');

4.50 GrantWorkspacePriv

ユーザーおよびロールに作業領域レベルの権限を付与します。grant_optionパラメータを指定すると、権限受領者は指定された権限を他のユーザーおよびロールに付与できます。

構文

DBMS_WM.GrantWorkspacePriv(
   priv_types    IN VARCHAR2,
   workspace     IN VARCHAR2,
   grantee       IN VARCHAR2,
   grant_option  IN VARCHAR2 DEFAULT 'NO',
   auto_commit   IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-40 GrantWorkspacePrivプロシージャのパラメータ

パラメータ 説明
priv_types

権限を表す1つ以上のキーワードの文字列。(Workspace Managerの権限の詳細は、「Workspace Managerでの権限管理」を参照してください。)権限キーワードを区切るにはカンマを使用します。使用可能なキーワードは、ACCESS_WORKSPACEMERGE_WORKSPACECREATE_WORKSPACEREMOVE_WORKSPACEROLLBACK_WORKSPACEおよびFREEZE_WORKSPACEです。

workspace

作業領域の名前。名前は大/小文字が区別されます。

grantee

priv_typesを付与するユーザー(PUBLICユーザー・グループでも可)またはロールの名前。

grant_option

YESを指定してGrant Optionを権限受領者に対して使用可能にするか、またはNO(デフォルト値)を指定してGrant Optionを権限受領者に対して使用禁止にします。Grant Optionを使用すると、granteeは、workspaceで指定された作業領域に対するpriv_typesで指定された権限を他のユーザーおよびロールに付与できます。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

このプロシージャとは対照的に、GrantSystemPrivプロシージャは、xxx_ANY_WORKSPACE形式(ACCESS_ANY_WORKSPACEMERGE_ANY_WORKSPACEなど)のキーワードを使用してシステム・レベルのWorkspace Manager権限を付与します。また、このプロシージャとは対照的に、GrantGraphPrivプロシージャは複数の親を持つグラフ作業領域に対する権限をユーザーおよびロールに付与します。

ユーザーが複数のソースから権限を取得し、それらのソースのいずれかにその権限に対するGrant Optionがある場合、ユーザーもその権限に対するGrant Optionを取得します。たとえば、ユーザーSCOTTにはgrant_optionNOに指定したACCESS_WORKSPACE権限が付与されているが、PUBLICユーザー・グループにはgrant_optionYESに指定したACCESS_WORKSPACE権限が付与されていると想定します。ユーザーSCOTTPUBLICのメンバーであるため、ユーザーSCOTTには、Grant Option付きのACCESS_WORKSPACE権限が付与されています。

WM_ADMIN_ROLEロールには、Grant Optionが付いたすべてのWorkspace Manager権限があります。WM_ADMIN_ROLEロールは自動的にDBAロールに付与されます。

その他のすべてのWorkspace Manager権限には、ACCESS_WORKSPACE権限またはACCESS_ANY_WORKSPACE権限が必要です。

作業領域レベルの権限を取り消すには、RevokeWorkspacePriv プロシージャを使用します。

次の条件に1つでも該当する場合は、例外が発生します。

  • granteeがデータベース内の有効なユーザーまたはロールでない。

  • ユーザーがpriv_typesを付与するための権限を取得していない。

  • auto_commitTRUEであり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。

次の例は、ユーザーSmithNEWWORKSPACE作業領域にアクセスしてその作業領域内の変更をマージできるようにし、SmithNEWWORKSPACEに対する2つの指定された権限を他のユーザーに付与することを許可します。

DBMS_WM.GrantWorkspacePriv ('ACCESS_WORKSPACE, MERGE_WORKSPACE', 'NEWWORKSPACE', 'Smith', 'YES');

4.51 Import

ステージング表から指定の作業領域内のバージョン対応表に、データ(すべての行、または複数のパラメータの組合せで限定された行)をインポートします。

構文

DBMS_WM.Import(
   staging_table   IN VARCHAR2,
   to_table        IN VARCHAR2,
   to_workspace    IN VARCHAR2,
   from_workspace  IN VARCHAR2 DEFAULT NULL,
   where_clause    IN VARCHAR2 DEFAULT NULL,
   import_scope    IN VARCHAR2 DEFAULT DBMS_WM.IMPORT_ALL_DATA,
   ancestor_savepoint_workspace  IN VARCHAR2 DEFAULT NULL,
   ancestor_savepoint_name       IN VARCHAR2 DEFAULT NULL,
   apply_locks     IN BOOLEAN DEFAULT FALSE,
   enforceUCFlag   IN BOOLEAN DEFAULT TRUE,
   enforceRICFlag  IN BOOLEAN DEFAULT TRUE,
   auto_commit     IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-41 Importプロシージャのパラメータ

パラメータ 説明
staging_table

前にExportプロシージャを使用してエクスポートしたデータを保持する表の名前。この名前は大/小文字が区別されません。

to_table

データのインポート先となる表の名前。この名前は大/小文字が区別されません。

to_workspace

データをインポートする作業領域の名前。名前は大/小文字が区別されます。

from_workspace

データのインポート元となる作業領域の名前。名前は大/小文字が区別されます。ステージング表にバージョニング情報が含まれている場合は、from_workspaceを指定する必要があります。

where_clause

インポートする行を識別するWHERE句(WHEREキーワードを除く)。たとえば、department_id = 20です。

副問合せの場合を除き、WHERE句には主キー列のみを指定できます。この副問合せは、主キーではない列を参照できますが、バージョン対応表は参照できません。

where_clauseパラメータが指定されていない場合は、staging_table内のすべての行がインポートされます。

import_scope

インポート操作の有効範囲(データ量)。

DBMS_WM.IMPORT_ALL_DATA(デフォルト)を指定すると、すべての関連データがインポートされます。

DBMS_WM.IMPORT_MODIFIED_DATA_ONLYを指定すると、from_workspace内で挿入、更新または削除された関連データのみがインポートされます。

ancestor_savepoint_workspace

ancestor_savepoint_nameに指定する祖先セーブポイントを含む作業領域の名前。現行のリリースでは、ancestor_savepoint_workspaceを指定する場合は、値にLIVEを指定する必要があります。

このパラメータを指定した場合は、ancestor_savepoint_nameも指定する必要があります。

ancestor_savepoint_name

ancestor_savepoint_workspace内のセーブポイントの名前。エクスポート操作時点で祖先データだったデータがすべて(Exportプロシージャの「使用上の注意」を参照)、指定したセーブポイントにインポートされます。現行のリリースでは、ancestor_savepoint_nameを指定する場合は、値にDBMS_WM.ROOT_VERSIONを指定する必要があります。

このパラメータを指定した場合は、ancestor_savepoint_workspaceも指定する必要があります。

apply_locks

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、エクスポートされたデータに存在していたロックは、より限定的なロック・モードが現行のセッションで有効でないかぎり、インポート時にデータに適用されます。

FALSE(デフォルト)を指定すると、ステージング表にある行のロックは無視され、現行のセッションで有効なロック・モードが常に使用されます。

enforceUCFlag

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト)を指定すると、to_tableに定義された一意制約が規定され、インポート操作が一意制約に違反しないことが保証されます。

FALSEを指定すると、インポート操作にはto_tableに定義された一意制約が規定されません。

enforceRICFlag

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト)を指定すると、to_tableに定義された参照整合性制約が規定され、インポート操作が参照整合性制約に違反しないことが保証されます。

FALSEを指定すると、インポート操作にはto_tableに定義された参照整合性制約が規定されません。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

ステージング表staging_table内のwhere_clauseパラメータ値と、import_scopeパラメータ値を満たすデータがすべて、to_tableバージョン対応表にインポートされます。

データは、事前にExportプロシージャを使用してステージング表にエクスポートしておく必要があります。

インポートする各データ行は、from_workspaceで挿入、更新または削除されたデータ(変更済データ)、またはfrom_workspaceで変更されていないが表示できるデータ(祖先データ)のいずれかとみなされます。データがLIVE作業領域からエクスポートされる場合は、すべてが変更済データです。

次の条件に1つでも該当する場合は、例外が発生します。

  • 指定した表または作業領域が存在しない。

  • staging_tableがインポート操作に有効な形式ではない。

  • to_tableがバージョン対応表ではないか、または適切な定義がない(ステージング表にない列を含むなど)。

  • from_workspaceがNULLで、staging_tableにバージョニング情報が含まれている。

  • ancestor_savepoint_nameancestor_savepoint_workspace内で有効なセーブポイントではない。

  • auto_commitTRUEであり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。

また、「インポートおよびエクスポートの考慮点」も参照してください。

次の例は、B_focus_2作業領域内のCOLA_MARKETING_BUDGET_STGステージング表からB_Focus_1作業領域内のCOLA_MARKETING_BUDGET表に、変更済データをインポートします。(EXECUTE文は、実際には1行で指定します。)

EXECUTE DBMS_WM.Import(staging_table => 'COLA_MARKETING_BUDGET_STG',
  to_table => 'COLA_MARKETING_BUDGET', to_workspace => 'B_focus_1',
  from_workspace => 'B_focus_2');

4.52 Import_Schemas

Export_Schemasプロシージャによって作成されたダンプ・ファイルからWorkspace Managerインストール全体をインポートします。Oracle Data Pump Importユーティリティを使用します。

構文

DBMS_WM.Import_Schemas(
   job_name           IN VARCHAR2,
   alt_schema         IN VARCHAR2 DEFAULT 'WMSYS_N',
   ignore_last_error  IN BOOLEAN DEFAULT FALSE);

パラメータ

表4-42 Import_Schemasプロシージャのパラメータ

パラメータ 説明
job_name

インポート操作に使用するデータ・ポンプ・ジョブの名前。

alt_schema

Workspace Managerメタデータの一時的な格納に使用するデータベース・スキーマの名前。デフォルトはWMSYS_Nです。このスキーマは、プロシージャがコールされる時点では存在することはできません。プロシージャが正常に完了すると、自動的に削除されます。

ignore_last_error

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、Import_Schemasプロシージャに対する前回のコール中に発生した最後のエラー(ある場合)は無視されます。最後のエラーに関する情報はDBA_WM_VT_ERRORS静的データ・ディクショナリ・ビュー(「Workspace Managerの静的データ・ディクショナリ・ビュー」を参照)に格納されます。詳細は、「使用上の注意」を参照してください。

FALSE (デフォルト)を指定すると、Import_Schemasプロシージャに対する前回のコール中に発生した最後のエラー(ある場合)は無視されません。

使用上の注意

このプロシージャは、Export_Schemasプロシージャを使用して作成されたダンプ・ファイルを使用します。このプロシージャをコールする前は、LIVE以外のバージョン対応表または作業領域が存在しないようにしてください。ダンプ・ファイルに含まれているスキーマのすべてのオブジェクトがインポートされます。システム権限、ワークスペース権限またはバージョン対応表に対する権限が付与されているユーザーが、生成されたダンプ・ファイルに含まれていない場合は、このプロシージャを呼び出す前にこれらのスキーマを作成する必要があります。このようにしないと、付与が失われます。

このプロシージャは、既存のデータ・ポンプ・インポート・ジョブを使用します。DBMS_DATAPUMP.OPENプロシージャを使用してこのジョブを作成するときに、operationパラメータをIMPORTに設定し、modeパラメータをFULLに設定する必要があります。また、このプロシージャをコールする前に、ダンプ・ファイルとログ・ファイルを指定する必要があります。インポート対象を変更または制限するプロシージャ(DBMS_DATAPUMP.METADATA_FILTERなど)をこのジョブに対して実行することはできません。SYSDBA権限を使用しているときにデータ・ポンプ・ジョブを作成しないようにしてください。

alt_schemaパラメータで指定されるスキーマは、このプロシージャをコールする前に存在することはできません。これは、Export_Schemasプロシージャをコールしたときにalt_schemaで指定したスキーマと同じである必要があります。

データ・ポンプ・ユーティリティの使用方法の詳細は、『Oracle Databaseユーティリティ』を参照してください。

Import_Schemasプロシージャのコールが失敗した場合は、エラーの原因を修正してください。DBA_WM_VT_ERRORS静的データ・ディクショナリ・ビューでSTATE列がIMPORTと同等のものを調べ、SQL文とエラー・メッセージを確認してください。エラーの原因を修正してから、ignore_last_errorパラメータ値をデフォルトのFALSEにしてImport_Schemasプロシージャを再度コールします。その後もコールが正常に実行されず、エラーの原因を修正できず、このエラーを無視する場合は、ignore_last_errorパラメータ値をTRUEに指定してImport_Schemasプロシージャをコールします。ただし、エラーを無視する場合は、ユーザーの責任で行ってください。

Import_Schemasプロシージャが失敗した場合にこのプロシージャを再度実行する必要があり、このプロシージャの行がDBA_WM_VT_ERRORS静的データ・ディクショナリ・ビューに存在する場合には、このプロシージャは引き続き指定された元のデータ・ポンプ・ジョブを使用します(新しいジョブを作成する必要はありません)。ただし、実行中のSQL文が元のジョブを使用しようとしたが、そのジョブが存在しない場合は、ignore_last_errorパラメータをTRUEに設定し、Import_Schemasプロシージャをもう一度実行する必要がありします。

次の条件に1つでも該当する場合は、例外が発生します。

  • job_nameが存在しない。

  • alt_schemaがすでに存在する。

  • 実行ユーザーにDATAPUMP_IMP_FULL_DATABASEロールが付与されていない。

  • WMSYSスキーマまたはユーザー・スキーマにエラーがある。

また、「インポートおよびエクスポートの考慮点」も参照してください。

次の例は、IMPORT_OWM_SCHEMASという名前のOracle Data Pumpジョブを使用して、Workspace Managerメタデータをインポートします。

DECLARE
  job_name varchar2(128) := upper('IMPORT_OWM_SCHEMAS') ;
  dpj number ;
BEGIN
  dpj := dbms_datapump.open('IMPORT', 'FULL', null, job_name, 'COMPATIBLE') ;
  dbms_datapump.add_file(dpj, 'owm_schema.dmp', 'DUMP_DIR') ;
  dbms_datapump.add_file(dpj, 'owm_schema_import.log', 'DUMP_DIR', filetype=>dbms_datapump.KU$_FILE_TYPE_LOG_FILE) ;
  dbms_wm.import_schemas(job_name) ;
  dbms_datapump.detach(dpj);

exception when others then
  dbms_datapump.detach(dpj);
  raise ;
END;
/

4.53 Initialize_After_Import

別のデータベースからインポートされたバージョン対応トポロジを作成(初期化)します。

構文

DBMS_WM.Add_Topo_Geometry_Layer(     
  topology        IN VARCHAR2,      
  tg_layer_owner  IN VARCHAR2 DEFAULT NULL);

パラメータ

表4-43 Initialize_After_Importプロシージャのパラメータ

パラメータ 説明
topology

別のデータベースからインポートされたトポロジ。

tg_layer_owner

トポロジ・レイヤーの所有者。このパラメータがNULL(デフォルト)の場合、現行のユーザーが所有者になります。

使用上の注意

このプロシージャは、指定したバージョン対応トポロジおよび関連するデータベースの構造を作成し、すべてのフィーチャー表内のトポロジID値を調整し、正しい順序でフィーチャ・レイヤーを作成します。また、作成される空間トポロジ索引表に必要なWorkspace Managerメタデータを生成します。Workspace Managerでのトポロジのサポートの詳細は、「Spatial and Graphトポロジ・サポート」を参照してください。

全データベースのインポートまたはDBMS_WM.Import_Schemasプロシージャのいずれかを使用してバージョン対応トポロジをインポートした後に、(DBMS_WM.Initialize_After_Importプロシージャを実行する最後のステップで)次の操作を行う必要があります。

  1. ターゲット・データベース(ソース・データベースからエクスポートされるトポロジと同じ名前、構造およびデータを持つトポロジを作成するデータベース)に接続します。作成されるトポロジを所有するスキーマのユーザーとして接続します。

  2. ターゲット・データベースに、.dmpファイルのトポロジと同じ名前を持つトポロジが格納されていないことを確認します。

  3. 全データベースのインポートまたはDBMS.Import_Schemasプロシージャのいずれかを使用してインポートを実行します。

  4. DBMS_WM.Initialize_After_Importプロシージャを実行します。 (SDO_TOPO.Initialize_After_Importプロシージャはしないでください。)

次の例は、SDO_TOPO.Prepare_For_Exportプロシージャを使用して作成されたCITY_DATA_EXP$を含むインポートされた表の情報を使用して、CITY_DATAトポロジを作成します。

EXECUTE DBMS_WM.INITIALIZE_AFTER_IMPORT('CITY_DATA');

4.54 IsWorkspaceOccupied

作業領域内にアクティブなセッションがあるかどうかを確認します。

構文

DBMS_WM.IsWorkspaceOccupied(
   workspace  IN VARCHAR2) RETURN VARCHAR2;

パラメータ

表4-44 IsWorkspaceOccupiedファンクションのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

使用上の注意

このファンクションは、作業領域内にアクティブなセッションがある場合はYESを戻し、ない場合はNOを戻します。

LIVE作業領域が指定されるか、またはユーザーが該当する作業領域に対するアクセス権を取得していない場合は、例外が発生します。

次の例は、B_focus_2作業領域内にセッションがあるかどうかを確認します。

SELECT DBMS_WM.IsWorkspaceOccupied('B_focus_2') FROM DUAL;

DBMS_WM.ISWORKSPACEOCCUPIED('B_FOCUS_2')                                                 
--------------------------------------------------------------------------------
YES     

4.55 LockRows

指定された表内のバージョン対応行、および親作業領域内のそれに対応する行へのアクセスを制御します。

構文

DBMS_WM.LockRows(
   workspace     IN VARCHAR2,
   table_name    IN VARCHAR2,
   where_clause  IN VARCHAR2 DEFAULT '',
   lock_mode     IN VARCHAR2 DEFAULT 'E',
   Xmin          IN NUMBER DEFAULT NULL,
   Ymin          IN NUMBER DEFAULT NULL,
   Xmax          IN NUMBER DEFAULT NULL,
   Ymax          IN NUMBER DEFAULT NULL);

パラメータ

表4-45 LockRowsプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。作業領域内の参照できる行の最新バージョンがロックされます。この作業領域内で行が変更されていない場合、ロックされたバージョンは親作業領域内にある可能性があります。名前は大/小文字が区別されます。

lock_modeVE(バージョン排他)に設定する場合は、値NONEを使用できます。これにより、参照元の作業領域に関係なく、行の最新バージョンがロックされます。

table_name

ロックする行を含む表またはSpatial and Graphトポロジ(XminYminXmaxおよびYmaxが指定されている場合)の名前。この名前は大/小文字が区別されません。

where_clause

ロックする行を識別するWHERE句(WHEREキーワードを除く)。たとえば、department_id = 20です。

副問合せの場合を除き、WHERE句には主キー列のみを指定できます。この副問合せは、主キーではない列を参照できますが、バージョン対応表は参照できません。

where_clauseが指定されていない場合は、table_name内のすべての行がロックされます。

table_nameにSpatial and Graphトポロジ名を指定する場合は、where_clauseパラメータを指定しないでください。

lock_mode

ロックを設定するモード: E (排他)、WE (作業領域排他)、VE (バージョン排他)またはS (共有)。デフォルトは、Eです。

E(排他)モードを指定すると、前のバージョン内の行、および現行バージョン内のそれに対応する行がロックされます。どちらのバージョンでも、その作業領域内にいる他のユーザーは、どの値も変更できません。

WE(作業領域排他)モードを指定すると、前のバージョンの行、および現行バージョン内のそれに対応する行がロックされます。これにより、現行の作業領域内で値を変更できるのはロックを設定したユーザーのみとなります。ただし、他の作業領域内の他のユーザーは値を変更できます。

VE(バージョン排他)モードを指定すると、前のバージョンの行、および現行バージョン内のそれに対応する行がロックされます。これにより、値を変更できるのはロックを設定したユーザーのみとなります。ただし、他のユーザー(すべての作業領域内)は値を変更できなくなります。

S(共有)モードを指定すると、前のバージョン内の行、および現行バージョン内のそれに対応する行がロックされます。ただし、現行バージョンの作業領域内にいる他のユーザーは、これらの行の値を変更できます(前のバージョンの作業領域内にいるユーザーは、値を変更できません)。

Xmin, Ymin

Oracle Spatial and Graphトポロジの場合にのみ指定する(「トポロジ使用時のロックに関する考慮事項」を参照)、ロックする行を含むウィンドウの左下隅のX座標値とY座標値。table_nameにトポロジ名を指定した場合は、これらのパラメータを指定する必要があります。それ以外の場合は、指定しないでください。

Xmax, Ymax

Oracle Spatial and Graphトポロジの場合にのみ指定する(「トポロジ使用時のロックに関する考慮事項」を参照)、ロックする行を含むウィンドウの右上隅のX座標値とY座標値。table_nameにトポロジ名を指定した場合は、これらのパラメータを指定する必要があります。それ以外の場合は、指定しないでください。

使用上の注意

このプロシージャは、すべての標準のOracleデータベース・ロック操作に加えて実行されるWorkspace Managerロック操作に影響します。Workspace Managerのロックの詳細は、「Workspace Managerでのロック管理」を参照してください。

このプロシージャは、Workspace Managerのロック操作が使用可能または使用禁止(SetLockingONプロシージャおよびSetLockingOFFプロシージャで決定)になるかには影響しません。

行のロックを解除するには、UnlockRowsプロシージャを使用します。

Oracle Spatial and Graphトポロジ内の表に対するWorkspace Managerのロックの詳細は、「トポロジ使用時のロックに関する考慮事項」を参照してください。

次の例は、NEWWORKSPACE作業領域内にあるEMPLOYEES表の行(last_name = 'Smith')をロックします。

EXECUTE DBMS_WM.LockRows ('NEWWORKSPACE', 'employees', 'last_name = ''Smith''');

4.56 MergeTable

作業領域内の1つ以上の表(すべての行、またはWHERE句で指定された行)に対する変更をその親作業領域に適用します。

複数の親を持つ作業領域(「複数の親を持つ作業領域」を参照)の場合は、非循環有向グラフ内のルート以外のすべての作業領域からの1つ以上の表(すべての行またはWHERE句で指定された行)に対する変更を、複数の親を持つルート作業領域に適用します。

構文

DBMS_WM.MergeTable(
   workspace         IN VARCHAR2,
   table_id          IN VARCHAR2,
   where_clause      IN VARCHAR2 DEFAULT '',
   create_savepoint  IN BOOLEAN DEFAULT FALSE,
   remove_data       IN BOOLEAN DEFAULT FALSE,
   auto_commit       IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-46 MergeTableプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

table_id

親作業領域にマージする行を含む表または複数の表の名前。複数の表を指定する場合、名前をカンマで区切ります(たとえば、'table1, table2')。表の名前は大/小文字が区別されません。

where_clause

親作業領域にマージする行を識別するWHERE句(WHEREキーワードを除く)。たとえば、department_id = 20です。

副問合せの場合を除き、WHERE句には主キー列のみを指定できます。この副問合せは、主キーではない列を参照できますが、バージョン対応表は参照できません。

where_clauseパラメータが指定されていない場合は、table_name内のすべての行がマージされます。

create_savepoint

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、マージ操作の前に、親作業領域内に暗黙的セーブポイントが作成されます。複数の親を持つ作業領域の場合は、マージ操作の前に、複数の親を含むルート作業領域内に暗黙的セーブポイントが作成されます。(暗黙的および明示的セーブポイントについては、「セーブポイントの使用」を参照。)

FALSE(デフォルト値)を指定すると、マージ操作の前に、親作業領域内に暗黙的セーブポイントが作成されません。

remove_data

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、子作業領域内の表のデータ(where_clauseパラメータで指定)が削除されます。複数の親を持つ作業領域の場合は、非循環有向グラフ内のルート以外の作業領域にある表のデータ(where_clauseパラメータで指定)が削除されます。remove_dataオプションを使用できるのは、workspaceに子作業領域がない(つまり、リーフ作業領域になっている)場合のみです。

FALSE(デフォルト値)を指定すると、子作業領域内の表のデータは削除されません。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

workspace内にあるバージョン対応表table_namewhere_clauseパラメータ値を満たすすべてのデータが、workspaceの親作業領域に適用されます。

create_savepointパラメータ値にtrueを指定すると、対象バージョンに暗黙的セーブポイントがまだ存在していない場合にのみ暗黙的セーブポイントが作成されます。この対象バージョンは、変更済行を含んでいる場合は親作業領域内のLATESTバージョンです。それ以外の場合、作業領域に複数のバージョンがある場合はLATESTバージョンの1つ前のバージョンです。

マージ中の行が保持するすべてのロックは解放されます。

マージ対象の作業領域とその親作業領域の間に競合がある場合は、マージ操作が失敗します。ユーザーは<table_name>_CONFビューを使用して、競合を手動で解消する必要があります。(競合解消の詳細は、「マージまたはリフレッシュ操作前に行う競合の解消」を参照してください。)

LIVE作業領域では、(親作業領域がないため)表をマージできません。

次の条件に1つでも該当する場合は、例外が発生します。

  • ユーザーにtable_idへのアクセス権がない。

  • ユーザーがworkspaceに対するMERGE_WORKSPACE権限、またはMERGE_ANY_WORKSPACE権限を取得していない。

  • remove_dataTRUEで、削除対象の作業領域に子作業領域がある。

  • auto_commitTRUEであり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。

  • 複数の親を持つ作業領域が関係するマージ操作を実行すると、複数の親を含むルート作業領域の連続的にリフレッシュされる子作業領域に、参照整合性制約違反または一意制約違反が発生する。

次の例は、NEWWORKSPACE内にあるEMP表(USER3スキーマ内)内の行(last_name = 'Smith')に対する変更を、その親作業領域にマージします。

EXECUTE DBMS_WM.MergeTable ('NEWWORKSPACE', 'user3.emp', 'last_name = ''Smith''');

4.57 MergeWorkspace

作業領域内のすべての変更をその親作業領域に適用します。また、オプションで、その作業領域を削除できます。

複数の親を持つ作業領域(「複数の親を持つ作業領域」を参照)の場合は、作業領域内のすべての変更を非循環有向グラフ内の他のすべての作業領域に適用します。また、オプションで非循環有向グラフ内のルート以外の作業領域を削除できます。

構文

DBMS_WM.MergeWorkspace(
   workspace         IN VARCHAR2,
   create_savepoint  IN BOOLEAN DEFAULT FALSE,
   remove_workspace  IN BOOLEAN DEFAULT FALSE,
   auto_commit       IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-47 MergeWorkspaceプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

create_savepoint

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、マージ操作の前に、親作業領域内に暗黙的セーブポイントが作成されます。(暗黙的および明示的セーブポイントについては、「セーブポイントの使用」を参照。)

FALSE(デフォルト値)を指定すると、マージ操作の前に、親作業領域内に暗黙的セーブポイントが作成されません。

remove_workspace

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、マージ操作後にworkspaceが削除されます。複数の親を持つ作業領域の場合は、非循環有向グラフ内のルート以外の作業領域がすべて削除されます。

FALSE (デフォルト値)を指定すると、マージ操作後にworkspaceは削除されず、引き続き存在します。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

remove_workspaceTRUEの場合は、workspace内にあるすべてのバージョン対応表のすべてのデータがworkspaceの親作業領域にマージされ、workspaceが削除されます。

workspaceが連続的にリフレッシュされる子作業領域の場合、排他ロックは親作業領域に適用されます。この排他ロックは、GotoWorkspaceなどの、共有ロックの適用を試みる親作業領域への他の操作をブロックします。

create_savepointパラメータ値にtrueを指定すると、対象バージョンに暗黙的セーブポイントがまだ存在していない場合にのみ暗黙的セーブポイントが作成されます。この対象バージョンは、変更済行を含んでいる場合は親作業領域内のLATESTバージョンです。それ以外の場合、作業領域に複数のバージョンがある場合はLATESTバージョンの1つ前のバージョンです。

任意の行に対する現行の行バージョンのみが、親作業領域にマージされます。子作業領域のすべての中間行バージョンおよび履歴コピーを保持するには、remove_workspaceの値をFALSE(デフォルト)にする必要があります。Workspace Managerによる行バージョンの作成方法および履歴コピーの管理方法の詳細は、「行バージョンおよび履歴コピーの作成」を参照してください。

このプロシージャの実行中、現行の作業領域はNO_ACCESSモードにアクセス制限され、また、その親作業領域はREAD_ONLYモードにアクセス制限されます。詳細は、「作業領域のフリーズおよびアンフリーズ」を参照してください。

マージ対象の作業領域とその親作業領域の間に競合がある場合は、マージ操作が失敗します。ユーザーは<table_name>_CONFビューを使用して、競合を手動で解消する必要があります。(競合解消の詳細は、「マージまたはリフレッシュ操作前に行う競合の解消」を参照してください。)

remove_workspaceパラメータの値がTRUEの場合、マージする作業領域はリーフ作業領域(子作業領域のない作業領域)である必要があります。(作業領域階層の詳細は、「作業領域階層」を参照してください。)

子作業領域内の行を更新し、これらの変更を同じトランザクション内の親作業領域にマージするには、autocommit=FALSEを指定し、他セッション(つまり、更新トランザクションを実行中のセッション以外)が子作業領域にないことを確認する必要があります。

次の条件に1つでも該当する場合は、例外が発生します。

  • ユーザーがworkspaceに対するMERGE_WORKSPACE権限、またはMERGE_ANY_WORKSPACE権限を取得していない。

  • ユーザーが、修正が必要なすべての表(トリガーによって変更される表なども含む)に対する十分な権限を取得していない。

  • auto_commitTRUEで、作業領域階層でworkspaceの下位にある作業領域内にオープン状態のデータベース・トランザクションがある。

  • remove_workspaceTRUEで、作業領域階層でworkspaceの下位にある作業領域内にセッションがある。

  • remove_workspaceTRUEで、削除対象の作業領域に子作業領域がある。

  • auto_commitTRUEであり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。

  • 複数の親を持つ作業領域のマージ操作を実行すると、複数の親を含むルート作業領域の連続的にリフレッシュされる子作業領域に、参照整合性制約違反または一意制約違反が発生する。

次の例は、NEWWORKSPACE内の変更を親作業領域にマージします。

EXECUTE DBMS_WM.MergeWorkspace ('NEWWORKSPACE');

4.58 Move_Proc

Workspace Managerのメタデータを指定の表領域に移動します。

構文

DBMS_WM.Move_Proc(
   dest_tablespace  IN VARCHAR2 DEFAULT 'SYSAUX');

パラメータ

表4-48 Move_Procプロシージャのパラメータ

パラメータ 説明
dest_tablespace

Workspace Managerのメタデータの移動先となる表領域。デフォルト値はSYSAUX表領域です。

使用上の注意

Workspace Managerのメタデータ(ビュー、内部表およびその他のオブジェクト)は、デフォルトでWMSYSユーザーのデフォルト表領域に格納されます。Workspace Managerメタデータのサイズは直接制御できませんが、その位置は、このプロシージャを使用してメタデータを現行の表領域から他の表領域に移動することで制御できます。このプロシージャをコールするときにdest_tablespaceパラメータを指定しなければ、Workspace ManagerのメタデータはSYSAUX表領域に移動します。

メタデータを移動する前にGetWMMetadataSpaceファンクションを使用すると、Workspace Managerメタデータの移動先とみなしている表領域で使用可能にする必要のある最小領域の概算を判断できます。

次の例は、Workspace ManagerのメタデータをTBLSP_1表領域に移動します。

EXECUTE DBMS_WM.Move_proc('TBLSP_1');

4.59 PurgeTable

バージョン対応表から行(すべての行、またはいくつかのパラメータの組合せにより限定された行)を削除し、オプションでこれらの行をアーカイブ表に挿入します。

構文

DBMS_WM.PurgeTable(
   table_id       IN VARCHAR2,
   archive_table  IN VARCHAR2,
   where_clause   IN VARCHAR2,
   workspace      IN VARCHAR2 DEFAULT 'LIVE',
   savepoint_name IN VARCHAR2 DEFAULT NULL,
   instant        IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
   purgeAfter     IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-49 PurgeTableプロシージャのパラメータ

パラメータ 説明
table_id

エクスポートするデータを含む表の名前。この名前は大/小文字が区別されません。

archive_table

パージされた行を挿入する表の名前。このパラメータにNULLが指定されている場合、パージ済の行はアーカイブされません。このパラメータにNULL以外の値が指定されており、オープン・トランザクションがある場合、トランザクションは表の作成前にコミットされ、新しいトランザクションがオープンされます。

where_clause

パージする行を識別するWHERE句(WHEREキーワードを除く)。たとえば、department_id = 20です。

副問合せの場合を除き、WHERE句には主キー列のみを指定できます。この副問合せは、主キーではない列を参照できますが、バージョン対応表は参照できません。

where_clauseパラメータが指定されていない場合は、table_name内のすべての行がパージされます。

workspace

データをパージする作業領域の名前。名前は大/小文字が区別されます。

savepoint_name

セーブポイントの名前。(purgeAfterの値に応じて)このセーブポイントの作成時点よりも後または前に作業領域に存在していたデータのみがパージされます。

savepoint_nameパラメータとinstantパラメータの両方を指定することはできません。

instant

日時の指定。(purgeAfterの値に応じて)この時刻の後または前に作業領域に存在していたデータのみがパージされます。

savepoint_nameパラメータとinstantパラメータの両方を指定することはできません。

purgeAfter

ブール値(TRUEまたはFALSE)。

TRUE (デフォルト)を指定すると、指定したsavepoint_name値またはinstant値のに作業領域内に存在していた行がパージされます。

FALSEを指定すると、指定したsavepoint_name値またはinstant値よりもに作業領域内に存在していた行がパージされます。

使用上の注意

このプロシージャは、作業領域をルートとするバージョン対応表から行を削除します。purgeAfterパラメータ値がTRUE (デフォルト)の場合、指定した作業領域をルートとする該当するの行が削除されます。purgeAfterパラメータ値がFALSEの場合、指定した作業領域をルートとする該当する祖先行が削除されます。

where_clauseパラメータと、savepoint_nameパラメータまたはinstantパラメータを使用して、パージする行を制限できます。このプロシージャを使用するときには、ほとんどの場合はwhere_clause値を指定してパージ対象行を制限します。このようにしないと、(savepoint_nameまたはinstantパラメータで制限していないかぎり)すべての行がパージされます。

プロシージャの実行中に、バージョン対応表に対して排他ロックが取得されます。

次の例は、project作業領域およびその子作業領域のUSER2.TEST表でID (主キー)列の値が20であるすべての行をパージします。(EXECUTE文は、実際には1行で指定します。)

EXECUTE DBMS_WM.PurgeTable('user2.test', where_clause=>'id=20', workspace=>'project', purgeAfter=>TRUE);

4.60 RecoverAllMigratingTables

Workspace Managerの移行プロシージャが正常に実行されなかった場合、一貫性のない状態になっているすべての表の移行プロセスを完了しようとします。

構文

DBMS_WM.RecoverAllMigratingTables(
   ignore_last_error IN BOOLEAN DEFAULT FALSE);

パラメータ

表4-50 RecoverAllMigratingTablesプロシージャのパラメータ

パラメータ 説明
ignore_last_error

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、移行プロセス中に発生した最後のエラー(ある場合)が無視されます。最後のエラーに関する情報はUSER_WM_VT_ERRORS静的データ・ディクショナリ・ビューおよびALL_WM_VT_ERRORS静的データ・ディクショナリ・ビュー(「Workspace Managerの静的データ・ディクショナリ・ビュー」を参照)に格納されます。詳細は、「使用上の注意」を参照してください。

FALSE (デフォルト)を指定すると、移行プロセスの実行中に発生した最後のエラー(ある場合)は無視されません。

使用上の注意

現行のWorkspace Managerリリースへのアップグレード(移行)中にエラーが発生した場合は、1つ以上のバージョン対応表が一貫性のない状態のままになることがあります。アップグレード手順が失敗した場合は、エラーの原因を修正し(USER_WM_VT_ERRORSまたはALL_WM_VT_ERRORSメタデータ・ビューを調べてSQL文およびエラー・メッセージを確認し)、その後、ignore_last_errorパラメータ値をデフォルトのFALSEにしてRecoverMigratingTableプロシージャ(1つの表の場合)またはRecoverAllMigratingTablesプロシージャ(すべての表の場合)をコールして、アップグレード・プロセスを完了する必要があります。

ただし、その後もコールが正常に実行されず、エラーの原因を修正できず、このエラーを無視する場合は、ignore_last_errorパラメータ値をTRUEに指定して、RecoverMigratingTableプロシージャまたはRecoverAllMigratingTablesプロシージャをコールします。ただし、エラーを無視する場合は、ユーザーの責任で行ってください。

次の例は、アップグレード・プロシージャが正常に実行されず、一貫性のない状態になっているすべての表をリカバリしようとします。

EXECUTE DBMS_WM.RecoverAllMigratingTables;

次の例は、アップグレード・プロシージャが正常に実行されず、一貫性のない状態になっているすべての表をリカバリしようとします。アップグレード・プロシージャが正常に実行されない原因となった最後のエラーは無視します。

EXECUTE DBMS_WM.RecoverAllMigratingTables(TRUE);

4.61 RecoverFromDroppedUser

1つ以上のバージョン対応表を所有する1つ以上のデータベース・ユーザーを削除した後、必要な操作を実行します。

構文

DBMS_WM.RecoverFromDroppedUser(
   ignore_last_error IN BOOLEAN DEFAULT FALSE);

パラメータ

表4-51 RecoverFromDroppedUserプロシージャのパラメータ

パラメータ 説明
ignore_last_error

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、RecoverFromDroppedUserプロシージャに対する前回のコール中に発生した最後のエラー(ある場合)は無視されます。最後のエラーに関する情報はUSER_WM_VT_ERRORS静的データ・ディクショナリ・ビューおよびALL_WM_VT_ERRORS静的データ・ディクショナリ・ビュー(「Workspace Managerの静的データ・ディクショナリ・ビュー」を参照)に格納されます。詳細は、「使用上の注意」を参照してください。

FALSE (デフォルト)を指定すると、RecoverFromDroppedUserプロシージャに対する前回のコール中に発生した最後のエラー(ある場合)は無視されません。

使用上の注意

1つ以上のバージョン対応表を所有するデータベース・ユーザーが削除された場合、このプロシージャを可能なかぎり早く実行する必要があります。このプロシージャにより、これらの表を所有するユーザーを削除した結果として削除されたバージョン対応表のいずれかに依存する既存の表の外部キー制約は、いずれも削除されます。また、このプロシージャは無効なデータベース・メタデータを修正します。

RecoverFromDroppedUserプロシージャのコールが正常に実行されない場合、表は一貫性のない状態になります。この状態が発生した場合は、エラーの原因を修正し(SQL文およびエラー・メッセージについては、DBA_WM_VT_ERRORSメタデータ・ビューを参照)、その後、ignore_last_errorパラメータ値をデフォルトのFALSEにしてRecoverFromDroppedUserプロシージャを再度コールする必要があります。その後もコールが正常に実行されず、エラーの原因を修正できず、このエラーを無視する場合は、ignore_last_errorパラメータ値をTRUEに指定してRecoverFromDroppedUserプロシージャをコールします。ただし、エラーを無視する場合は、ユーザーの責任で行ってください。

このプロシージャを実行するには、SYSDBA権限を持つユーザーとしてデータベース・インスタンスに接続する必要があります。

次の例は、1つ以上のバージョン対応表を所有するHERMANという名前のユーザーを削除し、その後必要な操作を実行します。

DROP USER herman CASCADE;
EXECUTE DBMS_WM.RecoverFromDroppedUser;

4.62 RecoverMigratingTable

Workspace Managerの移行プロシージャが正常に実行されなかった場合、一貫性のない状態になっている表の移行プロセスを完了しようとします。

構文

DBMS_WM.RecoverMigratingTable(
   table_name        IN VARCHAR2,
   ignore_last_error IN BOOLEAN DEFAULT FALSE);

パラメータ

表4-52 RecoverMigratingTableプロシージャのパラメータ

パラメータ 説明
table_name

移行エラーが発生したためリカバリするバージョン対応表の名前。この名前は大/小文字が区別されません。

ignore_last_error

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、移行プロセス中に発生した最後のエラー(ある場合)が無視されます。最後のエラーに関する情報はUSER_WM_VT_ERRORS静的データ・ディクショナリ・ビューおよびALL_WM_VT_ERRORS静的データ・ディクショナリ・ビュー(「Workspace Managerの静的データ・ディクショナリ・ビュー」を参照)に格納されます。詳細は、「使用上の注意」を参照してください。

FALSE (デフォルト)を指定すると、移行プロセスの実行中に発生した最後のエラー(ある場合)は無視されません。

使用上の注意

現行のWorkspace Managerリリースへのアップグレード中にエラーが発生した場合は、1つ以上のバージョン対応表が一貫性のない状態のままになることがあります。アップグレード手順が失敗した場合は、エラーの原因を修正し(USER_WM_VT_ERRORSまたはALL_WM_VT_ERRORSメタデータ・ビューを調べてSQL文およびエラー・メッセージを確認し)、その後、ignore_last_errorパラメータ値をデフォルトのFALSEにしてRecoverMigratingTableプロシージャ(1つの表の場合)またはRecoverAllMigratingTablesプロシージャ(すべての表の場合)をコールして、アップグレード・プロセスを完了する必要があります。

ただし、その後もコールが正常に実行されず、エラーの原因を修正できず、このエラーを無視する場合は、ignore_last_errorパラメータ値をTRUEに指定して、RecoverMigratingTableプロシージャまたはRecoverAllMigratingTablesプロシージャをコールします。ただし、エラーを無視する場合は、ユーザーの責任で行ってください。

table_nameが存在しないか、この表がバージョン対応でない場合は、例外が発生します。

次の例は、アップグレード・プロシージャが正常に実行されず、エラーが発生したため、COLA_MARKETING_BUDGET表をリカバリしようとします。

EXECUTE DBMS_WM.RecoverMigratingTable('COLA_MARKETING_BUDGET');

次の例は、COLA_MARKETING_BUDGET表をリカバリしようとします。アップグレード・プロシージャが正常に実行されない原因となった最後のエラーは無視します。

EXECUTE DBMS_WM.RecoverMigratingTable('COLA_MARKETING_BUDGET', TRUE);

4.63 RefreshTable

作業領域に対し、その親作業領域内の表(すべての行、またはWHERE句に指定された行)に対するすべての変更を適用します。

複数の親を持つ作業領域(「複数の親を持つ作業領域」を参照)の場合は、指定した表について、非循環有向グラフ内でリーフ以外の作業領域からの変更を、指定したリーフ作業領域に適用します。(中間作業領域内の表データは変更されません。)

構文

DBMS_WM.RefreshTable(
   workspace     IN VARCHAR2,
   table_id      IN VARCHAR2,
   where_clause  IN VARCHAR2 DEFAULT '',
   auto_commit   IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-53 RefreshTableプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

table_id

親作業領域の値を使用してリフレッシュする行を含む表の名前。この名前は大/小文字が区別されません。

where_clause

親作業領域の値を使用してリフレッシュする行を識別するWHERE句(WHEREキーワードを除く)。たとえば、department_id = 20です。

副問合せの場合を除き、WHERE句には主キー列のみを指定できます。この副問合せは、主キーではない列を参照できますが、バージョン対応表は参照できません。

where_clauseパラメータが指定されていない場合は、table_name内のすべての行がリフレッシュされます。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

このプロシージャは、workspaceの作成時または最後のリフレッシュ時以降に行われた、親作業領域内にあるバージョン対応表table_idの行(where_clauseパラメータ値を満たす行)に対するすべての変更をworkspaceに適用します。

リフレッシュ対象の作業領域とその親作業領域の間に競合がある場合は、リフレッシュ操作が失敗します。ユーザーは<table_name>_CONFビューを使用して、競合を手動で解消する必要があります。(競合解消の詳細は、「マージまたはリフレッシュ操作前に行う競合の解消」を参照してください。)

workspaceが連続的にリフレッシュされる作業領域の場合、このプロシージャは無視されます。

LIVE作業領域では、(親作業領域がないため)表をリフレッシュできません。

例外が発生するのは、ユーザーがtable_idへのアクセス権限を持っていない場合、ユーザーがworkspaceに対するMERGE_WORKSPACE権限またはMERGE_ANY_WORKSPACE権限を持っていない場合、または、auto_commitTRUEで、かつ修正が必要な表の親または子作業領域にオープン状態のトランザクションがある場合です。

次の例は、親作業領域内にあるEMPLOYEES表の行(last_name = 'Smith')に対する変更を適用して、NEWWORKSPACEをリフレッシュします。

EXECUTE DBMS_WM.RefreshTable ('NEWWORKSPACE', 'employees', 'last_name = ''Smith''');

4.64 RefreshWorkspace

作業領域に対し、その親作業領域内のすべての変更を適用します。

複数の親を持つ作業領域(「複数の親を持つ作業領域」を参照)の場合は、非循環有向グラフ内でリーフ以外の作業領域からの変更を、指定したリーフ作業領域に適用します。変更は、複数の親を含むルート作業領域から始まって中間作業領域へと伝播します。

構文

DBMS_WM.RefreshWorkspace(
   workspace    IN VARCHAR2,
   auto_commit  IN BOOLEAN DEFAULT TRUE,
   copy_data    IN BOOLEAN DEFAULT FALSE);

パラメータ

表4-54 RefreshWorkspaceプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

copy_data

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、子作業領域の作成時または最後のリフレッシュ以降に親作業領域内で行われた変更が、すべて子作業領域にコピーされます。子作業領域の子孫では変更は発生せず、子作業領域に対する変更履歴は保持されます。

FALSE(デフォルト)を指定すると、最小限のデータが子作業領域にコピーされます。子作業領域とその子孫が親作業領域からの変更された行にアクセスできるように、子作業領域の親バージョンが更新されます。この操作の場合、子作業領域に対する変更の履歴は記録されません。

使用上の注意

このプロシージャは、workspaceの作成時または最後のリフレッシュ時以降に行われた、親作業領域内のバージョン対応表に対するすべての変更をworkspaceに適用します。

リフレッシュ対象の作業領域とその親作業領域の間に競合がある場合は、リフレッシュ操作が失敗します。ユーザーは<table_name>_CONFビューを使用して、競合を手動で解消する必要があります。(競合解消の詳細は、「マージまたはリフレッシュ操作前に行う競合の解消」を参照してください。)

指定された作業領域およびその親作業領域は、READ_ONLYモードにアクセス制限されます。詳細は、「作業領域のフリーズおよびアンフリーズ」を参照してください。

LIVE作業領域は、(親作業領域がないため)リフレッシュできません。

workspaceが連続的にリフレッシュされる作業領域の場合、このプロシージャは無視されます。

例外が発生するのは、ユーザーがworkspaceに対するMERGE_WORKSPACE権限またはMERGE_ANY_WORKSPACE権限を持っていない場合、ユーザーが修正が必要なすべての表(トリガーによって変更される表なども含む)に対する十分な権限を持っていない場合、または、auto_commitTRUEで、かつ修正が必要な表の親または子作業領域にオープン状態のトランザクションがある場合です。

次の例は、親作業領域内で行われた変更を適用して、NEWWORKSPACEをリフレッシュします。

EXECUTE DBMS_WM.RefreshWorkspace ('NEWWORKSPACE');

4.65 RemoveAsParentWorkspace

複数の親を持つ作業領域環境で、作業領域を親作業領域として削除します。

構文

DBMS_WM.RemoveAsParentWorkspace(
   mp_leafworkspace  IN VARCHAR2,
   parent_workspace  IN VARCHAR2,
   auto_commit       IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-55 RemoveAsParentWorkspaceプロシージャのパラメータ

パラメータ 説明
mp_leaf_workspace

parent_workspaceを親作業領域として削除する子作業領域(複数の親を持つリーフ作業領域)の名前。名前は大/小文字が区別されます。

parent_workspace

mp_leaf_workspaceの親作業領域として削除する作業領域の名前。名前は大/小文字が区別されます。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

このプロシージャは、複数の親を持つ作業領域機能に対するサポートの一部です。詳細は、「複数の親を持つ作業領域」を参照してください。このプロシージャは、以前にAddAsParentWorkspaceプロシージャを使用して子作業領域に追加された親作業領域でのみ使用してください。

このプロシージャでは、作業領域は削除されません。単に、parent_workspacemp_leaf_workspaceの親作業領域でなくなります。

次の条件に1つでも該当する場合は、例外が発生します。

  • mp_leaf_workspaceまたはparent_workspaceが存在しない。

  • mp_leaf_workspaceのデータがparent_workspace内またはparent_workspaceの祖先内でバージョニングされており、この操作を実行すると、この作業領域がmp_leaf_workspaceの祖先ではなくなる。

  • mp_leaf_workspace内にオープン状態のデータベース・トランザクションを持つセッションがある。

  • auto_commitTRUEであり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。

次の例は、Workspace4Workspace3の親作業領域として削除します。(「複数の親を持つ作業領域」の階層図を参照)

EXECUTE DBMS_WM.RemoveAsParentWorkspace ('Workspace3', 'Workspace4');

4.66 RemoveDeferredWorkspaces

RemoveWorkspaceプロシージャsまたはRemoveWorkspaceプロシージャのdefer_optionパラメータにFASTまたはREMOVE_LOCKSのいずれかを指定して削除された作業領域に関連付けられている行とロックを、すべてのバージョン対応表から削除します。

構文

DBMS_WM.RemoveDeferredWorkspaces(
   auto_commit  IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-56 RemoveWorkspaceプロシージャのパラメータ

パラメータ 説明
auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

RemoveWorkspaceまたはRemoveWorkspaceTreeを使用し、defer_optionパラメータにFASTまたはREMOVE_LOCKSを指定して作業領域を削除した場合、その作業領域に関連付けられている行を削除する唯一の方法は、このプロシージャを実行することです。また、FASTが使用されていた場合は、残っているすべてのロックが解放されます。

このプロシージャは、削除が遅延されていたすべての作業領域の行と残りのメタデータを削除します。削除対象の遅延作業領域のサブセットを指定することはできません。遅延の後に削除する必要がある作業領域はすべて、DBA_WORKSPACESビューでFREEZE_MODE列にDEFERRED_REMOVAL値が表示されます。この状態のワークスペースが削除されるまでは、同じ名前で新規ワークスペースを作成することはできません。

このプロシージャを実行するには、WM_ADMIN権限が必要です。

次の例は、RemoveWorkspaceプロシージャまたはRemoveWorkspaceTreeプロシージャのdefer_optionパラメータにFASTまたはREMOVE_LOCKSのいずれかを指定して削除された作業領域に関連付けられている行とロックを、すべてのバージョン対応表から削除します。

EXECUTE DBMS_WM.RemoveDeferredWorkspaces;

4.67 RemoveUserDefinedHint

ユーザー定義ヒントを削除します。デフォルトのオプティマイザ・ヒントは、指定したバージョン対応表またはすべてのバージョン対応表に対しDBMS_WMパッケージが実行するSQL文で使用されます。

構文

DBMS_WM.RemoveUserDefinedHint(
   hint_id   IN NUMBER,
   table_id  IN VARCHAR2 DEFAULT NULL);

パラメータ

表4-57 RemoveUserDefinedHintプロシージャのパラメータ

パラメータ 説明
hint_id

ユーザーが定義ヒントを一意に識別する数値ID。事前にAddUserDefinedHintプロシージャのコールで指定した既存のヒントIDと一致する必要があります。

table_id

ヒントを適用する表の名前です。この名前は大/小文字が区別されません。

この値がNULLで、ヒントを追加したAddUserDefinedHintプロシージャをコールするときにtable_idパラメータもNULLであった場合、このヒントはバージョン対応表でヒントIDを指定するSQL文に使用することはできません。

ただし、この値がNULLであり、ヒントを追加したAddUserDefinedHintプロシージャのコールでtable_idパラメータがNULLではなかった場合、RemoveUserDefinedHintプロシージャは、当初指定された表で定義されていたヒントを削除しません。

使用上の注意

このプロシージャは、以前AddUserDefinedHintプロシージャを使用して指定したユーザー定義ヒントの効果を削除または変更する場合にのみ使用します。詳細は、そのプロシージャの「使用上の注意」を参照してください。

次に示す例では、SCOTT.TABLE1に対し、ヒントとヒントID1101を関連するSQL文からユーザー定義ヒントを削除し、かわりにデフォルト・ヒントを使用させます。

EXECUTE DBMS_WM.RemoveUSerDefinedHint (1101, 'scott.table1');

4.68 RemoveWorkspace

作業領域に関連付けられたすべての行バージョンを廃棄し、作業領域を削除します。

構文

DBMS_WM.RemoveWorkspace(
   workspace    IN VARCHAR2,
   auto_commit  IN BOOLEAN DEFAULT TRUE,
   defer_option IN VARCHAR2 DEFAULT NULL;

パラメータ

表4-58 RemoveWorkspaceプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

defer_option

バージョン対応表の作業領域に関連付けられている行とロックが削除されるかどうか、または削除が後の時点へ遅延されるかどうかを指定します。これにより、REMOVEWORKSPACE_DEFERREDシステム・パラメータの値を受け入れるか上書きできます。

値にはNULL、OFFFASTREMOVE_LOCKSのいずれかを指定できます。REMOVEWORKSPACE_DEFERREDシステム・パラメータとその設定可能な値の詳細は、「Workspace Managerのシステム・パラメータ」を参照してください。

使用上の注意

RemoveWorkspace操作は、リーフ作業領域(階層内のブランチにおける最下位の作業領域)に対してのみ、実行できます。データベースの作業領域階層の詳細は、「作業領域階層」を参照してください。

削除対象の作業領域が子作業領域である場合、その親作業領域は操作中に排他的にロックされます。

他のユーザーがアクセスしている削除対象の作業領域は削除できません。

例外が発生するのは、ユーザーがworkspaceに対するREMOVE_WORKSPACE権限またはREMOVE_ANY_WORKSPACE権限を持っていない場合、ユーザーが修正が必要なすべての表(トリガーによって変更される表なども含む)に対する十分な権限を持っていない場合、または、auto_commitTRUEで、かつ修正が必要な表の親または子作業領域にオープン状態のトランザクションがある場合です。

次の例は、NEWWORKSPACE作業領域を削除します。

EXECUTE DBMS_WM.RemoveWorkspace('NEWWORKSPACE');

4.69 RemoveWorkspaceTree

作業領域およびその子作業領域に関連付けられたすべての行バージョンを廃棄し、影響を受ける作業領域を削除します。

構文

DBMS_WM.RemoveWorkspaceTree(
   workspace    IN VARCHAR2,
   auto_commit  IN BOOLEAN DEFAULT TRUE,
   defer_option IN VARCHAR2 DEFAULT NULL;

パラメータ

表4-59 RemoveWorkspaceTreeプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

defer_option

バージョン対応表の作業領域に関連付けられている行とロックが削除されるかどうか、または削除が後の時点へ遅延されるかどうかを指定します。これにより、REMOVEWORKSPACE_DEFERREDシステム・パラメータの値を受け入れるか上書きできます。

値にはNULL、OFFFASTREMOVE_LOCKSのいずれかを指定できます。REMOVEWORKSPACE_DEFERREDシステム・パラメータとその設定可能な値の詳細は、「Workspace Managerのシステム・パラメータ」を参照してください。

使用上の注意

RemoveWorkspaceTree操作では、サポート構造が削除され、作業領域内、およびリーフ作業領域(1つまたは複数)までのすべての子作業領域内の変更がロールバックされるため、この操作を行う場合は、十分な注意が必要です。たとえば、「作業領域階層」に示す階層では、Workspace1を指定してRemoveWorkspaceTree操作を実行すると、Workspace1Workspace2およびWorkspace3が削除されます。(データベースの作業領域階層の詳細は、「作業領域階層」を参照してください。)

他のユーザーがアクセスしているworkspaceまたはその子作業領域は削除できません。

例外が発生するのは、ユーザーがworkspaceまたはそのすべての子作業領域に対するREMOVE_WORKSPACE権限を持っていない場合、ユーザーが修正が必要なすべての表(トリガーによって変更される表なども含む)に対する十分な権限を持っていない場合、または、auto_commitTRUEで、かつ修正が必要な表の親または子作業領域にオープン状態のトランザクションがある場合です。

次の例は、NEWWORKSPACE作業領域およびそのすべての子作業領域を削除します。

EXECUTE DBMS_WM.RemoveWorkspaceTree('NEWWORKSPACE');

4.70 RenameSavepoint

指定された作業領域のセーブポイントの名前を変更します。

構文

DBMS_WM.RenameSavepoint(
   workspace_name     IN VARCHAR2,
   savepoint_name     IN VARCHAR2;
   new_savepoint_name IN VARCHAR2;

パラメータ

表4-60 RenameSavepointプロシージャのパラメータ

パラメータ 説明
workspace_name

名前を変更するセーブポイントが含まれている既存の作業領域の名前。名前は大/小文字が区別されます。

savepoint_name

名前を変更する既存の明示的セーブポイントの名前。(暗黙的なセーブポイントは指定できません。)

new_savepoint_name

セーブポイントに割り当てる新しい名前。既存のセーブポイントの名前は指定できません。

使用上の注意

ユーザーが作業領域またはセーブポイントを所有していないか、またはWM_ADMINシステム権限を持っていない場合は、例外が発生します。

次の例は、LIVE作業領域のセーブポイントSP1の名前を2009 milestoneに変更します。

EXECUTE DBMS_WM.RenameSavepoint('LIVE', 'SP11', '2009 milestone');

4.71 RenameWorkspace

ワークスペースの名前を変更します。

構文

DBMS_WM.RenameWorkspace(
   workspace_name     IN VARCHAR2,
   new_workspace_name IN VARCHAR2;

パラメータ

表4-61 RenameWorkspaceプロシージャのパラメータ

パラメータ 説明
workspace_name

名前を変更する既存の作業領域の名前。名前は大/小文字が区別されます。

new_workspace_name

ワークスペースに割り当てる新しい名前。新しい名前として、LIVEまたは既存のワークスペースの名前は使用できません。また、" (二重引用符)、' (一重引用符)、 ` (グレーブ・アクセント記号)または| (縦棒)は名前に使用できません。

使用上の注意

このプロシージャは、既存のバージョン対応表のメタデータを自動的に更新し、新しいワークスペース名を参照します。このプロシージャが完了するまでの所要時間は、バージョン対応表の数に応じて異なります。

ユーザーが作業領域を所有していない場合、またはWM_ADMINシステム権限を持っていない場合は、例外が発生します。

次の例は、作業領域WS1の名前をConstruction Projectに変更します。

EXECUTE DBMS_WM.RenameWorkspace('WS1', 'Construction Project');

4.72 ResolveConflicts

作業領域間における競合を解消します。

構文

DBMS_WM.ResolveConflicts(
   workspace       IN VARCHAR2,
   table_name      IN VARCHAR2,
   where_clause    IN VARCHAR2,
   keep            IN VARCHAR2,
   resolve_base_ne IN BOOLEAN DEFAULT FALSE);

パラメータ

表4-62 ResolveConflictsプロシージャのパラメータ

パラメータ 説明
workspace

他の作業領域との競合があるかどうかを確認する作業領域の名前。名前は大/小文字が区別されます。

table_name

競合があるかどうかを確認する表の名前。この名前は大/小文字が区別されません。

where_clause

親作業領域の値を使用してリフレッシュする行を識別するWHERE句(WHEREキーワードを除く)。たとえば、department_id = 20です。

副問合せの場合を除き、WHERE句には主キー列のみを指定できます。この副問合せは、主キーではない列を参照できますが、バージョン対応表は参照できません。

keep

競合を解消する場合に優先する作業領域。PARENTCHILDまたはBASEのいずれかを指定します。

PARENTを指定すると、親作業領域の行がその子作業領域にコピーされます。

CHILDを指定すると、子作業領域の行はその親作業領域にすぐにはコピーされません。ただし、競合は解消されたとみなされ、子作業領域がマージされると、子作業領域の行がその親作業領域にコピーされます。

BASEを指定すると、ベース行が子作業領域にコピーされますが、親作業領域にはコピーされません。競合は解消されたとみなされ、子作業領域がマージされるときにベース行が親作業領域にコピーされます。ベース行が存在しない場合、挿入間の競合ではBASEが無視されることに注意してください。この場合、keepパラメータ値はPARENTまたはCHILDである必要があります。

resolve_bnase_ne

ブール値(TRUEまたはFALSE)。keepの値がBASEの場合にのみ適用されます。

TRUEを指定すると、ベース行が存在しない場合(挿入間の競合の場合など)でも、競合の解消ではベース行が優先されます。

FALSE (デフォルト)を指定すると、競合の解消では存在しないベース行を優先できません。他の競合の解消中に存在しないベース行が検出されると、競合は実質的に無視され、解消済として考慮されません。

使用上の注意

このプロシージャは、table_nameパラメータおよびwhere_clauseパラメータで指定された条件をチェックし、workspaceとその親作業領域の間での行値の競合をすべて検出します。このプロシージャは、keepパラメータに指定されている親作業領域または子作業領域の行の値を使用して、競合を解消します。ただし、実際に競合解消がマージされるのは、トランザクションをコミットし(標準のデータベース・コミット操作)、CommitResolveプロシージャをコールして競合解消セッションを終了した後になります。(プロセスの概要など、競合の解消の詳細は、「マージまたはリフレッシュ操作前に行う競合の解消」を参照してください。)

たとえば、部門20(DEPARTMENT_ID = 20)では、LIVE作業領域およびWorkspace1作業領域内のMANAGER_NAMETomであると想定します。その場合、次の操作が行われます。

  1. 部門20のmanager_nameが、LIVEデータベース作業領域でTomからMaryに変更されます。

  2. その変更がコミット(標準のデータベース・コミット操作)されます。

  3. 部門20のmanager_nameが、Workspace1TomからFrancoに変更されます。

  4. MergeWorkspaceプロシージャがコールされ、Workspace1内の変更がLIVE作業領域にマージされます。

    ただし、この時点では、Workspace1内の部門20のMANAGER_NAMEに競合(FrancoLIVE作業領域内のMaryと競合)が発生するため、MergeWorkspaceに対するコールは正常に実行されません。

  5. ResolveConflictsプロシージャが、次のパラメータを使用してコールされます。('Workspace1', 'department', 'department_id = 20', 'child')

    ステップ7のMergeWorkspace操作後、Workspace1作業領域とLIVE作業領域のMANAGER_NAME値がFrancoになります。

  6. その変更がコミット(標準のデータベース・コミット操作)されます。

  7. MergeWorkspaceプロシージャがコールされ、Workspace1内の変更がLIVE作業領域にマージされます。

競合解消セッション中に次の考慮点が適用されます。

  • ResolveConflicts操作により、CommitResolveプロシージャまたはRollbackResolveプロシージャが実行されるまで、ターゲット作業領域、または表の他の作業領域の操作(マージ、リフレッシュまたは削除など)が妨げられます。

  • 複数のセッションが同時にResolveConflicts操作を実行し、同じ表に対して挿入、更新および削除操作を実行できます。ただし、このような操作ではターゲット行がロックされます。複数のセッションが同一行に対して挿入、更新または削除操作を実行しようとするか、または同一行に影響する競合を解消しようとすると、最初のセッションに対して続行が許可されます。このセッションがCommitResolveプロシージャまたはRollbackResolveプロシージャを実行した後で、別のセッションを実行できるようになります。

競合解消の詳細は、「マージまたはリフレッシュ操作前に行う競合の解消」を参照してください。

次の例は、Workspace1内にあるDEPARTMENT表の行(DEPARTMENT_IDが20)に発生した競合を解消し、子作業領域内の値を使用して、これらのすべての競合を解消します。その後、まずトランザクションをコミット(標準のコミット)し、次にMergeWorkspaceプロシージャをコールして、競合解消の結果をマージします。

EXECUTE DBMS_WM.BeginResolve ('Workspace1');
EXECUTE  DBMS_WM.ResolveConflicts ('Workspace1', 'department', 'department_id = 20', 'child');
COMMIT;
EXECUTE DBMS_WM.CommitResolve ('Workspace1');

4.73 RevokeGraphPriv

ユーザーおよびロールから、指定されたリーフ作業領域について、複数の親を持つグラフ作業領域に対する権限を取り消します(削除します)。

構文

DBMS_WM.RevokeGraphPriv(
   priv_types      IN VARCHAR2,
   leaf_workspace  IN VARCHAR2,
   grantee         IN VARCHAR2.
   node_types      IN VARCHAR2 DEFAULT '(''R'',''I'',''L'')',
   auto_commit     IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-63 RevokeGraphPrivプロシージャのパラメータ

パラメータ 説明
priv_types

権限を表す1つ以上のキーワードの文字列。(Workspace Managerの権限の詳細は、「Workspace Managerでの権限管理」を参照してください。)権限キーワードを区切るにはカンマを使用します。使用可能なキーワードは、ACCESS_WORKSPACEMERGE_WORKSPACECREATE_WORKSPACEREMOVE_WORKSPACEROLLBACK_WORKSPACEです。

leaf_workspace

非循環有向グラフ内のリーフ作業領域の名前。(リーフ作業領域、非循環有向グラフなど、複数の親を持つ作業領域に関連する概念の詳細は、「複数の親を持つ作業領域」を参照してください。)名前は大/小文字が区別されます。

grantee

priv_typesを取り消すユーザー(PUBLICユーザー・グループでも可)またはロールの名前。

node_types

権限を取り消すノードのタイプを表す文字のリスト(文字をカッコで囲み、カンマで区切る): R (グラフのルート)、I (指定された中間ノード)、L (グラフのリーフ)。デフォルトでは、すべてのタイプのノードです。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

このプロシージャとは対照的に、RevokeWorkspacePriv は複数の親を持つグラフ作業領域以外の作業領域に対する作業領域レベルのWorkspace Manager権限を付与します。

複数の親を持つグラフ作業領域に対する作業領域レベルの権限を付与するには、GrantGraphPrivプロシージャを使用します。

次の条件に1つでも該当する場合は、例外が発生します。

  • granteeがデータベース内の有効なユーザーまたはロールでない。

  • granteepriv_types権限を付与したユーザーではない。

  • auto_commitTRUEであり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。

次の例では、ユーザーSmithに対して、NEWWORKSPACE作業領域がリーフ作業領域である非循環有向グラフ内のすべてのタイプのノードにアクセスすることと、これらの作業領域内で変更をマージすることを禁止します。

EXECUTE DBMS_WM.RevokeWorkspacePriv ('ACCESS_WORKSPACE, MERGE_WORKSPACE', 'NEWWORKSPACE', 'Smith');

4.74 RevokeSystemPriv

ユーザーおよびロールからシステム・レベルの権限を取り消します(削除します)。

構文

DBMS_WM.RevokeSystemPriv(
   priv_types   IN VARCHAR2,
   grantee      IN VARCHAR2,
   auto_commit  IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-64 RevokeSystemPrivプロシージャのパラメータ

パラメータ 説明
priv_types

権限を表す1つ以上のキーワードの文字列。(Workspace Managerの権限の詳細は、「Workspace Managerでの権限管理」を参照してください。)権限キーワードを区切るにはカンマを使用します。使用可能なキーワードは、ACCESS_ANY_WORKSPACEMERGE_ANY_WORKSPACECREATE_ANY_WORKSPACEREMOVE_ANY_WORKSPACEROLLBACK_ANY_WORKSPACEです。

grantee

priv_typesを取り消すユーザー(PUBLICユーザー・グループでも可)またはロールの名前。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

このプロシージャとは対照的に、RevokeWorkspacePriv プロシージャは、xxx_WORKSPACE形式(ACCESS_WORKSPACEMERGE_WORKSPACEなど)のキーワードを使用してシステム・レベルのWorkspace Manager権限を付与します。

システム・レベルの権限を付与するには、GrantSystemPrivプロシージャを使用します。

次の条件に1つでも該当する場合は、例外が発生します。

  • granteeがデータベース内の有効なユーザーまたはロールでない。

  • granteepriv_types権限を付与したユーザーではない。

  • auto_commitTRUEであり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。

次の例は、ユーザーSmithが作業領域にアクセスし、作業領域内の変更をマージすることを禁止します。

EXECUTE DBMS_WM.RevokeSystemPriv ('ACCESS_ANY_WORKSPACE, MERGE_ANY_WORKSPACE', 'Smith');

4.75 RevokeWorkspacePriv

ユーザーおよびロールから、指定された作業領域に対する作業領域レベルの権限を取り消します(削除します)。

構文

DBMS_WM.RevokeWorkspacePriv(
   priv_types   IN VARCHAR2,
   workspace    IN VARCHAR2,
   grantee      IN VARCHAR2.
   auto_commit  IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-65 RevokeWorkspacePrivプロシージャのパラメータ

パラメータ 説明
priv_types

権限を表す1つ以上のキーワードの文字列。(Workspace Managerの権限の詳細は、「Workspace Managerでの権限管理」を参照してください。)権限キーワードを区切るにはカンマを使用します。使用可能なキーワードは、ACCESS_WORKSPACEMERGE_WORKSPACECREATE_WORKSPACEREMOVE_WORKSPACEROLLBACK_WORKSPACEです。

workspace

作業領域の名前。名前は大/小文字が区別されます。

grantee

priv_typesを取り消すユーザー(PUBLICユーザー・グループでも可)またはロールの名前。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

このプロシージャとは対照的に、RevokeSystemPriv プロシージャは、xxx_ANY_WORKSPACE形式(ACCESS_ANY_WORKSPACEMERGE_ANY_WORKSPACEなど)のキーワードを使用してシステム・レベルのWorkspace Manager権限を取り消します。また、このプロシージャとは対照的に、RevokeGraphPriv は複数の親を持つグラフ作業領域に対する作業領域レベルのWorkspace Manager権限を付与します。

作業領域レベルの権限を付与するには、GrantWorkspacePriv プロシージャを使用します。

次の条件に1つでも該当する場合は、例外が発生します。

  • granteeがデータベース内の有効なユーザーまたはロールでない。

  • granteepriv_types権限を付与したユーザーではない。

  • auto_commitTRUEであり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。

次の例は、ユーザーSmithNEWWORKSPACE作業領域にアクセスし、その作業領域内の変更をマージすることを禁止します。

EXECUTE DBMS_WM.RevokeWorkspacePriv ('ACCESS_WORKSPACE, MERGE_WORKSPACE', 'NEWWORKSPACE', 'Smith');

4.76 RollbackBulkLoading

バルク・ロード操作中にバージョン対応表に対して行われた変更をロールバックします。

構文

DBMS_WM.RollbackBulkLoading(
   table_name         IN VARCHAR2,
   ignore_last_error  IN BOOLEAN DEFAULT FALSE);

パラメータ

表4-66 RollbackBulkLoadingプロシージャのパラメータ

パラメータ 説明
table_name

データのバルク・ロード先となるバージョン対応表の名前。この名前は大/小文字が区別されません。

ignore_last_error

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、RollbackBulkLoadingプロシージャに対する前回のコール中に発生した最後のエラー(ある場合)は無視されます。最後のエラーに関する情報はUSER_WM_VT_ERRORS静的データ・ディクショナリ・ビューおよびALL_WM_VT_ERRORS静的データ・ディクショナリ・ビュー(「Workspace Managerの静的データ・ディクショナリ・ビュー」を参照)に格納されます。詳細は、「使用上の注意」を参照してください。

FALSE (デフォルト)を指定すると、RollbackBulkLoadingプロシージャに対する前回のコール中に発生した最後のエラー(ある場合)は無視されません。

使用上の注意

バージョン対応表へのデータのバルク・ロードに関する要件の詳細は、「バージョン対応表へのバルク・ロード」を参照してください。

このプロシージャは、BeginBulkLoadingプロシージャで削除されたビューをすべて再作成します。

RollbackBulkLoadingプロシージャのコールに失敗した場合は、エラーの原因を解決して再試行する必要があります。SQL文およびエラー・メッセージについては、USER_WM_VT_ERRORS静的データ・ディクショナリ・ビューおよびALL_WM_VT_ERRORS静的データ・ディクショナリ・ビューを参照してください。エラーの原因を修正してから、ignore_last_errorパラメータ値をデフォルトのFALSEにしてRollbackBulkLoadingプロシージャを再度コールします。その後もコールが正常に実行されず、エラーの原因を修正できず、このエラーを無視する場合は、ignore_last_errorパラメータ値をTRUEに指定してRollbackBulkLoadingプロシージャをコールします。ただし、エラーを無視する場合は、ユーザーの責任で行ってください。

次の条件に1つでも該当する場合は、例外が発生します。

  • table_nameが存在しない。

  • table_nameがバージョン対応でない。

  • 表に対してBeginBulkLoadingプロシージャがコールされていない。

  • ユーザーが表を所有していないか、WM_ADMINシステム権限を持っていません。

次の例は、バルク・ロード操作中にEMPに対して行われた変更をロールバックします。

EXECUTE DBMS_WM.RollbackBulkLoading ('EMP');

4.77 RollbackDDL

DDLセッション中に指定された表に対して行われたDDL変更をロールバックし(取り消し)、DDLセッションを終了します。

構文

DBMS_WM.RollbackDDL(
   table_name  IN VARCHAR2);

パラメータ

表4-67 RollbackDDLプロシージャのパラメータ

パラメータ 説明
table_name

バージョン対応表の名前。この名前は大/小文字が区別されません。

使用上の注意

このプロシージャは、DDLセッション中に、バージョン対応表に加えられた変更およびバージョン対応表に基づく索引とトリガーに加えられた変更をロールバックします(取り消します)。また、BeginDDLプロシージャによって作成されたスケルトン表<table-name>_LTSを削除します。

バージョン対応表に関連するDDL操作を実行する方法の詳細は、「バージョン対応表と関連するDDL操作」を参照してください。

次の条件に1つでも該当する場合は、例外が発生します。

  • table_nameが存在しない、またはバージョン対応ではない。

  • オープン状態のDDLセッションがtable_nameに存在しない。(この表を指定してBeginDDLプロシージャがコールされていないか、CommitDDLプロシージャまたはRollbackDDLプロシージャがすでにコールされている状態。)

次の例は、DDLセッションを開始し、COLA_MARKETING_BUDGET_LTSという名前のスケルトン表を使用して、COMMENTSという列をCOLA_MARKETING_BUDGET表に追加し、変更を取り消してDDLセッションを終了します。

EXECUTE DBMS_WM.BeginDDL('COLA_MARKETING_BUDGET');
ALTER TABLE cola_marketing_budget_lts ADD (comments VARCHAR2(100));
EXECUTE DBMS_WM.RollbackDDL('COLA_MARKETING_BUDGET');

4.78 RollbackResolve

競合解消セッションを終了し、BeginResolveプロシージャの実行以降に作業領域内で行われたすべての変更を廃棄します。

構文

DBMS_WM.RollbackResolve(
   workspace  IN VARCHAR2);

パラメータ

表4-68 RollbackResolveプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

使用上の注意

このプロシージャは、(BeginResolveプロシージャによって開始された)現行の競合解消セッションを終了し、その競合解消セッションの開始以降に作業領域内で行われたすべての変更を廃棄します。このプロシージャとは対照的に、CommitResolveプロシージャはすべての変更を保存します。

競合解消セッションのロールバック中、作業領域は1WRITERモードにアクセス制限されます。詳細は、「作業領域のフリーズおよびアンフリーズ」を参照してください。

競合解消の詳細は、「マージまたはリフレッシュ操作前に行う競合の解消」を参照してください。

次の条件に1つでも該当する場合は、例外が発生します。

  • workspace内にオープン状態のデータベース・トランザクションが1つ以上ある。

  • プロシージャが、WM_ADMINシステム権限を持っていないユーザー、またはworkspaceに対してBeginResolveプロシージャを実行していないユーザーによってコールされた。

次の例は、Workspace1での競合解消セッションを終了し、すべての変更を廃棄します。

EXECUTE  DBMS_WM.RollbackResolve ('Workspace1');

4.79 RollbackTable

作業領域内の指定された表(すべての行、またはWHERE句で指定された行)に対するすべての変更を廃棄します。

構文

DBMS_WM.RollbackTable(
   workspace     IN VARCHAR2,
   table_id      IN VARCHAR2,
   sp_name       IN VARCHAR2 DEFAULT '',
   where_clause  IN VARCHAR2 DEFAULT '',
   remove_locks  IN BOOLEAN DEFAULT TRUE,
   auto_commit   IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-69 RollbackTableプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

table_id

廃棄する行を含む表の名前。この名前は大/小文字が区別されません。

sp_name

ロールバック先のセーブポイントの名前。名前は大/小文字が区別されます。デフォルトでは、すべての変更が廃棄されます(すべてのセーブポイントが無視されます)。

where_clause

廃棄する行を識別するWHERE句(WHEREキーワードを除く)。たとえば、department_id = 20です。

副問合せの場合を除き、WHERE句には主キー列のみを指定できます。この副問合せは、主キーではない列を参照できますが、バージョン対応表は参照できません。

where_clauseパラメータが指定されていない場合は、他のパラメータの基準を満たすすべての行が廃棄されます。

remove_locks

ブール値(TRUEまたはFALSE)。

TRUE (デフォルト値)を指定すると、where_clauseパラメータの条件を満たし、子作業領域内でバージョニングされていない、親作業領域内の行に対するロックが解放されます。セーブポイントが指定されている場合(sp_nameパラメータ)、このオプションは無効です。

FALSEを指定すると、親作業領域内のすべてのロックが解放されます。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

指定したセーブポイント以降に暗黙的セーブポイントが作成されている場合、まずその暗黙的セーブポイントが作成される原因となった子作業領域をマージまたは削除しないかぎり、そのセーブポイントにロールバックできません。たとえば、「セーブポイントの使用」図1-2では、Workspace3 (暗黙的セーブポイントSPcが作成された原因)がマージまたは削除されるまで、Workspace1内のユーザーはセーブポイントSP1にロールバックできません。

次の条件に1つでも該当する場合は、例外が発生します。

  • workspaceが存在しない。

  • ユーザーがworkspaceまたは影響を受ける表をロールバックするための権限を取得していない。

  • table_idに影響するデータベース・トランザクションが、いずれかの作業領域内でオープン状態になっている。

  • auto_commitTRUEであり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。

次の例は、NEWWORKSPACE作業領域の作成以降に、その作業領域内のEMP表(USER3スキーマ内)に加えられたすべての変更をロールバックします。

EXECUTE DBMS_WM.RollbackTable ('NEWWORKSPACE', 'user3.emp');

4.80 RollbackToSP

指定されたセーブポイント以降に行われた作業領域内のバージョン対応表に対するすべての変更を廃棄します。

構文

DBMS_WM.RollbackToSP(
   workspace       IN VARCHAR2,
   savepoint_name  IN VARCHAR2,
   auto_commit     IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-70 RollbackToSPプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

savepoint_name

変更のロールバック先のセーブポイントの名前。名前は大/小文字が区別されます。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

このプロシージャの実行中、作業領域はNO_ACCESSモードにアクセス制限されます。

このプロシージャとは対照的に、RollbackWorkspaceプロシージャは、作業領域の作成以降に行われたすべての変更をロールバックします。

指定したセーブポイント以降に暗黙的セーブポイントが作成されている場合、まずその暗黙的セーブポイントが作成される原因となった子作業領域をマージまたは削除しないかぎり、そのセーブポイントにロールバックできません。たとえば、「セーブポイントの使用」図1-2では、Workspace3 (暗黙的セーブポイントSPcが作成された原因)がマージまたは削除されるまで、Workspace1内のユーザーはセーブポイントSP1にロールバックできません。

次の条件に1つでも該当する場合は、例外が発生します。

  • workspaceが存在しない。

  • savepoint_nameが存在しない。

  • auto_commitTRUEであり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。

  • savepoint_name以降にworkspace内に1つ以上の暗黙的セーブポイントが作成されており、その暗黙的セーブポイントが作成される原因となった子作業領域が存在する。

  • ユーザーがworkspaceまたは影響を受ける表をロールバックするための権限を取得していない。

  • workspace内にセッションがある。

次の例は、Savepoint1の作成以降に、NEWWORKSPACE作業領域内で行われたすべての表に対するすべての変更をロールバックします。

EXECUTE DBMS_WM.RollbackToSP ('NEWWORKSPACE', 'Savepoint1');

4.81 RollbackWorkspace

作業領域内のバージョン対応表に対するすべての変更を廃棄します。

構文

DBMS_WM.RollbackWorkspace(
   workspace    IN VARCHAR2,
   auto_commit  IN BOOLEAN DEFAULT TRUE);

パラメータ

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

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

ロールバックできるのは、リーフ作業領域のみです。子作業領域を持つ作業領域はロールバックできません。(作業領域階層の詳細は、「作業領域階層」を参照してください。)

このプロシージャとは対照的に、RollbackToSPプロシージャは、指定されたセーブポイントに変更をロールバックします。

RemoveWorkspaceプロシージャと同様に、RollbackWorkspaceは作業領域内のデータを削除します。ただし、RemoveWorkspaceプロシージャとは異なり、RollbackWorkspaceはWorkspace Managerの作業領域構造を削除しません。

このプロシージャの実行中、指定された作業領域はNO_ACCESSモードにアクセス制限されます。詳細は、「作業領域のフリーズおよびアンフリーズ」を参照してください。

次の条件に1つでも該当する場合は、例外が発生します。

  • workspaceに子作業領域がある。

  • workspaceが存在しない。

  • auto_commitTRUEであり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。

  • ユーザーがworkspaceまたは影響を受ける表をロールバックするための権限を取得していない。

  • workspace内にセッションがある。

次の例は、NEWWORKSPACE作業領域の作成以降に、その作業領域内で行われたすべての変更をロールバックします。

EXECUTE DBMS_WM.RollbackWorkspace ('NEWWORKSPACE');

4.82 SetCaptureEvent

すべてのWorkspace Managerイベントまたは指定した型のWorkspace Managerイベントの取得を有効化または無効化します。

構文

DBMS_WM.SetCaptureEvent(
   event_name  IN VARCHAR2,
   capture     IN VARCHAR2 DEFAULT 'ON');

パラメータ

表4-72 SetCaptureEventプロシージャのパラメータ

パラメータ 説明
event_name

次のいずれかの値: ALL_EVENTSTABLE_MERGE_W_REMOVE_DATATABLE_MERGE_WO_REMOVE_DATATABLE_REFRESHTABLE_ROLLBACKWORKSPACE_COMPRESSWORKSPACE_CREATEWORKSPACE_MERGE_W_REMOVEWORKSPACE_MERGE_WO_REMOVEWORKSPACE_REFRESHWORKSPACE_REMOVEWORKSPACE_ROLLBACKWORKSPACE_VERSION

ALL_EVENTSを指定すると、すべてのWorkspace Managerイベントが含まれます。その他の値は、特定のイベント・タイプを反映しています。イベント・タイプの一覧と詳細は、「Workspace Managerイベントのリスト」を参照してください。

capture

ON(デフォルト)を指定すると、event_nameイベントが取得可能になります。

OFFを指定すると、event_nameイベントが取得禁止になります。

使用上の注意

Workspace Managerイベントの詳細は、「Workspace Managerイベント」を参照してください。

このプロシージャでは、Workspace Managerシステム・パラメータALLOW_CAPTURE_EVENTSONに設定されている必要があります。Workspace Managerのシステム・パラメータの値を確認するには、GetSystemParameterプロシージャを使用します。Workspace Managerのシステム・パラメータを設定するには、SetSystemParameterプロシージャを使用します。

このプロシージャを使用すると、取得するイベントの型を制御できます。たとえば、すべてのイベントの取得を有効化してから、いくつかの型のイベントの取得を無効化する方法や、すべてのイベントの取得を無効化してから、いくつかの型のイベントの取得を有効化する方法があります。

現在取得されているイベントの型を確認するには、WM_EVENTS_INFOメタデータ・ビューを調べます。詳細は、「WM_EVENTS_INFO」を参照してください。

このプロシージャが正常に完了すると、コール元のオープン状態のデータベース・トランザクションがコミットされます。

次の条件に1つでも該当する場合は、例外が発生します。

  • ユーザーにWM_ADMINシステム権限が付与されていない。

  • ALLOW_CAPTURE_EVENTSシステム・パラメータの値がOFFで、event_nameON(このパラメータのデフォルト値)に設定しようとしている。

  • event_nameが有効ではない。

次の例は、最初にすべてのイベントを取得するように指定した後、作業領域圧縮イベントを除外して、作業領域圧縮イベントを除くWorkspace Managerイベントをすべて取得します。

-- Allow Workspace Manager events to be captured. (Required for SetCaptureEvent)
EXECUTE DBMS_WM.SetSystemParameter ('ALLOW_CAPTURE_EVENTS', 'ON');
-- Start capturing all Workspace Manager events.
EXECUTE DBMS_WM.SetCaptureEvent ('ALL_EVENTS','ON');
-- Exclude workspace compression events.
EXECUTE DBMS_WM.SetCaptureEvent ('WORKSPACE_COMPRESS','OFF');

4.83 SetCompressWorkspace

作業領域圧縮操作が実行される場合に、圧縮する必要のあるバージョン対応表の情報を使用して、WM_COMPRESSIBLE_TABLESメタデータ・ビューに行を作成します。

構文

DBMS_WM.SetCompressWorkspace(
   workspace  IN VARCHAR2,
   firstSP    IN VARCHAR2 DEFAULT NULL,
   secondSP   IN VARCHAR2 DEFAULT NULL);

パラメータ

表4-73 SetCompressWorkspaceプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

firstSP

圧縮範囲の最初のバージョンのセーブポイント。セーブポイント名は大/小文字が区別されます。

workspacefirstSPのみを指定すると、作業領域の作成後からfirstSPまでに影響を受けるバージョン対応表のすべての行がチェックされ、作業領域圧縮操作の実行時に圧縮する必要があるかどうかが調べられます。

workspacefirstSPおよびsecondSPを指定すると、firstSPsecondSPの間で影響を受けるバージョン対応表のすべての行がチェックされます。

workspaceのみを指定する(セーブポイントは指定しない)と、バージョン対応表の行がすべてチェックされます。

secondSP

圧縮範囲の最初のバージョンのセーブポイント。firstSPからsecondSPまでのバージョン対応表のすべての行がチェックされ、作業領域圧縮操作の実行時に圧縮する必要があるかどうかが調べられます。セーブポイント名は大/小文字が区別されます。

使用上の注意

このプロシージャは、CompressWorkspaceまたはCompressWorkspaceTreeプロシージャをコールする前に使用できます(必須ではありません)。

このプロシージャは、作業領域圧縮操作中に圧縮する必要のあるバージョン対応表についてのみ、WM_COMPRESSIBLE_TABLESメタデータ・ビュー(WM_COMPRESSIBLE_TABLESを参照)に行を作成します。

次の例は、B_focus_1作業領域の圧縮操作中に圧縮する必要のあるバージョン対応表について、WM_COMPRESSIBLE_TABLESメタデータ・ビューに行を作成します。

EXECUTE DBMS_WM.SetCompressWorkspace ('B_focus_1');

4.84 SetConflictWorkspace

作業領域とその親作業領域の間に競合があるかどうかを判断します。

構文

DBMS_WM.SetConflictWorkspace(
   workspace  IN VARCHAR2);

パラメータ

表4-74 SetConflictWorkspaceプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

使用上の注意

このプロシージャは、workspaceとその親作業領域の間に競合があるかどうかを確認し、必要に応じて<table_name>_CONFビュー(「xxx_CONFビュー」を参照)の内容を変更します。

<table_name>_CONFビューから、作業領域内で変更されたすべての表に対してSELECT操作を実行すると、親作業領域と競合している作業領域内のすべての行が表示されます。(現行の作業領域設定と競合がある表のリストを取得するには、SQL文SELECT * FROM ALL_WM_VERSIONED_TABLES WHERE conflict = 'YES';を使用します。SQL文SELECT * FROM <table_name>_CONFを実行すると、現行の作業領域とその親作業領域の間における<table_name>の競合が表示されます。)

作業領域をマージまたはリフレッシュする前に、すべての競合を解消する必要があります。競合を解消するには、ResolveConflictsプロシージャを使用してから、MergeWorkspaceプロシージャを使用して、解消の結果をマージします。

次の例は、B_focus_2とその親作業領域の間に競合があるかどうかを確認し、必要に応じて<table_name>_CONFビューの内容を変更します。

EXECUTE DBMS_WM.SetConflictWorkspace ('B_focus_2');

4.85 SetDiffVersions

2つのセーブポイントまたは2つの作業領域間のバージョン対応表における値の差異を検索します。差異を記述する差異ビューの内容を変更します。

構文

DBMS_WM.SetDiffVersions(
   workspace1   IN VARCHAR2,
   workspace2   IN VARCHAR2,
   onlyModified IN BOOLEAN DEFAULT FALSE);

または

DBMS_WM.SetDiffVersions(
   workspace1   IN VARCHAR2,
   savepoint1   IN VARCHAR2,
   workspace2   IN VARCHAR2,
   savepoint2   IN VARCHAR2,
   onlyModified IN BOOLEAN DEFAULT FALSE);

パラメータ

表4-75 SetDiffVersionsプロシージャのパラメータ

パラメータ 説明
workspace1

バージョン対応表における差異を確認する最初の作業領域の名前。名前は大/小文字が区別されます。

savepoint1

値を確認する、workspace1内のセーブポイントの名前。名前は大/小文字が区別されます。

savepoint1およびsavepoint2が指定されていない場合、各作業領域内のLATESTセーブポイントに対してバージョン対応表の行が確認されます。(LATESTセーブポイントの詳細は、「セーブポイントの使用」を参照してください。)

workspace2

バージョン対応表における差異を確認する2番目の作業領域の名前。名前は大/小文字が区別されます。

savepoint2

値を確認する、workspace2内のセーブポイントの名前。名前は大/小文字が区別されます。

onlyModified

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、WM_CODE列の値がNC (変更なし)またはNE (存在しない)であるすべての行が_DIFFから削除されます。これにより、このような行が不要な場合にビューのパフォーマンスが向上します。このため、各主キーに、通常の3行ではなく、1行から3行を使用できます。

FALSE (デフォルト)を指定すると、_DIFFビューに対する問合せでは常に、各主キー値の3行が戻されます。これは、ベース行が1行と、指定したセーブポイントごとに1行ずつです。

使用上の注意

このプロシージャは、差分ビュー(xxx_DIFF)の内容を変更します。差分ビューの詳細は「xxx_DIFFビュー」を参照してください。プロシージャをコールするたびに、3行のセットが1つ以上移入されます。各セットの内容は次のとおりです。

  • 共通親作業領域の値

  • workspace1の値(savepoint1セーブポイントまたはLATESTセーブポイントの値)

  • workspace2の値(savepoint2セーブポイントまたはLATESTセーブポイントの値)

その後、適切なxxx_DIFFビュー(1つまたは複数)から行を選択し、2つのセーブポイントおよびその共通親作業領域における同等の表の値を確認できます。共通親作業領域(またはbase)は、xxx_DIFFビューの行内のDiffBaseとして識別されます。

次の例は、B_focus_1作業領域およびB_focus_2作業領域のバージョン対応表における差異を確認します。(出力は、簡単に読むことができるように、再フォーマットされています。)

-- Add rows to difference view: COLA_MARKETING_BUDGET_DIFF
EXECUTE DBMS_WM.SetDiffVersions ('B_focus_1', 'B_focus_2');

-- View the rows that were just added.
SELECT * from COLA_MARKETING_BUDGET_DIFF;
    
PRODUCT_ID  PRODUCT_NAME  MANAGER  BUDGET  WM_DIFFVER          WMCODE
----------  ------------  -------  ------  -----------         --------
       1        cola_a    Alvarez   2      DiffBase            NC
       1        cola_a    Alvarez   1.5    B_focus_1, LATEST   U       
       1        cola_a    Alvarez   2      B_focus_2, LATEST   NC      
       2        cola_b    Burton    2      DiffBase            NC      
       2        cola_b    Beasley   3      B_focus_1, LATEST   U       
       2        cola_b    Burton    2.5    B_focus_2, LATEST   U    
       3        cola_c    Chen      1.5    DiffBase            NC   
       3        cola_c    Chen      1      B_focus_1, LATEST   U   
       3        cola_c    Chen      1.5    B_focus_2, LATEST   NC  
       4        cola_d    Davis     3.5    DiffBase            NC  
       4        cola_d    Davis     3      B_focus_1, LATEST   U   
       4        cola_d    Davis     2.5    B_focus_2, LATEST   U   
         
12 rows selected.

差異(xxx_DIFF)ビュー内の情報を解析および使用する方法は、「xxx_DIFFビュー」を参照してください。

4.86 SetLockingOFF

現行のセッションに対してWorkspace Managerのロック操作を使用禁止にします。

構文

DBMS_WM.SetLockingOFF();

パラメータ

なし。

使用上の注意

このプロシージャは、SetLockingONプロシージャで使用可能にしたWorkspace Managerのロック操作を使用禁止にします。このセッションが適用する既存のロックは、ロックされたままになります。このセッションによるすべての新しい変更はロックされません。

次の例は、セッションに対するロック操作を使用禁止にします。

EXECUTE DBMS_WM.SetLockingOFF;

4.87 SetLockingON

現行のセッションに対してWorkspace Managerのロック操作を使用可能にします。

構文

DBMS_WM.SetLockingON(
   lockmode  IN VARCHAR2);

パラメータ

表4-76 SetLockingONプロシージャのパラメータ

パラメータ 説明
lockmode

ロック・モード。EWEVESまたはCのいずれかを指定する必要があります。

E(排他)モードを指定すると、前のバージョン内の行、および現行バージョン内のそれに対応する行がロックされます。どちらのバージョンでも、その作業領域内にいる他のユーザーは、どの値も変更できません。

WE(作業領域排他)モードを指定すると、前のバージョンの行、および現行バージョン内のそれに対応する行がロックされます。これにより、現行の作業領域内で値を変更できるのはロックを設定したユーザーのみとなります。ただし、他の作業領域内の他のユーザーは値を変更できます。

VE(バージョン排他)モードを指定すると、前のバージョンの行、および現行バージョン内のそれに対応する行がロックされます。これにより、値を変更できるのはロックを設定したユーザーのみとなります。ただし、他のユーザー(すべての作業領域内)は値を変更できなくなります。

S(共有)モードを指定すると、前のバージョン内の行、および現行バージョン内のそれに対応する行がロックされます。ただし、現行バージョンの作業領域内にいる他のユーザーは、これらの行の値を変更できます(前のバージョンの作業領域内にいるユーザーは、値を変更できません)。

C(引継ぎ)モードを指定すると、現行の作業領域内の行が、前のバージョン内の対応する行と同じロック・モードでロックされます。(前のバージョンの行がロックされていない場合は、現行バージョン内のそれに対応する行もロックされません。)

使用上の注意

このプロシージャは、すべての標準のOracleデータベース・ロック操作に加えて実行されるWorkspace Managerロック操作に影響します。Workspace Managerのロックは、競合を回避するために使用できます。ユーザーが行をロックすると、親作業領域内のそれに対応する行もロックされます。そのため、マージ時にこの作業領域がその親とマージされたときにこの行に競合が発生しないことが保証されます。

Workspace Managerのロック管理の詳細は、「Workspace Managerでのロック管理」を参照してください。

排他ロック(lockmodeの値E)では、1つ以上の列に異なる値を設定してテストを行うwhat-if シナリオが使用できません。したがって、このシナリオのテストは、排他ロックが無効であるときに計画してください。

ロック操作はユーザー・セッション・レベルで使用可能にされ、次のイベントのいずれかが発生するまで、そのロック・モードが保持されます。

  • セッションが他の作業領域に移動するか、またはデータベースに接続した場合。この場合、SetWorkspaceLockModeONプロシージャを使用して他のロック・モードが指定されないかぎり、ロック・モードはC(引継ぎ)に設定されます。

  • セッションがSetLockingOFFプロシージャを実行した場合。

ロックは、UnlockRowsプロシージャによってロック解除されないかぎり、作業領域の存続期間中、有効なままです。(既存のロックは、SetLockingOFFプロシージャの影響を受けません。)

ロック操作に対応付けられた特定の権限はありません。作業領域に移動できるすべてのセッションは、ロック操作を使用可能にできます。

次の例は、セッションに対して排他ロックを設定します。

EXECUTE DBMS_WM.SetLockingON ('E');

このユーザーがロックしたすべての行は、作業領域がマージまたはロールバックされるまで、ロックされたままになります。

4.88 SetMultiWorkspaces

指定された作業領域(1つまたは複数)をバージョン対応表の複数作業領域ビューで表示します。

構文

DBMS_WM.SetMultiWorkspaces(
   workspaces  IN VARCHAR2);

パラメータ

表4-77 SetMultiWorkspacesプロシージャのパラメータ

パラメータ 説明
workspaces

複数作業領域ビュー(「xxx_MWビュー」を参照)に関連情報を追加する作業領域(1つまたは複数)。作業領域名は大/小文字が区別されます。

複数の作業領域(8つ以下)を指定するには、カンマを使用して作業領域名を区切ります。例: 'workspace1,workspace2'

使用上の注意

このプロシージャは、複数作業領域ビュー(xxx_MW)に行を追加します。このビューの内容および使用については、「xxx_MWビュー」を参照してください。

複数作業領域ビューで参照できる作業領域の名前を確認するには、GetMultiWorkspacesファンクションを使用します。

次の条件に1つでも該当する場合は、例外が発生します。

  • ユーザーがworkspacesで指定された作業領域のうちの1つ以上に移動するための権限を取得していない。

  • workspacesで指定された作業領域が有効でない。

次の例は、B_focus_1作業領域内のバージョン対応表の複数作業領域ビューに情報を追加します。

EXECUTE DBMS_WM.SetMultiWorkspaces ('B_focus_1');

次の例に、SetMultiWorkspacesプロシージャを使用して現行の作業領域を出ずに情報を表示する方法と、GotoWorkspaceプロシージャを使用して同じ情報を表示する方法を示します。

-- These two pairs of statements select the same information.
EXECUTE DBMS_WM.SetMultiWorkspaces ('myworkspace');
SELECT * from mytable_mw;

EXECUTE DBMS_WM.GotoWorkspace ('myworkspace');
SELECT * from mytable;

myworkspace内で変更された行のみを選択するには、前述の例の最初のSELECT文を次のように変更します。

SELECT * from mytable_mw WHERE wm_modified_by = 'myworkspace';

次の例に、myworkspace作業領域およびyourworkspace作業領域の祖先バージョンの組合せに最新の行を表示します。複数の作業領域から同じ行が選択される場合も、その行は1度のみ表示されます。様々な作業領域で異なるバージョンの主キーが選択される場合があるため、主キーについて複数の行が表示される可能性があることに注意してください。

EXECUTE DBMS_WM.SetMultiWorkspaces ('myworkspace,yourworkspace');
SELECT * from mytable_mw;

4.89 SetSystemParameter

Workspace Managerシステム・パラメータの値を設定します。

構文

DBMS_WM.SetSystemParameter(
   name   IN VARCHAR2,
   value  IN VARCHAR2);

パラメータ

表4-78 SetSystemParameterプロシージャのパラメータ

パラメータ 説明
name

値を設定するWorkspace Managerシステム・パラメータの名前。名前は、「Workspace Managerのシステム・パラメータ」の表に記載されているパラメータ名のいずれかである必要があります。

value

指定したWorkspace Managerシステム・パラメータの値。詳細は、「Workspace Managerのシステム・パラメータ」を参照してください。

使用上の注意

」Workspace Managerのシステム・パラメータの詳細は、「Workspace Managerのシステム・パラメータ」を参照してください。

このプロシージャが正常に完了すると、コール元のオープン状態のデータベース・トランザクションがコミットされます。

次の条件に1つでも該当する場合は、例外が発生します。

  • ユーザーにWM_ADMINシステム権限が付与されていない。

  • システム・パラメータ名が有効ではない。

  • システム・パラメータの値が有効ではない。

  • イベントの取得を禁止しようとしており、1つ以上の型のイベントが取得されている。最初に、すべてのイベントの取得を無効化する必要があります(たとえば、SetCaptureEventプロシージャをコールし、event_type ALL_EVENTSを、captureOFFを指定します)。

  • 複数の親を持つ作業領域を使用禁止にしようとしており、この種の作業領域がすでに1つ以上存在している。最初に、すべての作業領域が複数の親作業領域を持っていないことを確認する必要があります(たとえば、必要に応じてRemoveAsParentWorkspaceプロシージャをコールします)。

  • ネストした表の列を使用禁止にしようとしており、この種の列を含む1つ以上の表がバージョン対応になっている。最初に、ネストした表の列を含むすべての表に対して、バージョニングを使用禁止にする必要があります。

  • CR_WORKSPACE_MODEまたはNONCR_WORKSPACE_MODEPESSIMISTIC_LOCKINGに変更しようとしており、それに対応する型の(連続的にリフレッシュされる、または連続的にリフレッシュされない)作業領域について、LIVE以外の作業領域にデータが存在する。

次の例は、複数の親を持つ作業領域(「複数の親を持つ作業領域」を参照)の作成を許可します。

EXECUTE DBMS_WM.SetSystemParameter ('ALLOW_MULTI_PARENT_WORKSPACES', 'ON');

4.90 SetTriggerEvents

指定したトリガー・イベントのセットについて、トリガーの実行を有効化します。指定していないイベントの場合、トリガーは実行されません。

構文

DBMS_WM.SetTriggerEvents(
   triggerName    IN VARCHAR2,
   triggerEvents  IN VARCHAR2);

パラメータ

表4-79 SetTriggerEventsプロシージャのパラメータ

パラメータ 説明
triggerName

1つ以上のイベントを設定するトリガーの名前。

triggerEvents

トリガー・イベント名のカンマ区切りのリスト。各トリガー・イベント名は、次のいずれかの文字列定数です。

DBMS_WM.DML: DML操作専用です。

DBMS_WM.TABLE_IMPORT: 表をインポートします(Importプロシージャを使用)。

DBMS_WM.TABLE_MERGE_W_REMOVE_DATA: 表をマージしてデータを削除します。

DBMS_WM.TABLE_MERGE_WO_REMOVE_DATA: 表をマージしますが、データを削除しません。

DBMS_WM.WORKSPACE_MERGE_W_REMOVE: 作業領域をマージし、作業領域を削除します。

DBMS_WM.WORKSPACE_MERGE_WO_REMOVE: 作業領域をマージしますが、作業領域を削除しません。

使用上の注意

Workspace Managerでのトリガーの使用方法の詳細は、「バージョン対応表に対するトリガー」を参照してください。

デフォルトの動作がWorkspace Managerのシステム・パラメータFIRE_TRIGGERS_FOR_NONDML_EVENTS (「Workspace Managerのシステム・パラメータ」を参照)で変更されていないかぎり、デフォルトでは、ユーザー定義のトリガーはDMLイベントと作業領域イベントの両方に対して実行されます。SetTriggerEventsプロシージャを使用して、特定のトリガーの現在のFIRE_TRIGGERS_FOR_NONDML_EVENTS設定をオーバーライドできます。ただし後でFIRE_TRIGGERS_FOR_NONDML_EVENTSシステム・パラメータの値を変更すると、SetTriggerEventsプロシージャを使用して以前に指定された設定はすべて、この新しい値によりオーバーライドされます。

このプロシージャが正常に完了すると、コール元のオープン状態のデータベース・トランザクションがコミットされます。

次の条件に1つでも該当する場合は、例外が発生します。

  • ユーザーがトリガーの所有者ではないか、WM_ADMINシステム権限を持っていない。

  • triggerNameが存在しない。

  • 1つ以上のtriggerEvents値が有効でない。

次の例は、DMLイベントに対してのみSCOTT.InsertTriggerトリガーを使用可能にします。

EXECUTE DBMS_WM.setTriggerEvents('SCOTT.InsertTrigger', DBMS_WM.DML);

次の例は、DMLイベントと表マージ操作に対してSCOTT.InsertTriggerトリガーを使用可能にします。

EXECUTE DBMS_WM.setTriggerEvents('SCOTT.InsertTrigger', dbms_wm.DML || ',' || 
                         dbms_wm.TABLE_MERGE_WO_REMOVE_DATA || ',' ||
                         dbms_wm.TABLE_MERGE_W_REMOVE_DATA);

4.91 SetValidTime

セッションの有効期間を設定します。(有効期間のサポートの詳細は、「Workspace Managerの有効期間のサポート」を参照してください。)

構文

DBMS_WM.SetValidTime(
   validFrom IN TIMESTAMP WITH TIME ZONE DEFAULT DBMS_WM.CURRENT_TIME,
   validTill IN TIMESTAMP WITH TIME ZONE DEFAULT DBMS_WM.UNTIL_CHANGED);

パラメータ

表4-80 SetValidTimeプロシージャのパラメータ

パラメータ 説明
validFrom

セッションの有効期間の開始時。デフォルト値は、現在のタイムスタンプ値です。

validTill

セッションの有効期間の終了時。デフォルトでは、セッションの有効期間が変更されるまで有効になっています。

使用上の注意

Workspace Managerの有効期間のサポートの詳細は、「Workspace Managerの有効期間のサポート」を参照してください。validFrom値とvalidTill値の解釈方法の詳細は、「WM_PERIODデータ型」を参照してください。

セッションでこのプロシージャをコールしていない場合、またはパラメータを指定せずにコールした場合、現時点で有効なすべての行が有効であるとみなされ、現時点以降が制限なしで有効期間とみなされます。

次の例は、セッションの有効期間を2003年全体を含むように設定します。

EXECUTE DBMS_WM.SetValidTime(TO_DATE('01-01-2003', 'MM-DD-YYYY'), TO_DATE('01-01-2004', 'MM-DD-YYYY'));

4.92 SetValidTimeFilterOFF

現行セッションの有効期間フィルタを削除します。

構文

DBMS_WM.SetValidTimeFilterOFF();

パラメータ

なし。

使用上の注意

このプロシージャは、SetValidTimeFilterONプロシージャの処理を元に戻し、有効期間サポートを伴う表に対する問合せでは、以前に定義された有効期間フィルタを無視します。Workspace Managerによる有効期間のサポートについては、「Workspace Managerの有効期間のサポート」を参照してください。

SetValidTimeFilterONプロシージャの「使用上の説明」も参照してください。

次の例は、現行セッションの有効期間フィルタを削除します。

EXECUTE DBMS_WM.SetValidTimeFilterOFF;

4.93 SetValidTimeFilterON

現行セッションの有効期間フィルタ(バージョン対応表に適用される時間)を設定します。

構文

DBMS_WM.SetValidTimeFilterON(
   filtertime  IN TIMESTAMP WITH TIME ZONE DEFAULT NULL);

パラメータ

表4-81 SetValidTimeFilterONプロシージャのパラメータ

パラメータ 説明
filtertime

有効期間サポートがあるバージョン対応表への問合せでフィルタとして使用する日付。

デフォルト値は現在の時刻です。つまり、有効期間サポートを伴うバージョン対応表での各選択操作では、現時点で有効な日付を戻します。

使用上の注意

有効期間フィルタは、有効期間サポートがあるバージョン対応表に対する問合せに適用する期間です。現在のセッションに対して有効期間フィルタが設定されている場合、指定された期間有効な行のみが戻されます。Workspace Managerによる有効期間のサポートについては、「Workspace Managerの有効期間のサポート」を参照してください。

有効期間フィルタは通常、特定の主キー値の1行のみを操作するために設定します。たとえば、現在の有効期間で、セッションには従業員Adamsの行が2つあり、最初の行の有効期間は2004年3月1日から2005年4月30日、2番目の行の有効期間は2005年5月1日から行の変更時点までであるとします。有効期間フィルタを2005年1月1日に設定し、Adamsの行をすべて選択すると、最初の行(2004年3月1日から2005年4月30日までが有効期間である行)のみが戻されます。有効期間フィルタを削除し、Adamsの行をすべて選択すると、両方の行が戻されます。

filtertime値は、セッションの有効期間の範囲内にする必要があります。SetValidTimeプロシージャを使用して、有効期間の範囲を設定できます。

次の例は、有効期間フィルタを設定し、有効期間サポートを伴うバージョン対応表に対する問合せを実行して、2005年1月1日で有効な行のみを戻します。

EXECUTE DBMS_WM.SetValidTimeFilterOn(TO_DATE('2005-01-01', 'yyyy-mm-dd'));

4.94 SetWMValidUpdateModeOFF

有効期間サポートがある表で、順序付きと順序なしの更新操作、および順序付き削除操作を無効にします。

構文

DBMS_WM.SetWMValidUpdateModeOFF();

パラメータ

なし。

使用上の注意

このプロシージャは、有効期間サポートがある表で、順序付きと順序なしの更新操作、および順序付き削除操作を無効にします。Workspace Managerの有効期間のサポートの詳細は、「Workspace Managerの有効期間のサポート」を参照してください。順序付きと順序なしの更新操作、および順序付き削除操作の詳細は、「更新操作」を参照してください。

順序付き更新および削除操作が有効な場合、有効期間サポートを伴う表で更新または削除操作が実行されると、そのセッションの現行の有効期間が使用され、その期間で有効な行のみが更新または削除されます。ただし、SetWMValidUpdateModeOFFプロシージャをコールすると、有効期間に関係なく、更新または削除されるすべての行データが有効になり、その表にあるWM_VALID列の値は更新されません。(この手順は、有効期間サポートを伴う表の挿入または問合せ操作には影響しません。)

SetWMValidUpdateModeONプロシージャの「使用上の説明」も参照してください。

次の例は、有効期間のサポートがある表で、順序付きと順序なしの更新操作、および順序付き削除操作を無効にします。

EXECUTE DBMS_WM.SetWMValidUpdateModeOFF;

4.95 SetWMValidUpdateModeON

有効期間のサポートがある表で、順序付きと順序なしの更新操作、および順序付き削除操作を有効にします。

構文

DBMS_WM.SetWMValidUpdateModeON();

パラメータ

なし。

使用上の注意

このプロシージャは、有効期間サポートがある表で、順序付きと順序なしの更新操作、および順序付き削除操作を有効にします。有効期間サポートを伴う表をバージョン対応にする場合、または有効期間サポートをバージョン対応表に追加する場合には、順序付きの更新操作および削除操作が有効になります。ただし、順序付きの更新操作と削除操作は、SetWMValidUpdateModeOFFプロシージャを使用して無効にできます。

Workspace Managerの有効期間のサポートの詳細は、「Workspace Managerの有効期間のサポート」を参照してください。順序付きと順序なしの更新操作、および順序付き削除操作の詳細は、「挿入操作」を参照してください。

次の例は、有効期間のサポートがある表で、順序付きと順序なしの更新操作、および順序付き削除操作を有効にします。これは、SetWMValidUpdateModeOFFプロシージャの処理を元に戻します。

EXECUTE DBMS_WM.SetWMValidUpdateModeON;

4.96 SetWoOverwriteOFF

EnableVersioningプロシージャまたはSetWoOverwriteONプロシージャによって使用可能になったVIEW_WO_OVERWRITE履歴オプションを使用禁止にし、履歴オプションをVIEW_W_OVERWRITE (上書きを伴う)に変更します。

構文

DBMS_WM.SetWoOverwriteOFF();

パラメータ

なし。

使用上の注意

このプロシージャは、VIEW_WO_OVERWRITEオプションをVIEW_W_OVERWRITEに変更することによって、<table_name>_HISTという名前のビューで表示される履歴情報の記録に影響します。この時点から、ビューは表の同一バージョンに対する最新の変更のみを表示します。バージョンに対する変更の履歴は保持されず、同一バージョン内の行に対する後続の変更によって、それより前の変更が上書きされます。

このプロシージャは、histパラメータをVIEW_WO_OVERWRITEに設定してEnableVersioningプロシージャをコールすることにより、バージョン対応表にのみ影響します。

<table_name>_HISTビューの詳細は、「xxx_HISTビュー」を参照してください。VIEW_WO_OVERWRITEオプションおよびVIEW_W_OVERWRITEオプションの詳細は、EnableVersioningプロシージャの説明を参照してください。

履歴オプションは、GotoDateプロシージャの動作に影響します。詳細は、そのプロシージャの「使用上の注意」を参照してください。

SetWoOverwriteOFFプロシージャの結果は、現行セッションの存続期間中、有効なままです。このプロシージャによる処理を元に戻すには、SetWoOverwriteONプロシージャを使用します。

次の例は、VIEW_WO_OVERWRITE履歴オプションを使用禁止にします。

EXECUTE DBMS_WM.SetWoOverwriteOFF;

4.97 SetWoOverwriteON

SetWoOverwriteOFFプロシージャによって使用禁止になったVIEW_WO_OVERWRITE履歴オプションを使用可能にします。

構文

DBMS_WM.SetWoOverwriteON();

パラメータ

なし。

使用上の注意

このプロシージャは、VIEW_W_OVERWRITEオプションをVIEW_WO_OVERWRITE(without overwrite)に変更することによって、<table_name>_HISTという名前のビューで表示される履歴情報の記録に影響します。この時点から、ビューは表の同一バージョンに対するすべての変更を表示します。バージョンに対する変更の履歴は保持され、同一バージョン内の行に対する後続の変更によってそれより前の変更が上書きされません。

このプロシージャは、SetWoOverwriteOFFプロシージャに対する前のコールによって影響を受けた表にのみ影響します。

<table_name>_HISTビューの詳細は、「xxx_HISTビュー」を参照してください。VIEW_WO_OVERWRITEオプションおよびVIEW_W_OVERWRITEオプションの詳細は、EnableVersioningプロシージャの説明を参照してください。

CompressWorkspaceプロシージャまたはCompressWorkspaceTreeプロシージャでcompress_view_wo_overwriteパラメータをTRUEに指定して作業領域を圧縮すると、VIEW_WO_OVERWRITE履歴オプションが上書きされる可能性があります。

履歴オプションは、GotoDateプロシージャの動作に影響します。詳細は、そのプロシージャの「使用上の注意」を参照してください。

このプロシージャによる処理を元に戻すには、SetWoOverwriteOFFプロシージャを使用します。

次の例は、VIEW_WO_OVERWRITE履歴オプションを使用可能にします。

EXECUTE DBMS_WM.SetWoOverwriteON;

4.98 SetWorkspaceLockModeOFF

指定された作業領域に対してWorkspace Managerのロック操作を使用禁止にします。

構文

DBMS_WM.SetWorkspaceLockModeOFF(
   workspace    IN VARCHAR2,
   auto_commit  IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-82 SetWorkspaceLockModeOFFプロシージャのパラメータ

パラメータ 説明
workspace

ロック・モードを使用禁止にする作業領域の名前。名前は大/小文字が区別されます。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

このプロシージャは、SetWorkspaceLockModeONプロシージャで使用可能にしたWorkspace Managerのロック操作を使用禁止にします。このセッションが適用する既存のロックは、ロックされたままになります。このセッションまたは後続のセッションによるすべての新しい変更は、そのセッションがSetLockingONプロシージャを実行してロック操作を使用可能にしないかぎり、ロックされません。

次の場合に例外が発生します。

  • ユーザーがWM_ADMINシステム権限を持っていないか、またはworkspaceの所有者ではない。

  • auto_commitTRUEであり、オープン状態のトランザクションがある。

次の例は、NEWWORKSPACEという名前の作業領域に対するロック操作を使用禁止にします。

EXECUTE DBMS_WM.SetWorkspaceLockModeOFF('NEWWORKSPACE');

4.99 SetWorkspaceLockModeON

指定された作業領域に対してWorkspace Managerのロック操作を使用可能にします。

構文

DBMS_WM.SetWorkspaceLockModeON(
   workspace    IN VARCHAR2,
   lockmode     IN VARCHAR2,
   override     IN BOOLEAN DEFAULT FALSE,
   auto_commit  IN BOOLEAN DEFAULT TRUE);

パラメータ

表4-83 SetWorkspaceLockModeONプロシージャのパラメータ

パラメータ 説明
workspace

Workspace Managerのロック操作を使用可能にする作業領域の名前。名前は大/小文字が区別されます。

lockmode

行レベル・ロックのデフォルトのロック・モード。EWEVESCまたはDである必要があります。

E(排他)モードを指定すると、親作業領域内の行、および現行の作業領域内のそれに対応する行がロックされます。どちらの作業領域の場合も、その作業領域内にいる他のユーザーは、すべての値を変更できません。

WE(作業領域排他)モードを指定すると、前のバージョンの行、および現行バージョン内のそれに対応する行がロックされます。これにより、現行の作業領域内で値を変更できるのはロックを設定したユーザーのみとなります。ただし、他の作業領域内の他のユーザーは値を変更できます。

VE(バージョン排他)モードを指定すると、前のバージョンの行、および現行バージョン内のそれに対応する行がロックされます。これにより、値を変更できるのはロックを設定したユーザーのみとなります。ただし、他のユーザー(すべての作業領域内)は値を変更できなくなります。

S(共有)モードを指定すると、親作業領域内の行、および現行の作業領域内のそれに対応する行がロックされます。ただし、現行の作業領域内にいる他のユーザーは、これらの行の値を変更できます(親作業領域内にいるユーザーは、値を変更できません)。

C(引継ぎ)モードを指定すると、現行の作業領域内の行が、親作業領域内の対応する行と同じロック・モードでロックされます。(親作業領域内の行がロックされていない場合は、子作業領域内のそれに対応する行もロックされません。)

D (無視)モードでは、すべてのロックが無視されます。作業領域では、別の作業域でロックされている行や、作業領域が即時設定内である場合を含め、すべての行を更新できます。このモードを設定すると、次のようになります。(1)このモードが設定される作業領域では、行の変更後に、(SetLockingOFFを使用して)ロックモードをオフにすることや、(SetLockingONを使用して)ロックモードを変更することはできません。(2)作業領域をマージできません。(3)作業領域をリフレッシュできません。(4)overrideオプションをfalseに設定する必要があります。(5)この作業領域から子作業領域を作成すると、その新しい作業領域は、同じロックモードと制約を継承します。

override

ブール値(TRUEまたはFALSE)。

TRUEを指定すると、作業領域内のセッションは、SetLockingONプロシージャおよびSetLockingOFFプロシージャを使用してlockmodeの値を変更できます。

FALSE(デフォルト値)を指定すると、作業領域内のセッションはlockmodeの値を変更できません。

auto_commit

ブール値(TRUEまたはFALSE)。

TRUE(デフォルト値)を指定すると、操作が自律型データベース・トランザクションとして実行されます。このトランザクションは、終了時にコミットされます。

FALSEを指定すると、操作がコール側のオープン状態のデータベース・トランザクション(存在する場合)の一部として実行されます。オープン状態のデータベース・トランザクションがない場合、操作は新しいデータベース・トランザクションで実行されます。いずれの場合も、コール側はそのトランザクションをコミットする必要があります。詳細は、「Workspace Managerの操作の自動コミット」を参照してください。

使用上の注意

このプロシージャは、すべての標準のOracleデータベース・ロック操作に加えて実行されるWorkspace Managerロック操作に影響します。Workspace Managerのロックは、競合を回避するために使用できます。ユーザーが行をロックすると、親作業領域内のそれに対応する行もロックされます。そのため、マージ時にこの作業領域がその親とマージされたときにこの行に競合が発生しないことが保証されます。

Workspace Managerのロック管理の詳細は、「Workspace Managerでのロック管理」を参照してください。

「無視」ロック・モード(lockmode値がD)は主に、特定の作業領域を、システム内のその他のすべての作業領域から完全に切り離し、必要な行を更新できるようにする目的で使用されます。作業領域がテスト(サンドボックス)作業領域になり、あらゆるものをテストできますが、作業領域のマージやリフレッシュはできないため、作業領域での変更を他の作業領域に伝搬できません。つまり、この作業領域はテスト専用であり、テスト完了後には削除できます。

排他ロック(lockmodeの値E)では、1つ以上の列に異なる値を設定してテストを行うwhat-if シナリオが使用できません。したがって、このシナリオのテストは、排他ロックが無効であるときに計画してください。

overrideパラメータの値がTRUEの場合は、SetLockingONプロシージャおよびSetLockingOFFプロシージャを使用して、ロック操作をユーザー・セッション・レベルでそれぞれ使用可能および使用禁止にできます。

このセッションまたは後続のセッションによるすべての新しい変更は、そのセッションがSetLockingOFFプロシージャを実行してロック操作を使用禁止にしないかぎり、ロックされます。

次の場合に例外が発生します。

  • ユーザーがWM_ADMINシステム権限を持っていないか、またはworkspaceの所有者ではない。

  • auto_commitTRUEであり、オープン状態のトランザクションがある。

  • lockmodeDであり、作業領域は連続的にリフレッシュされる作業領域またはLIVE作業領域です。

次の例は、NEWWORKSPACEという名前の作業領域に対して排他ロックを設定します。

EXECUTE DBMS_WM.SetWorkspaceLockModeON ('NEWWORKSPACE', 'E');

ロックされたすべての行は、作業領域がマージまたはロールバックされるまで、ロックされたままになります。

4.100 UnfreezeWorkspace

作業領域にアクセスできるようにし、また作業領域に対する変更を有効にし、FreezeWorkspaceプロシージャによる処理を元に戻します。

構文

DBMS_WM.UnfreezeWorkspace(
   workspace  IN VARCHAR2);

パラメータ

表4-84 UnfreezeWorkspaceプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前。名前は大/小文字が区別されます。

使用上の注意

workspace内にセッションがある場合は、操作が正常に実行されません。

次の条件に1つでも該当する場合は、作業領域のアクセス制限を解除できます。

  • 指定された作業領域の所有者である。

  • 指定された作業領域に対するWM_ADMINFREEZE_ANY_WORKSPACE権限またはFREEZE_WORKSPACE権限を持っている。

次の例は、NEWWORKSPACE作業領域に対するアクセス制限を解除します。

EXECUTE DBMS_WM.UnfreezeWorkspace ('NEWWORKSPACE');

4.101 UnlockRows

指定された表内のバージョン対応行、および親作業領域内のそれに対応する行にアクセスできるようにします。

構文

DBMS_WM.UnlockRows(
   workspace     IN VARCHAR2,
   table_name    IN VARCHAR2,
   where_clause  IN VARCHAR2 DEFAULT '',
   all_or_user   IN VARCHAR2 DEFAULT 'USER',
   lock_mode     IN VARCHAR2 DEFAULT 'ES',
   Xmin          IN NUMBER DEFAULT NULL,
   Ymin          IN NUMBER DEFAULT NULL,
   Xmax          IN NUMBER DEFAULT NULL,
   Ymax          IN NUMBER DEFAULT NULL);

パラメータ

表4-85 UnlockRowsプロシージャのパラメータ

パラメータ 説明
workspace

作業領域の名前: その他のパラメータの指定に従い、この作業領域内のロックされた行と、親作業領域内の対応する行のロックが解除さます。名前は大/小文字が区別されます。

lock_modeVE(バージョン排他)に設定する場合は、値NONEを使用できます。これにより、いずれかの作業領域でロックされている行のロックが解除されます。

table_name

ロック解除する行を含む表またはSpatial and Graphトポロジ(XminYminXmaxおよびYmaxが指定されている場合)の名前。この名前は大/小文字が区別されません。

where_clause

ロック解除する行を識別するWHERE句(WHEREキーワードを除く)。たとえば、department_id = 20です。

副問合せの場合を除き、WHERE句には主キー列のみを指定できます。この副問合せは、主キーではない列を参照できますが、バージョン対応表は参照できません。

where_clauseパラメータが指定されていない場合は、table_name内のすべての行がアクセス可能になります。

table_nameにSpatial and Graphトポロジ名を指定する場合は、where_clauseパラメータを指定しないでください。

all_or_user

要求の有効範囲: ALLまたはUSERを指定します。

ALL: 指定された作業領域内のユーザーがアクセス可能なすべてのロックが考慮されます。

USER(デフォルト値): 指定された作業領域内のユーザーが所有するロックのみが考慮されます。

lock_mode

ロック・モード。EWEVESまたはES(デフォルト)のいずれかを指定する必要があります。

E(排他): 排他モード・ロックのみが考慮されます。

WE(作業領域排他): 作業領域排他モード・ロックのみが考慮されます。

VE(バージョン排他): バージョン排他モード・ロックのみが考慮されます。

S(共有): 共有モード・ロックのみが考慮されます。

ES(排他および共有: デフォルト値): 排他モード・ロックと共有モード・ロックの両方が考慮されます。

Xmin, Ymin

Oracle Spatial and Graphトポロジの場合にのみ指定する(「トポロジ使用時のロックに関する考慮事項」を参照)、ロックする行を含むウィンドウの左下隅のX座標値とY座標値。table_nameにトポロジ名を指定した場合は、これらのパラメータを指定する必要があります。それ以外の場合は、指定しないでください。

Xmax, Ymax

Oracle Spatial and Graphトポロジの場合にのみ指定する(「トポロジ使用時のロックに関する考慮事項」を参照)、ロックする行を含むウィンドウの右上隅のX座標値とY座標値。table_nameにトポロジ名を指定した場合は、これらのパラメータを指定する必要があります。それ以外の場合は、指定しないでください。

使用上の注意

このプロシージャは、すべての標準のOracleデータベース・ロック操作に加えて実行されるWorkspace Managerロック操作に影響します。Workspace Managerのロックの詳細は、「Workspace Managerでのロック管理」を参照してください。

このプロシージャは、前にロックされた行をロック解除します(LockRowsプロシージャを参照)。Workspace Managerのロック操作が使用可能または使用禁止(SetLockingONプロシージャおよびSetLockingOFFプロシージャで決定)になるかには影響しません。

Oracle Spatial and Graphトポロジ内の表に対するWorkspace Managerのロックの詳細は、「トポロジ使用時のロックに関する考慮事項」を参照してください。

次の例は、NEWWORKSPACE作業領域内にあるEMPLOYEES表の行(last_nameが「Smith」)をロック解除します。

EXECUTE DBMS_WM.UnlockRows ('employees', 'NEWWORKSPACE', 'last_name = ''Smith''');

4.102 UseDefaultValuesForNulls

ユーザーがバージョン対応表に対する挿入操作で列にNULL値を指定したか、または値を指定しなかった場合に、現行のセッションでWorkspace Managerが列にデフォルト値を使用するかどうかを決定します。

構文

DBMS_WM.UseDefaultValuesForNulls(
   mode_var IN VARCHAR2);

パラメータ

表4-86 UseDefaultValuesForNullsプロシージャのパラメータ

パラメータ 説明
mode_var

NULL値の挿入を処理するモード。OFFまたはONを指定します。

OFF: 列にNULL値が挿入されます。(これはOracleの標準動作です。)

ON: 列にはその列のデフォルト値が挿入されます。

使用上の注意

このプロシージャがWorkspace Managerの動作に影響するのは、列がデフォルト値を持つと定義されている場合にバージョン対応表に対するINSERT文でその列にNULLが明示的に指定される場合、またはその列を未指定のままにする場合のみです。たとえば、次の表の定義を考えてみます。

CREATE TABLE players (name VARCHAR2(20) primary key, rating NUMBER DEFAULT 10);

PLAYERS表がバージョン対応の場合に、mode_varパラメータに値OFFを指定してこのプロシージャを実行していれば、次のいずれの文でもSmithの行にNULLのRATING値が挿入されます。

INSERT INTO players VALUES ('Smith', NULL);
INSERT INTO players(name) VALUES ('Smith');

ただし、mode_varパラメータに値ONを指定してUseDefaultValuesForNullsプロシージャを実行すると、両方の文でSmithの行にRATINGの値10が挿入されます。このプロシージャがセッションで実行されていない場合、デフォルトの動作は、mode_varONとして指定された場合と同じです。

次の例では、バージョン対応表へのINSERT文でデフォルト値を持つ列に対してNULL値が指定されるか、または列が未指定のままにされるたびに、現行のセッションの以降の部分では列のデフォルト値が使用されます。」

EXECUTE DBMS_WM.UseDefaultValuesForNulls('ON');