创建用于存储数据库及其事务日志的目录,以及消息的目录结构。您还将定义统一数据库的模式,包括创建远程用户和复制数据所需的发布和预订。
前提条件
您必须具有 SYS_REPLICATION_ADMIN_ROLE 系统角色。
上下文和注释
SQL Remote 针对统一数据库运行时,将使用 FILE 消息系统发送和接收消息,而远程数据库使用 HTTP 消息系统。
创建以下目录以保存统一数据库和远程数据库:
创建以下目录以保存由统一数据库、远程数据库和消息服务器数据库生成的消息文件:
从 c:\tutorial\cons 目录运行以下命令,创建统一数据库 (cons):
dbinit -dba DBA,sql cons.db |
启动统一数据库:
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 数据库服务器选项。
以具有 SYS_REPLICATION_ADMIN_ROLE 系统角色的用户身份通过 Interactive SQL 连接到统一数据库 (cons):
dbisql -c "SERVER=cons;DBN=cons;UID=DBA;PWD=sql" |
要设置统一数据库 (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 |
在本教程中,将为发布者和远程用户分配口令,因为统一数据库将用作 HTTP 消息系统的消息服务器。执行以下语句,创建具有 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 IDENTIFIED BY 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 |