抽出ユーティリティ (dbxtract) またはデータベース抽出ウィザードを使用してリモートデータベースを作成する場合は、ストアドプロシージャを作成して、ユニークなデータベース ID 番号を設定するタスクを自動化できます。
前提条件
MANAGE REPLICATION システム権限を持つユーザが作成できるフックプロシージャ。ただし、フックによる情報のやり取りに使用される #hook_dict table にフックがアクセスできることを確認するには、フックが次のいずれかの要件を満たしている必要があります。
SELECT ANY TABLE および UPDATE ANY TABLE システム権限を持つユーザが所有します。
CREATE PROCEDURE 文の SQL SECURITY INVOKER 句を使用して定義されます。
sp_hook_dbxtract_begin という名前のストアドプロシージャを作成します。
たとえば、user_id が 1001 であるリモートユーザ user2 のデータベースを抽出するには、次の文を実行します。
SET OPTION "PUBLIC"."global_database_id" = '1'; CREATE TABLE extract_id (next_id INTEGER NOT NULL) ; INSERT INTO extract_id VALUES( 1 ); CREATE PROCEDURE sp_hook_dbxtract_begin AS DECLARE @next_id INTEGER UPDATE extract_id SET next_id = next_id + 1000 SELECT @next_id = (next_id ) FROM extract_id COMMIT UPDATE #hook_dict SET VALUE = @next_id WHERE NAME = 'extracted_db_global_id'; |
データベースが抽出されるたびに、global_database_id の値が毎回異なります。1 回目は 1001、2 回目は 2001 などとなります。
-v オプションを指定した抽出ユーティリティ (dbxtract) またはデータベース抽出ウィザードを実行して、リモートデータベースを抽出します。抽出ユーティリティは、次のタスクを実行します。
#hook_dict という名前のテンポラリテーブルを作成し、次の内容を追加します。
名前 | 値 |
---|---|
extracted_db_global_id |
抽出されるユーザ ID |
sp_hook_dbxtract_begin プロシージャを作成してローの value カラムを修正する場合、その値は抽出されたデータベースの global_database_id オプションとして使用され、DEFAULT GLOBAL AUTOINCREMENT 値のプライマリキー値範囲の開始位置にマークを付けます。
sp_hook_dbxtract_begin プロシージャを定義しない場合、抽出されるデータベースは、global_database_id が 101 に設定されます。
sp_hook_dbxtract_begin プロシージャを定義しても、このプロシージャが #hook_dict のいずれのローも修正しない場合、global_database_id は 101 に設定されたままになります。
sp_hook_dbxtract_begin を呼び出します。
プロシージャフックのデバッグに役立つように、次の情報を出力します。
検出されたプロシージャフック
プロシージャフックが呼び出される前の #hook_dict の内容
プロシージャフックが呼び出された後の #hook_dict の内容
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |