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 消息系统设置复制系统

 

第 1 课:创建统一数据库

在本课中,您将创建用于存储数据库及其事务日志的目录,以及消息的目录结构。您还将定义统一数据库的模式,包括创建远程用户和复制数据所需的发布和预订。SQL Remote 针对统一数据库运行时,将使用 FILE 消息系统发送和接收消息,而远程数据库使用 HTTP 消息系统。

 ♦ 创建统一数据库和本教程使用的目录
  1. 创建下列目录以保存统一数据库、远程数据库和消息服务器数据库:

    • c:\tutorial
    • c:\tutorial\cons
    • c:\tutorial\rem
    • c:\tutorial\msgsrv
  2. 创建下列目录以保存由统一数据库和远程数据库生成的消息文件:

    • c:\tutorial\messages
    • c:\tutorial\messages\cons
    • c:\tutorial\messages\rem
  3. c:\tutorial\cons 目录运行以下命令,创建统一数据库 (cons):

    dbinit cons.db
  4. 使用 Interactive SQL,以具有 DBA 权限的用户身份连接到统一数据库 (cons),并为 AutoStop 连接参数指定 AutoStop=NO,以确保断开连接时使数据库保持运行状态。

    dbisql -c "UID=DBA;PWD=sql;SERVER=cons;DBF=c:\tutorial\cons\cons.db;autostop=no"
    
  5. 要设置统一数据库 (cons) 的全局数据库 ID,执行以下语句(需要全局数据库 ID,以便在使用 GLOBAL AUTOINCREMENT 缺省值时为所有数据库选择不同的主键):

    SET OPTION public.global_database_id=0;
  6. 本教程中的数据库模式由单个表组成,该表以及表中的所有列和行都将复制到每个远程用户中。针对统一数据库 (cons) 执行以下语句,在数据库中创建单个表:

    CREATE TABLE employees (
         employee_id BIGINT NOT NULL DEFAULT GLOBAL AUTOINCREMENT(1000000) PRIMARY KEY,
         first_name VARCHAR(128) NOT NULL,
         last_name VARCHAR(128) NOT NULL,
         hire_date TIMESTAMP NOT NULL DEFAULT TIMESTAMP
    );
  7. 针对统一数据库 (cons) 执行以下语句,将示例数据添加到 employees 表:

    INSERT INTO employees (first_name, last_name) VALUES ('Kelly', 'Meloy');
    INSERT INTO employees (first_name, last_name) VALUES ('Melisa', 'Boysen');
    COMMIT;
    
  8. 针对统一数据库 (cons) 执行以下语句,以确认表已创建并用数据填充:

    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
  9. 在本教程中,没有为发布者和远程用户分配口令,所以当用户存在于数据库中时,不能通过这些用户连接到数据库。执行以下语句,创建具有 CONNECT 和 PUBLISH 权限的 cons 用户:

    GRANT CONNECT TO cons;
    GRANT PUBLISH TO cons;
  10. 出于性能原因,HTTP 消息系统只能用于远程数据库,而不能用于统一数据库。以下语句将配置基于 FILE 的消息系统,以将其用于统一数据库:

    CREATE REMOTE MESSAGE TYPE FILE ADDRESS 'cons';
    SET REMOTE FILE OPTION public.directory='c:\\tutorial\\messages';
    SET REMOTE FILE OPTION public.debug='yes'; 
  11. 执行下列语句以创建不带有口令的远程用户 rem,然后在 FILE 消息系统中定义用户地址时为其授予 REMOTE 权限:

    GRANT CONNECT TO rem;
    GRANT REMOTE TO rem TYPE FILE ADDRESS 'rem';
  12. 发布用来描述要复制的数据集。创建名为 pub_employees 的发布,它将复制 employees 表中的所有行。通过创建预订来为用户预订发布。

    CREATE PUBLICATION pub_employees ( TABLE employees );
    CREATE SUBSCRIPTION TO pub_employees FOR rem;
  13. 与 Interactive SQL 断开连接。

  14. 前进至第 2 课:创建消息服务器