フックが呼び出される直前に、dbmlsync は次の CREATE 文を使用してリモートデータベースに #hook_dict テーブルを作成します。テーブル名の前の # は、そのテーブルがテンポラリであることを意味します。
CREATE TABLE #hook_dict( name VARCHAR(128) NOT NULL UNIQUE, value VARCHAR(10240) NOT NULL) |
dbmlsync ユーティリティは #hook_dict テーブルを使用してフック関数に値を渡し、フック関数は #hook_dict テーブルを使用して dbmlsync に値を戻します。
各フックは、パラメータ値を受け取ります。パラメータ値の中には、新しい値を返すように変更できるものがあります。それ以外のものは、読み込み専用です。このテーブルの各ローには、1 つのパラメータの値があります。
たとえば、2 つのサブスクリプションが次のように定義されているとします。
CREATE SYNCHRONIZATION SUBSCRIPTION sub1 TO pub1 FOR MyUser; SCRIPT VERSION 'v1' |
CREATE SYNCHRONIZATION SUBSCRIPTION sub2 TO pub2 FOR MyUser; SCRIPT VERSION 'v1' |
sp_hook_dbmlsync_begin フックが、次の dbmlsync コマンドラインに対して呼び出されるとします。
dbmlsync -c 'DSN=MyDsn' -s sub1,sub2 |
#hook_dict テーブルには、次のローが含まれます。
名前 | 値 |
---|---|
subscription_0 |
sub1 |
subscription_1 |
sub2 |
publication_0 |
pub1 |
publication_1 |
pub2 |
MobiLink user |
MyUser |
Script version |
v1 |
publication_n ローは廃止される予定であり、今後のリリースで削除される可能性があります。
フックを使用して、#hook_dict テーブルから値を取り出したり、その動作をカスタマイズしたりできます。たとえば、Mobile Link ユーザを取り出すには、次のように SELECT 文を使用します。
SELECT value FROM #hook_dict WHERE name = 'MobiLink user' |
In/out パラメータは、dbmlsync の動作をフックで修正することによって更新できます。たとえば、次のような文を使用してテーブルの abort synchronization ローを更新することで、同期のアボートを sp_hook_dbmlsync_abort フックから dbmlsync に指示することができます。
UPDATE #hook_dict SET value='true' WHERE name='abort synchronization' |
各フックの記述には、#hook_dict テーブルのローがリストされます。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |