この章では、Oracle XML DBリソースのバージョンを作成および管理する方法を説明します。
この章の内容は次のとおりです。
Oracle XML DBバージョニングによって、Oracle XML DBのリソースの異なるバージョンを作成および管理する方法が提供されます。表や列などのリソースが更新されると、Oracle XML DBは、更新前のコンテンツを異なるリソース・バージョンとして格納します。
Oracle XML DBは、リソースをバージョン管理し、リソースの異なるバージョンを取り出すためのPL/SQLパッケージDBMS_XDB_VERSION
を提供しています。
Versioningによって、Oracle XML DBリポジトリのリソースの変更を追跡できます。次の各項で、これらの機能について詳しく説明します。Oracle XML DBバージョニング機能には、次の機能が含まれます。
リソースのバージョン管理。Oracle XML DBリポジトリ・リソースのバージョン管理を有効または無効にするオプションがあります。「バージョン管理されたリソース(VCR)の作成」を参照してください。
バージョン管理されたリソースのプロセスの更新。Oracle XML DBは、バージョン管理されたリソース(VCR)を更新するときに、リソースの新しいバージョンを作成します。この新しいバージョンは、バージョン管理されたリソースを削除しても、データベースから削除されません。「バージョン管理されたリソース(VCR)の更新」を参照してください。
バージョン管理されたリソースのロード。Oracle XML DBではパス名を使用します。「バージョン管理されたリソース(VCR)の作成」を参照してください。
リソースのバージョンのロード。リソースのバージョンをロードするには、最初にそのバージョンのリソース・オブジェクトIDを検索し、そのIDを使用してバージョンをロードする必要があります。リソース・オブジェクトIDは、リソース・バージョンの履歴またはバージョン管理されたリソース自体から検索できます。「Oracle XML DBリソースのIDおよびパス名」を参照してください。
注意: Oracle XML DBは、Oracle XML DBリソースのバージョン管理をサポートしています。Oracle Databaseに含まれるユーザー定義の表またはデータのバージョン管理はサポートされません。バージョンのリソース・オブジェクトIDは、チェックインからチェックアウト間での保持が保証されません。最後のバージョンのリソース・オブジェクトID以外はすべて保持されます。 Oracle XML DBは、スキーマ表に関連付けられているトリガや制約がない場合にかぎり、XML Schemaに基づくリソースのバージョン管理をサポートします。 |
表24-1に、この章で使用されるOracle XML DBバージョニングの用語を示します。
表24-1 Oracle XML DBバージョニングの用語
Oracle XML DBバージョニングの用語 | 説明 |
---|---|
バージョン管理 |
Oracle XML DBリソースに対するすべての変更の記録または履歴が格納または管理される場合、そのリソースはバージョン管理されているといいます。 |
バージョン対応リソース |
バージョン対応リソースは、バージョン管理可能なOracle XML DBリソースです。 |
バージョン管理されたリソース |
|
バージョン・リソース |
バージョン・リソースは、バージョン管理されたOracle XML DBリソースのバージョンです。バージョン・リソースは、読取り専用のOracle XML DBリソースです。これは、更新または削除できません。 |
チェックアウト・リソース |
バージョン管理されたリソースがチェックアウトされた場合に作成されるOracle XML DBリソースです。 |
|
Oracle XML DBリソースを更新するための操作です。バージョン管理されたリソースは、変更前にチェックアウトする必要があります。変更を永続的にする場合は |
リソースIDは、Oracle XML DBリソースに対する一意のシステム生成IDです。リソースIDは、パス名を持たないリソースの識別に有効です。たとえば、バージョン・リソースは、パス名を持たないシステム生成のリソースです。PL/SQL関数GetResourceByResId
を使用して、任意のリソース・オブジェクトIDのリソースを取り出すことができます。リソースがバージョン管理されている場合は、最初のバージョンIDが戻されます。
Oracle XML DBは、更新の履歴を自動的には保持しません。これは、履歴を保持する必要のないOracle XML DBリソースが存在するためです。Oracle XML DBに要求を送信し、Oracle XML DBリソースをバージョン管理にする必要があります。今回のリリースでは、次のものを除いて、すべてのOracle XML DBリソースがバージョン対応リソースです。
フォルダ(ディレクトリまたはコレクション)
アクセス制御リスト(ACL)。指定されたリソースへのアクセス権を所有するプリンシパルを決定するアクセス制御エントリ(ACE)のリスト。
バージョン管理されたリソースが作成されると、VCRの最初のバージョン・リソースが作成され、VCRは新しく作成されたバージョンへの参照になります。
「バージョン・リソースまたはVCRバージョン」を参照してください。
例24-2 DBMS_XDB_VERSION.makeVersionedを使用したVCRの作成
リソース'/home/QUINE/versample.html
'は、バージョン管理されたリソースになります。
DECLARE resid DBMS_XDB_VERSION.RESID_TYPE; BEGIN resid := DBMS_XDB_VERSION.makeVersioned('/home/QUINE/versample.html'); END; /
PL/SQLファンクションmakeVersioned
は、バージョン管理されたリソースの最初のバージョンのリソースIDを戻します。このバージョンは、リソースIDによって表されます(「新しいバージョンのリソースID」を参照してください)。
ファンクションmakeVersioned
では、自動コミットは行われないため、COMMIT
を実行する必要があります。
Oracle XML DBは、バージョン・リソースのパス名は提供しません。ただし、バージョン・リソースIDを提供します。バージョン・リソースは読取り専用のリソースです。
バージョン・リソースIDは、次の項で説明するパッケージDBMS_XDB_VERSION
のいくつかのメソッドによって戻されます。
VCRが最初にチェックアウトされて更新されるときに、既存のリソースのコピーが作成されます。リソースの最新バージョンのリソースIDが変更されることはありません。したがって、常に元のリソースIDを使用して最新バージョンにアクセスできます。古いバージョンのリソースIDを取得するには、現在のリソースの先行リソースを取得します。
例24-3 チェックイン後の新しいバージョンのリソースIDの取出し
次の例で、/home/index.html
のチェックイン後、新しいバージョンのリソースIDを取得する方法を示します。
-- Declare a variable for resource id DECLARE resid DBMS_XDB_VERSION.RESID_TYPE; res XMLType; BEGIN -- Get the id as user checks in. resid := DBMS_XDB_VERSION.checkIn('/home/QUINE/versample.html'); -- Obtain the resource res := DBMS_XDB_VERSION.GetResourceByResId(resid); END; /
例24-4 Oracle XML DB: バージョン管理されたリソース(VCR)の作成と更新
DECLARE resid1 DBMS_XDB_VERSION.RESID_TYPE; resid2 DBMS_XDB_VERSION.RESID_TYPE; BEGIN -- Put a resource under version control. resid1 := DBMS_XDB_VERSION.makeVersioned('/home/QUINE/versample.html'); -- Check out VCR to update its contents DBMS_XDB_VERSION.checkOut('/home/QUINE/versample.html'); -- Use RESOURCE_VIEW to update versample.html UPDATE RESOURCE_VIEW SET RES = SYS.XMLTYPE.createXML( '<Resource xmlns="http://xmlns.oracle.com/xdb/XDBResource.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/xdb/XDBResource.xsd http://xmlns.oracle.com/xdb/XDBResource.xsd"> <Author>Jane Doe</Author> <DisplayName>versample</DisplayName> <Comment>Has this got updated or not ?? </Comment> <Language>en</Language> <CharacterSet>ASCII</CharacterSet> <ContentType>text/plain</ContentType> </Resource>') WHERE equals_path(RES, '/home/QUINE/versample.html') = 1'; -- Check in the change resid2 := DBMS_XDB_VERSION.checkIn('/home/QUINE/versample.html'); -- The latest version can be obtained by resid2 and its predecessor -- can be obtained by using getPredecessor() or getPredsbyResId() functions. -- resid1 is no longer valid. END; / -- Delete the VCR DELETE FROM RESOURCE_VIEW WHERE equals_path(RES, '/home/QUINE/versample.html') = 1'; -- Once the preceding delete is done, any reference to the resource -- (that is, check-in, check-out, and so on, results in -- ORA-31001: Invalid resource handle or path name "/home/QUINE/versample.html"
VCRの更新は、バージョン管理されていないリソースの更新より多くの手順が必要です。VCRのコンテンツおよびメタデータ・プロパティを更新する前に、リソースをチェックアウトします。更新を永続的にするには、リソースにチェックインする必要があります。SQLトランザクションを明示的にコミットする必要があります。
VCRを更新するには、次の手順を実行します。
VCRをチェックアウトし、VCRのパス名をOracle XML DBに渡します。
VCRを更新します。VCRのコンテンツまたはメタデータ・プロパティのいずれかを更新できます。VCRの新しいバージョンは、チェックインされるまで作成されません。そのため、更新または削除操作は、チェックインまで持続的な効果を持ちません。(更新は、SQLのRESOURCE_VIEW
やPATH_VIEW
、またはWebDAVなどの任意のプロトコルを使用して実行できます。)
VCRをチェックインまたはそのチェックアウトをキャンセルします。リソースがチェックアウトされていない場合、前のバージョンが現在のバージョンにコピーされます。その後、前のバージョンは削除されます。
Oracle9iリリース2(9.2)以上では、DBMS_XDB_VERSION.checkOut
をコールすることによって、VCRのチェックアウト操作が実行されます。リソースの更新をコミットする必要がある場合は、チェックアウト後にコミットすることをお薦めします。チェックアウト直後にコミットしない場合、後でトランザクションをロールバックする必要が起きたときに、更新内容が失われます。
Oracle9iリリース2(9.2)以上では、DBMS_XDB_VERSION.CheckIn
をコールすることによって、VCRのチェックイン操作が実行されます。プロシージャCheckIn
では、リソースのパス名を取ります。このパス名は、チェックアウトに渡したパス名と同じである必要はありませんが、チェックインのパス名とチェックアウトのパス名は、同じリソースのものである必要があります。
Oracle9iリリース2(9.2)以上では、DBMS_XDB_VERSION.unCheckOut
をコールすることによって、チェックアウトがキャンセルされます。このパス名は、チェックアウトに渡したパス名と同じである必要はありませんが、チェックインのパス名とチェックアウトのパス名は、同じリソースのものである必要があります。
VCRまたはバージョン・リソースのアクセス制御は、バージョン管理されていないリソースと同様に行われます。これらのリソースへのアクセスを要求すると、アクセス制御リスト(ACL)が確認されます。
バージョン・リソース
makeversion
を使用して、通常のリソースをVCRに変換すると、最初のバージョン・リソースが作成されます。この最初のバージョン・リソースのACLは、元のリソースのACLと同じです。チェックアウトされたリソースにチェックインすると、新しいバージョンが作成されます。この新しいバージョンのACLは、チェックアウトされたリソースのACLと同じです。バージョン・リソースを作成した後では、そのACLは変更できません。
最初のバージョンと同じVCRのACL
makeversioned
を実行してVCRを作成すると、VCRのACLは、リソースの最初のバージョンのACLと同じになります。リソースにチェックインすると、新しいバージョンが作成され、VCRは、この新しいバージョンと同じコンテンツおよびプロパティ(ACLプロパティを含みます)を持ちます。
表24-2に、DBMS_XDB_VERSION
のサブプログラムを示します。
表24-2 DBMS_XDB_VERSIONのファンクションおよびプロシージャ
ファンクションおよびプロシージャ | 説明 |
---|---|
|
パス名が指定された通常のリソースをバージョン管理されたリソースに変換します。複数のパス名が同じリソースにバインドされている場合、そのリソースのコピーが作成され、指定された
|
|
更新または削除前にVCRをチェックアウトします。
|
|
チェックアウトしVCRをチェックインします。
これは、自動コミットのSQL操作ではありません。プロシージャ リソースの名前が変更された場合、古い名前が無効であるか、または異なるリソースにバインドされているため、新しい名前を使用してチェックインする必要があります。パス名が存在しない場合、例外が発生します。パス名が変更された場合は、新しいパス名を使用してリソースをチェックインする必要があります。 |
|
チェックアウトしリソースをチェックインします。
|
|
指定されたバージョン・リソースまたはVCRで、
指定されたバージョン・リソースまたはVCRで、 注意: Oracleの今回のリリースではブランチがサポートされていないため、先行リソースのリストは1つの要素(直接の親)のみを含みます。次の |
|
指定されたバージョン・リソースまたはVCRで、
指定されたバージョン・リソースまたはVCRで、 |
|
指定されたリソース・オブジェクトIDで、リソースを
|
この項では、Oracle XML DBバージョニングを使用する場合のガイドラインについて説明します。
VCRを変更してバージョン管理の対象外にすることはできません。
更新後に、VCRの古いコピーにアクセスできます。古いコピーは、最後にチェックインしたバージョン・リソースです。
バージョンIDまたはパス名がわかっている場合、そのIDを使用して古いコピーをロードできます。
IDがわからない場合は、getPredecessors()をコールしてIDを取得できます。
Oracle XML DBリソースのデータのみバージョン管理できます。
リソースがVCRになると、そのリソースのコピーが作成され、バージョン履歴に記録されます。そのリソースはVCRとしてフラグでマークされます。この章の始めに、バージョン管理リソースとは、バージョン管理されたOracle XML DBリソースで、VCRはあるバージョンのOracle XML DBリソースへの参照であると記述されています。VCRは、データベースに物理的に格納されません。つまり、リソースのバージョニングが実行された場合(リソースがVCRになった場合)、リソースの追加コピーは格納されません。
バージョンは、リソースと同じオブジェクト・リレーショナル表に格納されます。バージョニングは、スキーマに基づかないリソースに対して機能します。また、スキーマ表に関連付けられているトリガや制約がない場合は、XML Schemaに基づくリソースに対しても機能します。
このマニュアルでは、バージョン・リソースは、パス名を持たないシステム生成のリソースであると記述されています。ただし、ナビゲーショナル・パスを使用してリソースにアクセスすることは可能です。
VCRリソースのチェックアウト時には、そのリソースのコピーは作成されません。VCRリソースが最初に更新されたときに、そのリソースのコピーが作成されます。リソースにチェックインせずに複数の変更を加え、それからリソースの最新コピーを取得できます。異なるユーザーの場合でも、最新コピーを取得できます。
チェックアウトされたバージョンを複数のユーザーが更新することはできません。チェックアウトが実行され、トランザクションがコミットされた後、すべてのユーザーがリソースを編集できます。
チェックアウトされたリソースがチェックインされると、以前にチェックアウトされた元のバージョンがバージョン履歴に追加されます。
リソースのメタデータは各バージョンで維持されます。バージョンは同じ表に格納されます。バージョニングは、スキーマに基づかないリソースに対してのみ、またはスキーマ表に関連付けられているトリガや制約がない場合はXML Schemaに基づくリソースに対しても機能します。