プライマリ・コンテンツに移動
Oracle® Spatial and Graph RDFセマンティック・グラフ開発者ガイド
12cリリース1 (12.1)
B72469-07
目次へ移動
目次
索引へ移動
索引

前
次

A RDFセマンティク・グラフ・サポートの有効化、ダウングレードまたは削除

この付録では、現在のOracle DatabaseリリースでRDFセマンティク・グラフ・サポートに関連する任意の型、シノニムまたはPL/SQLパッケージを使用するために実行する必要がある手順について説明します。1つ以上のスクリプトを実行し、Spatial and Graphがインストールされており、Partitioningオプションが使用可能であることを確認する必要があります。これらの要求事項については、「RDFセマンティック・グラフ・サポートを有効にする」を参照してください。

この付録では、RDFセマンティク・グラフ・サポートを有効にした後、次のいずれかを実行する必要がある場合、その手順についても説明します。

A.1 RDFセマンティク・グラフ・サポートの有効化

現在のOracle DatabaseリリースでRDFセマンティク・グラフ・サポートに関する任意の型、シノニムまたはPL/SQLパッケージを使用するには、次の項でご使用の状況に該当する手順に従って、この機能を新しいOracle Databaseインストールにインストールするか、またはこの機能を以前のリリースからアップグレードする必要があります。

また、「SpatialおよびPartitioningの要件」の説明にあるとおり、Spatial and Graphがインストール済みで、Partitioningオプションが有効化されていることを確認する必要があります。

A.1.1 新規データベース・インストールでのRDFセマンティク・グラフ・サポートの有効化

Oracle Databaseリリース11.2以上の新規インストールでRDFセマンティック・グラフ・サポートを有効化するには、次の手順を実行します。

  1. SYSDBA権限を持つSYSユーザーとしてデータベースに接続します(SYS AS SYSDBAを使用し、SYSアカウントのパスワードを求められたら入力します)。

  2. リリース12.1.0.2に限り(リリース12.1.0.1以前と12.1.0.2より後のリリースは含みません)、Oracle SpatialおよびGraph GeoRaster機能を有効にしていない場合は次のように入力してください。

    EXECUTE mdsys.enableGeoRaster;

    Oracle Spatial and Graph GeoRaster機能が有効化されていないと、リリース12.1.0.2.0ではOracle Spatial and Graph RDF Semantic Graphが正しく構成されない場合があります。セマンティク・モデルに関連付けられたアプリケーション表に対するDDL操作のためのシステム・トリガーが存在しないためです。このシステム・トリガーはGeoRasterが有効化されると作成されます。つまり、ユーザーがGeoRasterを有効化しないとこのトリガーは存在しません。

    データ破損のチェックおよびデータ破損が発生した場合の対応を含むその他の詳細は、後述するリリース12.1.0.2専用の資料を参照してください。

  3. SQL*Plusを起動し、次の文を入力します。

    • Linuxの場合: @$ORACLE_HOME/md/admin/catsem.sql

    • Windowsの場合: @%ORACLE_HOME%\md\admin\catsem.sql

セマンティク・ネットワークがすでに存在する場合、または、RDFセマンティク・グラフの型、表またはPL/SQLパッケージがすでに存在する場合、catsem.sqlスクリプトはエラーで終了します。

スクリプトが正常に実行された場合、次の列値を持つ行がMDSYS.RDF_PARAMETER表に挿入されます。

  • NAMESPACE: MDSYS

  • 属性: SEM_VERSION

  • VALUE: (12.1で始まる文字列)

  • 説明: VALID

「RDFデータに対するWorkspace Managerサポートの有効化」の説明にあるとおり、Workspace ManagerでRDFデータを使用する場合、catsem.sqlを実行した後に適切なスクリプトを実行する必要もあります。

リリース12.1.0.2に限り、Oracle Spatial and Graph GeoRaster機能が有効化されていないと、Oracle Spatial and Graph RDF Semantic Graphが正しく構成されない場合があります。これは、セマンティク・モデルに関連付けられたアプリケーション表に対するDDL操作用のシステム・トリガーが存在しないためです。このトリガーを作成するには、SYSとしてmdsys.enableGeoRasterを実行する必要があります。

この問題は、Oracle Databaseバージョン12.1.0.2.0新規インストールと、バージョン12.1.0.2.0にアップグレードされたデータベースの両方に影響します。

このDDLトリガーが存在しない場合、アプリケーション表に対するTRUNCATE操作によって、アプリケーション表のすべての行が削除されますが、MDSYS.RDF_LINK$に格納されている関連するトリプルは削除されません。この場合、アプリケーション表と関連するセマンティク・モデルに不一致が生じるため、この不一致を修正する必要があります。

次のようなSQL問合せを使用して、データの不一致をチェックします(たとえば、ATABという名前のアプリケーション表がMというセマンティク・モデルに関連付けられているとします)。

SELECT COUNT(*) FROM ATAB;
SELECT SUM(COST) FROM MDSYS.RDFM_M;

2つの問合せが同一の結果を返す場合、データの不一致はありません。mdsys.enableGeoRasterを実行する以外の処置は必要ありません。

ただし、2つの問合せから返される結果が異なる場合は、mdsys.enableGeoRasterを実行する他に、破損したそれぞれのモデルをさらに処理する必要があります。モデルのセキュリティがOLSポリシーに対応している場合はOracleサポートに問い合せます。その他のモデルの場合は、次のいずれかのアクションを実行する必要があります。

  • 次の手順に従って、モデルを再作成します。

    1. アプリケーション表の内容からステージング表を構築します。たとえば、SDO_RDF_TRIPLE_S列TRIを含むアプリケーション表ATABの内容からステージング表STABを構築します。

      create table stab as
      select
        a.tri.get_subject() rdf$stc_sub,
        a.tri.get_property() rdf$stc_pred,
        a.tri.get_object() rdf$stc_obj,
        (case when(instr(a.tri.get_model(),':') > 0) then
                substr(a.tri.get_model(),instr(a.tri.get_model(),':')+1)
              else null
         end) rdf$stc_graph
      from atab a;

      または、非常に大きなモデルの場合、次のような問合せを使用して2つのステージング表(VARCHAR目的語とCLOB目的語に対して1つずつ)にデータを挿入できます。次の例ではCREATE TABLE文で並列度4 (/*+ parallel(4) */)が使用されることに注意してください。並列度は特定のハードウェア設定に合せてカスタマイズする必要があります。

      -- for varchar literals
      create /*+ parallel(4) */ table stab_vc as
      select /*+ parallel */
        (case when vs.value_type = 'UR' then '<' || vs.value_name || '>'
              else vs.value_name
         end) rdf$stc_sub,
        ('<' || vp.value_name || '>') rdf$stc_pred,
        (case when vo.value_type = 'UR' then '<' || vo.value_name || '>'
              when vo.value_type = 'BN' then vo.value_name
              else '"' || vo.value_name || '"' ||
                   nvl2(vo.language_type,'@' || vo.language_type,'') ||
                   nvl2(vo.literal_type,'^^<' || vo.literal_type || '>', '')
         end) rdf$stc_obj,
        (nvl2(vg.value_name,('<' || vg.value_name || '>'),'')) rdf$stc_graph
      from atab a, mdsys.rdf_value$ vs, mdsys.rdf_value$ vp, mdsys.rdf_value$ vo, mdsys.rdf_value$ vg
      where
        (a.tri.rdf_s_id = vs.value_id) and
        (a.tri.rdf_p_id = vp.value_id) and
        (a.tri.rdf_c_id = vo.value_id) and
        ((bitand(a.tri.rdf_m_id, 79228162514264337593543950335-4294967295)/4294967296) = vg.value_id(+)) and
        (vo.long_value is null);
       
      -- for clob literals
      create /*+ parallel(4) */ table stab_clob as
      select /*+ parallel */
        (case when vs.value_type = 'UR' then '<' || vs.value_name || '>'
              else vs.value_name
         end) rdf$stc_sub,
        ('<' || vp.value_name || '>') rdf$stc_pred,
        (sem_apis.compose_rdf_term(vo.value_name, vo.value_type, vo.literal_type, vo.language_type, vo.long_value)) as rdf$stc_obj,
        (nvl2(vg.value_name,('<' || vg.value_name || '>'),'')) rdf$stc_graph
      from atab a, mdsys.rdf_value$ vs, mdsys.rdf_value$ vp, mdsys.rdf_value$ vo, mdsys.rdf_value$ vg
      where
        (a.tri.rdf_s_id = vs.value_id) and
        (a.tri.rdf_p_id = vp.value_id) and
        (a.tri.rdf_c_id = vo.value_id) and
        ((bitand(a.tri.rdf_m_id, 79228162514264337593543950335-4294967295)/4294967296) = vg.value_id(+)) and
        (vo.long_value is not null);
    2. モデルを削除します。たとえば、次のようにモデルMを削除します。
      exec sem_apis.drop_sem_model('m');
    3. アプリケーション表の切捨てを行います。たとえば、次のようにATABを切り捨てます。

      truncate table atab;
    4. アプリケーション表を使用してモデルを作成します。たとえば、次のようにアプリケーション表ATABからモデルMを作成します。

      exec sem_apis.create_sem_model('m','atab','tri');
    5. ステージング表のトリプルまたはクワッドをモデルにロードします。たとえば、次のようにSTABのトリプルまたはクワッドをモデルMにロードします。(大きなモデルの場合は、かわりにSEM_APIS.BULK_LOAD_FROM_STAGING_TABLEプロシージャを使用できます。)

      insert into atab(tri)
      select sdo_rdf_triple_s('m1' || nvl2(s.rdf$stc_graph,':'||s.rdf$stc_graph,''), s.rdf$stc_sub, s.rdf$stc_pred, s.rdf$stc_obj)
      from stab s;

      または、非常に大きなモデルに対して2つのステージング表を使用する手順1の代替例を参考に、SEM_APIS.BULK_LOAD_FROM_STAGING_TABLEプロシージャを使用してVARCHAR表(stab_vc)のデータをロードし、INSERT AS SELECTを使用してCLOB表(stab_clob)のデータをロードします。

  • または、Oracleサポートに連絡します。

A.1.2 リリース11.1または11.2からのRDFセマンティク・グラフ・サポートのアップグレード

セマンティク・テクノロジ・サポートが含まれるOracle Databaseリリース11.1または11.2からのアップグレードでは、データベースがアップグレードされると、セマンティク・テクノロジ・サポートがリリース12.1以上に自動的にアップグレードされます。

ただし、既存のリリース11.1または11.2のRDFネットワークにxsd:float、xsd:double、xsd:booleanまたはxsd:timeの型付きリテラル値を含むトリプルがある場合は、RDFデータの移行が必要な場合もあります。

RDFデータを移行する必要があるかどうかを調べるには、DBA権限を持つユーザーとしてデータベースに接続し、次のようにMDSYS.RDF_PARAMETER表を問い合せます。

SELECT namespace, attribute, value FROM mdsys.rdf_parameter
  WHERE namespace='MDSYS' 
  AND attribute IN ('FLOAT_DOUBLE_DECIMAL',
                    'XSD_TIME', 'XSD_BOOLEAN', 
                    'DATA_CONVERSION_CHECK');

FLOAT_DOUBLE_DECIMAL属性、XSD_TIME属性またはXSD_BOOLEAN属性に文字列値INVALIDがある場合、またはDATA_CONVERSION_CHECK属性に文字列値FAILED_UNABLE_TO_LOCK_APPLICATION_TABLESFAILED_INSUFFICIENT_WORKSPACE_PRIVILEGESまたはFAILED_OLS_POLICIES_ARE_ENABLEDがある場合は、RDFデータを移行する必要があります。

ただしFLOAT_DOUBLE_DECIMAL属性、XSD_TIME属性およびXSD_BOOLEAN属性が存在しないか、文字列値VALIDがなく、DATA_CONVERSION_CHECK属性が存在しない場合、RDFデータを移行する必要はありません。ただし、セマンティク・ネットワークに空のRDFリテラルがある場合は、「空のRDFリテラルの処理」を参照してください。既存の空リテラルを新しい形式に移行することを選択した場合は、この項の手順に従います。

RDFデータを移行するには、次の手順に従います。

  1. SYSDBA権限を持つSYSユーザーとしてデータベースに接続(SYS AS SYSDBAを使用し、SYSアカウントのパスワードを求められたら入力します)し、SET CURRENT_SCHEMA=MDSYSを入力します。

  2. ユーザーMDSYSに次の権限があることを確認します。

    • セマンティク・ネットワークのすべてのアプリケーション表へのINSERT権限

    • ALTER ANY INDEX権限(オプション: ドキュメントのセマンティク索引付けが使用されている場合のみ必要)

    • バージョン対応アプリケーション表が変更されたワークスペースに対するACCESS権限(オプション: RDFデータにWorkspace Managerを使用する場合のみ必要)

  3. RDFデータに対するOLSポリシーを一時的に無効化します(オプション: RDFデータにOLSが使用されている場合のみ必要)。OLSポリシーは、convert_old_rdf_dataを実行した後に、再度有効にできます。

  4. SQL*Plusを起動します。既存の空リテラルを新しい形式に変換することなくRDFデータを移行する(「空のRDFリテラルの処理」を参照)には、次の文を入力します。

    EXECUTE sdo_rdf_internal.convert_old_rdf_data;
    

    RDFデータを移行し、既存の空のリテラルも新しい形式に変換する場合は、convert_old_rdf_dataflagsパラメータ('CONVERT_ORARDF_NULL'に設定)を付けてコールします。また、オプションでtablespace_nameパラメータを使用し、データ移行中に中間表を作成するときに使用する表領域を指定することができます。たとえば次の文は、古いセマンティク・データを移行し、既存の"orardf:null "値を""に変換して、中間表にMY_TBS表領域を使用します。

    EXECUTE sdo_rdf_internal.convert_old_rdf_data(
      flags=>'CONVERT_ORARDF_NULL', 
      tablespace_name=>'MY_TBS');
    

    セマンティク・ネットワークにxsd:float、xsd:double、xsd:timeまたはxsd:booleanの型付きリテラルを使用する(または使用の影響を受ける)多数のトリプルが含まれている場合、 sdo_rdf_internal.convert_old_rdf_dataプロシージャの実行に非常に時間がかかります。

  5. 次の文を入力します。

    • Linuxの場合: @$ORACLE_HOME/md/admin/semrelod.sql

    • Windowsの場合: @%ORACLE_HOME%\md\admin\semrelod.sql

注意:

リリース12.1以上にアップグレードした後に、sdo_rdf_internal.convert_old_rdf_dataプロシージャとsemrelod.sqlスクリプトが実行されなかった場合、SEM_MATCH問合せの実行時にORA-00904 (無効識別子)エラーが発生することがあります。

A.1.2.1 空のRDFリテラルの処理

リリース11.2では、値が空のRDFリテラルを処理する方法が変更されました。以前のリリースでは、値が空のリテラルは"orardf:null "に変換されていました。リリース11.2以上では、そのような値は変更されることなく(""のまま)格納されます。ただし既存の"orardf:null"値を""に移行するかどうかはオプションです。

"orardf:null "値がセマンティク・ネットワークに存在するかどうかを調べるには、DBA権限を持つユーザーとしてデータベースに接続し、次のようにMDSYS.RDF_PARAMETER表を問い合せます。

SELECT namespace, attribute, value FROM mdsys.rdf_parameter
  WHERE namespace='MDSYS' 
  AND attribute = 'NULL_LITERAL';

NULL_LITERAL属性に値EXISTSがある場合、セマンティク・ネットワークに"orardf:null "値が存在することになります。

A.1.3 SpatialおよびPartitioningの要件

Oracle Spatial and Graphは、RDFおよびOWLの機能を使用する前にインストールする必要があります。Oracle Locatorだけでは十分でありません。Spatial and GraphとLocatorの詳細は、『Oracle Spatial and Graph開発者ガイド』を参照してください。

Partitioningオプションは、RDFおよびOWLの機能を使用する前に有効にする必要があります。Partitioningオプションに関するライセンス情報は、『Oracle Databaseライセンス情報』を参照してください。パーティショニングの使用に関する情報は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

A.2 以前のリリースへのRDFセマンティク・グラフ・サポートのダウングレード

この項では、RDFセマンティク・グラフ・サポートをダウングレードする方法について、Oracle Databaseのリリース11.2へのダウングレードとあわせて説明します。

まれに必要になる場合を除き、ダウングレードはしないことをお薦めします。以前のリリースにダウングレードすると、その間のリリースで行われたバグ・フィックスや機能拡張のメリットが得られないことになります。

RDFデータのWorkspace Managerサポートを有効にした場合、そのサポートは、「RDFデータに対するWorkspace Managerサポートの削除」の説明にあるとおり、データベースのRDFセマンティク・グラフ・サポートをダウングレードする前に、削除する必要があります。

A.2.1 リリース11.2のセマンティク・テクノロジ・サポートへのダウングレード

Oracle Databaseリリース11.2にダウングレードする必要がある場合、データベースをダウングレードすると、セマンティク・テクノロジ・コンポーネントは自動的にダウングレードされます。ただし、リリース12に固有のRDFデータまたはOWLデータ(以前のバージョンでサポートされない、リリース12以上のRDF/OWL永続的な構造)は、リリース11.2との互換性のために、ダウングレードを実行するに削除する必要があります。

リリース12.1以上のRDFデータにリリース11.2との非互換性があるかどうかを確認するには、次の手順を実行します。

  1. SYSDBA権限を持つSYSユーザーとしてデータベース(リリース12.1以上)に接続します(SYS AS SYSDBAを使用し、SYSアカウントのパスワードを求められたら入力します)。

  2. SQL*Plusを起動し、次の文を入力します。

    SET SERVEROUT ON
    EXECUTE SDO_SEM_DOWNGRADE.CHECK_112_COMPATIBLE;
    

リリース11.2と互換性がないRDFデータがある場合、プロシージャはエラーを生成し、非互換データのリストを表示します。この場合は、次の手順を実行する必要があります。

  1. この項の前半の説明にあるとおり、リリース12.1以上のリリース固有のRDFデータまたはOWLデータを削除します(まだ削除していない場合)。

  2. データベースのダウングレードを実行します。

  3. SYSDBA権限を持つSYSユーザーとしてリリース11.2のデータベースに接続します(SYS AS SYSDBAを使用し、SYSアカウントのパスワードを求められたら入力します)。

  4. SQL*Plusを起動し、次の文を入力します。

    • Linuxの場合: @$ORACLE_HOME/md/admin/semrelod.sql

    • Windowsの場合: @%ORACLE_HOME%\md\admin\semrelod.sql

    スクリプトが正常に実行された場合、次の列値を持つ行がMDSYS.RDF_PARAMETER表に挿入されます。

    • NAMESPACE: MDSYS

    • 属性: SEM_VERSION

    • 値: (112で始まる文字列)

    • 説明: VALID

    semrelod.sqlスクリプトが正常に完了すると、リリース11.2のOracleセマンティク・テクノロジ・サポートが有効化されて使用可能になり、すべてのリリース11.2互換データが保持されます。

A.3 RDFセマンティク・グラフ・サポートの削除

この項では、データベースからRDFセマンティク・グラフ・サポートを削除する方法について説明します。特別な理由がないかぎり、このサポートは削除しないことを強くお薦めします。このサポートを削除すると、アプリケーションまたはデータベース・ユーザーはRDFセマンティク・グラフ・サポートに関連する型、シノニムまたはPL/SQLパッケージを使用できなくなります。

RDFデータのWorkspace Managerサポートを有効にした場合、そのサポートは、「RDFデータに対するWorkspace Managerサポートの削除」の説明にあるとおり、データベースのRDFセマンティク・グラフ・サポートを削除する前に、削除する必要があります。

データベースからRDFセマンティク・グラフ・サポートを削除するには、次の手順を実行します。

  1. SYSDBA権限を持つSYSユーザーとしてデータベースに接続します(SYS AS SYSDBAを使用し、SYSアカウントのパスワードを求められたら入力します)。

  2. SQL*Plusを起動し、次の文を入力します。

    • Linuxの場合: @$ORACLE_HOME/md/admin/semremov.sql

    • Windowsの場合: @%ORACLE_HOME%\md\admin\semremov.sql

semremov.sqlスクリプトは、セマンティク・ネットワークを削除し、RDFセマンティク・グラフの型、表およびPL/SQLパッケージも削除します。