この付録では、現在のOracle DatabaseリリースでRDFセマンティク・グラフ・サポートに関連する任意の型、シノニムまたはPL/SQLパッケージを使用するために実行する必要がある手順について説明します。1つ以上のスクリプトを実行し、Spatial and Graphがインストールされており、Partitioningオプションが使用可能であることを確認する必要があります。これらの要求事項については、「RDFセマンティック・グラフ・サポートを有効にする」を参照してください。
この付録では、RDFセマンティク・グラフ・サポートを有効にした後、次のいずれかを実行する必要がある場合、その手順についても説明します。
「以前のリリースへのRDFセマンティク・グラフ・サポートのダウングレード」の説明にあるとおり、以前のOracle Databaseリリースに付属のRDFセマンティク・グラフ・サポートをダウングレードします。
「RDFセマンティク・グラフ・サポートの削除」の説明にあるとおり、データベースからRDFセマンティク・グラフのすべてのサポートを削除します。
現在のOracle DatabaseリリースでRDFセマンティク・グラフ・サポートに関する任意の型、シノニムまたはPL/SQLパッケージを使用するには、次の項でご使用の状況に該当する手順に従って、この機能を新しいOracle Databaseインストールにインストールするか、またはこの機能を以前のリリースからアップグレードする必要があります。
また、「SpatialおよびPartitioningの要件」の説明にあるとおり、Spatial and Graphがインストール済みで、Partitioningオプションが有効化されていることを確認する必要があります。
Oracle Databaseリリース11.2以上の新規インストールでRDFセマンティック・グラフ・サポートを有効化するには、次の手順を実行します。
SYSDBA権限を持つSYSユーザーとしてデータベースに接続します(SYS AS SYSDBAを使用し、SYSアカウントのパスワードを求められたら入力します)。
リリース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専用の資料を参照してください。
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サポートに問い合せます。その他のモデルの場合は、次のいずれかのアクションを実行する必要があります。
次の手順に従って、モデルを再作成します。
アプリケーション表の内容からステージング表を構築します。たとえば、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);
exec sem_apis.drop_sem_model('m');
アプリケーション表の切捨てを行います。たとえば、次のようにATABを切り捨てます。
truncate table atab;
アプリケーション表を使用してモデルを作成します。たとえば、次のようにアプリケーション表ATABからモデルMを作成します。
exec sem_apis.create_sem_model('m','atab','tri');
ステージング表のトリプルまたはクワッドをモデルにロードします。たとえば、次のように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サポートに連絡します。
セマンティク・テクノロジ・サポートが含まれる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_TABLES
、FAILED_INSUFFICIENT_WORKSPACE_PRIVILEGES
またはFAILED_OLS_POLICIES_ARE_ENABLED
がある場合は、RDFデータを移行する必要があります。
ただしFLOAT_DOUBLE_DECIMAL属性、XSD_TIME属性およびXSD_BOOLEAN属性が存在しないか、文字列値VALID
がなく、DATA_CONVERSION_CHECK属性が存在しない場合、RDFデータを移行する必要はありません。ただし、セマンティク・ネットワークに空のRDFリテラルがある場合は、「空のRDFリテラルの処理」を参照してください。既存の空リテラルを新しい形式に移行することを選択した場合は、この項の手順に従います。
RDFデータを移行するには、次の手順に従います。
SYSDBA権限を持つSYSユーザーとしてデータベースに接続(SYS AS SYSDBAを使用し、SYSアカウントのパスワードを求められたら入力します)し、SET CURRENT_SCHEMA=MDSYS
を入力します。
ユーザーMDSYSに次の権限があることを確認します。
セマンティク・ネットワークのすべてのアプリケーション表へのINSERT権限
ALTER ANY INDEX権限(オプション: ドキュメントのセマンティク索引付けが使用されている場合のみ必要)
バージョン対応アプリケーション表が変更されたワークスペースに対するACCESS権限(オプション: RDFデータにWorkspace Managerを使用する場合のみ必要)
RDFデータに対するOLSポリシーを一時的に無効化します(オプション: RDFデータにOLSが使用されている場合のみ必要)。OLSポリシーは、convert_old_rdf_dataを実行した後に、再度有効にできます。
SQL*Plusを起動します。既存の空リテラルを新しい形式に変換することなくRDFデータを移行する(「空のRDFリテラルの処理」を参照)には、次の文を入力します。
EXECUTE sdo_rdf_internal.convert_old_rdf_data;
RDFデータを移行し、既存の空のリテラルも新しい形式に変換する場合は、convert_old_rdf_data
にflags
パラメータ('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
プロシージャの実行に非常に時間がかかります。
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 (無効識別子)エラーが発生することがあります。
リリース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 "
値が存在することになります。
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およびパーティショニング・ガイド』を参照してください。
この項では、RDFセマンティク・グラフ・サポートをダウングレードする方法について、Oracle Databaseのリリース11.2へのダウングレードとあわせて説明します。
まれに必要になる場合を除き、ダウングレードはしないことをお薦めします。以前のリリースにダウングレードすると、その間のリリースで行われたバグ・フィックスや機能拡張のメリットが得られないことになります。
RDFデータのWorkspace Managerサポートを有効にした場合、そのサポートは、「RDFデータに対するWorkspace Managerサポートの削除」の説明にあるとおり、データベースのRDFセマンティク・グラフ・サポートをダウングレードする前に、削除する必要があります。
Oracle Databaseリリース11.2にダウングレードする必要がある場合、データベースをダウングレードすると、セマンティク・テクノロジ・コンポーネントは自動的にダウングレードされます。ただし、リリース12に固有のRDFデータまたはOWLデータ(以前のバージョンでサポートされない、リリース12以上のRDF/OWL永続的な構造)は、リリース11.2との互換性のために、ダウングレードを実行する前に削除する必要があります。
リリース12.1以上のRDFデータにリリース11.2との非互換性があるかどうかを確認するには、次の手順を実行します。
SYSDBA権限を持つSYSユーザーとしてデータベース(リリース12.1以上)に接続します(SYS AS SYSDBAを使用し、SYSアカウントのパスワードを求められたら入力します)。
SQL*Plusを起動し、次の文を入力します。
SET SERVEROUT ON EXECUTE SDO_SEM_DOWNGRADE.CHECK_112_COMPATIBLE;
リリース11.2と互換性がないRDFデータがある場合、プロシージャはエラーを生成し、非互換データのリストを表示します。この場合は、次の手順を実行する必要があります。
この項の前半の説明にあるとおり、リリース12.1以上のリリース固有のRDFデータまたはOWLデータを削除します(まだ削除していない場合)。
データベースのダウングレードを実行します。
SYSDBA権限を持つSYSユーザーとしてリリース11.2のデータベースに接続します(SYS AS SYSDBAを使用し、SYSアカウントのパスワードを求められたら入力します)。
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互換データが保持されます。
この項では、データベースからRDFセマンティク・グラフ・サポートを削除する方法について説明します。特別な理由がないかぎり、このサポートは削除しないことを強くお薦めします。このサポートを削除すると、アプリケーションまたはデータベース・ユーザーはRDFセマンティク・グラフ・サポートに関連する型、シノニムまたはPL/SQLパッケージを使用できなくなります。
RDFデータのWorkspace Managerサポートを有効にした場合、そのサポートは、「RDFデータに対するWorkspace Managerサポートの削除」の説明にあるとおり、データベースのRDFセマンティク・グラフ・サポートを削除する前に、削除する必要があります。
データベースからRDFセマンティク・グラフ・サポートを削除するには、次の手順を実行します。
SYSDBA権限を持つSYSユーザーとしてデータベースに接続します(SYS AS SYSDBAを使用し、SYSアカウントのパスワードを求められたら入力します)。
Linuxの場合: @$ORACLE_HOME/md/admin/semremov.sql
Windowsの場合: @%ORACLE_HOME%\md\admin\semremov.sql
semremov.sql
スクリプトは、セマンティク・ネットワークを削除し、RDFセマンティク・グラフの型、表およびPL/SQLパッケージも削除します。