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

SQL Anywhere 12.0.1 » SQL Remote » 教程:设置复制系统,该系统使用 HTTP 消息系统并将统一数据库用作消息服务器(通过中继服务器)

 

第 5 课:在统一数据库和远程数据库中添加和复制数据

在本课中,需要将数据添加到统一数据库和远程数据库,运行 SQL Remote 复制更改内容,然后确认数据在两个数据库中一致。

 ♦ 将数据添加到统一数据库
  1. 如果目前尚未连接到统一数据库 (cons),则运行以下命令:

    dbisql -c "SERVER=cons;DBN=cons;UID=DBA;PWD=sql"
  2. 针对统一数据库 (cons) 执行以下语句,将附加示例数据添加到 employees 表:

    INSERT INTO employees (first_name, last_name) VALUES ('Javier', 'Spoor');
    COMMIT;
  3. 与 Interactive SQL 断开连接。

 ♦ 将数据添加到远程数据库
  1. 如果目前尚未连接到远程数据库 (rem),则运行以下命令:

    dbisql -c "SERVER=rem;DBN=rem;UID=DBA;PWD=sql"
  2. 针对远程数据库 (rem) 执行以下语句,将附加示例数据添加到 employees 表:

    INSERT INTO employees (first_name, last_name) VALUES ('Nelson', 'Kreitzer');
    COMMIT;
  3. 与 Interactive SQL 断开连接。

 ♦ 在统一数据库和远程数据库之间复制更改内容
  1. 在统一数据库 (cons) 上,运行消息代理:

    dbremote -c "SERVER=cons;DBN=cons;UID=DBA;PWD=sql" -qc -v -o c:\tutorial\cons1.txt

    这将扫描统一数据库 (cons) 的事务日志,并使用 FILE 消息系统为远程数据库 (rem) 生成一条消息。由于在统一数据库中已为 FILE 消息系统设置调试消息系统参数,您可以查看 c:\tutorial\cons1.txt 文件,并验证是否看到调试消息,指示消息已写入 c:\tutorial\messages\rem 目录。例如:

    I. 2011-04-12 09:33:03. Processing transactions from active transaction log
    I. 2011-04-12 09:33:03. Sending message to "rem" (0-0000000000-0000550994-0)
    I. 2011-04-12 09:33:03. sopen "c:\tutorial\messages\rem\cons.0"
    I. 2011-04-12 09:33:03. write " c:\tutorial\messages\rem\cons.0"
    I. 2011-04-12 09:33:03. close " c:\tutorial\messages\rem\cons.0"
  2. 在远程数据库 (rem) 上,运行消息代理:

    dbremote -c "SERVER=rem;DBN=rem;UID=DBA;PWD=sql" -qc -v -o c:\tutorial\rem.txt

    通过 HTTP 消息系统,此命令接收并应用由统一数据库刚刚生成的消息。然后,它将扫描事务日志,并通过添加到远程数据库中的新行将消息发送回统一数据库。由于在远程数据库中已为 HTTP 消息系统设置调试消息系统参数,您可以查看 c:\tutorial\rem.txt 文件,并验证是否看到调试消息,指示正在使用 HTTP 消息系统。例如:

    I. 2011-04-12 09:34:03. Sending message to "cons" (0-0000000000-0000576448-0)
    I. 2011-04-12 09:34:03. HTTPWriteMessage "rem.0"
    I. 2011-04-12 09:34:03. HTTPWriteMessage: success -- filename  "rem.0"
    I. 2011-04-12 09:34:03. HTTPDisconnect
  3. 您还可以通过查看由 RSOE 生成的输出文件,并验证信息是否输出到日志中,来确认请求是否通过中继服务器。

    I. 2011-04-12 09:34:03. <UpChannel-0000> PacketRead packet-len:257
    I. 2011-04-12 09:34:03. <UpChannel-0000> PacketRead packet-opcode:0xf004
    I. 2011-04-12 09:34:03. <UpChannel-0000> packet read..
    I. 2011-04-12 09:34:03. <UpChannel-0000> successful packet read.. processing it..
    I. 2011-04-12 09:34:03. <UpChannel-0000> 259 RS_CLI_SESSION_BEGIN(snum=0006 sfp=4e0e5291 ridx=0)
    I. 2011-04-12 09:34:03. <UpChannel-0000> Notifying worker thread
    
  4. 在统一数据库 (cons) 上,运行消息代理:

    dbremote -c "SERVER=cons;DBN=cons;UID=DBA;PWD=sql" -qc -v -o c:\tutorial\cons2.txt

    通过基于 FILE 的消息系统,此命令接收并适用由远程数据库刚刚生成的消息。

 ♦ 验证统一数据库和远程数据库中的数据
  1. 如果目前尚未连接到统一数据库 (cons),则运行以下命令:

    dbisql -c "SERVER=cons;DBN=cons;UID=DBA;PWD=sql"
  2. 要验证统一数据库包含所有四行数据,可执行以下语句查看 employees 表的内容:

     SELECT * FROM employees;

    查询将返回 employees 表中的以下数据,不过 hire_date 列将包含插入行的时间,而非在以下表中所看到的值:

    employee_id first_name last_name hire_date
    1 Kelly Meloy 2011-03-25 08:27:56.310
    2 Melisa Boysen 2011-03-25 08:27:56.310
    3 Javier Spoor 2011-03-25 08:30:26.110
    102000001 Nelson Kreitzer 2011-03-25 08:31:51.970
  3. 与 Interactive SQL 断开连接。

  4. 如果目前尚未连接到远程数据库 (rem),则运行以下命令:

    dbisql -c "SERVER=rem;DBN=rem;UID=DBA;PWD=sql"

    通过执行以下语句查看 employees 表的内容,验证远程数据库 (rem) 是否包含所有四行数据:

    SELECT * FROM employees;

    查询将返回 employees 表中的以下数据,不过 hire_date 列将包含插入行的时间,而非在以下表中所看到的数据:

    employee_id first_name last_name hire_date
    1 Kelly Meloy 2011-03-25 08:27:56.310
    2 Melisa Boysen 2011-03-25 08:27:56.310
    3 Javier Spoor 2011-03-25 08:30:26.110
    102000001 Nelson Kreitzer 2011-03-25 08:31:51.970
  5. 与 Interactive SQL 断开连接。

  6. 前进至第 6 课:清理