创建用于存储数据库及其事务日志的目录,以及消息的目录结构。您还将定义统一数据库的模式,包括创建远程用户和复制数据所需的发布和预订。
前提条件
您必须具有 SYS_REPLICATION_ADMIN_ROLE 系统角色。
上下文和注释
SQL Remote 针对统一数据库运行时,将使用 FILE 消息系统发送和接收消息,而远程数据库使用 HTTP 消息系统。
创建下列目录以保存统一数据库、远程数据库和消息服务器数据库:
创建下列目录以保存由统一数据库和远程数据库生成的消息文件:
从 c:\tutorial\cons 目录运行以下命令,创建统一数据库 (cons):
dbinit -dba DBA,sql cons.db |
以具有 SYS_REPLICATION_ADMIN_ROLE 系统角色的用户身份通过 Interactive SQL 连接到统一数据库 (cons),同时将 AutoStop 连接参数设置为 AutoStop=NO 以确保断开连接后数据库保持运行状态。
dbisql -c "UID=DBA;PWD=sql;SERVER=cons;DBF=c:\tutorial\cons\cons.db;autostop=no" |
要设置统一数据库 (cons) 的全局数据库 ID,执行以下语句(需要全局数据库 ID,以便在使用 GLOBAL AUTOINCREMENT 缺省值时为所有数据库选择不同的主键):
SET OPTION public.global_database_id=0; |
本教程中的数据库模式由单个表组成,该表以及表中的所有列和行都将复制到每个远程用户中。针对统一数据库 (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 ); |
针对统一数据库 (cons) 执行以下语句,将示例数据添加到 employees 表:
INSERT INTO employees (first_name, last_name) VALUES ('Kelly', 'Meloy'); INSERT INTO employees (first_name, last_name) VALUES ('Melisa', 'Boysen'); COMMIT; |
针对统一数据库 (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 |
在本教程中,没有为发布者和远程用户分配口令,所以当用户存在于数据库中时,不能通过这些用户连接到数据库。执行以下语句,创建具有 CONNECT 和 PUBLISH 特权的 cons 用户:
GRANT CONNECT TO cons; GRANT PUBLISH TO cons; |
出于性能原因,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'; |
执行下列语句以创建不带有口令的远程用户 rem,然后在 FILE 消息系统中定义用户地址时为其授予 REMOTE 特权:
GRANT CONNECT TO rem; GRANT REMOTE TO rem TYPE FILE ADDRESS 'rem'; |
发布用来描述要复制的数据集。创建名为 pub_employees 的发布,它将复制 employees 表中的所有行。通过创建预订来为用户预订发布。
CREATE PUBLICATION pub_employees ( TABLE employees ); CREATE SUBSCRIPTION TO pub_employees FOR rem; |
与 Interactive SQL 断开连接。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |