16.3 Oracle Databaseのグラフとグラフ・サーバーの同期の維持
FlashbackSynchronizer APIを使用すると、データベースでのグラフに対する変更をメモリー内の対応するPgxGraphオブジェクトに自動的に適用できるため、両方の同期が保たれます。
               
ノート:
SQLプロパティ・グラフの同期化はサポートされていません。このAPIでは、Oracleのフラッシュバック・テクノロジを使用して最後のフェッチ以降のデータベースでの変更をフェッチし、ChangeSet APIを使用してそれらの変更をグラフ・サーバーにプッシュします。変更が適用された後、グラフ・サーバーの通常のスナップショット・セマンティクスが適用されます。デルタ・フェッチが適用されるたびに新しいインメモリー・スナップショットが作成されます。スナップショットの作成に対して同時に実行されている問合せまたはアルゴリズムは、対応するセッションがsession.setSnapshot(graph, PgxSession.LATEST_SNAPSHOT)プロシージャをコールしてPgxGraphオブジェクトを最新の状態にリフレッシュするまで、変更の影響を受けません。
               
また、前のフェッチ操作からの変更が存在しなくなった場合、シンクロナイザは例外をスローします。これは、前のフェッチ期間がデータベースのUNDO_RETENTIONパラメータ設定より長い場合に発生します。この例外を回避するには、UNDO_RETENTIONパラメータ値より短い間隔で変更をフェッチします。UNDO_RETENTIONパラメータのデフォルト設定は900秒です。詳細は、『Oracle Databaseリファレンス』を参照してください。
               
同期の前提条件
Oracleデータベースでフラッシュバックが有効になっている必要があり、同期の実行に使用するデータベース・ユーザーには次のものが必要です。
- 同期を維持する必要があるすべての表に対する読取りアクセス権。
- フラッシュバックAPIを使用するための権限。たとえば:GRANT EXECUTE ON DBMS_FLASHBACK TO <user>
また、ユースケースに必要な時間の間変更を保持するようにデータベースを構成する必要もあります。
同期可能なグラフのタイプ
PGXのすべてのPgxGraphオブジェクトを同期できるわけではありません。次の制限が適用されます。
                  
- 
                        グラフの元の作成者のみがそれを同期できます。つまり、現在のユーザーはグラフのMANAGE権限を持っている必要があります。 
- データベース表からロードされたグラフ(PGQLプロパティ・グラフ)のみを同期できます。他の形式から作成されたグラフ、グラフ・ビルダーAPIを使用して作成されたグラフまたはデータベース・ビューから作成されたPGQLプロパティ・グラフは同期できません。
- グラフの最新のスナップショットのみを同期できます。
同期可能な変更のタイプ
シンクロナイザでは、インメモリー・グラフ・スナップショットと次のデータベース側の変更との同期の維持がサポートされています。
- 新しい頂点とエッジの挿入
- 既存の頂点とエッジの削除
- 任意の頂点またはエッジのプロパティ値の更新
シンクロナイザでは、入力グラフに対する次のようなスキーマ・レベルの変更はサポートされていません。
- 入力頂点表またはエッジ表のリストの変更
- 任意の入力表(頂点表またはエッジ表)の任意の列の変更
さらに、シンクロナイザでは、頂点キーおよびエッジ・キーに対する更新はサポートされていません。
詳細な例は、次のトピックを参照してください。
- PGQLプロパティ・グラフの同期
 グラフ・サーバー(PGX)にロードされたPGQLプロパティ・グラフを、データベースのグラフ・データに加えられた変更と同期できます。
- 公開済グラフの同期
 公開済グラフを同期するには、グラフ・スキーマが含まれるPartitionedGraphConfigオブジェクトとデータベース接続の詳細で、フラッシュバック・シンクロナイザを構成します。
親トピック: グラフ分析を使用したアプリケーションの開発