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

SAP Sybase SQL Anywhere 16.0 (中文) » SQL Remote » 教程:使用将统一数据库用作消息服务器的 HTTP 消息系统设置复制系统

 

第 1 课:创建统一数据库

创建用于存储数据库及其事务日志的目录,以及消息的目录结构。您还将定义统一数据库的模式,包括创建远程用户和复制数据所需的发布和预订。

前提条件

您必须具有 SYS_REPLICATION_ADMIN_ROLE 系统角色。

上下文和注释

SQL Remote 针对统一数据库运行时,将使用 FILE 消息系统发送和接收消息,而远程数据库使用 HTTP 消息系统。

 任务
  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 -dba DBA,sql cons.db
  4. 启动统一数据库:

    dbeng16 -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 服务。 有关使用 dbmlsync 的详细信息,请参见-xs 数据库服务器选项

  5. 以具有 SYS_REPLICATION_ADMIN_ROLE 系统角色的用户身份通过 Interactive SQL 连接到统一数据库 (cons):

    dbisql -c "SERVER=cons;DBN=cons;UID=DBA;PWD=sql"
  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 断开连接。

结果

已创建用于存储数据库及其事务日志的目录以及消息的目录结构。并已定义统一数据库的模式,包括创建远程用户和复制数据所需的发布与预订。