返回首页

gbase数据、南大通用产品文档:GBase8a高可用性示例

更新日期:2024年09月11日

#ifdef WIN32
#include
#else
#include
#endif
#include
#include
#include
#include
#include
#define isSuc(result) ((result) == SQL_SUCCESS || (result) ==
SQL_SUCCESS_WITH_INFO)

char hosts[][100] = {"192.168.5.64",

GBase 8a 程序员手册ODBC 篇


- 56 -

南大通用数据技术股份有限公司
"192.168.5.65",
"192.168.5.64;192.168.5.65",
"192.168.5.65;192.168.5.64",
"192.168.5.64;192.168.5.64",
"192.168.5.64;192.168.5.64;192.168.5.65",
"192.168.5.64;192.168.5.65;192.168.5.64",
"192.168.5.65;192.168.5.64;192.168.5.64",
"192.168.5.65;192.168.5.66",
NULL};
int main(void)
{
char conn_format[200] = "DRIVER={GBase 8a ODBC 8.3 Driver};"
"SERVER={%s};UID=root;PWD=1;DATABASE=test;PORT=5258;";

char conn[200] = {'\0'};

int i = 0;

short sret; //返回代码

void* henv; //环境句柄

void* hdbc; //连接句柄

/** 申请环境句柄**/

sret =
SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);

if(!isSuc(sret))printf("申请环境句柄出错\n");

/** 设置环境属性,声明ODBC 版本**/

sret =
SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);
if(!isSuc(sret))printf("声明ODBC 版本出错\n");
/** 申请连接句柄**/
sret = SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);

if(!isSuc(sret))printf("申请连接句柄出错\n");
/** 设置连接属性**/
sret = SQLSetConnectAttr(hdbc,SQL_ATTR_AUTOCOMMIT,
(void*)SQL_AUTOCOMMIT_OFF,SQL_IS_INTEGER);
if(!isSuc(sret))printf("设置连接属性出错\n");

while(*hosts[i])

GBase 8a 程序员手册ODBC 篇
南大通用数据技术股份有限公司

- 57 -
{
sprintf(conn, conn_format, hosts[i]);
/** 连接数据源**/
sret = SQLDriverConnect(hdbc,NULL,(unsigned char *)conn,
SQL_NTS, NULL, 0, NULL, 0);
if(!isSuc(sret))printf("连接%s 出错\n", hosts[i]);
else printf("连接%s 成功\n", hosts[i]);
SQLDisconnect(hdbc);
memset(conn, '\0', strlen(conn));
i++;
}
return 0;
}

取值:[0,100]
默认值:92
说明:gbase 网络存活,度量跟_gbase_cpu_uplimit 一致。
修改方式:可使用set 语句修改值也可在配置文件中修改值。适用于global 范围。

