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

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

 

教程:使用数据库镜像

本教程介绍如何设置数据库镜像系统以及在发生故障转移时会出现什么情况。就本教程而言,所有数据库服务器均运行在同一台计算机上。但在实际镜像系统中,数据库服务器很可能运行在不同的计算机上。

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

  2. samples-dir\demo.db 中的示例数据库制作一个副本,然后将该副本添加到 c:\server1

    有关 samples-dir 的信息,请参见示例目录

  3. 通过执行以下命令,为 c:\server1 中的数据库创建一个事务日志:

    dbping -d -c "UID=DBA;PWD=sql;DBF=c:\server1\demo.db"
  4. c:\server1 中的数据库文件和事务日志制作副本,然后将这些副本添加到 c:\server2

  5. 运行以下命令启动仲裁服务器:

    dbsrv11 -x tcpip(PORT=2639) -su sql -n arbiter -xa "auth=abc;DBN=demo" -xf c:\arbiter\arbiterstate.txt

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

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

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

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

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

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

  6. 运行以下命令(此命令必须在一行中键入)启动 server1:

    dbsrv11 -n server1 -x tcpip(PORT=2638) -xf c:\server1\server1state.txt -su sql 
    c:\server1\demo.db -sn mirrordemo 
    -xp "partner=(ENG=server2;LINKS=tcpip(PORT=2637;TIMEOUT=1));auth=abc;
    arbiter=(ENG=arbiter;LINKS=tcpip(PORT=2639;TIMEOUT=1));mode=sync"

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

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

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

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

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

    • -sn   指定数据库服务器的替代名称。主服务器和镜像服务器必须具有相同的名称,这样客户端在连接时就无需预先知道哪个服务器是主服务器,哪个服务器是镜像服务器。

    • -xp   向正在启动的服务器提供信息,以便它能够连接到其合作伙伴和仲裁服务器。

  7. 运行以下命令(此命令必须在一行中键入)启动 server2:

    dbsrv11 -n server2 -x tcpip(PORT=2637) -xf c:\server2\server2state.txt 
    -su sql c:\server2\demo.db -sn mirrordemo 
    -xp "partner=(ENG=server1;LINKS=tcpip(PORT=2638;TIMEOUT=1));auth=abc;
    arbiter=(ENG=arbiter;LINKS=tcpip(PORT=2639;TIMEOUT=1));mode=sync"

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

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

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

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

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

    • -sn   指定数据库服务器的替代名称。主服务器和镜像服务器必须具有相同的名称,这样客户端在连接时就无需预先知道哪个服务器是主服务器,哪个服务器是镜像服务器。

    • -xp   向正在启动的服务器提供信息,以便它能够连接到其合作伙伴和仲裁服务器。

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

    dbisql -c "UID=DBA;PWD=sql;ENG=mirrordemo;LINKS=tcpip"
  9. 通过执行以下语句将示例数据添加到 SQL Anywhere 示例数据库:

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

    SELECT PROPERTY( 'ServerName' );

    将出现主服务器的名称。

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

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

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

    • 发出以下命令:

      dbstop -y -c "UID=DBA;PWD=sql;ENG=mirrordemo"

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

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

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

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

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

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

    dbisql -c "UID=DBA;PWD=sql;ENG=mirrordemo;LINKS=tcpip"
  14. 执行以下语句以验证您当前是否已连接到镜像服务器:

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

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