1.11 RDFデータのロードおよびエクスポート

RDFデータをデータベース内のRDFグラフにロードし、そのデータをデータベースからステージング表にエクスポートできます。

RDFグラフにRDFデータをロードするには、次のいずれかのオプションを使用します。

  • ステージング表からRDFグラフにデータをバルク・ロードするか、追加します(各行にはRDFトリプルの主語、述語および目的語の3つのコンポーネントとオプションで名前付きグラフが含まれます)。詳細は、「ステージング表を使用したRDFデータのバルク・ロード」を参照してください。

    これは、大量のデータをロードする最も高速なオプションです。

  • 「INSERT文を使用したRDFデータのロード」の説明に従って、SDO_RDF_TRIPLE_SコンストラクタをコールするSQL INSERT文を使用してアプリケーション表にデータをロードし、対応するRDFトリプル(場合によってはグラフ名も含む)をRDFデータ・ストアに挿入します。

    このオプションは、小規模なデータをロードする場合に便利です

  • RDFグラフでのSPARQL更新操作のサポートで説明されているように、SEM_APIS.UPDATE_RDF_GRAPHを介して実行されるSPARQL更新文を使用して、データをRDFグラフにロードします。

    このオプションは少量のデータのロードに便利です。また、より多くのデータをLOAD文を介してロードするために使用することもできます。

  • Apache JenaベースのJava APIを使用して、RDFグラフにデータをロードします。これは、「RDF Graph Support for Apache Jena」を参照してください。

    このオプションでは、少量のデータと大量のデータをロードする方法がいくつか提供され、多くの異なるRDFシリアライズ形式がサポートされます。

ノート:

ステージング表内のUnicodeデータは、WC3N-Triple形式で指定されているように(http://www.w3.org/TR/rdf-testcases/#ntriples)エスケープする必要があります。SEM_APIS.ESCAPE_RDF_TERM関数を使用すると、ステージング表内のUnicode値をエスケープできます。たとえば、次のようにします。

create table esc_stage_tab(rdf$stc_sub, rdf$stc_pred, rdf$stc_obj);

insert /*+ append nologging parallel */ into esc_stage_tab (rdf$stc_sub, rdf$stc_pred, rdf$stc_obj)
select sem_apis.escape_rdf_term(rdf$stc_sub, options=>’ UNI_ONLY=T '), sem_apis.escape_rdf_term(rdf$stc_pred, options=>’ UNI_ONLY=T '), sem_apis.escape_rdf_term(rdf$stc_obj, options=>’ UNI_ONLY=T ')
from stage_tab; 

RDFデータをエクスポートする、言い換えると、RDFデータをステージング表に格納できるN-Triple形式またはN-Quad形式でOracle Databaseから取り出すには、「RDFデータのエクスポート」で説明されているSQL問合せを使用します。

ノート:

Oracle Databaseリリース12.1では、「Oracle Data Pumpを使用したRDFネットワークのエクスポートまたはインポート」の説明にあるとおり、Oracle Data Pumpユーティリティの全データベース・エクスポートおよびインポートの機能を使用して、RDFネットワークをエクスポートおよびインポートできます。

1.11.1 ステージング表を使用したRDFデータのバルク・ロード

ステージング表を使用して、RDFデータ(およびオプションでRDF以外の関連データ)をバルク・ロードできます。SEM_APIS.LOAD_INTO_STAGING_TABLEプロシージャ(「SEM_APISパッケージ・サブプログラム」を参照)をコールしてデータをロードします(ロード操作中に構文の正確性をチェックできます)。その後、SEM_APIS.BULK_LOAD_RDF_GRAPHプロシージャをコールして、ステージング表からRDFストアにデータをロードできます。(データがステージング表へのロード操作中に解析されていない場合は、SEM_APIS.BULK_LOAD_RDF_GRAPHプロシージャのコール時にflagsパラメータにPARSEキーワードを指定する必要があります。)

次の例では、すべての必須列とそれらの列の必須名(およびロードする1つ以上のRDFトリプルにグラフ名が含まれる場合は、含まれる必要のあるオプションのRDF$STC_graph列)を含むステージング表の書式を示します。

CREATE TABLE stage_table (
                     RDF$STC_sub varchar2(4000) not null,
                     RDF$STC_pred varchar2(4000) not null,
                     RDF$STC_obj varchar2(4000) not null,
                     RDF$STC_graph varchar2(4000)
);

RDF以外のデータもロードする場合は、CREATE TABLE文にRDF以外のデータ用の追加列を指定します。非RDF列の名前の形式は、必須列の名前と異なる必要があります。次の例では、非RDF属性用の2つの追加列(SOURCEおよびID)を含むステージング表を作成します。

CREATE TABLE stage_table_with_extra_cols (
                     source VARCHAR2(4000),
                     id NUMBER,
                     RDF$STC_sub varchar2(4000) not null,
                     RDF$STC_pred varchar2(4000) not null,
                     RDF$STC_obj varchar2(4000) not null,
                     RDF$STC_graph varchar2(4000)
);

ノート:

いずれの形式のCREATE TABLE文でも、表を圧縮するためにCOMPRESS句を追加できます。このオプションにより、必要なディスク領域が減少し、バルク・ロードのパフォーマンスが向上する可能性があります。

起動側とネットワーク所有者ユーザーの両方が、ステージング表に対するSELECT権限と、アプリケーション表に対するINSERT権限を持っている必要があります。

次の項も参照してください。

1.11.1.1 ステージング表のロード

RDFストアへのロードの準備として、複数の方法でRDFデータをステージング表にロードできます。一般的な方法は次のとおりです。

1.11.1.1.1 SQL*Loaderを使用したステージング表へのN-Triple形式のデータのロード

SQL*Loaderユーティリティを使用して、RDFデータを解析し、ステージング表にロードします。Oracle Database Examplesメディアからデモ・ファイルをインストールしている場合(『Oracle Database Examplesインストレーション・ガイド』を参照)、サンプルの制御ファイル$ORACLE_HOME/md/demo/network/rdf_demos/bulkload.ctlを使用できます。入力データがN-Triple形式の場合、このファイルを変更して使用できます。

NETWORK_MAX_STRING_SIZEのバイト数より長いオブジェクトはロードできません。サンプルのSQL*Loader制御ファイルを使用する場合、このような長い値を含むトリプル(行)は、自動的に拒否され、SQL*Loaderの不良ファイルに格納されます。ただし、これらの拒否された行は、SQL INSERT文を使用してアプリケーション表に挿入することによってロードできます(「INSERT文を使用したRDFデータのロード」を参照)。

1.11.1.1.2 外部表を使用したステージング表へのN-Quad形式のデータのロード

次の方法によって、Oracle外部表を使用してステージング表にN-Quad形式のデータ(4つの構成要素を持つ拡張トリプル)をロードできます。

  1. SEM_APIS.CREATE_SOURCE_EXTERNAL_TABLEプロシージャをコールして外部表を作成し、SQL STATEMENT ALTER TABLEを使用して、関連する1つ以上の入力ファイル名を含めるように外部表を変更します。1つ以上の入力ファイルを含むフォルダに関連付けられたディレクトリ・オブジェクトに対するREAD権限とWRITE権限を持っている必要があります。
  2. ネットワーク所有者が外部表に対するSELECTおよびINSERT権限を持っていることを確認します。
    ネットワーク所有者がルーチンを呼び出してステージング表を移入し、ステージング表からロードする場合は、その所有者が外部表に対するSELECT権限、およびステージング表に対するINSERT権限とSELECT権限の両方を持っていることを確認します。
  3. SEM_APIS.LOAD_INTO_STAGING_TABLEプロシージャをコールしてステージング表に移入します。
  4. ロードが終了したら、COMMIT文を発行してトランザクションを完了します。

例1-109 外部表を使用してステージング表をロードする方法

-- Create a source external table (note: table names are case sensitive)
BEGIN
  sem_apis.create_source_external_table(
    source_table    => 'stage_table_source'
   ,def_directory   => 'DATA_DIR'
   ,bad_file        => 'CLOBrows.bad'
   );
END;
/

-- Use ALTER TABLE to target the appropriate file(s)
alter table "stage_table_source" location ('demo_datafile.nt');
 
-- Load the staging table (note: table names are case sensitive)
BEGIN
  sem_apis.load_into_staging_table(
    staging_table => 'STAGE_TABLE'
   ,source_table  => 'stage_table_source'
   ,input_format  => 'N-QUAD');
END;
/

オブジェクトとグラフURI (結合されている)の長さがNETWORK_MAX_STRING_SIZEのバイト数を超える行は、拒否されて"不良"ファイルに格納されます。ただし、これらの拒否された行は、SQL INSERT文を使用してアプリケーション表に挿入することによってロードできます(「INSERT文を使用したRDFデータのロード」を参照)。

例1-109では、外部表を使用してステージング表をロードする方法を示します。

1.11.1.2 バルク・ロード中のイベント・トレースの記録

起動側のスキーマに表RDF$ET_TABが存在し、この表に対するINSERT権限とUPDATE権限がネットワーク所有者ユーザーに付与されている場合、SEM_APIS.BULK_LOAD_RDF_GRAPHプロシージャ実行中に実行されるタスクの一部に対するイベント・トレースが表に追加されます。バルク・ロードの問題を報告する必要がある場合は、この表の内容が役に立ちます。RDF$ET_TAB表は、次のようにして作成してください。

CREATE TABLE RDF$ET_TAB (
  proc_sid VARCHAR2(128), 
  proc_sig VARCHAR2(200),
  event_name varchar2(200),
  start_time timestamp,
  end_time timestamp,
  start_comment varchar2(1000) DEFAULT NULL,
  end_comment varchar2(1000) DEFAULT NULL
);
-- Grant privileges on RDF$ET_TAB to network owner if network owner 
-- is not the owner of RDF$ET_TAB
GRANT SELECT, INSERT, UPDATE on RDF$ET_TAB to <network_owner>;

1.11.2 INSERT文を使用したRDFデータのロード

INSERT文を使用してRDFデータをロードする場合、URIは< >(山カッコ)で、空白ノードは_:(アンダースコアとコロン)で、リテラルは" "(引用符)で囲む必要があります。URIまたは空白ノードに空白文字を使用することはできません。データを挿入するには、SDO_RDF_TRIPLE_Sコンストラクタを使用します(「トリプルを挿入するためのコンストラクタ」を参照)。アプリケーション表に対するINSERT権限を持っている必要があります。

ノート:

URIが< >で、リテラルが" "で囲まれていなくても、文はそのまま処理されます。ただし、VALUE_TYPE値の判定に余分な処理が必要とされるため、文によるロードに時間がかかります。

次の例では、RDFUSERが所有するNET1という名前のRDFネットワークを想定しています。これには、URI、空白ノード、リテラル、言語タグ付きのリテラルおよび型付きリテラルを使用した文が含まれます。

INSERT INTO nsu_data VALUES (SDO_RDF_TRIPLE_S('nsu','<http://nature.example.com/nsu/rss.rdf>',
  '<http://purl.org/rss/1.0/title>', '"Nature''s Science Update"', 'RDFUSER', 'NET1'));
INSERT INTO nsu_data VALUES (SDO_RDF_TRIPLE_S('nsu', '_:BNSEQN1001A',
  '<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>', 
  '<http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq>', 'RDFUSER', 'NET1'));
INSERT INTO nsu_data VALUES (SDO_RDF_TRIPLE_S('nsu',
  '<http://nature.example.com/cgi-taf/dynapage.taf?file=/nature/journal/v428/n6978/index.html>',
  '<http://purl.org/dc/elements/1.1/language>', '"English"@en-GB', 'RDFUSER', 'NET1'));
INSERT INTO nature VALUES (SDO_RDF_TRIPLE_S('nsu', '<http://dx.doi.org/10.1038/428004b>',
  '<http://purl.org/dc/elements/1.1/date>', '"2004-03-04"^^xsd:date', 'RDFUSER', 'NET1'));

1.11.2.1 INSERT文を使用した名前付きグラフへのデータのロード

INSERT文を使用してnull以外のグラフ名を含むRDFトリプルをロードするには、次の例に示すように、RDFグラフ名とコロン(:)デリミタの後に、グラフ名を山カッコ(< >)で囲んで追加する必要があります。

INSERT INTO articles_rdf_data VALUES ( 
  SDO_RDF_TRIPLE_S ('articles:<http://examples.com/ns#Graph1>',
    '<http://nature.example.com/Article101>',
    '<http://purl.org/dc/elements/1.1/creator>',
    '"John Smith"', 'RDFUSER', 'NET1'));

1.11.3 RDFデータのエクスポート

この項には、RDFデータのエクスポート、つまり、RDFデータをステージング表に格納できるN-Triple形式またはN-Quad形式でOracle Databaseから取り出すことに関連する、次のトピックがあります。

1.11.3.1 アプリケーション表からのRDFデータの取得

例1-110のように、SDO_RDF_TRIPLE_Sメンバー関数を使用して、アプリケーション表からRDFデータを取得できます(この例では、読みやすいように出力をフォーマットしなおしてあります)。この例では、RDFUSERというデータベース・ユーザーが所有するNET1という名前のRDFネットワークを想定しています。

例1-110 アプリケーション表からのRDFデータの取得

--
-- Retrieves model-graph, subject, predicate, and object
--
SQL> SELECT a.triple.GET_MODEL('RDFUSER','NET1') AS model_graph, 
            a.triple.GET_SUBJECT('RDFUSER','NET1') AS sub,
            a.triple.GET_PROPERTY('RDFUSER','NET1') pred,
            a.triple.GET_OBJ_VALUE('RDFUSER','NET1') obj
     FROM RDFUSER.NET1#RDFT_ARTICLES a;

MODEL_GRAPH
--------------------------------------------------------------------------------
SUB
--------------------------------------------------------------------------------
PRED
--------------------------------------------------------------------------------
OBJ
--------------------------------------------------------------------------------
ARTICLES
<http://nature.example.com/Article1>
<http://purl.org/dc/elements/1.1/title>
"All about XYZ"


ARTICLES
<http://nature.example.com/Article1>
<http://purl.org/dc/elements/1.1/creator>
"Jane Smith"


ARTICLES
<http://nature.example.com/Article1>
<http://purl.org/dc/terms/references>
<http://nature.example.com/Article2>


ARTICLES
<http://nature.example.com/Article1>
<http://purl.org/dc/terms/references>
<http://nature.example.com/Article3>


ARTICLES
<http://nature.example.com/Article2>
<http://purl.org/dc/elements/1.1/title>
"A review of ABC"


ARTICLES
<http://nature.example.com/Article2>
<http://purl.org/dc/elements/1.1/creator>
"Joe Bloggs"


ARTICLES
<http://nature.example.com/Article2>
<http://purl.org/dc/terms/references>
<http://nature.example.com/Article3>


7 rows selected.

1.11.3.2 RDFグラフからのRDFデータの取得

例1-111に示すように、SEM_MATCH表関数(「SEM_MATCH表関数を使用したRDFデータの問合せ」を参照)を使用して、RDFデータをRDFグラフから取得できます。この例では、RDFUSERというデータベース・ユーザーが所有するNET1という名前のRDFネットワークを想定しています。

例1-111 RDFグラフからのRDFデータの取得

--
-- Retrieves graph, subject, predicate, and object
--
SQL> select to_char(g$rdfterm) graph, to_char(x$rdfterm) sub, to_char(p$rdfterm) pred, y$rdfterm obj from table(sem_match('Select ?g ?x ?p ?y  WHERE { { GRAPH ?g {?x ?p ?y} } UNION { ?x ?p ?y }}',sem_models('articles'),null,null,null,null,' STRICT_DEFAULT=T PLUS_RDFT=T ',null,null,'RDFUSER','NET1')); 

GRAPH
------------------------------------------------------------
SUB
------------------------------------------------------------
PRED
------------------------------------------------------------
OBJ
---------------------------------------------------------------------------
<http://examples.com/ns#Graph1>
_:m99g3C687474703A2F2F6578616D706C65732E636F6D2F6E73234772617068313Egmb2
<http://purl.org/dc/elements/1.1/creator>
_:m99g3C687474703A2F2F6578616D706C65732E636F6D2F6E73234772617068313Egmb1
 
<http://examples.com/ns#Graph1>
<http://nature.example.com/Article102>
<http://purl.org/dc/elements/1.1/creator>
_:m99g3C687474703A2F2F6578616D706C65732E636F6D2F6E73234772617068313Egmb1
 
<http://examples.com/ns#Graph1>
<http://nature.example.com/Article101>
<http://purl.org/dc/elements/1.1/creator>
"John Smith"
 
<http://nature.example.com/Article1>
<http://purl.org/dc/elements/1.1/creator>
"Jane Smith"

1.11.3.3 取得した空白ノード識別子からのRDFグラフ情報の削除

RDFデータの取得中に取得された空白ノード識別子は、例1-112のコード抜粋に示す変換を使用してRDFグラフ情報を削除するようにトリミングできます。これは、それぞれVARCHAR2 (主語コンポーネントなど)およびCLOB (目的語コンポーネントなど)データに適用できます。

例1-113に、「RDFグラフからのRDFデータの取得」で説明されているRDFデータ取得問合せを使用して例1-112の2つの変換をそれぞれsub列とobj列に対して使用した後に取得された結果を示します。

例1-112 アプリケーション表からのRDFデータの取得

--
-- Transformation on column "sub VARCHAR2" 
-- holding blank node identifier values
--
Select (case substr(sub,1,2) when '_:' then '_:' || substr(sub,instr(sub,'m',1,2)+1) else sub end) from …
--
-- Transformation on column "obj CLOB" 
-- holding blank node identifier values
--
Select (case dbms_lob.substr(obj,2,1) when '_:' then to_clob('_:' || substr(obj,instr(obj,'m',1,2)+1)) else obj end) from …

例1-113 例1-112の変換の適用による結果

--
-- Results obtained by applying transformations on the sub and pred cols
-- 
SQL> select (case substr(sub,1,2) when '_:' then '_:' || substr(sub,instr(sub,'m',1,2)+1) else sub end) sub, pred, (case dbms_lob.substr(obj,2,1) when '_:' then to_clob('_:' || substr(obj,instr(obj,'m',1,2)+1)) else obj end) obj from (select to_char(g$rdfterm) graph, to_char(x$rdfterm) sub, to_char(p$rdfterm) pred, y$rdfterm obj from table(sem_match('Select ?g ?x ?p ?y  WHERE { { GRAPH ?g {?x ?p ?y} } UNION { ?x ?p ?y }}',sem_models('articles'),null,null,null,null,' STRICT_DEFAULT=T PLUS_RDFT=T ',null,null,'RDFUSER','NET1'));

 
SUB
------------------------------------------------------------
PRED
------------------------------------------------------------
OBJ
---------------------------------------------------------------------------
_:b2
<http://purl.org/dc/elements/1.1/creator>
_:b1
 
<http://nature.example.com/Article102>
<http://purl.org/dc/elements/1.1/creator>
_:b1

1.11.4 Oracle Data Pumpを使用したRDFネットワークのエクスポートまたはインポート

Oracle Databaseリリース12.1では、Oracle Data Pumpユーティリティの全データベース・エクスポートおよびインポートの機能を使用して、RDFネットワークをエクスポートおよびインポートできます。ネットワークは、全データベース・エクスポートまたはインポートの一部として移動し、データベース全体がOracleのダンプ・ファイル(.dmp)で表現されます。

データ・ポンプを使用したRDFネットワークのエクスポートまたはインポートには、次の使用上のノートがあります。

  • インポートのターゲット・データベースには、RDFグラフのソフトウェアがインストールされ、既存のRDFネットワークが存在していないことが必要です。

  • ファイングレイン・アクセス制御を使用するRDFネットワーク(トリプルレベルまたはリソースレベルのOLSまたはVPD)は、エクスポートまたはインポートできません。

  • SEM_CONTAINS (MDSYS.SEMCONTEXT索引タイプ)のRDFドキュメント索引と、SEM_RELATED (MDSYS.SEM_INDEXTYPE索引タイプ)のセマンティク索引は、エクスポートの前に削除し、インポート後に再作成する必要があります。

  • エクスポートおよびインポート中は、RDFネットワーク・オブジェクトに対するデフォルトの(オブジェクトの作成直後に存在する)権限のみが保持されます。たとえばユーザーAがRDFグラフMを作成し、RDFM_Mに対するSELECTをユーザーBに付与した場合、インポート後に残るのは、RDFM_Mに対するユーザーAのSELECT権限のみです。インポート後、ユーザーBには、RDFM_Mに対するSELECT権限がありません。かわりにユーザーBのSELECT権限が再度付与されます。

  • RDFネットワーク・データのエクスポートまたはインポート時には、データ・ポンプのコマンドライン・オプションtransform=oid:nを使用する必要があります。たとえば、次の形式のコマンドを使用します。

    impdp system/<password-for-system> directory=dpump_dir dumpfile=rdf.dmp full=YES version=12 transform=oid:n
    

データ・ポンプの使用方法に関する情報および例については、『Oracle Databaseユーティリティ』を参照してください。

1.11.5 RDFネットワークの移動、リストアおよび追加

SEM_APISパッケージには、RDFネットワークとの間でデータを転送するユーティリティ・プロシージャが含まれています。

RDFネットワークの内容は、ステージング・スキーマに移動できます。ステージング・スキーマ内のRDFネットワークは、(1) Oracle Data Pumpまたは同様のツールでエクスポートするか、(2)別のRDFネットワークに追加するか、(3)ソースRDFネットワークにリストアできます。移動、リストアおよび追加操作の大部分では、データをコピーするためにSQL挿入ではなく、パーティション交換を使用してデータを移動します。したがって、これらの操作は非常に効率的です。

RDFネットワーク・データを移動、リストアおよび追加する手順は、次のとおりです。

移動、リストアおよび追加操作を実行する場合の特別な考慮事項

移動、リストアおよび追加操作は、次の機能を使用するRDFネットワークではサポートされていません。

  • RDF_VALUE$表のドメイン索引(空間索引など)
  • RDF用Oracle Label Security
  • ドキュメントのセマンティク索引付け
  • 増分推論

増分推測を使用するドメイン索引および推論グラフは、RDFネットワークを移動する前に削除し、その後のリストアまたは追加操作の後に再作成する必要があります。

追加操作に使用されるターゲット・ネットワークには、いくつかの制限が適用されます。

  • ターゲット・ネットワークのRDF条件のセットは、ソース・ネットワーク内のRDF条件のセットのサブセットである必要があります。
  • ソースおよびターゲットのRDFネットワークで使用されるモデル(RDFグラフと呼ばれます)IDのセットは、結合解除する必要があります。
  • ソースRDFネットワークとターゲットRDFネットワークで使用される伴意(推論グラフと呼ばれます)IDのセットは、結合解除する必要があります。
  • ソースおよびターゲットのRDFネットワークで使用されるルールベースIDのセットは、OWL2RLなどの組込みルールベースを除き、結合解除する必要があります。

例1-114 スキーマプライベートRDFネットワークの移動およびエクスポート

この最初の例では、データ・ポンプ・エクスポートを使用して、関連するネットワーク・データを複数の.dmpファイルにエクスポートし、データを別のデータベースのRDFネットワークにインポートできます(2番目の例を参照)。

この例では、次の主要なアクションを実行します。

  1. データ・ポンプ・エクスポート操作用のディレクトリを作成します。
  2. RDFネットワークのエクスポートの出力を保持するデータベース・ユーザー(RDFEXPIMPU)を作成します。
  3. RDFネットワーク・データをRDFEXPIMPUスキーマに移動します。
  4. データ・ポンプを使用して、移動したRDFネットワーク・データをエクスポートします。
  5. データ・ポンプを使用して、RDFビューで参照されるユーザー表をエクスポートします。
  6. 必要に応じて、現在のネットワークのRDFネットワーク・データをリストアします。

この例では、スキーマプライベート・ネットワークの名前がNET1で、RDFUSERにより所有されていると想定しています。また、RDFUSERが所有する表EMPWORKED_FORおよびDEPTは、ネットワーク内のRDFビューRDFグラフで使用されることも前提としています。

conn sys/<password_for_sys> as sysdba;

-- create directory for datapump export
create directory dpump_dir as '<path_to_directory>';
grant read,write on directory dpump_dir to public;

-- create user to hold exported RDF network
grant connect, resource, unlimited tablespace to rdfexpimpu identified by <password_for_rdfexpimpu>;

-- connect as a privileged user to move the network
conn system/<password_for_system>
-- move RDF network data to RDFEXPIMPU schema
exec sem_apis.move_rdf_network_data(dest_schema=>'RDFEXPIMPU', network_owner=>'RDFUSER', network_name=>'NET1');

-- export moved network data with datapump
-- export rdfexpimpu schema
host expdp rdfexpimpu/<password_for_rdfexpimpu> DIRECTORY=dpump_dir DUMPFILE=expuser.dmp version=12.2 logfile=export_move_sem_network_data.log

-- export any user tables referenced in RDF Views
host expdp rdfuser/<password_for_rdfuser> tables=EMP,WORKED_FOR,DEPT DIRECTORY=dpump_dir DUMPFILE=exp_rdfviewtabs.dmp version=12.2 logfile=export_move_rdfview_tabs.log

-- optionally restore the network data or drop the source RDF network
exec sem_apis.restore_rdf_network_data(from_schema=>'RDFEXPIMPU', network_owner=>'RDFUSER', network_name=>'NET1');

例1-115 スキーマプライベートRDFネットワークのインポートおよび追加

この2番目の例では、データ・ポンプ・インポートを使用して(最初の例から)関連するネットワーク・データをインポートし、必要なデータベース・ユーザーを作成し、新しいMDSYS所有RDFネットワークを作成し、インポートしたネットワーク・データを新しく作成したネットワークに追加します。

この例では、次の主要なアクションを実行します。

  1. データベース・ユーザー(RDFEXPIMPU)がデータベースに存在しない場合、RDFネットワークのエクスポートの出力を保持します。
  2. データ・ポンプを使用して、RDFビュー・コンポーネント表、および以前に移動されたRDFネットワーク・データをインポートします。
  3. インポートされたデータが追加される新しいRDFネットワークを作成します。
  4. インポートされたデータを新しく作成したRDFネットワークに追加します。
conn sys/<password_for_sys>

-- create a user to hold the imported RDF network data
grant connect, resource, unlimited tablespace to rdfexpimpu identified by <password_for_rdfexpimpu>;

-- create the network owner
grant connect, resource, unlimited tablespace to rdfuser identified by <password_for_rdfuser>;

conn system/<password_for_system>

-- import any RDF view component tables
host impdp rdfuser/<password_for_rdfuser> tables=EMP,WORKED_FOR,DEPT DIRECTORY=dpump_dir DUMPFILE=exp_rdfviewtabs.dmp version=12.2 logfile=import_append_rdfview_tabs.log

-- import the previously moved RDF network
host impdp rdfexpimpu/<password_for_rdfexpimpu> DIRECTORY=dpump_dir DUMPFILE=expuser.dmp version=12.2 logfile=import_append_atabs.log

-- create a new RDF network in which to append the imported one
exec sem_apis.create_rdf_network('rdf_tablespace', network_owner=>'RDFUSER', network_name=>'NET1');

-- append the imported RDF network
exec sem_apis.append_rdf_network_data(from_schema=>'RDFEXPIMPU', network_owner=>'RDFUSER', network_name=>'NET1');

1.11.6 未使用値のパージ

時間の経過に伴うトリプルの削除によって、RDF_VALUE$表の値のサブセットは、現在RDFネットワークに含まれるどのRDFトリプルまたはルールでも使用されなくなる可能性があります。このような使用されていない値の数が多くなり、RDF_VALUE$表の大部分を占めるようになった場合、SEM_APIS.PURGE_UNUSED_VALUESサブプログラムを使用して未使用値をパージできます。

パージ操作中に実行されたタスクのイベント・トレースは、RDF$ET_TAB表が起動側のスキーマに存在する場合、そこに記録できます(「バルク・ロード中のイベント・トレースの記録」を参照)。