当您完成了 HDR 的配置后,您将准备启动 HDR。本主题描述了启动 HDR 的必需步
骤。
您希望在两个数据库服务器(ServerA 和 ServerB)上启动 HDR。启动 HDR 的过程
(将 ServerA 用作主数据库服务器,将 ServerB 用作辅助数据库服务器)将在以下步骤中
进行描述。下表列出了执行每个步骤所需的命令以及发送到消息日志的消息。您可以使
用 ontape 或 ON-Bar 执行备份与复原。您必须在整个过程中使用相同的实用程序。
重要: 即使使用 ON-Bar 执行备份与复原,两个数据库服务器上仍然需要 ontape 实用程序
来执行备份和应用逻辑日志。不要从参与 HDR 集群环境的数据库服务器除去 ontape 实用
程序。
还可以使用外部备份与复原来设置 HDR。 请参阅《GBase 8s 备份与复原指南》,以获
取有关如何执行外部备份与复原的信息。请参阅使用 ontape STDIO 功能来减少设置时
间,以获取直接从 HDR 主服务器设置 HDR 辅助服务器的最快方法。
要启动 HDR,请执行以下操作:
1. 在两个数据库服务器上均安装用户定义的类型和用户定义的例程然后仅
在 ServerA 上注册它们。
2.
创建 ServerA 的 0 级备份。
3. 使用 onmode -d 命令将 ServerA 的类型设置为主类型并指示相关联的辅助数据库服
务器的名称(在本例中为 ServerB)。
当您发出 onmode -d 命令时,数据库服务器将尝试与 HDR 对中的另一数据库服
务器建立连接并启动 HDR 操作。仅当复制对中另一数据库服务器已经设置为正
确类型时,建立连接的尝试才会成功。
此时,ServerB 未联机且未设置为类型辅助,因此将不会建立 HDR 连接。
4.
从您在步骤 1 中创建的 0 级备份执行对 ServerB 的物理复原。不要执行逻辑复
原。
如果您使用的是:
ₒ ON-Bar,请使用 onbar -r -p 命令来执行物理复原。
ₒ ON-Bar 并正在执行外部复原,请使用 onbar -r -p -e 命令来执行物理复原。

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 356 -
ₒ ontape,使用 ontape -p 选项。 您无法使用 ontape -r 选项,因为它同时执行物理复
原和逻辑复原。
注: 如果主服务器和辅助服务器位于两台不同的机器上,那么必须将主服务器的
物理复原放在辅助服务器上。物理复原的位置将由 onconfig 参数 TAPE 定义。
必须先在辅助服务器上设置 IFX_ONTAPE_FILE_PREFIX 变量,然后才能运
行 ontape -p。
ₒ ontape 并正在执行外部复原,请使用 ontape -p -e 命令来执行物理复原。
5. 使用 onmode -d 命令将 ServerB 的类型设置为辅助类型并指示相关联的主数据库服
务器。
ServerB 尝试与主数据库服务器 (ServerA) 建立 HDR 连接,并启动操作。必须成
功建立连接。
在 HDR 开始前,辅助数据库服务器使用自步骤 2 以来写入主数据库服务器的逻
辑日志记录来执行逻辑恢复。如果所有这些逻辑日志记录仍然位于主数据库服务
器磁盘上,那么主数据库服务器将通过网络直接将这些记录发送到辅助数据库服
务器,并且自动执行逻辑恢复。
如果您已备份并释放主数据库服务器上的逻辑日志文件,那么这些文件中的记录
不再在磁盘上。 辅助数据库服务器会提示您从磁带恢复这些文件。在这种情况
下,您必须执行步骤 6。
重要: 在同一会话期间,必须完成步骤 4 到 5。如果必须在步骤 4 后关闭并重新
启动辅助数据库服务器,那么必须重新执行步骤 4。
6. 如果写入主数据库服务器的逻辑日志记录不再在主磁盘上,那么辅助数据库服务
器会提示您从磁带备份恢复这些文件。
如果辅助数据库服务器必须通过网络读取备份逻辑日志文件,那么将辅助数据库服
务器上的磁带设备参数设置为正在运行主数据库服务器的计算机上的设备或设置为
与主数据库服务器处于相同位置的设备。
在您恢复磁带上的所有逻辑日志文件后,逻辑复原将完成使用主数据库服务器磁盘
上的逻辑日志文件。
下表说明了前面的步骤,这样您可以清楚地确定在主服务器上执行的步骤和在辅助服务器
上执行的步骤。该表还显示在执行每个步骤之后写入日志文件的信息。
表 1. 首次启动 HDR 的步骤
步骤
在主服务器 (ServerA) 上
在辅助服务器 (ServerB) 上
1.
安装 UDR、UDT
注册 UDR、UDT模块。
安装 UDR、UDT

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 357 -
步骤
在主服务器 (ServerA) 上
在辅助服务器 (ServerB) 上
2.
ontape 命令:
运行 ontape -s -L 0
ON-Bar 命令
:运行 onbar -b -L 0
发送至消息日志的消息:
Level 0 archive started on
rootdbs
Archive on rootdbs completed

3.
onmode 命令
onmode -d primary sec_name
发送至消息日志的消息:
DR: new type = primary
server name = sec_name
DR: Trying to connect to
secondary server
DR: Cannot connect to
secondary server

4.

ontape 命令
运行 ontape -p 或 ontape -p -e
当提示您备份日志时回答否。
ON-Bar 命令
运行 onbar -r -p 或 onbar -r -p -e

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 358 -
步骤
在主服务器 (ServerA) 上
在辅助服务器 (ServerB) 上
发送至消息日志的消息:
GBase 8s Database Server Initialized
--
Shared Memory Initialized
Recovery Mode
Physical restore of rootdbs started
Physical restore of rootdbs
completed
5.

运行 onmode -d secondary prim_name
发送至消息日志的消息:
DR: new type = secondary, primary
server
name = prim_name
如果自步骤 1 以来写入主数据库服务器的
所有逻辑日志记录仍位于主数据库服务器磁
盘上,那么辅助数据库服务器将读取这些记
录以执行逻辑恢复。(否则,必须执行步骤
6)。

发送至消息日志的消息:
DR: Primary server connected
DR: Primary server operational
发送至消息日志的消息:
DR: Trying to connect to primary
server
DR: Secondary server connected
DR: Failure recovery from disk in
progressn recovery worker threads
will be started

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 359 -
步骤
在主服务器 (ServerA) 上
在辅助服务器 (ServerB) 上
Logical Recovery Started
Start Logical Recovery - Start Log
n, End Log ?
Starting Log Position - n 0xnnnnn
DR: Secondary server operational
6.

ontape 命令
ontape -l
ON-Bar 命令
onbar -r -l

发送至消息日志的消息:
DR: Primary server connected
DR: Primary server operational
发送至消息日志的消息:
DR: Secondary server connected
DR: Failure recovery from disk in
progressn recovery worker threads
will be started
Logical Recovery Started
Start Logical Recovery - Start Log
n, End Log ?
Starting Log Position - n 0xnnnnn
DR: Secondary server operational
使用 ontape STDIO 功能来减少设置时间
通过使用 ontape STDIO 功能,可显著提高设置 HDR 的速度。使用此功能,ontape 会在
备份期间将数据写入 shell 的标准输出,然后在复原期间从标准输入中读取该数据。 使
用远程命令解释器(如 rsh 或 ssh)将 STDIO 备份与同时发生的 STDIO 复原组合在一个
管道中,以允许使用一个命令行来执行 HDR(或 RSS)辅助服务器的初始设置。由于不
对磁带或磁盘执行读写操作,所以可以节省存储空间,而且无需等待备份完成即可开始复
原。

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 360 -
请参阅《GBase 8s 备份与复原指南》以获取有关使用 STDIO 值的详细信息。
不管使用哪种备份实用程序(ontape 或 ON-Bar),都可以使用这种使用 ontape 设置 HDR
的方法。
重要: 当以这种方法使用 STDIO 时,不会在任何位置保存可用于执行复原的永久备份。
如果在源(备份)端使用 -F(假)选项,那么不会将备份记录在数据库服务器的保留页
中。 此外,还会禁止任何交互式对话,并且不会显示任何提示或询问。您还必须确保管
道的远程端为远程 GBase 8s 实例挑选合适的环境。 除了备份数据外,脚本不应该产生
任何输出,因为备份数据由复原过程读取(例如,不启用跟踪)。
下表中的步骤必须由用户 gbasedbt 执行,脚本必须是可执行的,如果不是用完整路径调
用,那么脚本必须位于主目录中。如果您需要在网络上传输保密数据,那么可以使用 ssh
来代替 rsh。
表 1. 使用 rsh 从主服务器设置 HDR 的备用方法


在主服务器上
在辅助服务器上
1.
安装 UDR、UDT。
2. 安装 UDR、UDT。

3.
注册 UDR、UDT 和模块。

4. 运行 onmode -d primary sec_name

5
运行 ontape -s -L 0 -t STDIO -F |
rsh sec_nameontape_HDR_restore.ksh

6.
运行 onmode -d secondary pri_name
在上表中,辅助服务器上的脚本 ontape_HDR_restore.ksh 必须包含以下命令:
#!/bin/ksh
# first get the proper Gbasedbt environment set
. hdr_sec.env
# redirecting stdout and stderr required since otherwise command might never return
ontape -p -t STDIO > /dev/null 2>&1
下列步骤显示如何从辅助服务器设置 HDR。
表 2. 使用 rsh 从辅助服务器设置 HDR 的备用方法:

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 361 -
步骤
在主服务器上
在辅助服务器上
1.

安装 UDR、UDT。
2.
安装 UDR、UDT。

3.
注册 UDR、UDT。

4.
运行 onmode -d
primary sec_name

5.

运行 rsh pri_name ontape_HDR_backup.ksh
| ontape -p -t STDIO
6.

运行 onmode -d secondary pri_name
在上表中,主服务器上的脚本 ontape_HDR_backup.ksh 必须包含以下命令:
#!/bin/ksh
# first get the proper GBase 8s environment set
. hdr_pri.env
ontape -s -L 0 -F -t STDIO