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 消息系统。在本教程中,将正在运行统一数据库以及消息服务器的计算机命名为 machine_cons。

 ♦ 创建统一数据库和本教程使用的目录
  1. 创建以下目录以保存统一数据库和远程数据库:

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

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

    dbinit cons.db
  4. 启动统一数据库:

    dbsrv12 -n cons c:\tutorial\cons\cons.db -xs http(port=8033)

    命令行中需要包括 -xs http(8033),因为该数据库服务器将从远程数据库接受 HTTP 请求,并访问存在于 c:\tutorial\messages 目录中的消息文件。启动数据库服务器时未定义任何 web 服务,但将在下一课中创建。在上一课中,您只启动个人数据库服务器,因此此计算机上只有 SQL Remote 进程能够使用 HTTP 与消息服务器通信。在生产环境中,通常使用网络服务器,以便其他计算机上的 SQL Remote 进程也能够访问 web 服务。在本课中,您启动了一个网络服务器,并将其命名为 cons。如果在网络中有另一个具有此名称的数据库服务器已正在运行,则必须为网络服务器选择一个不同的名称,并修改此教程其余部分中的连接字符串,以使用替代名称。 有关使用 dbmlsync 的详细信息,请参见-xs dbeng12/dbsrv12 服务器选项

  5. 使用 Interactive SQL,以具有 DBA 权限的用户身份连接到统一数据库 (cons):

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

    SET OPTION public.global_database_id=0;
  7. 本教程中的数据库模式由单个表组成,表中的所有列和行都将复制到每个远程用户中。针对统一数据库 (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
    );
  8. 针对统一数据库 (cons) 执行以下语句,将示例数据添加到 employees 表:

    INSERT INTO employees (first_name, last_name) VALUES ('Kelly', 'Meloy');
    INSERT INTO employees (first_name, last_name) VALUES ('Melisa', 'Boysen');
    COMMIT;
  9. 针对统一数据库 (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
  10. 在本教程中,将为发布者和远程用户分配口令,因为统一数据库将用作 HTTP 消息系统的消息服务器。执行以下语句,创建具有 CONNECT 和 PUBLISH 权限的 cons 用户:

    GRANT CONNECT TO cons;
    GRANT PUBLISH TO cons;
  11. 出于性能原因,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'; 
  12. 执行下列语句以创建不带有口令的远程用户 rem,然后在 FILE 消息系统中定义用户地址时为其授予 REMOTE 权限:

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

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

  15. 前进至第 2 课:配置中继服务器