この例では、スナップショット同期のファイルベースのダウンロードを実行します。最初に、ファイルベースのダウンロードで必要な 3 つのデータベースを設定し、次に、データをダウンロードする方法を示します。この例は、参考にするだけでもかまいませんし、テキストをコピーアンドペーストしてサンプルを実行することもできます。
次のコマンドは、この例で使用される統合データベース、リモートデータベース、ファイル定義データベースの 3 つのデータベースを作成します。
dbinit scons.db dbinit sremote.db dbinit sfdef.db |
次のコマンドは、この 3 つのデータベースを起動し、統合データベースへの接続に使用する Mobile Link のデータソース名を作成します。
dbeng12 -n sfdef_eng sfdef.db dbeng12 -n scons_eng scons.db dbeng12 -n sremote_eng sremote.db dbdsn -y -w fbd_demo -c "SERVER=scons_eng;DBF=scons.db;UID=DBA;PWD=sql;ASTART=off;ASTOP=off" |
Interactive SQL を開き、scons.db に接続して、Mobile Link 設定スクリプトを実行します。次に例を示します。
read "C:\Program Files\SQL Anywhere 12\MobiLink\setup\syncsa.sql" |
Mobile Link サーバーを起動します。
start mlsrv12 -v+ -c "DSN=fbd_demo" -zu+ -ot scons.txt |
この例では、統合データベースには T1 というテーブルが 1 つあります。統合データベースに接続すると、次の SQL を実行してテーブル T1 を作成できます。
CREATE TABLE T1 ( pk INTEGER PRIMARY KEY, c1 INTEGER ); |
次のコードは、filebased というスクリプトバージョンを作成し、そのスクリプトバージョンのダウンロードスクリプトを作成します。
CALL ml_add_table_script( 'filebased', 'T1', 'download_cursor', 'SELECT pk, c1 FROM T1' ); |
次のコードは、normal というスクリプトバージョンを作成し、そのスクリプトバージョンのアップロードスクリプトとダウンロードスクリプトを作成します。
CALL ml_add_table_script ( 'normal', 'T1', 'upload_insert', 'INSERT INTO T1 VALUES ({ml r.pk}, {ml r.c1})'); CALL ml_add_table_script( 'normal', 'T1', 'upload_update', 'UPDATE T1 SET c1 = {ml r.c1} WHERE pk = {ml r.pk} ' ); CALL ml_add_table_script( 'normal', 'T1', 'upload_delete', 'DELETE FROM T1 WHERE pk = {ml r.pk}' ); CALL ml_add_table_script( 'normal', 'T1', 'download_cursor', 'SELECT pk, c1 FROM T1' ); CALL ml_add_table_script( 'normal', 'T1', 'download_delete_cursor', '--{ml_ignore}' ); COMMIT; |
次のコマンドは、ストアドプロシージャー begin_pub を作成し、begin_pub が、"normal" スクリプトバージョンと "filebased" スクリプトバージョンの両方を対象とした begin_publication スクリプトであることを指定します。
CREATE PROCEDURE begin_pub ( INOUT generation_num integer, IN username varchar(128), IN pubname varchar(128) ) BEGIN SET generation_num=1; END; CALL ml_add_connection_script( 'filebased', 'begin_publication', '{ call begin_pub( {ml s.generation_number}, {ml s.username}, {ml s.publication_name} ) }' ); CALL ml_add_connection_script( 'normal', 'begin_publication', '{ call begin_pub( {ml s.generation_number}, {ml s.username}, {ml s.publication_name} ) }' ); |
この例では、リモートデータベースにも T1 というテーブルが 1 つあります。リモートデータベースに接続し、次の SQL コマンドを実行して、テーブル T1、パブリケーション P1、ユーザー U1 を作成します。また、この SQL は P1 に対する U1 のサブスクリプションも作成します。
CREATE TABLE T1 ( pk INTEGER PRIMARY KEY, c1 INTEGER ); CREATE PUBLICATION P1 ( TABLE T1 ); CREATE SYNCHRONIZATION USER U1; CREATE SYNCHRONIZATION SUBSCRIPTION TO P1 FOR U1; |
次のコードは、sp_hook_dbmlsync_validate_download_file フックを作成して、ユーザー定義の検証論理をリモートデータベースに実装します。
CREATE PROCEDURE sp_hook_dbmlsync_validate_download_file() BEGIN DECLARE udata varchar(256); SELECT value INTO udata FROM #hook_dict WHERE name = 'user data'; IF udata <> 'ok' THEN UPDATE #hook_dict SET value = 'FALSE' WHERE name = 'apply file'; END IF; END |
ファイルベースのダウンロードを使用する Mobile Link システムには、ファイル定義データベースが必要です。このデータベースのスキーマはファイルベースのダウンロードで更新されるリモートデータベースのスキーマと同じですが、データとステータス情報は格納されていません。ファイル定義データベースは、ダウンロードファイルに格納されるデータの構造を定義するためだけに使用します。リモートデータベースの Mobile Link グループのユーザー名で定義された、多数のグループのリモートデータベースに対して、1 つのファイル定義データベースを使用できます。
次のコードは、この例で使用するファイル定義データベースを定義します。このコードはリモートデータベースと同じスキーマを作成し、さらに以下を作成します。
P1 という名前のパブリケーション。T1 テーブルのすべてのローをパブリッシュします。ファイル定義データベースとリモートデータベースでは、同じパブリケーション名を使用する必要があります。
G1 という名前の Mobile Link ユーザー。このユーザーは、ファイルベースのダウンロードで更新されるすべてのリモートデータベースを表しています。
パブリケーションに対するサブスクリプション
sfdef.db に接続してから、次のコードを実行してください。
CREATE TABLE T1 ( pk INTEGER PRIMARY KEY, c1 INTEGER ); CREATE PUBLICATION P1 ( TABLE T1 ); CREATE SYNCHRONIZATION USER G1; CREATE SYNCHRONIZATION SUBSCRIPTION TO P1 FOR G1; |
ダウンロードファイルを適用できるようにするために新しいリモートデータベースを準備するには、通常の同期を実行するか、dbmlsync -bg オプションを使用してダウンロードファイルを作成します。この例は、通常の同期を実行して新しいリモートデータベースを初期化する方法を示しています。
リモートデータベースの初期同期は、以前に作成した normal というスクリプトバージョンで実行できます。
dbmlsync -c "UID=DBA;PWD=sql;SERVER=sremote_eng;DBF=sremote.db" -v+ -e "sv=normal" |
統合データベースに接続し、ファイルベースのダウンロードで同期される次のようなデータをいくつか挿入します。
INSERT INTO T1 VALUES( 1, 1 ); INSERT INTO T1 VALUES( 2, 4 ); INSERT INTO T1 VALUES( 3, 9 ); COMMIT; |
次のコマンドは、ファイル定義データベースのあるコンピューターで実行してください。次の処理が行われます。
dbmlsync -bc オプションにより、ダウンロードファイルが作成され、file1.df という名前が付けられます。
-be オプションにより、"OK" という文字列がダウンロードファイルに追加され、sp_dbmlsync_validate_download_file フックへのアクセスが可能になります。
dbmlsync -c "UID=DBA;PWD=sql;SERVER=sfdef_eng;DBF=sfdef.db" -v+ -e "sv=filebased" -bc file1.df -be ok -ot fdef.txt |
ダウンロードファイルを適用するには、-ba オプションと、適用するダウンロードファイルの名前を指定して、リモートデータベースで dbmlsync を実行します。
dbmlsync -c "UID=DBA;PWD=sql;SERVER=sremote_eng; DBF=sremote.db" -v+ -ba file1.df -ot remote.txt |
これで、リモートデータベースに変更が適用されました。Interactive SQL を開いてリモートデータベースに接続し、次に示す SQL 文を実行して、リモートデータベースにデータがあることを確認します。
SELECT * FROM T1 |
次のコマンドは、3 つのデータベースサーバーをすべて停止してから、ファイルを消去します。
del file1.df mlstop -h -w dbstop -y -c "SERVER=sfdef_eng; UID=DBA; PWD=sql" dbstop -y -c "SERVER=scons_eng; UID=DBA; PWD=sql" dbstop -y -c "SERVER=sremote_eng; UID=DBA; PWD=sql" dberase -y sfdef.db dberase -y scons.db dberase -y sremote.db |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |