このストアドプロシージャを使用して、同期が行われるタイミングを制御します。
名前 | 値 | 説明 |
---|---|---|
delay duration (in|out) |
秒数 |
プロシージャが delay duration の値を 0 に設定すると、dbmlsync の同期がすぐに進行します。delay duration が 0 以外の値の場合は、遅延フックが再び呼び出されるまでの秒数を示します。 |
maximum accumulated delay (in|out) |
秒数 |
最大累積遅延は、各同期前の最大秒数を指定します。dbmlsync は、最後に実行された同期以降の遅延フックへのすべての呼び出しによって生じた合計遅延時間を追跡します。dbmlsync が実行を開始してから同期が行われないと、dbmlsync の起動時間から合計遅延時間が計算されます。合計遅延時間が Maximum Accumulated delay 値を上回ると、遅延フックを呼び出さずに同期が開始されます。 |
publication_n (in) |
パブリケーション |
推奨されていません。代わりに subscription_n を使用します。同期されているパブリケーション (n は整数)。同期されるパブリケーションごとに 1 つの publication_n エントリがあります。n の番号は 0 から始まります。 |
MobiLink user (in) |
Mobile Link ユーザ名 |
同期対象となる Mobile Link ユーザ |
script version (in) |
スクリプトバージョン名 |
同期に使用される Mobile Link スクリプトバージョン。 |
subscription_n (in) | サブスクリプション名 | 同期されているサブスクリプションの名前 (n は整数)。これは、同期される各サブスクリプションの subscription_n エントリです。n の番号は 0 から始まります。 |
この名前のプロシージャが存在する場合、同期処理の開始時の、sp_hook_dbmlsync_begin の前に呼び出されます。
Dbmlsync API または SQL SYNCHRONIZE 文を使用して同期が開始されている場合、このフックは呼び出されません。
このプロシージャのアクションは、実行直後にコミットされます。
MANAGE REPLICATION システム権限を持つユーザが作成できるフックプロシージャ。ただし、フックによる情報のやり取りに使用される #hook_dict table にフックがアクセスできることを確認するには、フックが次のいずれかの要件を満たしている必要があります。
SELECT ANY TABLE および UPDATE ANY TABLE システム権限を持つユーザが所有します。
CREATE PROCEDURE 文の SQL SECURITY INVOKER 句を使用して定義されます。
次のテーブルを使用して、リモートデータベース上の注文のログを取ります。
CREATE TABLE OrdersTable( "id" INTEGER PRIMARY KEY DEFAULT AUTOINCREMENT, "priority" VARCHAR(128) ); |
次に、最大累積遅延 (1 時間) の間、同期を遅らせる例を示します。10 秒ごとにフックが呼び出され、OrdersTable 内に優先度の高いローがないかをチェックします。優先度の高いローが存在する場合、遅延期間は 0 に設定して同期処理を開始します。
CREATE PROCEDURE sp_hook_dbmlsync_delay() BEGIN -- Set the maximum delay between synchronizations -- or before the first synchronization starts to 1 hour UPDATE #hook_dict SET value = '3600' // 3600 seconds WHERE name = 'maximum accumulated delay'; -- check if a high priority order exists in OrdersTable IF EXISTS (SELECT * FROM OrdersTable where priority='high') THEN -- start the synchronization to process the high priority row UPDATE #hook_dict SET value = '0' WHERE name='delay duration'; ELSE -- set the delay duration to call this procedure again -- following a 10 second delay UPDATE #hook_dict SET value = '10' WHERE name='delay duration'; END IF; END; |
sp_hook_dbmlsync_end フックでは、優先度の高いローを処理済みとしてマークすることができます。
CREATE PROCEDURE sp_hook_dbmlsync_upload_end() BEGIN IF EXISTS( SELECT value FROM #hook_dict WHERE name = 'Upload status' AND value = 'committed' ) THEN UPDATE OrderTable SET priority = 'high-processed' WHERE priority = 'high'; END IF; END; |
この例では、同期中にテーブルが確実にロックされるようにするため、LockTables 拡張オプションを使用することを前提としています。テーブルがロックされていないと、アップロードの構築後で、sp_hook_dbmlsync_end フックの実行前に優先度の高いローが挿入される可能性があります。この操作が行われると、ローがアップロードされていなくても優先度が "high-processed" に変更されます。
sp_hook_dbmlsync_endを参照してください。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |