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プロシージャを実行する場合、権限チェックでは、プロシージャの権限が、定義者権限なのか、現在有効な権限を持つデータベース・ユーザーの権限なのかが考慮されます。
トピック:
- Add_Topo_Geometry_Layer
- AddAsParentWorkspace
- AddUserDefinedHint
- AlterSavepoint
- AlterVersionedTable
- AlterWorkspace
- BeginBulkLoading
- BeginDDL
- BeginResolve
- ChangeWorkspaceType
- CommitBulkLoading
- CommitDDL
- CommitResolve
- CompressWorkspace
- CompressWorkspaceTree
- CopyForUpdate
- CreateSavepoint
- CreateWorkspace
- Delete_Topo_Geometry_Layer
- DeleteSavepoint
- DisableVersioning
- EnableVersioning
- Export
- Export_Schemas
- FindRICSet
- FreezeWorkspace
- GetBulkLoadVersion
- GetConflictWorkspace
- GetDiffVersions
- GetLockMode
- GetMultiWorkspaces
- GetOpContext
- GetOriginalDDL
- GetPhysicalTableName
- GetPrivs
- GetSessionInfo
- GetSystemParameter
- GetValidFrom
- GetValidTill
- GetVersion
- GetWMMetadataSpace
- GetWorkspace
- GotoDate
- GotoSavepoint
- GotoWorkspace
- GrantGraphPriv
- GrantPrivsOnPolicy
- GrantSystemPriv
- GrantWorkspacePriv
- Import
- Import_Schemas
- Initialize_After_Import
- IsWorkspaceOccupied
- LockRows
- MergeTable
- MergeWorkspace
- Move_Proc
- PurgeTable
- RecoverAllMigratingTables
- RecoverFromDroppedUser
- RecoverMigratingTable
- RefreshTable
- RefreshWorkspace
- RemoveAsParentWorkspace
- RemoveDeferredWorkspaces
- RemoveUserDefinedHint
- RemoveWorkspace
- RemoveWorkspaceTree
- RenameSavepoint
- RenameWorkspace
- ResolveConflicts
- RevokeGraphPriv
- RevokeSystemPriv
- RevokeWorkspacePriv
- RollbackBulkLoading
- RollbackDDL
- RollbackResolve
- RollbackTable
- RollbackToSP
- RollbackWorkspace
- SetCaptureEvent
- SetCompressWorkspace
- SetConflictWorkspace
- SetDiffVersions
- SetLockingOFF
- SetLockingON
- SetMultiWorkspaces
- SetSystemParameter
- SetTriggerEvents
- SetValidTime
- SetValidTimeFilterOFF
- SetValidTimeFilterON
- SetWMValidUpdateModeOFF
- SetWMValidUpdateModeON
- SetWoOverwriteOFF
- SetWoOverwriteON
- SetWorkspaceLockModeOFF
- SetWorkspaceLockModeON
- UnfreezeWorkspace
- UnlockRows
- UseDefaultValuesForNulls
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 |
トポロジに追加するトポロジ・ジオメトリ・レイヤー内でトポロジ・ジオメトリを含んでいる( |
tg_layer_type |
トポロジ・ジオメトリ・レイヤーの型: |
使用上の注意
このプロシージャは、Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイドに記載されているSDO_TOPO.ADD_TOPO_GEOMETRY_LAYERプロシージャと構文および意味が同じです。ただし、バージョン対応のフィーチャー表からトポロジにトポロジ・ジオメトリ・レイヤーを追加する場合は、SDO_TOPO.ADD_TOPO_GEOMETRY_LAYERではなく、DBMS_WM.Add_Topo_Geometry_Layerを使用する必要があります。Workspace Managerによるトポロジのサポートの詳細は、Spatial and Graphトポロジのサポートを参照してください。
このプロシージャを指定のトポロジに対して初めてコールすると、<topology-name>_RELATION$表が作成されます。詳細は、Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイドを参照してください。
topology
、table_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 |
|
auto_commit |
ブール値(
|
使用上の注意
このプロシージャは、複数の親を持つ作業領域機能のサポートの一部です。詳細は、複数の親を持つ作業領域を参照してください。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_commit
がTRUE
であり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。 -
workspace
内のバージョン対応表のデータのビューに、主キー制約違反、参照整合性制約違反または一意制約違反がある。
例
次の例は、Workspace4
をWorkspace3
の親作業領域として追加します。(複数の親を持つ作業領域で階層図を参照してください。)
-- 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
パラメータを指定した場合、指定のヒントが使用されるのは、そのヒントIDを使用するSQL文で指定の表にアクセスした場合のみです。他の表ではデフォルトの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つ。有効期間サポートを追加する 索引名または制約名を変更する場合に、このプロシージャの使用が必須であるかオプションであるかなど、これらのオプションについては、「使用上の注意」を参照してください。 |
parameter_options |
指定した |
ignore_last_error |
ブール値(
|
使用上の注意
このプロシージャを使用し、既存のバージョン対応表に対して有効期間サポートの追加、制約名の変更または索引名の変更を行います。有効期間サポートを追加する方法の詳細は、既存の表に対する有効期間サポートの追加を参照してください。
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
を指定すると、このプロシージャに対して操作が正式にサポートされているかどうかに関係なく、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_VALIDTIME
をON
に設定した場合、既存のパージョン対応表MYTABLEにWM_VALID (WM_PERIOD
型)という名前の単一列を使用して有効期間範囲を示すビューがあるときは、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
が存在しない。 -
alterOptions
がADD_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 |
ブール値(
|
ignore_last_error |
ブール値(
|
single_transaction |
ブール値(
このパラメータの詳細は、「使用上の注意」を参照してください。 |
savepoint_name |
データをバルク・ロードする作業領域内のバージョン。指定する場合、
|
使用上の注意
バージョン対応表へのデータのバルク・ロードを開始する前に、BeginBulkLoadingプロシージャをコールする必要があります。バルク・ロード・セッションを終了するには、CommitBulkLoadingプロシージャ(データのロードによる変更をコミットする場合)またはRollbackBulkLoadingプロシージャ(データのロードによる変更をロールバックする場合)をコールする必要があります。Workspace Managerでのバルク・ロードの詳細は、バージョン対応表へのバルク・ロードを参照してください。
single_transaction
がFALSE
(デフォルト)の場合、BeginBulkLoadingプロシージャは、表に対するDML操作および特定のWorkspace Manager操作を回避するために、表の一部の内部Workspace Managerビューを削除します。また、これにより、指定のバージョン対応表が使用して問合せが行われるのも回避されます。single_transaction
パラメータの値(特にFALSE
の場合)に関係なく、アプリケーションおよびユーザーが表にアクセスする必要がないときに、できるだけ迅速にバルク・ロードを完了する必要があります。single_transaction
パラメータの値は、指定の表とのバルク・ロード・セッション用のBeginBulkLoadingプロシージャとCommitBulkLoadingプロシージャの両方で同じにする必要があります。
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 |
連続的にリフレッシュされるように、 |
auto_commit |
ブール値(
|
使用上の注意
このリリースでは、連続的にリフレッシュされない作業領域から連続的にリフレッシュされる作業領域への変更のみができます。逆の変更はできません。
次の条件に1つでも該当する場合は、例外が発生します。
-
ユーザーが
workspace
の所有者ではなく、かつユーザーがWM_ADMIN
システム権限を所有していない。 -
workspace_type
が有効でない。 -
auto_commit
がTRUE
であり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。 -
作業領域のタイプを変更できない。たとえば、Workspace Managerシステム・パラメータ
CR_WORKSPACE_MODE
がPESSIMISTIC_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 |
ブール値(
|
enforceUCFlag |
ブール値(
|
enforceRICFlag |
ブール値(
|
ignore_last_error |
ブール値(
|
single_transaction |
ブール値(
このパラメータには、 |
使用上の注意
バージョン対応表にデータをバルク・ロードする場合の要件については、バージョン対応表へのバルク・ロードを参照してください。
このプロシージャは、新規にロードされたデータのバージョニング・メタデータを生成し、新規にロードされたデータを表の既存のバージョニング済データと同期化します。また、新規にロードされたデータに対して一意制約と参照制約を規定することもできます。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 |
ブール値(
|
enforce_unique_constraints |
ブール値(
|
enforce_RICs |
ブール値(
|
使用上の注意
このプロシージャは、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 |
ブール値(
|
firstSP |
最初のセーブポイント。セーブポイント名は大/小文字が区別されます。
|
secondSP |
2番目のセーブポイント。 ただし、 セーブポイント名は大/小文字が区別されます。 |
auto_commit |
ブール値(
|
commit_in_batches |
ブール値(
|
batch_size |
|
remove_latest_deleted_rows |
ブール値(
|
使用上の注意
作業領域内の明示的セーブポイント(すべてまたは一部)が不要になった場合は、その作業領域を圧縮できます。圧縮操作は、次の理由から有効です。
-
セーブポイントを削除した後、セーブポイント名を再利用できます。(既存のセーブポイントと同じ名前のセーブポイントは作成できません。)
-
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
を指定するには、まず主キーの最初の列についてヒストグラム統計(NUMBER
、INTEGER
、DATE
、TIMESTAMP
、CHAR
またはVARCHAR2
型の列の場合)あるいは一般統計(NUMBER
、INTEGER
、DATE
またはTIMESTAMP
型の列の場合)を生成する必要があります。DBMS_STATS.GATHER_TABLE_STATSプロシージャは、一般統計を生成します。NUMBER
、INTEGER
、DATE
またはTIMESTAMP
型の列についてヒストグラム統計ではなく一般統計が使用可能な場合に、batch_size
をPRIMARY_KEY_RANGE
として指定すると、Workspace Managerシステム・パラメータNUMBER_OF_COMPRESS_BATCHES
を使用してバッチ数が計算されます。統計の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。
指定の作業領域内の現在のバージョンを圧縮する必要がある場合、Workspace Managerは作業領域の共有半排他ロックを取得しようとします。このロックが取得されない場合、エラーは発生しませんが、現在のバージョンは圧縮されません。(Workspace Managerの操作に対して取得されるロックを参照してください。)
auto_commit
がTRUE
であり、オープン状態のトランザクションがある場合、ユーザーが、修正が必要なすべての表(トリガーによって変更される表なども含む)に対する十分な権限を持たなければ、例外が発生します。また、ユーザーがworkspace
にアクセスおよび変更をマージする権限を持たない場合にも例外が発生します。
作業領域およびそのすべての子作業領域を圧縮するには、CompressWorkspaceTreeプロシージャを使用します。
例
次の例は、NEWWORKSPACE
を圧縮します。
EXECUTE DBMS_WM.CompressWorkspace ('NEWWORKSPACE');
次の例は、NEWWORKSPACE
を圧縮して、この作業領域の作成とセーブポイントSP1
の間のすべての明示的セーブポイントを削除します。
EXECUTE DBMS_WM.CompressWorkspace ('NEWWORKSPACE', 'SP1');
次の例は、NEWWORKSPACE
を圧縮して、明示的セーブポイントSP1
とSP2
の間のすべての明示的セーブポイント(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
プロシージャのコールは、firstSP
、secondSP
および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 |
ブール値(
|
auto_commit |
ブール値(
|
commit_in_batches |
ブール値(
|
batch_size |
|
remove_latest_deleted_rows |
ブール値(
|
使用上の注意
影響を受ける作業領域の明示的セーブポイントが不要になった場合(たとえば、これらのセーブポイントに移動またはロールバックする必要がない場合)、作業領域とそのすべての子作業領域を圧縮できます。たとえば、作業領域階層に示されている階層で、作業領域1を指定してCompressWorkspaceTree操作を実行すると、作業領域1、作業領域2、および作業領域3が圧縮されます。(データベースの作業領域階層の詳細は、作業領域階層を参照してください。)
圧縮操作は、次の理由から有効です。
-
セーブポイントを削除した後、セーブポイント名を再利用できます。(既存のセーブポイントと同じ名前のセーブポイントは作成できません。)
-
Workspace Managerの操作の実行時パフォーマンスが向上します。
-
Workspace Manager構造に使用されるディスク記憶域が減ります。
このプロシージャの実行中、現行の作業領域はNO_ACCESS
モードにアクセス制限されます。詳細は、作業領域のアクセス制限および制限解除を参照してください。
作業領域(LIVE
作業領域は除く)にセッションが存在する場合、またはユーザーがGotoDate操作、または作業領域内のセーブポイントを指定してGotoSavepoint操作を実行した場合、その作業領域は圧縮できません。
バージョン対応表を主キー範囲のバッチ単位で圧縮できるかどうかを調べるには、WM_COMPRESS_BATCH_SIZESメタデータ・ビューのBATCH_SIZE
列の値をチェックします。詳細は、WM_COMPRESS_BATCH_SIZESを参照してください。
batch_size
に値PRIMARY_KEY_RANGE
を指定するには、まず主キーの最初の列についてヒストグラム統計(NUMBER
、INTEGER
、DATE
、TIMESTAMP
、CHAR
またはVARCHAR2
型の列の場合)あるいは一般統計(NUMBER
、INTEGER
、DATE
またはTIMESTAMP
型の列の場合)を生成する必要があります。DBMS_STATS.GATHER_TABLE_STATSプロシージャは、一般統計を生成します。NUMBER
、INTEGER
、DATE
またはTIMESTAMP
型の列についてヒストグラム統計ではなく一般統計が使用可能な場合に、batch_size
をPRIMARY_KEY_RANGE
として指定すると、Workspace Managerシステム・パラメータNUMBER_OF_COMPRESS_BATCHES
を使用してバッチ数が計算されます。統計の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。
auto_commit
がTRUE
であり、オープン状態のトランザクションがある場合、ユーザーが、修正が必要なすべての表(トリガーによって変更される表なども含む)に対する十分な権限を持たなければ、例外が発生します。また、ユーザーが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 |
影響を受ける行を識別する 副問合せの場合を除き、
|
使用上の注意
このプロシージャは、1つ以上のLOB列を含むバージョン対応表にのみ使用します。DBMS_LOBパッケージを使用して実行される更新ではバージョニング・ビューに対してINSTEAD OF
トリガーが起動されないため、CopyForUpdateプロシージャを使用する必要があります。Workspace Managerは、バージョニング・ビューに対するINSTEAD OF
トリガーを作成して、copy-on-writeセマンティクスを実装します。(非LOB列の場合は、更新操作を直接実行でき、トリガーも機能します。)
例
次の例は、表TABLE1
のDOC_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 CreateSavepoint
現行バージョンのセーブポイントを作成します。
構文
DBMS_WM.CreateSavepoint( workspace IN VARCHAR2, savepoint_name IN VARCHAR2, description IN VARCHAR2 DEFAULT NULL, auto_commit IN BOOLEAN DEFAULT TRUE);
パラメータ
表4-17 CreateSavepointプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
セーブポイントを作成する作業領域の名前。名前は大/小文字が区別されます。 |
savepoint_name |
作成するセーブポイントの名前。名前は大/小文字が区別されます。 |
description |
作成するセーブポイントの定義 |
auto_commit |
ブール値(
|
使用上の注意
セーブポイントに対応付けられた明示的な権限はありません。作業領域に対するアクセス権を取得しているすべてのユーザーは、作業領域内にセーブポイントを作成できます。
作業領域内にユーザーがいる間、このプロシージャを実行できます。オープン状態のデータベース・トランザクションがある場合がありますが、これらのトランザクションでバージョン対応表を変更していない場合のみです。
このプロシージャの実行中、現行の作業領域はREAD_ONLY
モードにアクセス制限されます。詳細は、作業領域のアクセス制限および制限解除を参照してください。
次の条件に1つでも該当する場合は、例外が発生します。
-
ユーザーが作業領域内の最新バージョンにいない(たとえば、ユーザーがGotoDateプロシージャをコールした場合)。
-
workspace
が存在しない。 -
savepoint_name
がすでに存在する。 -
auto_commit
がTRUE
であり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。 -
ユーザーが、指定された作業領域に移動するための権限を取得していない。
例
次の例は、NEWWORKSPACE
作業領域内にSavepoint1
という名前のセーブポイントを作成します。
EXECUTE DBMS_WM.CreateSavepoint ('NEWWORKSPACE', 'Savepoint1');
4.18 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-18 CreateWorkspaceプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
作業領域の名前。この名前は、大/小文字が区別され、一意である(他に同じ名前の作業領域がない)必要があります。名前には次の文字を使用しないでください: |
isrefreshed |
ブール値(
|
description |
作業領域に関する説明。 |
auto_commit |
ブール値(
|
使用上の注意
新しい作業領域は、現行の作業領域の子です。セッションが明示的に作業領域内に入らなかった場合、それはLIVE
データベース作業領域内にあり、新しい作業領域はLIVE
作業領域の子です。(データベースの作業領域階層の詳細は、作業領域階層を参照してください。)
作業領域の所有者は、CreateWorkspaceプロシージャ(またはCreateWorkspaceプロシージャを実行した別のプロシージャ)を実行したユーザーであり、作業領域作成時にアクティブな権限を所有していたユーザーではありません。
暗黙的セーブポイントは、現在の作業領域の現在のバージョンで作成されます。(現在のバージョンは、必ずしも現在の作業領域の最新バージョンではありません。)セーブポイント(明示的および暗黙的)の詳細は、セーブポイントの使用を参照してください。
このプロシージャの実行中、現行の作業領域はREAD_ONLY
モードにアクセス制限されます。詳細は、作業領域のアクセス制限および制限解除を参照してください。
このプロシージャは、作成された作業領域に暗黙的に移動しません。作業領域に移動するには、GotoWorkspaceプロシージャを使用します。
次のルールは、連続的にリフレッシュされる作業領域(isrefreshed
値はTRUE
)に適用されます。
-
連続的にリフレッシュされる作業領域を作成するには、セッションがその作業領域の最新バージョンである必要があります。
-
連続的にリフレッシュされる作業領域については、SetLockingOFFプロシージャまたはSetWorkspaceLockModeOFFプロシージャを使用して、ロックをオフにすることはできません。
次の条件に1つでも該当する場合は、例外が発生します。
-
workspace
がすでに存在する。 -
auto_commit
がTRUE
であり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。 -
ユーザーが、作業領域を作成するための権限を取得していない。
例
次の例は、データベース内にNEWWORKSPACE
という名前の作業領域を作成します。
EXECUTE DBMS_WM.CreateWorkspace ('NEWWORKSPACE');
4.19 Delete_Topo_Geometry_Layer
トポロジ・ジオメトリ・レイヤーをトポロジから削除します。
構文
DBMS_WM.Delete_Topo_Geometry_Layer( topology IN VARCHAR2, table_name IN VARCHAR2, column_name IN VARCHAR2);
パラメータ
表4-19 Delete_Topo_Geometry_Layerプロシージャのパラメータ
パラメータ | 説明 |
---|---|
topology |
指定した列内のトポロジ・ジオメトリを含むトポロジ・ジオメトリ・レイヤーから削除するトポロジを指定します。このトポロジは、SDO_TOPO.CREATE_TOPOLOGYプロシージャを使用して作成する必要があります。 |
table_name |
|
column_name |
トポロジから削除するトポロジ・ジオメトリ・レイヤー内でトポロジ・ジオメトリを含んでいる( |
使用上の注意
このプロシージャは、Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイドに記載されているSDO_TOPO.DELETE_TOPO_GEOMETRY_LAYERプロシージャと構文および意味が同じです。ただし、トポロジのバージョン対応のフィーチャー表からトポロジ・ジオメトリ・レイヤーを削除する場合は、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_name
がtopology
内の唯一のフィーチャー表の場合は、例外が発生します。
例
次の例は、CITY_DATA
トポロジからLAND_PARCELS
表のFEATURE
列のジオメトリに基づくトポロジ・ジオメトリ・レイヤーを削除します。
EXECUTE DBMS_WM.Delete_Topo_Geometry_Layer('CITY_DATA', 'LAND_PARCELS', 'FEATURE');
4.20 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-20 DeleteSavepointプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
セーブポイントが作成された作業領域の名前。名前は大/小文字が区別されます。 |
savepoint_name |
削除するセーブポイントの名前。名前は大/小文字が区別されます。 |
compress_view_wo_overwrite |
ブール値(
|
auto_commit |
ブール値(
|
commit_in_batches |
ブール値(
|
batch_size |
|
使用上の注意
セーブポイントが不要になった場合(たとえば、そのセーブポイントに移動またはロールバックする必要がない場合)は、それを削除できます。
セーブポイントの削除は、次の理由から有効です。
-
セーブポイントを削除した後、セーブポイント名を再利用できます。(既存のセーブポイントと同じ名前のセーブポイントは作成できません。)
-
Workspace Managerの操作の実行時パフォーマンスが向上します。
-
Workspace Manager構造に使用されるディスク記憶域が減ります。
このプロシージャの実行中、現行の作業領域はNO_ACCESS
モードにアクセス制限されます。詳細は、作業領域のアクセス制限および制限解除を参照してください。
セーブポイントを削除するには、WM_ADMIN
システム権限を持っているか、作業領域またはセーブポイントの所有者である必要があります。
セッションにオープン状態のデータベース・トランザクションがある場合、またはユーザーがGotoDate操作、または作業領域内のセーブポイントを指定したGotoSavepoint操作を実行した場合、このプロシージャは実行できません。
batch_size
に値PRIMARY_KEY_RANGE
を指定するには、まず主キーの最初の列についてヒストグラム統計(NUMBER
、INTEGER
、DATE
、TIMESTAMP
、CHAR
またはVARCHAR2
型の列の場合)あるいは一般統計(NUMBER
、INTEGER
、DATE
またはTIMESTAMP
型の列の場合)を生成する必要があります。DBMS_STATS.GATHER_TABLE_STATSプロシージャは、一般統計を生成します。NUMBER
、INTEGER
、DATE
またはTIMESTAMP
型の列についてヒストグラム統計ではなく一般統計が使用可能な場合に、batch_size
をPRIMARY_KEY_RANGE
として指定すると、Workspace Managerシステム・パラメータNUMBER_OF_COMPRESS_BATCHES
を使用してバッチ数が計算されます。統計の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。
次の条件に1つでも該当する場合は、例外が発生します。
-
workspace
(作業領域がLIVE
の場合は除く)にセッションが1つ以上ある。 -
workspace
が存在しない。 -
savepoint_name
が存在しない。 -
savepoint_name
は、削除可能なセーブポイントではない。(削除可能なセーブポイントの詳細は、セーブポイントの使用を参照してください。) -
auto_commit
がTRUE
であり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。 -
ユーザーが、指定された作業領域に移動するための権限を取得していない。
例
次の例は、NEWWORKSPACE
作業領域内のSavepoint1
という名前のセーブポイントを削除します。
EXECUTE DBMS_WM.DeleteSavepoint ('NEWWORKSPACE', 'Savepoint1');
4.21 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-21 DisableVersioningプロシージャのパラメータ
パラメータ | 説明 |
---|---|
table_name |
表の名前、Oracle Spatial and Graphトポロジ( |
force |
ブール値(
|
ignore_last_error |
ブール値(
|
isTopology |
ブール値(
|
keepWMValid |
ブール値(
|
undo_space |
文字列 |
使用上の注意
このプロシージャは、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つまたは複数)に対するバージョニングを使用禁止にする必要があります。
表がバージョン対応でない場合は、例外が発生します。
Workspace ManagerによるOracle Spatial and Graphトポロジ内の表のサポートの詳細は、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.22 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-22 EnableVersioningプロシージャのパラメータ
パラメータ | 説明 |
---|---|
table_name |
表の名前、Oracle Spatial and Graphトポロジ( |
hist |
|
isTopology |
ブール値(
|
validTime |
ブール値(
|
undo_space |
|
validTimeRange |
オブジェクト・タイプ |
使用上の注意
バージョン対応の表には、定義済の主キーが必要です。主キーをコンポジット(複数列)主キーにすることもできます。
表のバージョニングを有効化できるのは、表の所有者またはWM_ADMIN
システム権限を持つユーザーのみです。
バージョン対応表およびバージョン対応表を所有するユーザーは削除できません。まず、関連する表(1つまたは複数)に対するバージョニングを使用禁止にする必要があります。
SYS
が所有する表はバージョン対応にできません。また、バージョン対応表はSYS
が所有する関連索引およびトリガーを持つことができません。
リダクション・ポリシーが定義されている表は、バージョン対応にはできません。
非表示列がある表はバージョン対応にはできません。
遅延可能制約がある表は、バージョン対応にはできません。
「デフォルトで生成される」ID列がある表は、バージョン対応にはできません。ただし、「default 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年より前に発生したすべての履歴を削除します。
Workspace ManagerによるOracle Spatial and Graphトポロジ内の表のサポートの詳細は、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.23 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-23 Exportプロシージャのパラメータ
パラメータ | 説明 |
---|---|
table_name |
エクスポートするデータを含む表の名前。この名前は大/小文字が区別されません。 |
staging_table |
エクスポートするデータを保持する表の名前。25文字以下である必要があります。この名前は大/小文字が区別されません。表が存在しない場合は、指定した名前とWorkspace Managerのエクスポート操作およびインポート操作に適した構造を持つ新規の表が作成されます。(ステージング表の詳細は、「使用上の注意」を参照してください。) |
workspace |
データのエクスポート元となる作業領域の名前。名前は大/小文字が区別されます。 |
where_clause |
エクスポートする行を識別する 副問合せの場合を除き、
|
export_scope |
エクスポート操作の有効範囲(データ量)。
|
after_savepoint_name |
セーブポイントの名前。このセーブポイントの後に挿入、更新または削除されたデータのみがエクスポートされます。
セーブポイント関連と時点関連のパラメータに関するガイドラインは、「使用上の注意」を参照してください。 |
as_of_savepoint_name |
セーブポイント名。セーブポイントの作成時点で作業領域に存在するデータのみがエクスポートされます。
セーブポイント関連と時点関連のパラメータに関するガイドラインは、「使用上の注意」を参照してください。 |
after_instant |
日付/時刻指定。この時点の後に挿入、更新または削除されたデータのみがエクスポートされます。
セーブポイント関連と時点関連のパラメータに関するガイドラインは、「使用上の注意」を参照してください。 |
as_of_instant |
日付/時刻指定。この時点で作業領域に存在していたデータのみがエクスポートされます。
セーブポイント関連と時点関連のパラメータに関するガイドラインは、「使用上の注意」を参照してください。 |
versioned_db |
ブール値(
|
overwrite_existing_data |
ブール値(
|
auto_commit |
ブール値(
|
使用上の注意
バージョン対応表table_name
のwhere_clause
、export_scope
パラメータおよびworkspace
内の時間またはセーブポイント関連パラメータを満たすデータが、すべてステージング表(staging_table
パラメータ)にエクスポートされます。
エクスポートされるデータの各行は、workspace
で挿入、更新、または削除される対象(つまり、変更対象のデータ)とみなされるか、workspace
で変更されていない一方でそこで表示できるデータ(つまり、祖先データ)とみなされます。データがLIVE
作業領域からエクスポートされる場合は、すべてが変更済データです。作業領域が作成され、そこでバージョニングされたデータがないときにExportプロシージャがコールされる場合、データはすべて祖先データです。
バージョン対応表からデータを初めてエクスポートするとき、ステージング表が存在していない必要があります。つまり、ステージング表の作成を試行しないでください。かわりに、staging_table
パラメータに対して指定した名前を使用してステージング表がプロシージャによって自動作成されるようにします。ステージング表には、元の表(table_name
パラメータ)のすべての列が含まれ、さらにWorkspace Managerで使用される一部の列も含まれます。
ステージング表の作成後は、元の表に対して列名やデータ型の変更または主キー制約の変更や削除などのDDL操作を実行していなければ、ステージング表を元の表からの後続のエクスポート操作で使用できます。元の表に対してこの種の変更を行った場合は、Workspace Managerで新規ステージング表を作成できるように、Exportプロシージャをコールする前にステージング表を削除してください。(既存のステージング表のデータを上書きする場合は、overwrite_existing_data
もTRUE
として指定する必要があります。)
ステージング表は、現行のユーザーのスキーマに存在する必要があります。また、他のスキーマにある場合、現行のユーザーにはCREATE ANY TABLE
権限とINSERT ANY TABLE
権限が必要です。
セーブポイント関連および時点関連パラメータafter_savepoint_name
、as_of_savepoint_name
、after_instant
、as_of_instant
のうち、1つのみを指定することをお薦めします。after_savepoint_name
とafter_instant
を指定すると、この2つのパラメータの相互作用により複雑な結果になる可能性があります。パラメータの組合せafter_savepoint_name
とas_of_savepoint_name
、after_instant
とas_of_instant
またはas_of_savepoint_name
とas_of_instant
は指定できません。
versioned_db
がTRUE
の場合、ステージング表には、ユーザーが定義したすべての列に加えて、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_data
がFALSE
で、エクスポートする必要のあるデータがすでにstaging_table
に存在する。 -
auto_commit
がTRUE
であり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。
インポートおよびエクスポートの考慮点も参照してください。
例
次の例では、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.24 Export_Schemas
Workspace Managerに関連するすべてのものを含むダンプ・ファイルを作成します。Oracle Data Pumpエクスポート・ユーティリティを使用します。
構文
DBMS_WM.Export_Schemas( job_name IN VARCHAR2, alt_schema IN VARCHAR2 DEFAULT 'WMSYS_N', ignore_last_error IN BOOLEAN DEFAULT FALSE);
パラメータ
表4-24 Export_Schemasプロシージャのパラメータ
パラメータ | 説明 |
---|---|
job_name |
エクスポート操作に使用するData Pumpジョブの名前。 |
alt_schema |
Workspace Managerメタデータの一時的な格納用に使用するデータベース・スキーマの名前。デフォルトは |
ignore_last_error |
ブール値(
|
使用上の注意
注意:
DBMS_WM.Export_Schemasは、Oracle Cloudでは実行できません。ダンプ・ファイルを作成するには、ローカル・ファイル・システムにアクセスする必要があり、クラウド内のユーザーはこれにアクセスできないためです。
このプロシージャは、バージョン対応表またはバージョン対応表の参照整合性制約の親表、および内部Workspace Managerメタデータを含むスキーマすべてを含むダンプ・ファイルを作成します。含まれるスキーマでは、スキーマ内のすべてのオブジェクトおよびデータがダンプ・ファイルに組み込まれます。これは、Workspace Managerに関連するオブジェクトだけではありません。他のスキーマはすべて除外されます。
このプロシージャは、すでに存在するData Pumpエクスポート・ジョブを使用します。DBMS_DATAPUMP.OPEN
プロシージャを使用してこのジョブを作成するときは、operation
パラメータをEXPORT
に設定し、mode
パラメータをSCHEMA
に設定する必要があります。また、ダンプ・ファイルおよびログ・ファイルは、DBMS_WM.Export_Schemas
をコールする前に指定する必要があります。エクスポートされる内容を変更または制限するプロシージャ(DBMS_DATAPUMP.METADATA_FILTER
など)は、このジョブでは実行しないでください。SYSDBA権限を使用しているときに、Data Pumpジョブは作成しないでください。
WMSYSスキーマは、Oracle Data Pumpエクスポート・ユーティリティでエクスポートできないため、一時的なスキーマに必要なデータの一部を保持する必要があります。このスキーマは、alt_schema
パラメータで指定しますが、このプロシージャをコールする前には存在していない必要があります。このスキーマは、生成されたダンプ・ファイル内に組み込まれるため、ターゲット・データベースに存在していないスキーマである必要があります。
Data Pumpユーティリティの使用方法の詳細は、Oracle Databaseユーティリティを参照してください。
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静的データ・ディクショナリ・ビューに存在していれば、指定された元のData Pumpジョブが引き続き使用されます(新しいジョブを作成する必要はありません)。ただし、実行するSQL文で使用する元のジョブが存在しない場合は、ignore_last_error
パラメータをTRUE
に設定し、Export_Schemasプロシージャを実行する必要があります。これが成功した後、Export_Schemasプロシージャを再度実行してください。
全データベース・エクスポートまたはDBMS_WM.Export_Schemasプロシージャを使用してバージョン対応トポロジをエクスポートする前に、次の操作を実行する必要があります。
-
トポロジの所有者としてデータベースに接続します。
-
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.25 FindRICSet
参照整合性制約の関係により、指定した表とともにバージョン対応にする必要のある表を検索します。
構文
DBMS_WM.FindRICSet( table_name IN VARCHAR2, result_table IN VARCHAR2);
パラメータ
表4-25 FindRICSetプロシージャのパラメータ
パラメータ | 説明 |
---|---|
table_name |
参照整合性制約の関係により、一緒にバージョン対応にする必要のある他のすべての表を検索する表の名前。この名前は大/小文字が区別されません。 |
result_table |
結果を保持する表の名前。この名前は大/小文字が区別されません。 この表には、それぞれ |
使用上の注意
Workspace Managerには、参照整合性制約に関連するいくつかの考慮事項があります。詳細は、参照整合性のサポートを参照してください。場合によっては、表をバージョン対応にする前に、その表に影響する参照整合性制約が適用される他の表をバージョン対応にする必要があります。FindRICSet
プロシージャを使用すると、該当する他の表をすべて検索できます。
結果を表示するには、このプロシージャをコールする前にSET SERVEROUTPUT ON
文を使用します。
結果表が現行のユーザーのスキーマ内にない場合は、次の要件が適用されます。
-
結果表が存在しない場合、現行のユーザーは
CREATE ANY TABLE
権限を取得している必要があります。 -
結果表が存在する場合、現行のユーザーは表への挿入に必要な権限を取得している必要があります。
次の条件に1つでも該当する場合は、例外が発生します。
-
table_name
が存在しない。 -
result_table
が存在するが、有効な形式ではない。 -
result_table
が存在し、現行のユーザーは表への挿入に必要な権限を取得していない。 -
result_table
が存在せず、現行のユーザーのスキーマ以外のスキーマに指定されており、現行のユーザーはCREATE ANY TABLE
権限を取得していない。
例
次の例では、EMPLOYEES
およびDEPARTMENTS
という2つの表を作成します。これらの表では、DEPARTMENTS.MANAGER_ID
に、EMPLOYEES.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.26 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-26 FreezeWorkspaceプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
作業領域の名前。名前は大/小文字が区別されます。 |
session_duration |
ブール値(
|
freezemode |
アクセス制限された作業領域のモード。次の値のいずれかを指定する必要があります。
|
freezewriter |
作業領域内で変更を行うことができるユーザー。 |
force |
ブール値(
|
使用上の注意
session_duration
パラメータを含まないプロシージャ構文を指定することは、このパラメータにFALSE
を指定することと同じです。つまり、FreezeWorkspaceプロシージャをコールしたセッションがデータベースから切断された場合に、作業領域へのアクセス制限は解除されません。
次の条件に1つでも該当する場合、操作が正常に実行されません。
-
workspace
がすでにアクセス制限されている(force
がTRUE
の場合は除く)。 -
workspace
内にセッションがあり、freezemode
がNO_ACCESS
に指定されている(または、デフォルトでこの値になっている)。 -
session_duration
がFALSEに、freezemode
が1WRITER_SESSION
に指定されている。
freezemode
がREAD_ONLY
または1WRITER
であり、アクティブなデータベース・トランザクションがある場合は、作業領域をアクセス制限できません。
次の条件に1つでも該当する場合は、作業領域をアクセス制限できます。
-
指定された作業領域の所有者である。
-
指定された作業領域に対する
WM_ADMIN
システム権限、FREEZE_ANY_WORKSPACE
権限またはFREEZE_WORKSPACE
権限を取得している。
LIVE
作業領域は、freezemode
がREAD_ONLY
または1WRITER
の場合にのみ、アクセス制限できます。
FreezeWorkspaceによる処理を元に戻すには、UnfreezeWorkspaceプロシージャを使用します。
例
次の例は、NEWWORKSPACE
作業領域をアクセス制限します。
EXECUTE DBMS_WM.FreezeWorkspace ('NEWWORKSPACE');
4.27 GetBulkLoadVersion
BeginBulkLoadingプロシージャのコールとSQL*Loader制御ファイルで指定できるバージョン番号を戻します。
注意:
Oracle Databaseリリース12.1では、このファンクションは必要ありません。このファンクションは、常にNULL値を戻します。
構文
DBMS_WM.GetBulkLoadVersion( workspace IN VARCHAR2, savepoint_var IN VARCVHAR2 DEFAULT 'LATEST') RETURN INTEGER;
パラメータ
表4-27 GetBulkLoadVersionファンクションのパラメータ
パラメータ | 説明 |
---|---|
workspace |
バルク・ロードのバージョンを戻す作業領域の名前。名前は大/小文字が区別されます。 |
savepoint_var |
データをバルク・ロードする作業領域内のバージョン。
|
使用方法
Oracle Databaseリリース12.1では、このファンクションは必要ありません。このファンクションは、常にNULL値を戻します。BeginBulkLoadingプロシージャは、作業領域名とオプションのセーブポイント名に基づいて、バルク・ロード・バージョンを自動的に決定します。(ただし、以前のリリースで有効なバルク・ロード・プロセスは引き続きサポートされます。)
バージョン対応表へのデータのバルク・ロードを開始する前に、BeginBulkLoadingプロシージャをコールする必要があります。バルク・ロード・セッションを終了するには、CommitBulkLoadingプロシージャ(データのロードによる変更をコミットする場合)またはRollbackBulkLoadingプロシージャ(データのロードによる変更をロールバックする場合)をコールする必要があります。Workspace Managerでのバルク・ロードの詳細は、バージョン対応表へのバルク・ロードを参照してください。
次の条件に1つでも該当する場合は、例外が発生します。
-
workspace
が存在しない。 -
savepoint_var
が有効な値ではない。 -
savepoint_var
はROOT_VERSION
であるが、workspace
がLIVE
ではない。
例
次の例は、W1
作業領域のバルク・ロード・バージョン番号を取得し、その作業領域内でEMP
表へのバルク・ロード操作を開始します。
DECLARE version INTEGER; BEGIN SELECT DBMS_WM.GetBulkLoadVersion ('W1') INTO version FROM DUAL; DBMS_WM.BeginBulkLoading ('EMP', 'W1', version); END; /
4.28 GetConflictWorkspace
SetConflictWorkspaceプロシージャを実行したセッションの作業領域の名前を戻します。
構文
DBMS_WM.GetConflictWorkspace() RETURN VARCHAR2;
パラメータ
なし。
使用上の注意
SetConflictWorkspaceプロシージャが実行されていない場合は、現行の作業領域の名前が戻されます。
例
次の例は、セッションがSetConflictWorkspaceプロシージャを実行した作業領域の名前を表示します。
SELECT DBMS_WM.GetConflictWorkspace FROM DUAL; GETCONFLICTWORKSPACE ----------------------------------------------------------------------------- B_focus_2
4.29 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.30 GetLockMode
現行のセッションのロック・モードを戻します。これによって、バージョン対応行、および前回のバージョン内の対応する行にアクセスできるかどうかが決まります。
構文
DBMS_WM.GetLockMode() RETURN VARCHAR2;
パラメータ
なし。
使用上の注意
このファンクションは、E
、S
、C
またはNULL
を戻します。
-
E
(排他)、S
(共有)およびC
(引継ぎ)の詳細は、SetLockingONプロシージャのlockmode
パラメータの説明を参照してください。 -
NULL
は、ロック操作が無効であることを示します。(SetLockingOFFプロシージャをコールすると、この設定になります。)
Workspace Managerのロック操作の詳細は、Workspace Managerでのロック管理を参照してください。また、SetLockingONプロシージャおよびSetLockingOFFプロシージャの説明も参照してください。
例
次の例は、セッションのロック・モードを表示します。
SELECT DBMS_WM.GetLockMode FROM DUAL; GETLOCKMODE -------------------------------------------------------------------------------- C
4.31 GetMultiWorkspaces
バージョン対応表の複数作業領域ビューで参照できる作業領域の名前を戻します。
構文
DBMS_WM.GetMultiWorkspaces() RETURN VARCHAR2;
パラメータ
なし。
使用上の注意
このプロシージャは、複数作業領域ビュー(xxx_MW Viewsを参照)で参照できる作業領域の名前を戻します。
複数作業領域ビューで参照できる作業領域がない場合は、NULL
が戻されます。複数の作業領域名が戻される場合は、名前がカンマで区切られます(たとえば、workspace1,workspace2,workspace3
)。
複数作業領域ビューで作業領域を表示するには、SetMultiWorkspacesプロシージャを使用します。
例
次の例は、複数作業領域ビューで参照できる作業領域の名前を表示します。
SELECT DBMS_WM.GetMultiWorkspaces FROM DUAL;
4.32 GetOpContext
現行のセッションに対する現行の操作のコンテキストを戻します。
構文
DBMS_WM.GetOpContext() RETURN VARCHAR2;
パラメータ
なし。
使用上の注意
このファンクションは、次の値のいずれかを戻します。
-
DML
: 現行の操作は、ユーザーが実行したデータ操作言語(DML)によって開始される操作です。 -
MERGE_REMOVE
: 現行の操作は、remove_workspace
パラメータをTRUE
に設定してMergeWorkspaceプロシージャをコールするか、remove_data
パラメータをTRUE
に設定してMergeTableプロシージャをコールすることによって開始されています。 -
MERGE_NOREMOVE
: 現行の操作は、remove_workspace
パラメータをFALSE
に設定してMergeWorkspaceプロシージャをコールするか、remove_data
パラメータをFALSE
に設定してMergeTableプロシージャをコールすることによって開始されています。
戻り値は、現行の操作に基づいて適切な処置を行うために、ユーザー定義トリガーで使用できます。
例
次の例は、現行の操作のコンテキストを表示します。
SELECT DBMS_WM.GetOpContext FROM DUAL; GETOPCONTEXT -------------------------------------------------------------------------------- DML
4.33 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-28 GetOriginalDDLプロシージャのパラメータ
パラメータ | 説明 |
---|---|
table_id |
表を作成するために元のDDLを戻す表の名前。この名前は大/小文字が区別されません。 |
ddl_stmts |
表と索引、トリガーおよび表の権限を作成するための元のDDL文。
|
ddl_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.34 GetPhysicalTableName
バージョン対応表について物理表の名前(<table_name>_LT形式)を戻します。
構文
DBMS_WM.GetPhysicalTableName( table_owner IN VARCHAR2, table_name IN VARCHAR2) RETURN VARCHAR2;
パラメータ
表4-29 GetPhysicalTableNameファンクションのパラメータ
パラメータ | 説明 |
---|---|
table_owner |
|
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.35 GetPrivs
指定された作業領域に対して現行のユーザーが取得しているすべての権限のリストを戻します。このリストでは、権限がカンマで区切られます。
構文
DBMS_WM.GetPrivs( workspace IN VARCHAR2) RETURN VARCHAR2;
パラメータ
表4-30 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.36 GetSessionInfo
現行の作業領域およびセッション・コンテキストに関する情報を取得します。
構文
DBMS_WM.GetSessionInfo( workspace OUT VARCHAR2, context OUT VARCHAR2, context_type OUT VARCHAR2);
パラメータ
表4-31 GetSessionInfoプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
現行のセッションがある作業領域の名前。 |
context |
作業領域の現在のセッションのコンテキスト。 |
context_type |
作業領域内の現行のセッション・コンテキストの種類。値には |
使用上の注意
このプロシージャは、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.37 GetSystemParameter
Workspace Managerシステム・パラメータの値を戻します。
構文
DBMS_WM.GetSytstemParameter( name IN VARCHAR2) RETURN VARCHAR2;
パラメータ
表4-32 GetSystemParameterプロシージャのパラメータ
パラメータ | 説明 |
---|---|
name |
値を設定するWorkspace Managerシステム・パラメータの名前。この名前には、 |
使用上の注意
Workspace Managerのシステム・パラメータの詳細は、Workspace Managerのシステム・パラメータを参照してください。
name
値が有効でない場合は、例外が発生します。
例
次の例は、複数の親を持つ作業領域(複数の親を持つ作業領域を参照)が許可されるかどうかをチェックします。
SELECT DBMS_WM.GetSystemParameter ('ALLOW_MULTI_PARENT_WORKSPACES') FROM DUAL; DBMS_WM.GETSYSTEMPARAMETER('ALLOW_MULTI_PARENT_WORKSPACES') -------------------------------------------------------------------------------- ON
4.38 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.39 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.40 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.41 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.42 GetWorkspace
セッションの現行の作業領域を戻します。
構文
DBMS_WM.GetWorkspace() RETURN VARCHAR2;
パラメータ
なし。
使用上の注意
なし。
例
次の例は、セッションの現行の作業領域を表示します。
SELECT DBMS_WM.GetWorkspace FROM DUAL; GETWORKSPACE -------------------------------------------------------------------------------- B_focus_2
4.43 GotoDate
現行の作業領域内の指定された日付および時刻またはそれに近い時点のセーブポイントに移動します。
構文
DBMS_WM.GotoDate( in_date IN VARCHAR2, fmt IN VARCHAR2 DEFAULT 'mmddyyyyhh24miss', nlsparam IN VARCHAR2 DEFAULT NULL, tsWtz IN BOOLEAN DEFAULT FALSE);
パラメータ
表4-33 GotoDateプロシージャのパラメータ
パラメータ | 説明 |
---|---|
in_date |
作業領域の読取り専用ビューの日付および時刻。(詳細は、「使用上の注意」を参照してください。)
|
fmt |
日付形式オプションは、 デフォルト: |
nlsparam |
グローバリゼーション・サポートのオプション。オプションは、 |
tsWtz |
タイム・ゾーン・フラグ付きタイムスタンプ。ブール値(
|
使用上の注意
指定された日付および時刻、またはそれに近い時点の現行の作業領域に対する読取り専用ビューが表示されます。正確な時点は、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
設定の影響を示します。次の一連のイベントを想定してください。
-
行内の
MANAGER_NAME
値はAdams
です。 -
セーブポイント
SP1
が作成されます。 -
MANAGER_NAME
値がBaxter
に変更されます。 -
(手順7で)
in_date
に指定される時点に到達します。 -
MANAGER_NAME
値がChang
に変更されます。(したがって、最初のセーブポイントと2番目のセーブポイントの間に、in_date
の前後で値が変更されています。) -
セーブポイント
SP2
が作成されます。 -
手順4で発生した時点を
in_date
に指定して、GotoDate操作が実行されます。
前述の使用例では、次のことに注意してください。
-
有効な履歴オプションが
VIEW_WO_OVERWRITE
である場合、手順7の後のMANAGER_NAME
値はBaxter
です。手順5の後、バージョン対応表には3つの行があり、それぞれ異なるMANAGER_NAME
値(Adams
、Baxter
、Chang
)が含まれます。これは、行の新しいコピーでそれぞれの変更が行われるためです。 -
有効な履歴オプションが
VIEW_W_OVERWRITE
である場合、手順7以降は値が表示されません。手順3および5の更新は行の同一コピーに対して行われ、手順3の更新は手順5の更新で上書きされます。その結果、手順5以降のバージョン対応表には、MANAGER_NAME
値Adams
およびChang
を持つ2行が含まれます。特定時点で有効だったMANAGER_NAME
値(Baxter
)が上書きされているため、行は参照できません。 -
有効な履歴オプションが
NONE
である場合、手順7の後のMANAGER_NAME
値はChang
です。これは、指定の時点の後の最初のセーブポイントがSP2
であるためです。手順5の後、バージョン対応表には、MANAGER_NAME
値Adams
およびChang
を持つ2行が含まれます。
GotoDateプロシージャは、ユーザーが作業領域内に存在する間に実行する必要があります。このプロシージャに対応付けられた明示的な権限はありません。
例
次の例は、現在有効な履歴オプションによって、2004年6月8日の午前0時時点またはそれに近い時点に移動します。
EXECUTE DBMS_WM.GotoDate ('08-JUN-04', 'DD-MON-YY');
4.44 GotoSavepoint
現行の作業領域内の指定されたセーブポイントに移動します。
構文
DBMS_WM.GotoSavePoint( savepoint_name IN VARCHAR2 DEFAULT 'LATEST');
パラメータ
表4-34 GotoSavepointプロシージャのパラメータ
パラメータ | 説明 |
---|---|
savepoint_name |
セーブポイントの名前。名前は大/小文字が区別されます。 |
使用上の注意
セーブポイント作成時の作業領域の読取り専用ビューが表示されます。このプロシージャは、RollbackToSPプロシージャをコールして特定のセーブポイントにロールバックし、そのセーブポイント以降のすべての行を削除する前に、異なるセーブポイントの作業領域を調べる場合に有効です。
この操作は、ユーザーが作業領域内に存在する間に実行できます。この操作に対応付けられた明示的な権限はありません。
セーブポイントにロールバックしない場合は、パラメータをNULLに設定してGotoSavepointプロシージャをコールすると、作業領域内の現在アクティブなバージョンに移動できます。(これによって、GotoWorkspaceプロシージャをコールして作業領域を指定した場合と同様の結果が得られます。)
LATEST
セーブポイントなどのセーブポイントの詳細は、セーブポイントの使用を参照してください。
例
次の例は、Savepoint1
という名前のセーブポイントに移動します。
EXECUTE DBMS_WM.GotoSavepoint ('Savepoint1');
4.45 GotoWorkspace
現行のセッションを指定された作業領域に移動します。
構文
DBMS_WM.GotoWorkspace( workspace IN VARCHAR2);
パラメータ
表4-35 GotoWorkspaceプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
作業領域の名前。名前は大/小文字が区別されます。 |
使用上の注意
作業領域に移動すると、そこでデータに対する変更を行うことができます。
LIVEデータベースに移動するには、workspace
をLIVE
に指定します。ユーザー(自分自身を含む)が作業領域内にいる場合は多くの操作が禁止されるため、作成された作業領域に対して操作を実行する前にLIVE
作業領域に移動すると便利です。
次の条件に1つでも該当する場合は、例外が発生します。
-
workspace
が存在しない。 -
ユーザーが
workspace
に対するACCESS_WORKSPACE
権限を取得していない。 -
workspace
がNO_ACCESS
モードにアクセス制限されている(FreezeWorkspaceプロシージャを参照)。
例
次の例は、NEWWORKSPACE
作業領域内に移動する例です。ユーザーは、その作業領域内の最新バージョンで作業を開始します。
EXECUTE DBMS_WM.GotoWorkspace ('NEWWORKSPACE');
次の例は、LIVE
データベース作業領域内に移動する例です。デフォルトでは、データベースに接続したユーザーは、この作業領域内に置かれます。
EXECUTE DBMS_WM.GotoWorkspace ('LIVE');
4.46 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-36 GrantGraphPrivプロシージャのパラメータ
パラメータ | 説明 |
---|---|
priv_types |
権限を表す1つ以上のキーワードの文字列。(Workspace Managerの権限の詳細は、Workspace Managerでの権限管理を参照してください。)カンマを使用して権限キーワードを区切ります。使用可能なキーワードは、 |
leaf_workspace |
非循環有向グラフのリーフ作業領域の名前。(リーフ作業領域、非循環有向グラフ、および複数の親を持つ作業領域に関連するその他の概念の詳細は、複数の親を持つ作業領域を参照してください。)名前は大/小文字が区別されます。 |
grantee |
|
node_types |
権限を付与するノードのタイプを表す文字のリスト(カッコで囲み、カンマで区切る): |
grant_option |
|
auto_commit |
ブール値(
|
使用上の注意
このプロシージャとは対照的に、GrantWorkspacePriv は複数の親を持つグラフ作業領域以外の作業領域に対する作業領域レベルのWorkspace Manager権限を付与します。
ユーザーが複数のソースから権限を取得し、それらのソースのいずれかにその権限に対するGrant Optionがある場合、ユーザーもその権限に対するGrant Optionを取得します。たとえば、ユーザーSCOTT
にはgrant_option
をNO
に指定したACCESS_WORKSPACE
権限が付与されているが、PUBLIC
ユーザー・グループにはgrant_option
をYES
に指定したACCESS_WORKSPACE
権限が付与されていると想定します。ユーザーSCOTT
はPUBLIC
のメンバーであるため、ユーザー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_commit
がTRUE
であり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。
例
次の例は、ユーザーSmith
がNEWWORKSPACE
作業領域がリーフ作業領域である非循環有向グラフのすべてのタイプのノードにアクセスして、それらの作業領域内の変更をマージできるようにし、またSmith
がリーフ作業領域の2つの指定された権限を他のユーザーに付与できるようにします。
DBMS_WM.GrantGraphPriv ('ACCESS_WORKSPACE, MERGE_WORKSPACE', 'NEWWORKSPACE', 'Smith', 'YES');
4.47 GrantPrivsOnPolicy
指定されたOracle Label Security(OLS)ポリシーを含む表に対してEnableVersioningプロシージャをコールするために必要な権限を付与します。
構文
DBMS_WM.GrantPrivsOnPolicy( policy_name IN VARCHAR2);
パラメータ
表4-37 GrantPrivsOnPolicyプロシージャのパラメータ
パラメータ | 説明 |
---|---|
policy_name |
権限が付与される必要のあるポリシーの名前 |
使用上の注意
このプロシージャにより、OLSポリシーに対して必要な権限がWMSYSスキーマに付与されます。これらの権限は、作業領域操作を実行する際に必要です。同じポリシーによって保護される複数の表をバージョン対応にする必要がある場合、このプロシージャを実行する必要があるのは1回だけです。
例
次の例は、my_policy
というポリシーに対して必要な権限を付与します。
EXECUTE DBMS_WM.GrantPrivsOnPolicy('my_policy');
4.48 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-38 GrantSystemPrivプロシージャのパラメータ
パラメータ | 説明 |
---|---|
priv_types |
権限を表す1つ以上のキーワードの文字列。(Workspace Managerの権限の詳細は、Workspace Managerでの権限管理を参照してください。)カンマを使用して権限キーワードを区切ります。使用可能なキーワードは、 |
grantee |
|
grant_option |
|
auto_commit |
ブール値(
|
使用上の注意
このプロシージャとは対照的に、GrantWorkspacePriv プロシージャは、ANY
を含まないキーワードを使用して作業領域レベルのWorkspace Manager権限を付与し、workspace
パラメータを含みます。
ユーザーが複数のソースから権限を取得し、それらのソースのいずれかにその権限に対するGrant Optionがある場合、ユーザーもその権限に対するGrant Optionを取得します。たとえば、ユーザーSCOTT
にはgrant_option
をNO
に指定したACCESS_ANY_WORKSPACE
権限が付与されているが、PUBLIC
ユーザー・グループにはgrant_option
をYES
に指定したACCESS_ANY_WORKSPACE
権限が付与されていると想定します。ユーザーSCOTT
はPUBLIC
のメンバーであるため、ユーザー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
がデータベース内の有効なユーザーまたはロールでない。 -
ユーザーが
priv_types
を付与するための権限を取得していない。 -
auto_commit
がTRUE
であり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。
例
次の例は、ユーザーSmith
がデータベース内のすべての作業領域にアクセスできるようにしますが、Smith
がACCESS_ANY_WORKSPACE
権限を他のユーザーに付与することは許可しません。
EXECUTE DBMS_WM.GrantSystemPriv ('ACCESS_ANY_WORKSPACE', 'Smith', 'NO');
4.49 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-39 GrantWorkspacePrivプロシージャのパラメータ
パラメータ | 説明 |
---|---|
priv_types |
権限を表す1つ以上のキーワードの文字列。(Workspace Managerの権限の詳細は、Workspace Managerでの権限管理を参照してください。)カンマを使用して権限キーワードを区切ります。使用可能なキーワードは、 |
workspace |
作業領域の名前。名前は大/小文字が区別されます。 |
grantee |
|
grant_option |
|
auto_commit |
ブール値(
|
使用上の注意
このプロシージャとは対照的に、GrantSystemPrivプロシージャは、xxx_ANY_WORKSPACE形式(ACCESS_ANY_WORKSPACE
、MERGE_ANY_WORKSPACE
など)のキーワードを使用してシステム・レベルのWorkspace Manager権限を付与します。また、このプロシージャとは対照的に、GrantGraphPrivプロシージャは複数の親を持つグラフ作業領域に対する権限をユーザーおよびロールに付与します。
ユーザーが複数のソースから権限を取得し、それらのソースのいずれかにその権限に対するGrant Optionがある場合、ユーザーもその権限に対するGrant Optionを取得します。たとえば、ユーザーSCOTT
にはgrant_option
をNO
に指定したACCESS_WORKSPACE
権限が付与されているが、PUBLIC
ユーザー・グループにはgrant_option
をYES
に指定したACCESS_WORKSPACE
権限が付与されていると想定します。ユーザーSCOTT
はPUBLIC
のメンバーであるため、ユーザー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_commit
がTRUE
であり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。
例
次の例は、ユーザーSmith
がNEWWORKSPACE
作業領域にアクセスしてその作業領域内の変更をマージできるようにし、Smith
がNEWWORKSPACE
に対する2つの指定された権限を他のユーザーに付与することを許可します。
DBMS_WM.GrantWorkspacePriv ('ACCESS_WORKSPACE, MERGE_WORKSPACE', 'NEWWORKSPACE', 'Smith', 'YES');
4.50 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-40 Importプロシージャのパラメータ
パラメータ | 説明 |
---|---|
staging_table |
前にExportプロシージャを使用してエクスポートしたデータを保持する表の名前。この名前は大/小文字が区別されません。 |
to_table |
データのインポート先となる表の名前。この名前は大/小文字が区別されません。 |
to_workspace |
データをインポートする作業領域の名前。名前は大/小文字が区別されます。 |
from_workspace |
データのインポート元となる作業領域の名前。名前は大/小文字が区別されます。ステージング表にバージョニング情報が含まれている場合は、 |
where_clause |
インポートする行を識別する 副問合せの場合を除き、
|
import_scope |
インポート操作の有効範囲(データ量)。
|
ancestor_savepoint_workspace |
このパラメータを指定した場合は、 |
ancestor_savepoint_name |
このパラメータを指定した場合は、 |
apply_locks |
ブール値(
|
enforceUCFlag |
ブール値(
|
enforceRICFlag |
ブール値(
|
auto_commit |
ブール値(
|
使用上の注意
ステージング表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_name
がancestor_savepoint_workspace
内で有効なセーブポイントではない。 -
auto_commit
がTRUE
であり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。
インポートおよびエクスポートの考慮点も参照してください。
例
次の例は、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.51 Import_Schemas
Export_Schemasプロシージャによって作成されたダンプ・ファイルからWorkspace Managerインストール全体をインポートします。Oracle Data Pumpインポート・ユーティリティを使用します。
構文
DBMS_WM.Import_Schemas( job_name IN VARCHAR2, alt_schema IN VARCHAR2 DEFAULT 'WMSYS_N', ignore_last_error IN BOOLEAN DEFAULT FALSE);
パラメータ
表4-41 Import_Schemasプロシージャのパラメータ
パラメータ | 説明 |
---|---|
job_name |
インポート操作に使用するData Pumpジョブの名前。 |
alt_schema |
Workspace Managerメタデータの一時的な格納用に使用するデータベース・スキーマの名前。デフォルトは |
ignore_last_error |
ブール値(
|
使用上の注意
このプロシージャは、Export_Schemasプロシージャを使用して作成されたダンプ・ファイルを使用します。このプロシージャをコールする前、LIVE
を除くバージョン対応表または作業領域が存在しないことが必要です。ダンプ・ファイルに含まれるスキーマのすべてのオブジェクトがインポートされます。システム権限、作業領域権限、またはバージョン対応表の権限が、生成されたダンプ・ファイルに含まれていないユーザーに付与されている場合、このプロシージャをコールする前にそれらのスキーマを作成する必要があります。これを行わないと、権限は失われます。
このプロシージャは、すでに存在するData Pumpインポート・ジョブを使用します。DBMS_DATAPUMP.OPEN
プロシージャを使用してこのジョブを作成するときは、operation
パラメータをIMPORT
に設定し、mode
パラメータをFULL
に設定する必要があります。また、ダンプ・ファイルおよびログ・ファイルは、このプロシージャをコールする前に指定する必要があります。インポートされる内容を変更または制限するプロシージャ(DBMS_DATAPUMP.METADATA_FILTER
など)は、このジョブでは実行しないでください。SYSDBA権限を使用しているときに、Data Pumpジョブは作成しないでください。
alt_schema
パラメータで指定するスキーマは、このプロシージャをコールする前はに存在していない必要があります。また、これは、Export_Schemasプロシージャのコール時にalt_schema
に指定したものと同じスキーマにする必要があります。
Data Pumpユーティリティの使用方法の詳細は、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静的データ・ディクショナリ・ビューに存在していれば、指定された元のData Pumpジョブが引き続き使用されます(新しいジョブを作成する必要はありません)。ただし、実行する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.52 Initialize_After_Import
別のデータベースからインポートされたバージョン対応トポロジを作成(初期化)します。
構文
DBMS_WM.Add_Topo_Geometry_Layer( topology IN VARCHAR2, tg_layer_owner IN VARCHAR2 DEFAULT NULL);
パラメータ
表4-42 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プロシージャを実行する最後の手順とともに)次の操作を実行する必要があります。
-
ターゲット・データベース(ソース・データベースからエクスポートされるトポロジと同じ名前、構造およびデータを持つトポロジを作成するデータベース)に接続します。作成されるトポロジを所有するスキーマのユーザーとして接続します。
-
ターゲット・データベースに、.dmpファイルのトポロジと同じ名前を持つトポロジが格納されていないことを確認します。
-
全データベース・インポートまたはDBMS.Import_Schemasプロシージャのいずれかを使用してインポートを実行します。
-
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.53 IsWorkspaceOccupied
作業領域内にアクティブなセッションがあるかどうかを確認します。
構文
DBMS_WM.IsWorkspaceOccupied( workspace IN VARCHAR2) RETURN VARCHAR2;
パラメータ
表4-43 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.54 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-44 LockRowsプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
作業領域の名前。作業領域内の参照できる行の最新バージョンがロックされます。この作業領域内で行が変更されていない場合、ロックされたバージョンは親作業領域内にある可能性があります。名前は大/小文字が区別されます。
|
table_name |
ロックする行を含む表またはSpatial and Graphトポロジ( |
where_clause |
ロックする行を識別する 副問合せの場合を除き、
|
lock_mode |
ロックを設定するモード:
|
Xmin, Ymin |
Oracle Spatial and Graphトポロジの場合にのみ(トポロジ使用時のロックに関する考慮事項を参照)、行を含むウィンドウの左下隅のX座標値とY座標値がそれぞれロックされます。 |
Xmax, Ymax |
Oracle Spatial and Graphトポロジの場合にのみ(トポロジ使用時のロックに関する考慮事項を参照)、行を含むウィンドウの右上隅のX座標値とY座標値がそれぞれロックされます。 |
使用上の注意
このプロシージャは、すべての標準のOracleデータベース・ロック操作に加えて実行されるWorkspace Managerロック操作に影響します。Workspace Managerのロック操作の詳細は、Workspace Managerでのロック管理を参照してください。
このプロシージャは、Workspace Managerのロック操作が使用可能または使用禁止(SetLockingONプロシージャおよびSetLockingOFFプロシージャで決定)になるかには影響しません。
行のロックを解除するには、UnlockRowsプロシージャを使用します。
Workspace ManagerによるOracle Spatial and Graphトポロジ内の表のロックの詳細は、トポロジ使用時のロックに関する考慮事項を参照してください。
例
次の例は、NEWWORKSPACE
作業領域内にあるEMPLOYEES
表の行(last_name = 'Smith'
)をロックします。
EXECUTE DBMS_WM.LockRows ('NEWWORKSPACE', 'employees', 'last_name = ''Smith''');
4.55 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-45 MergeTableプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
作業領域の名前。名前は大/小文字が区別されます。 |
table_id |
親作業領域にマージする行を含む表または複数の表の名前。複数の表を指定する場合、名前をカンマで区切ります(たとえば、 |
where_clause |
親作業領域にマージする行を識別する 副問合せの場合を除き、
|
create_savepoint |
ブール値(
|
remove_data |
ブール値(
|
auto_commit |
ブール値(
|
使用上の注意
workspace
内にあるバージョン対応表table_name
の(where_clause
パラメータ値を満たす)すべてのデータが、workspace
の親作業領域に適用されます。
create_savepoint
パラメータ値がtrue
の場合、目的のバージョンで暗黙的セーブポイントがまだ存在しない場合にのみ、暗黙的セーブポイントが作成されます。 この目的のバージョンに変更された行が含まれる場合、そのバージョンが親作業領域内のLATESTバージョンです。 それ以外の場合、作業領域に複数のバージョンがある場合には、このバージョンはLATESTバージョンの前のバージョンになります。
マージ中の行が保持するすべてのロックは解放されます。
マージされる作業領域と親作業領域との間に競合が存在する場合、マージ操作は失敗します。ユーザーは、<table_name>_CONFビューを使用して競合を手動で解消する必要があります。(競合の解消の詳細は、マージまたはリフレッシュ操作前に行う競合の解消を参照してください。)
LIVE
作業領域では、(親作業領域がないため)表をマージできません。
次の条件に1つでも該当する場合は、例外が発生します。
-
ユーザーに
table_id
へのアクセス権がない。 -
ユーザーが
workspace
に対するMERGE_WORKSPACE
権限、またはMERGE_ANY_WORKSPACE
権限を取得していない。 -
remove_data
がTRUE
で、削除対象の作業領域に子作業領域がある。 -
auto_commit
がTRUE
であり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。 -
複数の親を持つ作業領域が関係するマージ操作を実行すると、複数の親を含むルート作業領域の連続的にリフレッシュされる子作業領域に、参照整合性制約違反または一意制約違反が発生する。
例
次の例は、NEWWORKSPACE
内にあるEMP
表(USER3
スキーマ内)内の行(last_name = 'Smith'
)に対する変更を、その親作業領域にマージします。
EXECUTE DBMS_WM.MergeTable ('NEWWORKSPACE', 'user3.emp', 'last_name = ''Smith''');
4.56 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-46 MergeWorkspaceプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
作業領域の名前。名前は大/小文字が区別されます。 |
create_savepoint |
ブール値(
|
remove_workspace |
ブール値(
|
auto_commit |
ブール値(
|
使用上の注意
remove_workspace
がTRUE
の場合は、workspace
内にあるすべてのバージョン対応表のすべてのデータがworkspace
の親作業領域にマージされ、workspace
が削除されます。
workspace
が連続的にリフレッシュされる子作業領域の場合、排他ロックは親作業領域に適用されます。この排他ロックは、GotoWorkspaceなどの、共有ロックの適用を試みる親作業領域への他の操作をブロックします。
create_savepoint
パラメータ値がtrue
の場合、目的のバージョンで暗黙的セーブポイントがまだ存在しない場合にのみ、暗黙的セーブポイントが作成されます。 この目的のバージョンに変更された行が含まれる場合、そのバージョンが親作業領域内のLATESTバージョンです。 それ以外の場合、作業領域に複数のバージョンがある場合には、このバージョンはLATESTバージョンの前のバージョンになります。
任意の行に対する現行の行バージョンのみが、親作業領域にマージされます。子作業領域のすべての中間行バージョンおよび履歴コピーを保持するには、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_commit
がTRUE
で、作業領域階層でworkspace
の下位にある作業領域内にオープン状態のデータベース・トランザクションがある。 -
remove_workspace
がTRUE
で、作業領域階層でworkspace
の下位にある作業領域内にセッションがある。 -
remove_workspace
がTRUE
で、削除対象の作業領域に子作業領域がある。 -
auto_commit
がTRUE
であり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。 -
複数の親を持つ作業領域のマージ操作を実行すると、複数の親を含むルート作業領域の連続的にリフレッシュされる子作業領域に、参照整合性制約違反または一意制約違反が発生する。
例
次の例は、NEWWORKSPACE
内の変更を親作業領域にマージします。
EXECUTE DBMS_WM.MergeWorkspace ('NEWWORKSPACE');
4.57 Move_Proc
Workspace Managerのメタデータを指定の表領域に移動します。
構文
DBMS_WM.Move_Proc( dest_tablespace IN VARCHAR2 DEFAULT 'SYSAUX');
パラメータ
表4-47 Move_Procプロシージャのパラメータ
パラメータ | 説明 |
---|---|
dest_tablespace |
Workspace Managerのメタデータの移動先となる表領域。デフォルト値は |
使用上の注意
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.58 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-48 PurgeTableプロシージャのパラメータ
パラメータ | 説明 |
---|---|
table_id |
エクスポートするデータを含む表の名前。この名前は大/小文字が区別されません。 |
archive_table |
パージされた行を挿入する表の名前。このパラメータにNULLが指定されている場合、パージされた行はアーカイブされません。このパラメータにNULL以外が指定されている場合で、オープン・トランザクションがある場合、表が作成され、新しいトランザクションがオープンされる前に、そのトランザクションがコミットされます。 |
where_clause |
パージする行を識別する 副問合せの場合を除き、
|
workspace |
データのパージ元となる作業領域の名前。名前は大/小文字が区別されます。 |
savepoint_name |
セーブポイントの名前: セーブポイントが作成された時点よりも後または前の(
|
instant |
日付/時刻指定: この時点より後または前の(
|
purgeAfter |
ブール値(
|
使用上の注意
このプロシージャは、作業領域でルート指定されているバージョン対応表から行を削除します。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.59 RecoverAllMigratingTables
Workspace Managerの移行プロシージャが正常に実行されなかった場合、一貫性のない状態になっているすべての表の移行プロセスを完了しようとします。
構文
DBMS_WM.RecoverAllMigratingTables( ignore_last_error IN BOOLEAN DEFAULT FALSE);
パラメータ
表4-49 RecoverAllMigratingTablesプロシージャのパラメータ
パラメータ | 説明 |
---|---|
ignore_last_error |
ブール値(
|
使用上の注意
現行の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.60 RecoverFromDroppedUser
1つ以上のバージョン対応表を所有する1つ以上のデータベース・ユーザーを削除した後、必要な操作を実行します。
構文
DBMS_WM.RecoverFromDroppedUser( ignore_last_error IN BOOLEAN DEFAULT FALSE);
パラメータ
表4-50 RecoverFromDroppedUserプロシージャのパラメータ
パラメータ | 説明 |
---|---|
ignore_last_error |
ブール値(
|
使用上の注意
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.61 RecoverMigratingTable
Workspace Managerの移行プロシージャが正常に実行されなかった場合、一貫性のない状態になっている表の移行プロセスを完了しようとします。
構文
DBMS_WM.RecoverMigratingTable( table_name IN VARCHAR2, ignore_last_error IN BOOLEAN DEFAULT FALSE);
パラメータ
表4-51 RecoverMigratingTableプロシージャのパラメータ
パラメータ | 説明 |
---|---|
table_name |
移行エラーが発生したためリカバリするバージョン対応表の名前。この名前は大/小文字が区別されません。 |
ignore_last_error |
ブール値(
|
使用上の注意
現行の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.62 RefreshTable
作業領域に対し、その親作業領域内の表(すべての行、またはWHERE
句に指定された行)に対するすべての変更を適用します。
複数の親を持つ作業領域(複数の親を持つ作業領域を参照)の場合は、指定した表について、非循環有向グラフ内でリーフ以外の作業領域からの変更を、指定したリーフ作業領域に適用します。(中間作業領域内の表データは変更されません。)
構文
DBMS_WM.RefreshTable( workspace IN VARCHAR2, table_id IN VARCHAR2, where_clause IN VARCHAR2 DEFAULT '', auto_commit IN BOOLEAN DEFAULT TRUE);
パラメータ
表4-52 RefreshTableプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
作業領域の名前。名前は大/小文字が区別されます。 |
table_id |
親作業領域の値を使用してリフレッシュする行を含む表の名前。この名前は大/小文字が区別されません。 |
where_clause |
親作業領域の値を使用してリフレッシュする行を識別する 副問合せの場合を除き、
|
auto_commit |
ブール値(
|
使用上の注意
このプロシージャは、workspace
の作成時または最後のリフレッシュ時以降に行われた、親作業領域内にあるバージョン対応表table_id
の行(where_clause
パラメータ値を満たす行)に対するすべての変更をworkspace
に適用します。
リフレッシュされる作業領域と親作業領域との間に競合が存在する場合、リフレッシュ操作は失敗します。ユーザーは、<table_name>_CONFビューを使用して競合を手動で解消する必要があります。(競合の解消の詳細は、マージまたはリフレッシュ操作前に行う競合の解消を参照してください。)
workspace
が連続的にリフレッシュされる作業領域の場合、このプロシージャは無視されます。
LIVE
作業領域では、(親作業領域がないため)表をリフレッシュできません。
例外が発生するのは、ユーザーがtable_id
へのアクセス権限を持っていない場合、ユーザーがworkspace
に対するMERGE_WORKSPACE
権限またはMERGE_ANY_WORKSPACE
権限を持っていない場合、または、auto_commit
がTRUE
で、かつ修正が必要な表の親または子作業領域にオープン状態のトランザクションがある場合です。
例
次の例は、親作業領域内にあるEMPLOYEES
表の行(last_name = 'Smith'
)に対する変更を適用して、NEWWORKSPACE
をリフレッシュします。
EXECUTE DBMS_WM.RefreshTable ('NEWWORKSPACE', 'employees', 'last_name = ''Smith''');
4.63 RefreshWorkspace
作業領域に対し、その親作業領域内のすべての変更を適用します。
複数の親を持つ作業領域(複数の親を持つ作業領域を参照)の場合は、非循環有向グラフ内でリーフ以外の作業領域からの変更を、指定したリーフ作業領域に適用します。変更は、複数の親を含むルート作業領域から始まって中間作業領域へと伝播します。
構文
DBMS_WM.RefreshWorkspace( workspace IN VARCHAR2, auto_commit IN BOOLEAN DEFAULT TRUE, copy_data IN BOOLEAN DEFAULT FALSE);
パラメータ
表4-53 RefreshWorkspaceプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
作業領域の名前。名前は大/小文字が区別されます。 |
auto_commit |
ブール値(
|
copy_data |
ブール値(
|
使用上の注意
このプロシージャは、workspace
の作成時または最後のリフレッシュ時以降に行われた、親作業領域内のバージョン対応表に対するすべての変更をworkspace
に適用します。
リフレッシュされる作業領域と親作業領域との間に競合が存在する場合、リフレッシュ操作は失敗します。ユーザーは、<table_name>_CONFビューを使用して競合を手動で解消する必要があります。(競合の解消の詳細は、マージまたはリフレッシュ操作前に行う競合の解消を参照してください。)
指定された作業領域およびその親作業領域は、READ_ONLY
モードにアクセス制限されます。詳細は、作業領域のアクセス制限および制限解除を参照してください。
LIVE
作業領域は、(親作業領域がないため)リフレッシュできません。
workspace
が連続的にリフレッシュされる作業領域の場合、このプロシージャは無視されます。
例外が発生するのは、ユーザーがworkspace
に対するMERGE_WORKSPACE
権限またはMERGE_ANY_WORKSPACE
権限を持っていない場合、ユーザーが、修正が必要なすべての表(トリガーによって変更される表なども含む)に対する十分な権限を持っていない場合、または、auto_commit
がTRUE
で、かつ修正が必要な表の親または子作業領域にオープン状態のトランザクションがある場合です。
例
次の例は、親作業領域内で行われた変更を適用して、NEWWORKSPACE
をリフレッシュします。
EXECUTE DBMS_WM.RefreshWorkspace ('NEWWORKSPACE');
4.64 RemoveAsParentWorkspace
複数の親を持つ作業領域環境で、作業領域を親作業領域として削除します。
構文
DBMS_WM.RemoveAsParentWorkspace( mp_leafworkspace IN VARCHAR2, parent_workspace IN VARCHAR2, auto_commit IN BOOLEAN DEFAULT TRUE);
パラメータ
表4-54 RemoveAsParentWorkspaceプロシージャのパラメータ
パラメータ | 説明 |
---|---|
mp_leaf_workspace |
|
parent_workspace |
|
auto_commit |
ブール値(
|
使用上の注意
このプロシージャは、複数の親を持つ作業領域機能のサポートの一部です。詳細は、複数の親を持つ作業領域を参照してください。このプロシージャは、AddAsParentWorkspaceプロシージャを使用して子作業領域に以前追加された親作業領域に対してのみ使用してください。
このプロシージャでは、作業領域は削除されません。単に、parent_workspace
がmp_leaf_workspace
の親作業領域でなくなります。
次の条件に1つでも該当する場合は、例外が発生します。
-
mp_leaf_workspace
またはparent_workspace
が存在しない。 -
mp_leaf_workspace
のデータがparent_workspace
内またはparent_workspace
の祖先内でバージョニングされており、この操作を実行すると、この作業領域がmp_leaf_workspace
の祖先ではなくなる。 -
mp_leaf_workspace
内にオープン状態のデータベース・トランザクションを持つセッションがある。 -
auto_commit
がTRUE
であり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。
例
次の例は、Workspace4
をWorkspace3
の親作業領域として削除します。(複数の親を持つ作業領域で階層図を参照してください。)
EXECUTE DBMS_WM.RemoveAsParentWorkspace ('Workspace3', 'Workspace4');
4.65 RemoveDeferredWorkspaces
RemoveWorkspaceまたはRemoveWorkspaceTreeプロシージャのdefer_option
パラメータにFAST
またはREMOVE_LOCKS
を指定して削除された作業領域に関連付けられているバージョン対応表から行およびロックを削除します。
構文
DBMS_WM.RemoveDeferredWorkspaces( auto_commit IN BOOLEAN DEFAULT TRUE);
パラメータ
表4-55 RemoveWorkspaceプロシージャのパラメータ
パラメータ | 説明 |
---|---|
auto_commit |
ブール値(
|
使用上の注意
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.66 RemoveUserDefinedHint
ユーザー定義ヒントを削除します。デフォルトのオプティマイザ・ヒントは、指定したバージョン対応表またはすべてのバージョン対応表に対しDBMS_WMパッケージが実行するSQL文で使用されます。
構文
DBMS_WM.RemoveUserDefinedHint( hint_id IN NUMBER, table_id IN VARCHAR2 DEFAULT NULL);
パラメータ
表4-56 RemoveUserDefinedHintプロシージャのパラメータ
パラメータ | 説明 |
---|---|
hint_id |
ユーザーが定義ヒントを一意に識別する数値ID。事前にAddUserDefinedHintプロシージャのコールで指定した既存のヒントIDと一致する必要があります。 |
table_id |
ヒントを適用する表の名前です。この名前は大/小文字が区別されません。 ヒントを追加するAddUserDefinedHintプロシージャをコールするとき、この値がNULLで、 ただし、この値がNULLで、ヒントを追加したAddUserDefinedHintプロシージャのコールで |
使用上の注意
このプロシージャは、以前AddUserDefinedHintプロシージャを使用して指定したユーザー定義ヒントの効果を削除または変更する場合にのみ使用します。詳細は、そのプロシージャの「使用上の注意」を参照してください。
例
次に示す例では、SCOTT.TABLE1に対し、ヒントとヒントID1101を関連するSQL文からユーザー定義ヒントを削除し、かわりにデフォルト・ヒントを使用させます。
EXECUTE DBMS_WM.RemoveUSerDefinedHint (1101, 'scott.table1');
4.67 RemoveWorkspace
作業領域に関連付けられたすべての行バージョンを廃棄し、作業領域を削除します。
構文
DBMS_WM.RemoveWorkspace( workspace IN VARCHAR2, auto_commit IN BOOLEAN DEFAULT TRUE, defer_option IN VARCHAR2 DEFAULT NULL;
パラメータ
表4-57 RemoveWorkspaceプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
作業領域の名前。名前は大/小文字が区別されます。 |
auto_commit |
ブール値(
|
defer_option |
バージョン対応表の作業領域に関連付けられている行およびロックを削除するか、または削除を遅延するかを指定します。 値として、NULL、 |
使用上の注意
RemoveWorkspace操作は、リーフ作業領域(階層内のブランチにおける最下位の作業領域)に対してのみ、実行できます。(データベースの作業領域階層の詳細は、作業領域階層を参照してください。)
削除対象の作業領域が子作業領域である場合、その親作業領域は操作中に排他的にロックされます。
他のユーザーがアクセスしている削除対象の作業領域は削除できません。
例外が発生するのは、ユーザーがworkspace
に対するREMOVE_WORKSPACE
権限またはREMOVE_ANY_WORKSPACE
権限を持っていない場合、ユーザーが、修正が必要なすべての表(トリガーによって変更される表なども含む)に対する十分な権限を持っていない場合、または、auto_commit
がTRUE
で、かつ修正が必要な表の親または子作業領域にオープン状態のトランザクションがある場合です。
例
次の例は、NEWWORKSPACE
作業領域を削除します。
EXECUTE DBMS_WM.RemoveWorkspace('NEWWORKSPACE');
4.68 RemoveWorkspaceTree
作業領域およびその子作業領域に関連付けられたすべての行バージョンを廃棄し、影響を受ける作業領域を削除します。
構文
DBMS_WM.RemoveWorkspaceTree( workspace IN VARCHAR2, auto_commit IN BOOLEAN DEFAULT TRUE, defer_option IN VARCHAR2 DEFAULT NULL;
パラメータ
表4-58 RemoveWorkspaceTreeプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
作業領域の名前。名前は大/小文字が区別されます。 |
auto_commit |
ブール値(
|
defer_option |
バージョン対応表の作業領域に関連付けられている行およびロックを削除するか、または削除を遅延するかを指定します。 値として、NULL、 |
使用上の注意
RemoveWorkspaceTree操作では、サポート構造が削除され、作業領域内、およびリーフ作業領域(1つまたは複数)までのすべての子作業領域内の変更がロールバックされるため、この操作を行う場合は、十分な注意が必要です。たとえば、作業領域階層に示されている階層で、Workspace1
を指定してRemoveWorkspaceTree操作を実行すると、Workspace1
、Workspace2
およびWorkspace3
が削除されます。(データベースの作業領域階層の詳細は、作業領域階層を参照してください。)
他のユーザーがアクセスしているworkspace
またはその子作業領域は削除できません。
例外が発生するのは、ユーザーがworkspace
またはそのすべての子作業領域に対するREMOVE_WORKSPACE
権限を持っていない場合、ユーザーが、修正が必要なすべての表(トリガーによって変更される表なども含む)に対する十分な権限を持っていない場合、または、auto_commit
がTRUE
で、かつ修正が必要な表の親または子作業領域にオープン状態のトランザクションがある場合です。
例
次の例は、NEWWORKSPACE
作業領域およびそのすべての子作業領域を削除します。
EXECUTE DBMS_WM.RemoveWorkspaceTree('NEWWORKSPACE');
4.69 RenameSavepoint
指定された作業領域のセーブポイントの名前を変更します。
構文
DBMS_WM.RenameSavepoint( workspace_name IN VARCHAR2, savepoint_name IN VARCHAR2; new_savepoint_name IN VARCHAR2;
パラメータ
表4-59 RenameSavepointプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace_name |
名前を変更するセーブポイントが存在する既存の作業領域の名前。名前は大/小文字が区別されます。 |
savepoint_name |
名前を変更する既存の明示的セーブポイントの名前。(暗黙的セーブポイントは指定できません。) |
new_savepoint_name |
セーブポイントに割り当てる新しい名前。既存のセーブポイントの名前は指定できません。 |
使用上の注意
ユーザーが作業領域またはセーブポイントの所有者ではない場合、またはWM_ADMIN
システム権限を取得していない場合は、例外が発生します。
例
次の例では、LIVE
作業領域のセーブポイントSP1
の名前を2009 milestone
に変更します。
EXECUTE DBMS_WM.RenameSavepoint('LIVE', 'SP11', '2009 milestone');
4.70 RenameWorkspace
作業領域の名前を変更します。
構文
DBMS_WM.RenameWorkspace( workspace_name IN VARCHAR2, new_workspace_name IN VARCHAR2;
パラメータ
表4-60 RenameWorkspaceプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace_name |
名前を変更する既存の作業領域の名前。名前は大/小文字が区別されます。 |
new_workspace_name |
作業領域に割り当てる新しい名前。新しい名前は、 |
使用上の注意
このプロシージャは、既存のバージョン対応表のメタデータを自動的に更新して、新しい作業領域名を参照します。このプロシージャを完了するのに必要な時間は、バージョン対応表の数によって決まります。
ユーザーが作業領域を所有していない場合、またはWM_ADMIN
システム権限を持っていない場合は、例外が発生します。
例
次の例では、作業領域の名前をWS1
からConstruction Project
に変更します。
EXECUTE DBMS_WM.RenameWorkspace('WS1', 'Construction Project');
4.71 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-61 ResolveConflictsプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
他の作業領域との競合があるかどうかを確認する作業領域の名前。名前は大/小文字が区別されます。 |
table_name |
競合があるかどうかを確認する表の名前。この名前は大/小文字が区別されません。 |
where_clause |
親作業領域の値を使用してリフレッシュする行を識別する 副問合せの場合を除き、 |
keep |
競合を解消する場合に優先する作業領域。
|
resolve_bnase_ne |
ブール値(
|
使用上の注意
このプロシージャは、table_name
およびwhere_clause
パラメータで指定された条件をチェックし、workspace
とその親作業領域の行の値の間で競合を検出します。このプロシージャは、keep
パラメータの指定に従い、親作業領域または子作業領域の行の値を使用して競合を解消します。ただし、トランザクションをコミットし(標準データベース・コミット操作)、CommitResolveプロシージャをコールして競合解消セッションを終了するまで、競合解消は実際にはマージされません。(プロセスの全体像など競合解消の詳細は、マージまたはリフレッシュ操作前に行う競合の解消を参照してください。)
たとえば、部門20(DEPARTMENT_ID = 20
)では、LIVE
作業領域およびWorkspace1
作業領域内のMANAGER_NAME
がTom
であると想定します。その場合、次の操作が行われます。
-
部門20の
manager_name
が、LIVE
データベース作業領域でTom
からMary
に変更されます。 -
その変更がコミット(標準のデータベース・コミット操作)されます。
-
部門20の
manager_name
が、Workspace1
でTom
からFranco
に変更されます。 -
MergeWorkspaceプロシージャがコールされ、
Workspace1
内の変更がLIVE
作業領域にマージされます。ただし、この時点では、
Workspace1
内の部門20のMANAGER_NAME
に競合(Franco
がLIVE
作業領域内のMary
と競合)が発生するため、MergeWorkspaceに対するコールは正常に実行されません。 -
ResolveConflictsプロシージャが、次のパラメータを使用してコールされます。(
'Workspace1'
,'department'
,'department_id = 20'
,'child'
)手順7のMergeWorkspace操作後、
Workspace1
作業領域とLIVE
作業領域のMANAGER_NAME
値がFranco
になります。 -
その変更がコミット(標準のデータベース・コミット操作)されます。
-
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.72 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-62 RevokeGraphPrivプロシージャのパラメータ
パラメータ | 説明 |
---|---|
priv_types |
権限を表す1つ以上のキーワードの文字列。(Workspace Managerの権限の詳細は、Workspace Managerでの権限管理を参照してください。)カンマを使用して権限キーワードを区切ります。使用可能なキーワードは、 |
leaf_workspace |
非循環有向グラフのリーフ作業領域の名前。(リーフ作業領域、非循環有向グラフ、および複数の親を持つ作業領域に関連するその他の概念の詳細は、複数の親を持つ作業領域を参照してください。)名前は大/小文字が区別されます。 |
grantee |
|
node_types |
権限を取り消すノードのタイプを表す文字のリスト(カッコで囲み、カンマで区切る): |
auto_commit |
ブール値(
|
使用上の注意
このプロシージャとは対照的に、RevokeWorkspacePriv は複数の親を持つグラフ作業領域以外の作業領域に対する作業領域レベルのWorkspace Manager権限を付与します。
複数の親を持つグラフ作業領域に対する作業領域レベルの権限を付与するには、GrantGraphPrivプロシージャを使用します。
次の条件に1つでも該当する場合は、例外が発生します。
-
grantee
がデータベース内の有効なユーザーまたはロールでない。 -
grantee
にpriv_types
権限を付与したユーザーではない。 -
auto_commit
がTRUE
であり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。
例
次の例では、ユーザーSmith
に対して、NEWWORKSPACE
作業領域がリーフ作業領域である非循環有向グラフ内のすべてのタイプのノードにアクセスすることと、これらの作業領域内で変更をマージすることを禁止します。
EXECUTE DBMS_WM.RevokeWorkspacePriv ('ACCESS_WORKSPACE, MERGE_WORKSPACE', 'NEWWORKSPACE', 'Smith');
4.73 RevokeSystemPriv
ユーザーおよびロールからシステム・レベルの権限を取り消します(削除します)。
構文
DBMS_WM.RevokeSystemPriv( priv_types IN VARCHAR2, grantee IN VARCHAR2, auto_commit IN BOOLEAN DEFAULT TRUE);
パラメータ
表4-63 RevokeSystemPrivプロシージャのパラメータ
パラメータ | 説明 |
---|---|
priv_types |
権限を表す1つ以上のキーワードの文字列。(Workspace Managerの権限の詳細は、Workspace Managerでの権限管理を参照してください。)カンマを使用して権限キーワードを区切ります。使用可能なキーワードは、 |
grantee |
|
auto_commit |
ブール値(
|
使用上の注意
このプロシージャとは対照的に、RevokeWorkspacePriv プロシージャは、xxx_WORKSPACE形式(ACCESS_WORKSPACE
、MERGE_WORKSPACE
など)のキーワードを使用してシステム・レベルのWorkspace Manager権限を付与します。
システム・レベルの権限を付与するには、GrantSystemPrivプロシージャを使用します。
次の条件に1つでも該当する場合は、例外が発生します。
-
grantee
がデータベース内の有効なユーザーまたはロールでない。 -
grantee
にpriv_types
権限を付与したユーザーではない。 -
auto_commit
がTRUE
であり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。
例
次の例は、ユーザーSmith
が作業領域にアクセスし、作業領域内の変更をマージすることを禁止します。
EXECUTE DBMS_WM.RevokeSystemPriv ('ACCESS_ANY_WORKSPACE, MERGE_ANY_WORKSPACE', 'Smith');
4.74 RevokeWorkspacePriv
ユーザーおよびロールから、指定された作業領域に対する作業領域レベルの権限を取り消します(削除します)。
構文
DBMS_WM.RevokeWorkspacePriv( priv_types IN VARCHAR2, workspace IN VARCHAR2, grantee IN VARCHAR2. auto_commit IN BOOLEAN DEFAULT TRUE);
パラメータ
表4-64 RevokeWorkspacePrivプロシージャのパラメータ
パラメータ | 説明 |
---|---|
priv_types |
権限を表す1つ以上のキーワードの文字列。(Workspace Managerの権限の詳細は、Workspace Managerでの権限管理を参照してください。)カンマを使用して権限キーワードを区切ります。使用可能なキーワードは、 |
workspace |
作業領域の名前。名前は大/小文字が区別されます。 |
grantee |
|
auto_commit |
ブール値(
|
使用上の注意
このプロシージャとは対照的に、RevokeSystemPriv プロシージャは、xxx_ANY_WORKSPACE形式(ACCESS_ANY_WORKSPACE
、MERGE_ANY_WORKSPACE
など)のキーワードを使用してシステム・レベルのWorkspace Manager権限を取り消します。また、このプロシージャとは対照的に、RevokeGraphPriv は複数の親を持つグラフ作業領域に対する作業領域レベルのWorkspace Manager権限を付与します。
作業領域レベルの権限を付与するには、GrantWorkspacePriv プロシージャを使用します。
次の条件に1つでも該当する場合は、例外が発生します。
-
grantee
がデータベース内の有効なユーザーまたはロールでない。 -
grantee
にpriv_types
権限を付与したユーザーではない。 -
auto_commit
がTRUE
であり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。
例
次の例は、ユーザーSmith
がNEWWORKSPACE
作業領域にアクセスし、その作業領域内の変更をマージすることを禁止します。
EXECUTE DBMS_WM.RevokeWorkspacePriv ('ACCESS_WORKSPACE, MERGE_WORKSPACE', 'NEWWORKSPACE', 'Smith');
4.75 RollbackBulkLoading
バルク・ロード操作中にバージョン対応表に対して行われた変更をロールバックします。
構文
DBMS_WM.RollbackBulkLoading( table_name IN VARCHAR2, ignore_last_error IN BOOLEAN DEFAULT FALSE);
パラメータ
表4-65 RollbackBulkLoadingプロシージャのパラメータ
パラメータ | 説明 |
---|---|
table_name |
データのバルク・ロード先となるバージョン対応表の名前。この名前は大/小文字が区別されません。 |
ignore_last_error |
ブール値(
|
使用上の注意
バージョン対応表にデータをバルク・ロードする場合の要件については、バージョン対応表へのバルク・ロードを参照してください。
このプロシージャは、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.76 RollbackDDL
DDLセッション中に指定された表に対して行われたDDL変更をロールバックし(取り消し)、DDLセッションを終了します。
構文
DBMS_WM.RollbackDDL( table_name IN VARCHAR2);
パラメータ
表4-66 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.77 RollbackResolve
競合解消セッションを終了し、BeginResolveプロシージャの実行以降に作業領域内で行われたすべての変更を廃棄します。
構文
DBMS_WM.RollbackResolve( workspace IN VARCHAR2);
パラメータ
表4-67 RollbackResolveプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
作業領域の名前。名前は大/小文字が区別されます。 |
使用上の注意
このプロシージャは、(BeginResolveプロシージャによって開始された)現行の競合解消セッションを終了し、その競合解消セッションの開始以降に作業領域内で行われたすべての変更を廃棄します。このプロシージャとは対照的に、CommitResolveプロシージャはすべての変更を保存します。
競合解消セッションのロールバック中、作業領域は1WRITER
モードにアクセス制限されます。詳細は、作業領域のアクセス制限および制限解除を参照してください。
競合解消の詳細は、マージまたはリフレッシュ操作前に行う競合の解消を参照してください。
次の条件に1つでも該当する場合は、例外が発生します。
-
workspace
内にオープン状態のデータベース・トランザクションが1つ以上ある。 -
プロシージャが、
WM_ADMIN
システム権限を取得していないユーザー、またはworkspace
に対してBeginResolveプロシージャを実行していないユーザーによってコールされた。
例
次の例は、Workspace1
での競合解消セッションを終了し、すべての変更を廃棄します。
EXECUTE DBMS_WM.RollbackResolve ('Workspace1');
4.78 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-68 RollbackTableプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
作業領域の名前。名前は大/小文字が区別されます。 |
table_id |
廃棄する行を含む表の名前。この名前は大/小文字が区別されません。 |
sp_name |
ロールバック先のセーブポイントの名前。名前は大/小文字が区別されます。デフォルトでは、すべての変更が廃棄されます(すべてのセーブポイントが無視されます)。 |
where_clause |
廃棄する行を識別する 副問合せの場合を除き、
|
remove_locks |
ブール値(
|
auto_commit |
ブール値(
|
使用上の注意
指定したセーブポイント以降に暗黙的セーブポイントが作成されている場合、まずその暗黙的セーブポイントが作成される原因となった子作業領域をマージまたは削除しないかぎり、そのセーブポイントにロールバックできません。たとえば、セーブポイントの使用の図1-2では、作業領域3(暗黙的セーブポイントSPcが作成された原因)がマージまたは削除されるまで、作業領域1内のユーザーはセーブポイントSP1にロールバックできません。
次の条件に1つでも該当する場合は、例外が発生します。
-
workspace
が存在しない。 -
ユーザーが
workspace
または影響を受ける表をロールバックするための権限を取得していない。 -
table_id
に影響するデータベース・トランザクションが、作業領域内でオープン状態になっている。 -
auto_commit
がTRUE
であり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。
例
次の例は、NEWWORKSPACE
作業領域の作成以降に、その作業領域内のEMP
表(USER3
スキーマ内)に加えられたすべての変更をロールバックします。
EXECUTE DBMS_WM.RollbackTable ('NEWWORKSPACE', 'user3.emp');
4.79 RollbackToSP
指定されたセーブポイント以降に行われた作業領域内のバージョン対応表に対するすべての変更を廃棄します。
構文
DBMS_WM.RollbackToSP( workspace IN VARCHAR2, savepoint_name IN VARCHAR2, auto_commit IN BOOLEAN DEFAULT TRUE);
パラメータ
表4-69 RollbackToSPプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
作業領域の名前。名前は大/小文字が区別されます。 |
savepoint_name |
変更のロールバック先のセーブポイントの名前。名前は大/小文字が区別されます。 |
auto_commit |
ブール値(
|
使用上の注意
このプロシージャの実行中、作業領域はNO_ACCESS
モードにアクセス制限されます。
このプロシージャとは対照的に、RollbackWorkspaceプロシージャは、作業領域の作成以降に行われたすべての変更をロールバックします。
指定したセーブポイント以降に暗黙的セーブポイントが作成されている場合、まずその暗黙的セーブポイントが作成される原因となった子作業領域をマージまたは削除しないかぎり、そのセーブポイントにロールバックできません。たとえば、セーブポイントの使用の図1-2では、Workspace3
(暗黙的セーブポイントSPc
が作成された原因)がマージまたは削除されるまで、Workspace1
内のユーザーはセーブポイントSP1
にロールバックできません。
次の条件に1つでも該当する場合は、例外が発生します。
-
workspace
が存在しない。 -
savepoint_name
が存在しない。 -
auto_commit
がTRUE
であり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。 -
savepoint_name
以降にworkspace
内に1つ以上の暗黙的セーブポイントが作成されており、その暗黙的セーブポイントが作成される原因となった子作業領域が存在する。 -
ユーザーが
workspace
または影響を受ける表をロールバックするための権限を取得していない。 -
workspace
内にセッションがある。
例
次の例は、Savepoint1
の作成以降に、NEWWORKSPACE
作業領域内で行われたすべての表に対するすべての変更をロールバックします。
EXECUTE DBMS_WM.RollbackToSP ('NEWWORKSPACE', 'Savepoint1');
4.80 RollbackWorkspace
作業領域内のバージョン対応表に対するすべての変更を廃棄します。
構文
DBMS_WM.RollbackWorkspace( workspace IN VARCHAR2, auto_commit IN BOOLEAN DEFAULT TRUE);
パラメータ
表4-70 RollbackWorkspaceプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
作業領域の名前。名前は大/小文字が区別されます。 |
auto_commit |
ブール値(
|
使用上の注意
ロールバックできるのは、リーフ作業領域のみです。子作業領域を持つ作業領域はロールバックできません。(作業領域階層の詳細は、作業領域階層を参照してください。)
このプロシージャとは対照的に、RollbackToSPプロシージャは、指定されたセーブポイントに変更をロールバックします。
RemoveWorkspaceプロシージャと同様に、RollbackWorkspaceは作業領域内のデータを削除します。ただし、RemoveWorkspaceプロシージャとは異なり、RollbackWorkspaceはWorkspace Managerの作業領域構造を削除しません。
このプロシージャの実行中、指定の作業領域はNO_ACCESS
モードにアクセス制限されます。詳細は、作業領域のアクセス制限および制限解除を参照してください。
次の条件に1つでも該当する場合は、例外が発生します。
-
workspace
に子作業領域がある。 -
workspace
が存在しない。 -
auto_commit
がTRUE
であり、修正が必要な表の親作業領域または子作業領域内にオープン状態のトランザクションがある。 -
ユーザーが
workspace
または影響を受ける表をロールバックするための権限を取得していない。 -
workspace
内にセッションがある。
例
次の例は、NEWWORKSPACE
作業領域の作成以降に、その作業領域内で行われたすべての変更をロールバックします。
EXECUTE DBMS_WM.RollbackWorkspace ('NEWWORKSPACE');
4.81 SetCaptureEvent
すべてのWorkspace Managerイベントまたは指定した型のWorkspace Managerイベントの取得を有効化または無効化します。
構文
DBMS_WM.SetCaptureEvent( event_name IN VARCHAR2, capture IN VARCHAR2 DEFAULT 'ON');
パラメータ
表4-71 SetCaptureEventプロシージャのパラメータ
パラメータ | 説明 |
---|---|
event_name |
次のいずれかの値:
|
capture |
|
使用上の注意
Workspace Managerイベントの詳細は、Workspace Managerイベントを参照してください。
このプロシージャでは、Workspace Managerのシステム・パラメータALLOW_CAPTURE_EVENTS
をON
に設定する必要があります。Workspace Managerのシステム・パラメータの値を確認するには、GetSystemParameterプロシージャを使用します。Workspace Managerのシステム・パラメータを設定するには、SetSystemParameterプロシージャを使用します。
このプロシージャを使用すると、取得するイベントの型を制御できます。たとえば、すべてのイベントの取得を有効化してから、いくつかの型のイベントの取得を無効化する方法や、すべてのイベントの取得を無効化してから、いくつかの型のイベントの取得を有効化する方法があります。
現在取得されているイベントの型を確認するには、WM_EVENTS_INFOメタデータ・ビューを調べます。詳細は、WM_EVENTS_INFOを参照してください。
このプロシージャが正常に完了すると、コール元のオープン状態のデータベース・トランザクションがコミットされます。
次の条件に1つでも該当する場合は、例外が発生します。
-
WM_ADMIN
システム権限がない。 -
ALLOW_CAPTURE_EVENTS
システム・パラメータの値がOFF
で、event_name
をON
(このパラメータのデフォルト値)に設定しようとしている。 -
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.82 SetCompressWorkspace
作業領域圧縮操作が実行される場合に、圧縮する必要のあるバージョン対応表の情報を使用して、WM_COMPRESSIBLE_TABLESメタデータ・ビューに行を作成します。
構文
DBMS_WM.SetCompressWorkspace( workspace IN VARCHAR2, firstSP IN VARCHAR2 DEFAULT NULL, secondSP IN VARCHAR2 DEFAULT NULL);
パラメータ
表4-72 SetCompressWorkspaceプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
作業領域の名前。名前は大/小文字が区別されます。 |
firstSP |
圧縮範囲の最初のバージョンのセーブポイント。セーブポイント名は大/小文字が区別されます。
|
secondSP |
圧縮範囲の最初のバージョンのセーブポイント。 |
使用上の注意
このプロシージャは、CompressWorkspaceまたはCompressWorkspaceTreeプロシージャをコールする前に使用できます(必須ではありません)。
このプロシージャは、作業領域圧縮操作中に圧縮する必要のあるバージョン対応表についてのみ、WM_COMPRESSIBLE_TABLESメタデータ・ビュー(WM_COMPRESSIBLE_TABLESを参照)に行を作成します。
例
次の例は、B_focus_1
作業領域の圧縮操作中に圧縮する必要のあるバージョン対応表について、WM_COMPRESSIBLE_TABLESメタデータ・ビューに行を作成します。
EXECUTE DBMS_WM.SetCompressWorkspace ('B_focus_1');
4.83 SetConflictWorkspace
作業領域とその親作業領域の間に競合があるかどうかを判断します。
構文
DBMS_WM.SetConflictWorkspace( workspace IN VARCHAR2);
パラメータ
表4-73 SetConflictWorkspaceプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
作業領域の名前。名前は大/小文字が区別されます。 |
使用上の注意
このプロシージャは、workspace
とその親作業領域の間に競合があるかどうかを確認し、必要に応じて<table_name>_CONFビュー(xxx_CONF Viewsを参照)の内容を変更します。
<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.84 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-74 SetDiffVersionsプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace1 |
バージョン対応表における差異を確認する最初の作業領域の名前。名前は大/小文字が区別されます。 |
savepoint1 |
値を確認する、
|
workspace2 |
バージョン対応表における差異を確認する2番目の作業領域の名前。名前は大/小文字が区別されます。 |
savepoint2 |
値を確認する、 |
onlyModified |
ブール値(
|
使用上の注意
このプロシージャは、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 Viewsを参照してください。
4.85 SetLockingOFF
現行のセッションに対してWorkspace Managerのロック操作を使用禁止にします。
構文
DBMS_WM.SetLockingOFF();
パラメータ
なし。
使用上の注意
このプロシージャは、SetLockingONプロシージャで使用可能にしたWorkspace Managerのロック操作を使用禁止にします。このセッションが適用する既存のロックは、ロックされたままになります。このセッションによるすべての新しい変更はロックされません。
例
次の例は、セッションに対するロック操作を使用禁止にします。
EXECUTE DBMS_WM.SetLockingOFF;
4.86 SetLockingON
現行のセッションに対してWorkspace Managerのロック操作を使用可能にします。
構文
DBMS_WM.SetLockingON( lockmode IN VARCHAR2);
パラメータ
表4-75 SetLockingONプロシージャのパラメータ
パラメータ | 説明 |
---|---|
lockmode |
ロック・モード。
|
使用上の注意
このプロシージャは、すべての標準の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.87 SetMultiWorkspaces
指定された作業領域(1つまたは複数)をバージョン対応表の複数作業領域ビューで表示します。
構文
DBMS_WM.SetMultiWorkspaces( workspaces IN VARCHAR2);
パラメータ
表4-76 SetMultiWorkspacesプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspaces |
複数作業領域ビュー(xxx_MW Viewsを参照)に関連情報を追加する作業領域(1つまたは複数)。作業領域名は大/小文字が区別されます。 複数の作業領域(8つ以下)を指定するには、カンマを使用して作業領域名を区切ります。例: |
使用上の注意
このプロシージャは、複数作業領域ビュー(xxx_MW)に行を追加します。このビューの内容および使用については、xxx_MW Viewsを参照してください。
複数作業領域ビューで参照できる作業領域の名前を確認するには、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.88 SetSystemParameter
Workspace Managerシステム・パラメータの値を設定します。
構文
DBMS_WM.SetSystemParameter( name IN VARCHAR2, value IN VARCHAR2);
パラメータ
表4-77 SetSystemParameterプロシージャのパラメータ
パラメータ | 説明 |
---|---|
name |
値を設定するWorkspace Managerシステム・パラメータの名前。名前は、Workspace Managerのシステム・パラメータの表にリストされているパラメータ名のいずれかである必要があります。 |
value |
指定したWorkspace Managerシステム・パラメータの値。詳細は、Workspace Managerのシステム・パラメータの表を参照してください。 |
使用上の注意
Workspace Managerのシステム・パラメータの詳細は、Workspace Managerのシステム・パラメータを参照してください。
このプロシージャが正常に完了すると、コール元のオープン状態のデータベース・トランザクションがコミットされます。
次の条件に1つでも該当する場合は、例外が発生します。
-
ユーザーに
WM_ADMIN
システム権限がない。 -
システム・パラメータ名が有効ではない。
-
システム・パラメータの値が有効ではない。
-
イベントの取得を禁止しようとしており、1つ以上の型のイベントが取得されている。最初に、すべてのイベントの取得を無効化する必要があります(たとえば、SetCaptureEventプロシージャをコールし、
event_type
にALL_EVENTS
を、capture
にOFF
を指定します)。 -
複数の親を持つ作業領域を使用禁止にしようとしており、この種の作業領域がすでに1つ以上存在している。最初に、すべての作業領域が複数の親作業領域を持っていないことを確認する必要があります(たとえば、必要に応じてRemoveAsParentWorkspaceプロシージャをコールします)。
-
ネストした表の列を使用禁止にしようとしており、この種の列を含む1つ以上の表がバージョン対応になっている。最初に、ネストした表の列を含むすべての表に対して、バージョニングを使用禁止にする必要があります。
-
CR_WORKSPACE_MODE
またはNONCR_WORKSPACE_MODE
をPESSIMISTIC_LOCKING
に変更しようとしており、それに対応する型の(連続的にリフレッシュされる、または連続的にリフレッシュされない)作業領域について、LIVE
以外の作業領域にデータが存在する。
例
次の例は、複数の親を持つ作業領域(複数の親を持つ作業領域を参照)の作成を許可します。
EXECUTE DBMS_WM.SetSystemParameter ('ALLOW_MULTI_PARENT_WORKSPACES', 'ON');
4.89 SetTriggerEvents
指定したトリガー・イベントのセットについて、トリガーの実行を有効化します。指定していないイベントの場合、トリガーは実行されません。
構文
DBMS_WM.SetTriggerEvents( triggerName IN VARCHAR2, triggerEvents IN VARCHAR2);
パラメータ
表4-78 SetTriggerEventsプロシージャのパラメータ
パラメータ | 説明 |
---|---|
triggerName |
1つ以上のイベントを設定するトリガーの名前。 |
triggerEvents |
トリガー・イベント名のカンマ区切りのリスト。各トリガー・イベント名は、次のいずれかの文字列定数です。
|
使用上の注意
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.90 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-79 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.91 SetValidTimeFilterOFF
現行セッションの有効期間フィルタを削除します。
構文
DBMS_WM.SetValidTimeFilterOFF();
パラメータ
なし。
使用上の注意
このプロシージャは、SetValidTimeFilterONプロシージャの処理を元に戻し、有効期間サポートを伴う表に対する問合せでは、以前に定義された有効期間フィルタを無視します。Workspace Managerによる有効期間のサポートについては、Workspace Managerの有効期間のサポートを参照してください。
SetValidTimeFilterONプロシージャの「使用上の説明」も参照してください。
例
次の例は、現行セッションの有効期間フィルタを削除します。
EXECUTE DBMS_WM.SetValidTimeFilterOFF;
4.92 SetValidTimeFilterON
現行セッションの有効期間フィルタ(バージョン対応表に適用される時間)を設定します。
構文
DBMS_WM.SetValidTimeFilterON( filtertime IN TIMESTAMP WITH TIME ZONE DEFAULT NULL);
パラメータ
表4-80 SetValidTimeFilterONプロシージャのパラメータ
パラメータ | 説明 |
---|---|
filtertime |
有効期間サポートがあるバージョン対応表への問合せでフィルタとして使用する日付。 デフォルト値は現在の時刻です。つまり、有効期間サポートを伴うバージョン対応表での各選択操作では、現時点で有効な日付を戻します。 |
使用上の注意
有効期間フィルタは、有効期間サポートがあるバージョン対応表に対する問合せに適用する期間です。現在のセッションに対して有効期間フィルタが設定されている場合、指定された期間有効な行のみが戻されます。Workspace Managerによる有効期間のサポートについては、Workspace Managerの有効期間のサポートを参照してください。
有効期間フィルタを設定する目的は、通常、指定した主キー値に対して1つの行のみ取り扱うことです。たとえば、現在の有効期間において、セッションで従業員Adamsに対して2つの行が使用されるとします。1番目の行は2004年3月1日から2005年4月30日まで有効であり、2番目の行は2005年5月1日からその行が変更されるまで有効です。有効期間フィルタを2005年1月1日に設定し、Adamsに関するすべての行を選択すると、1番目の行(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.93 SetWMValidUpdateModeOFF
有効期間サポートがある表で、順序付きと順序なしの更新操作、および順序付き削除操作を無効にします。
構文
DBMS_WM.SetWMValidUpdateModeOFF();
パラメータ
なし。
使用上の注意
このプロシージャは、有効期間サポートがある表で、順序付きと順序なしの更新操作、および順序付き削除操作を無効にします。Workspace Managerの有効期間のサポートの詳細は、Workspace Managerの有効期間のサポートを参照してください。順序付きと順序なしの更新操作、および順序付き削除操作の詳細は、更新操作を参照してください。
順序付き更新および削除操作が有効な場合、有効期間サポートを伴う表で更新または削除操作が実行されると、そのセッションの現行の有効期間が使用され、その期間で有効な行のみが更新または削除されます。ただし、SetWMValidUpdateModeOFFプロシージャをコールすると、有効期間に関係なく、更新または削除されるすべての行データが有効になり、その表にあるWM_VALID列の値は更新されません。(この手順は、有効期間サポートを伴う表の挿入または問合せ操作には影響しません。)
SetWMValidUpdateModeONプロシージャの「使用上の説明」も参照してください。
例
次の例は、有効期間のサポートがある表で、順序付きと順序なしの更新操作、および順序付き削除操作を無効にします。
EXECUTE DBMS_WM.SetWMValidUpdateModeOFF;
4.94 SetWMValidUpdateModeON
有効期間のサポートがある表で、順序付きと順序なしの更新操作、および順序付き削除操作を有効にします。
構文
DBMS_WM.SetWMValidUpdateModeON();
パラメータ
なし。
使用上の注意
このプロシージャは、有効期間サポートがある表で、順序付きと順序なしの更新操作、および順序付き削除操作を有効にします。表が有効期間サポートのあるバージョン対応表の場合、またはバージョン対応表に有効期間サポートが追加された場合、順序付きの更新および削除操作が有効になります。ただし、順序付きの更新および削除操作は、SetWMValidUpdateModeOFFプロシージャを使用して無効にすることができます。
Workspace Managerの有効期間のサポートの詳細は、Workspace Managerの有効期間のサポートを参照してください。順序付きと順序なしの更新操作、および順序付き削除操作の詳細は、挿入操作を参照してください。
例
次の例は、有効期間のサポートがある表で、順序付きと順序なしの更新操作、および順序付き削除操作を有効にします。これは、SetWMValidUpdateModeOFFプロシージャの処理を元に戻します。
EXECUTE DBMS_WM.SetWMValidUpdateModeON;
4.95 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.96 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.97 SetWorkspaceLockModeOFF
指定された作業領域に対してWorkspace Managerのロック操作を使用禁止にします。
構文
DBMS_WM.SetWorkspaceLockModeOFF( workspace IN VARCHAR2, auto_commit IN BOOLEAN DEFAULT TRUE);
パラメータ
表4-81 SetWorkspaceLockModeOFFプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
ロック・モードを使用禁止にする作業領域の名前。名前は大/小文字が区別されます。 |
auto_commit |
ブール値(
|
使用上の注意
このプロシージャは、SetWorkspaceLockModeONプロシージャで使用可能にしたWorkspace Managerのロック操作を使用禁止にします。このセッションが適用する既存のロックは、ロックされたままになります。このセッションまたは後続のセッションによるすべての新しい変更は、そのセッションがSetLockingONプロシージャを実行してロック操作を使用可能にしないかぎり、ロックされません。
次の場合に例外が発生します。
-
ユーザーに
WM_ADMIN
システム権限がない、またはユーザーがworkspace
の所有者ではない。 -
auto_commit
がTRUE
であり、オープン状態のトランザクションがある。
例
次の例は、NEWWORKSPACE
という名前の作業領域に対するロック操作を使用禁止にします。
EXECUTE DBMS_WM.SetWorkspaceLockModeOFF('NEWWORKSPACE');
4.98 SetWorkspaceLockModeON
指定された作業領域に対してWorkspace Managerのロック操作を使用可能にします。
構文
DBMS_WM.SetWorkspaceLockModeON( workspace IN VARCHAR2, lockmode IN VARCHAR2, override IN BOOLEAN DEFAULT FALSE, auto_commit IN BOOLEAN DEFAULT TRUE);
パラメータ
表4-82 SetWorkspaceLockModeONプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
Workspace Managerのロック操作を使用可能にする作業領域の名前。名前は大/小文字が区別されます。 |
lockmode |
行レベル・ロックのデフォルトのロック・モード。
|
override |
ブール値(
|
auto_commit |
ブール値(
|
使用上の注意
このプロシージャは、すべての標準の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_commit
がTRUE
であり、オープン状態のトランザクションがある。 -
lockmode
がD
であり、作業領域が連続的にリフレッシュされるか、LIVE
作業領域である。
例
次の例は、NEWWORKSPACE
という名前の作業領域に対して排他ロックを設定します。
EXECUTE DBMS_WM.SetWorkspaceLockModeON ('NEWWORKSPACE', 'E');
ロックされたすべての行は、作業領域がマージまたはロールバックされるまで、ロックされたままになります。
4.99 UnfreezeWorkspace
作業領域にアクセスできるようにし、また作業領域に対する変更を有効にし、FreezeWorkspaceプロシージャによる処理を元に戻します。
構文
DBMS_WM.UnfreezeWorkspace( workspace IN VARCHAR2);
パラメータ
表4-83 UnfreezeWorkspaceプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
作業領域の名前。名前は大/小文字が区別されます。 |
使用上の注意
workspace
内にセッションがある場合は、操作が正常に実行されません。
次の条件に1つでも該当する場合は、作業領域のアクセス制限を解除できます。
-
指定された作業領域の所有者である。
-
指定された作業領域に対する
WM_ADMIN
システム権限、FREEZE_ANY_WORKSPACE
権限またはFREEZE_WORKSPACE
権限を取得している。
例
次の例は、NEWWORKSPACE
作業領域に対するアクセス制限を解除します。
EXECUTE DBMS_WM.UnfreezeWorkspace ('NEWWORKSPACE');
4.100 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-84 UnlockRowsプロシージャのパラメータ
パラメータ | 説明 |
---|---|
workspace |
作業領域の名前: 残りのパラメータの指定に従い、この作業領域のロックされた行と親作業領域の対応する行がロック解除されます。名前は大/小文字が区別されます。
|
table_name |
ロック解除する行を含む表またはSpatial and Graphトポロジ( |
where_clause |
ロック解除する行を識別する 副問合せの場合を除き、
|
all_or_user |
要求の有効範囲:
|
lock_mode |
ロック・モード。
|
Xmin, Ymin |
Oracle Spatial and Graphトポロジの場合にのみ(トポロジ使用時のロックに関する考慮事項を参照)、行を含むウィンドウの左下隅のX座標値とY座標値がそれぞれロックされます。 |
Xmax, Ymax |
Oracle Spatial and Graphトポロジの場合にのみ(トポロジ使用時のロックに関する考慮事項を参照)、行を含むウィンドウの右上隅のX座標値とY座標値がそれぞれロックされます。 |
使用上の注意
このプロシージャは、すべての標準のOracleデータベース・ロック操作に加えて実行されるWorkspace Managerロック操作に影響します。Workspace Managerのロック操作の詳細は、Workspace Managerでのロック管理を参照してください。
このプロシージャは、前にロックされた行をロック解除します(LockRowsプロシージャを参照)。Workspace Managerのロック操作が使用可能または使用禁止(SetLockingONプロシージャおよびSetLockingOFFプロシージャで決定)になるかには影響しません。
Workspace ManagerによるOracle Spatial and Graphトポロジ内の表のロックの詳細は、トポロジ使用時のロックに関する考慮事項を参照してください。
例
次の例は、NEWWORKSPACE
作業領域内にあるEMPLOYEES
表の行(last_name
が「Smith」)をロック解除します。
EXECUTE DBMS_WM.UnlockRows ('employees', 'NEWWORKSPACE', 'last_name = ''Smith''');
4.101 UseDefaultValuesForNulls
ユーザーがバージョン対応表に対する挿入操作で列にNULL値を指定した場合、または列に値を指定しない場合、現行のセッションでWorkspace Managerが列にデフォルト値を使用するかどうかを決定します。
構文
DBMS_WM.UseDefaultValuesForNulls( mode_var IN VARCHAR2);
パラメータ
表4-85 UseDefaultValuesForNullsプロシージャのパラメータ
パラメータ | 説明 |
---|---|
mode_var |
NULL値の挿入を処理するモード。
|
使用上の注意
このプロシージャがWorkspace Managerの動作に影響するのは、列がデフォルト値を持つと定義されているか、または列が未指定のままで、バージョン対応表に対するINSERT文でその列にNULLが明示的に指定される場合のみです。たとえば、次の表の定義を考えてみます。
CREATE TABLE players (name VARCHAR2(20) primary key, rating NUMBER DEFAULT 10);
PLAYERS
表がバージョン対応の場合に、mode_val
パラメータに値OFF
を指定してこのプロシージャを実行した場合、次のいずれの文でもSmith
の行にNULLのRATING
値が挿入されます。
INSERT INTO players VALUES ('Smith', NULL); INSERT INTO players(name) VALUES ('Smith');
ただし、mode_val
パラメータに値ON
を指定してUseDefaultValuesForNullsプロシージャを実行すると、両方の文でSmith
の行にRATING
の値10が挿入されます。このプロシージャがセッションで実行されない場合、デフォルトの動作は、mode_var
にON
を指定した場合と同じになります。
例
次の例では、バージョン対応表へのINSERT文でデフォルト値を持つ列に対してNULL値が指定された場合、または列が未指定の場合に、現行のセッションの以降の部分では列のデフォルト値が常に使用されます。
EXECUTE DBMS_WM.UseDefaultValuesForNulls('ON');