Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Remote » SQL Remote 复制设计 » SQL Remote 复制设计和设置 » 为每个数据库指派唯一的标识号

 

抽取数据库时设置唯一数据库标识号

如果使用抽取实用程序 (dbxtract) 或 [抽取数据库向导] 创建远程数据库,则可以编写一个存储过程来将设置唯一数据库标识号的任务自动化。

♦  要使设置唯一数据库标识号自动化
  1. 创建一个名为 sp_hook_dbxtract_begin 的存储过程。

    例如,要为 user_id 为 101 的远程用户 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 开始,依此类推。

  2. 通过 -v 选项运行抽取实用程序 (dbxtract) 或运行 [抽取数据库向导] 来抽取远程数据。抽取实用程序会执行以下任务:

    1. 创建一个名为 #hook_dict 的临时表,其内容包括:

      name value

      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。

    2. 调用 sp_hook_dbxtract_begin

    3. 输出以下信息以帮助调试过程挂接:

      • 找到的过程挂接。

      • 调用过程挂接之前 #hook_dict 的内容。

      • 调用过程挂接之后 #hook_dict 的内容。

另请参见