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

SQL Anywhere 12.0.0 (中文) » SQL Anywhere 服务器 - 数据库管理 » 维护数据库 » SQL Anywhere 高可用性

 

教程:使用数据库镜像

本教程介绍数据库镜像的设置说明以及如何响应故障转移。就本教程而言,所有数据库服务器均运行在同一台计算机上。但是在生产环境中,每个数据库服务器通常安装在单独的计算机上。

如果本教程用于运行在不同计算机上的数据库服务器,连接字符串中对 localhost 的引用必须更改为实际的计算机名。

 ♦  模拟数据库镜像系统中的故障转移
  1. 创建以下目录:c:\server1c:\server2c:\arbiter

  2. 运行以下命令创建名为 mirror_demo.db 的、包含来自示例数据库中数据的数据库:

    newdemo c:\server1\mirror_demo.db
  3. 运行以下命令启动第一个数据库服务器:

    dbsrv12 -n mirror_server1 -x tcpip(PORT=6871;DOBROAD=no) -su sql 
    "c:\server1\mirror_demo.db" -xp on
    • -n   将数据库服务器命名为 mirror_server1。

    • -x   指定数据库服务器运行时使用的端口。

    • -su   指定实用程序数据库的口令。

    • -xp on   指明数据库服务器可用于参与数据库镜像系统。

  4. 从 Interactive SQL 连接到数据库:

    dbisql -c "UID=DBA;PWD=sql;SERVER=mirror_server1"
  5. 运行以下语句定义主服务器和镜像服务器:

    CREATE MIRROR SERVER mirror_demo_primary
    AS PRIMARY
    connection_string='SERVER=mirror_demo_primary;HOST=localhost:6871,localhost:6872';
    
    CREATE MIRROR SERVER mirror_demo_mirror
    AS MIRROR
    connection_string='SERVER=mirror_demo_mirror;HOST=localhost:6871,localhost:6872';
  6. 运行以下语句将 mirror_server1 和 mirror_server2 定义为镜像系统中的伙伴服务器:

    CREATE MIRROR SERVER mirror_server1
    AS PARTNER
    connection_string='SERVER=mirror_server1;host=localhost:6871'
    state_file='c:\server1\server1.state';
    
    CREATE MIRROR SERVER mirror_server2
    AS PARTNER
    connection_string='SERVER=mirror_server2;host=localhost:6872'
    state_file='c:\server2\server2.state';
  7. 运行以下语句定义仲裁服务器:

    CREATE MIRROR SERVER demo_arbiter
    AS ARBITER
    connection_string ='SERVER=demo_arbiter;HOST=localhost:6870';
  8. 运行以下语句为数据库设置验证字符串:

    SET MIRROR OPTION authentication_string='abc';
  9. 与 Interactive SQL 断开连接。

  10. c:\server1 中的数据库文件和事务日志制作副本,然后运行以下命令将这些副本添加到 c:\server2

    dbbackup -c "UID=DBA;PWD=sql;SERVER=mirror_server1;DBN=mirror_demo" c:\server2
  11. 运行以下命令启动第二个数据库服务器:

    dbsrv12 -n mirror_server2 -x tcpip(PORT=6872;DOBROAD=no) -su sql 
    "c:\server2\mirror_demo.db" -xp on

    此命令行指定以下 dbsrv12 选项:

    • -n   将数据库服务器命名为 mirror_server2。

    • -x   指定数据库服务器运行时使用的端口。

    • -su   指定实用程序数据库的口令。

    • -xp on   指明数据库服务器可用于参与数据库镜像系统。

  12. 运行以下命令启动仲裁数据库服务器:

    dbsrv12 -n demo_arbiter -su sql  
    -x "TCPIP(PORT=6870;DOBROAD=no)" -xf "c:\arbiter\arbiter.state" 
    -xa "AUTH=abc;DBN=mirror_demo"
    • -n   将数据库服务器命名为 demo_arbiter。

    • -su   指定实用程序数据库的口令。

    • -x   指示数据库服务器使用 TCP/IP,通过端口 6870 进行通信。其它服务器也使用 TCP/IP,但通过不同的端口进行通信。

    • -xf   指定 arbiter 的状态信息文件的位置。

    • -xa   指定正在镜像的数据库的名称,并为仲裁服务器指定验证字符串(本例中为 abc)。必须将此验证字符串用于数据库镜像系统中的所有服务器(仲裁服务器、主服务器和镜像服务器)。

  13. 通过运行以下命令启动 Interactive SQL 并连接到主服务器:

    dbisql -c "UID=DBA;PWD=sql;SERVER=mirror_demo_primary;HOST=localhost:6871,localhost:6872"
  14. 通过执行以下语句将数据添加到数据库:

    CREATE TABLE test (col1 INTEGER, col2 CHAR(32));
    INSERT INTO test VALUES(1, 'Hello from server1');
    COMMIT;
  15. 通过执行以下语句确定连接到的是哪个数据库服务器:

    SELECT PROPERTY( 'ServerName' );

    将出现主服务器的名称。

  16. 启动故障转移。要实现此目的,通过以下方式之一停止在上一步骤中所识别的主服务器:

    • 在数据库服务器消息窗口中单击 [关闭]。

    • 使用 [Windows 任务管理器] 结束其任务。

    • 发出以下命令:

      dbstop -y -c "UID=DBA;PWD=sql;SERVER=mirror_demo_primary"

    如果出现警告消息,指出该数据库服务器仍存在一个连接,请单击 [是] 将其关闭。

    仲裁数据库服务器消息窗口将显示一条消息,指出主服务器已断开连接。

    仲裁数据库服务器消息窗口显示 server1 已断开连接。

    mirror_server2 数据库服务器消息窗口将显示一条消息,指出该服务器是新的主服务器:

    server2 数据库服务器消息窗口。
  17. 关闭 Interactive SQL。如果您收到错误消息,请单击 [确定]。

  18. 通过运行以下命令重新启动 Interactive SQL:

    dbisql -c "UID=DBA;PWD=sql;SERVER=mirror_demo_primary;HOST=localhost:6871,localhost:6872"
  19. 执行以下语句以验证您当前是否已连接到先前担当镜像服务器的服务器:

    SELECT PROPERTY ( 'ServerName' );
  20. 执行以下语句以验证是否已将所有事务均镜像到镜像服务器:

    SELECT * FROM test;
  21. 与 Interactive SQL 断开连接,然后分别在 arbiter 和 server2 数据库服务器的数据库服务器消息窗口中单击 [关闭]。

  22. (可选)删除 c:\server1c:\server2c:\arbiter 目录。