如果使用抽取实用程序 (dbxtract) 或 [抽取数据库向导] 创建远程数据库,则可以编写一个存储过程来将设置唯一数据库标识号的任务自动化。
创建一个名为 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。第一个从 1001 开始,下一个则从 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讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |