返回首页

gbase数据、南大通用产品文档:GBase8s故障后恢复 HDR 和 RS 集群

更新日期:2024年09月11日

将 HDR 或 RS 集群复原回原始配置时,可能需要复原关键介质,以及重新启动和配置集
群中的服务器。
磁盘故障的结果取决于磁盘故障发生在主数据库服务器上还是辅助数据库服务器上、磁盘
上的块是否包含关键介质(根数据库空间、逻辑日志文件或物理日志)以及块是否已镜像。

如果块已镜像,您可以执行恢复,如同您为使用镜像的标准数据库服务器所做的一样。
如果块未镜像,
那么复原主数据库服务器的过程取决于发生故障的磁盘是否包含关键介质:


如果磁盘中包含关键介质,那么主数据库服务器将发生故障。必须使用主数据库空
间备份(或如果辅助数据库服务器切换为标准方式并重定向了活动,那么使用辅助
数据库空间备份)执行完全复原。

如果磁盘不包含关键介质,您可以用热复原来分别复原受影响的数据库空间。热复
原由两个部分组成:首先从备份对发生故障的数据库空间进行复原,随后对自该数

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 486 -
据库空间备份以来所有写入的逻辑日志记录进行逻辑复原。
您必须在执行热复原之
前备份所有逻辑日志文件。
在块未镜像的情况下,如果磁盘包含关键介质,辅助数据库服务器将发生故障;但如果磁
盘不包含关键介质,辅助数据库服务器将保持联机状态。在这两种情况下,都必须在主数
据库服务器上使用数据库空间备份执行完全复原。在第二种情况下,您无法从辅助数据库
空间备份复原所选的数据库空间,因为此时它们可能是从主数据库服务器上的相应数据库
空间派生而来的。您必须执行完整的复原。
关键数据损坏后恢复集群
如果 HDR 或 RS 集群中的某个数据库服务器遇到损坏根数据库空间(包含逻辑日志文件
或物理日志的数据库空间)的故障,那么必须将发生故障的数据库服务器视为在磁盘上没
有任何数据,并且假定您是首次启动 HDR 或 RS 集群。 将正在运行的带有完整磁盘的
数据库服务器作为带有数据的数据库服务器来使用。
主服务器故障
对于以下步骤,
假设配置中包含名为 srv_A 的主服务器和名为 srv_B 的 HDR 辅助服务器。
重新启动 RS 集群的步骤与此类似。
要在严重介质故障后重新启动 HDR,请执行以下操作:
42.
srv_B 上的 DRAUTO 配置参数会影响您下一步的操作
43. 如果此参数设置为 0,那么必须通过运行 onmode -d make primary 命令将服务器转
换为主服务器。
44. 如果此参数设置为 1 (RETAIN_TYPE),那么通过运行 onmode -d make primary 命令
将服务器转换为主服务器。
45. 如果设置为 2 (REVERSE_TYPE),那么一旦因旧的主服务器发生故障导致连接结
束,辅助数据库服务器将立即成为主数据库服务器。
46.
从上次数据库空间备份复原 srv_A(主数据库服务器)。
47.
使用 onmode -d 命令将 srv_A 设置为 HDR 辅助数据库服务器并启动 HDR。
onmode -d 命令可在 srv_B 上从逻辑日志文件启动逻辑恢复。如果由于已在 srv_B上备
份并释放了逻辑日志文件而无法完成逻辑恢复,那么 HDR 要到执行下一步时才会启
动。
48.
应用来自 srv_B 的逻辑日志文件
(新的主数据库服务器)

这些文件已备份到磁带。
HDR 对现在可运行;但是,将交换 srv_A 和 srv_B 的角色。要将 srv_A 和 srv_B 交
换回其原始角色,
请遵循指示信息:
在辅助服务器成为主服务器后恢复 HDR 集群。

表 1. 主数据库服务器上发生严重介质故障后恢复 HDR 的步骤
步骤
在主数据库服务器 (svr_A) 上
在辅助数据库服务器 (svr_B) 上

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 487 -
1.

onmode 命令
onmode -d make primary srv_A
2.
ontape 命令
ontape -p
ON-Bar 命令
onbar -r -p

3.
onmode 命令
onmode -d secondary srv_B

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

辅助服务器故障
如果辅助数据库服务器遇到严重介质故障,请遵循首次启动集群的步骤来恢复集群。
主服务器和辅助服务器故障
如果正在运行复制对中数据库服务器的两台计算机不幸同时遇到损坏根数据库空间(包含
逻辑日志文件或物理日志的数据库空间)的故障,那么必须重新启动集群。
要在两个数据库服务器上都发生严重介质故障后重新启动 HDR 或 RS 集群:
1. 从存储空间和逻辑日志备份复原主数据库服务器。
2. 复原主数据库服务器后,
请将另一台发生故障的数据库服务器视为在磁盘上没有任
何数据,并且假定您是首次启动 HDR 或 RS 集群。
网络故障后重新启动 HDR 或 RS 集群

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 488 -
发生网络故障之后,HDR 或 RS 集群可能需要重新启动。在网络故障后,主数据库服务
器处于联机方式,辅助数据库服务器处于只读方式。复制在两个数据库服务器上都会关闭
(state = off)。
可能不需要重新启动集群,因为主数据库服务器会尝试每 10 秒重新连接一次,并且每 2
分钟显示一次有关无法连接的消息。
如果集群未自动重新启动,那么重新建立连接时,可以通过在辅助服务器上运行以下命令
来重新启动集群:

onmode -d secondary primary_name,以使该辅助服务器成为主服务器。
辅助服务器发生故障时重新启动 HDR 或 RS 集群
如果在辅助服务器发生故障后必须重新启动 HDR 或 RS 集群,那么除了启动该辅助服务
器外,还可能需要在该辅助服务器上执行逻辑日志复原。
这些步骤假设您自辅助数据库服务器发生故障后一直按需要备份主数据库服务器上的逻辑
日志文件。
表 1. 辅助数据库服务器上发生故障后的重新启动步骤
步骤
在主服务器上
在辅助服务器上
1.
主数据库服务器必须处于联机方式。 oninit
如果您在消息日志中接收到以下消息,请
继续步骤 2 :
DR: Start Failure recovery from tape
2.

ontape 命令
ontape -l
ON-Bar 命令
onbar -r -l
在辅助服务器成为主服务器后恢复 HDR 集群
如果在原始主服务器发生故障后,
HDR 集群中的辅助服务器成为主服务器,
那么可以使用
脚本来重新建立原始主服务器,然后将当前主服务器转换回辅助服务器。
假设主服务器 srv_pri 遇到了错误,以至于要故障转移至辅助服务器 srv_hdr_sec。此时,主
服务器是 srv_hdr_sec,并且集群中的所有其他辅助服务器现在都指向 srv_hdr_sec。
要将集群复原至 srv_pri 执行故障转移之前的状态,请遵循以下步骤:

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 489 -
49.
通过运行适当命令将 srv_pri 初始化为 HDR 辅助服务器:
UNIX™ 系统:
$GBASEDBTDIR/bin/hdrmksec.sh srv_hdr_sec
50.
通过运行以下命令将 srv_pri 更改为主服务器:
onmode -d make primary srv_pri
此命令将使 srv_pri 成为主服务器,并将集群中的其他任何辅助服务器重定向为指向新
的主服务器。
该命令也会关闭原有 HDR 主服务器 (srv_hdr_sec),
这是因为高可用性
环境中只能存在一个主服务器。
51.
通过运行以下命令将 srv_hdr_sec 初始化为 HDR 辅助服务器:
在 UNIX 系统上:
$GBASEDBTDIR/bin/hdrmksec.sh srv_pri
主服务器发生故障时重新启动
在主服务器发生故障后重新启动 HDR 或 RS 集群的过程取决于是否辅助服务器是否成
为主服务器,以及该辅助服务器成为主服务器的方法。
辅助数据库服务器未更改为标准数据库服务器
如果主数据库服务器发生故障后必须重新启动 HDR 或 RS 集群,并且辅助数据库服务器
没有更改为标准数据库服务器,请使用 oninit 命令启动主数据库服务器。
辅助数据库服务器已手动更改为标准数据库服务器
如果主数据库服务器发生故障后必须重新启动 HDR 或 RS 集群,并且您已将辅助数据库
服务器手动更改为标准数据库服务器,请完成下表中的步骤。
表 1. 将辅助数据库服务器更改为标准服务器后的重新启动步骤
步骤
在主数据库服务器上
在辅助数据库服务器上
1.

onmode -s
该步骤将辅助数据库服务器
(现为标准服务器)变为静
默方式。所有连接至该数据
库服务器的客户机必须断开
连接。执行更新的应用程序
必须重定向到主服务器。
2.

onmode -d

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 490 -
步骤
在主数据库服务器上
在辅助数据库服务器上
secondary prim_name
3.
oninit
如果所有写入辅助数据库服务器的逻辑日志记录
仍在辅助数据库服务器磁盘上,那么当您发
出 oninit 命令时主数据库服务器将从该磁盘
恢复这些记录。
如果您已备份并释放辅助数据库服务器上的逻辑
日志文件,那么这些文件中的记录不再在磁盘上。

在这种情况下,
会提示您从磁带恢复这些逻辑日志
文件(步骤 4)。
对于 ontape 用户:
如果您希望通过网络读取逻辑日志记录,
请将逻辑
日志磁带设备设置为正在运行辅助数据库服务器
的计算机上的设备。

4.
如果提示您从磁带恢复逻辑日志记录,请执行此步
骤。
ontape 命令
ontape -l
ON-Bar 命令
onbar -r -l

辅助数据库服务器已自动更改为标准数据库服务器
如果主数据库服务器发生故障后必须重新启动 HDR 或 RS 集群,并且辅助数据库服务器
已自动更改为标准数据库服务器,请完成下表中所示的步骤。
表 2. 将辅助数据库服务器更改为标准服务器后的自动重新启动步骤

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 491 -
步骤
在主数据库服务器上
在辅助数据库服务器上
1.
% oninit
如果 DRAUTO
= 1,那么此数据库服务器的类型将
设置为主数据库服务器。
如果 DRAUTO
= 2,那么当此数据库服务器重新启
动时,其类型将设置为辅助数据库服务器。
如果所有写入辅助数据库服务器的逻辑日志记录
仍在辅助数据库服务器磁盘上,那么当您发
出 oninit 命令时主数据库服务器将从该磁盘
恢复这些记录。
如果您已备份和释放的逻辑日志文件位于辅助数
据库服务器上,
那么这些文件中的记录将不再位于
磁盘之上。在这种情况下,会提示您从磁带恢复这
些逻辑日志文件(步骤 2)。
对于 ontape 用户:

将逻辑日志磁带设备设置为正在运行辅助
数据库服务器的计算机上的设备。
如果 DRAUTO = 1 ,那么
当您进行主备份时,辅助数
据库服务器将自动平稳关
闭。这可确保断开所有客户
机的连接。然后,类型切换
回辅助。执行更新的所有应
用程序必须重定向到主数据
库服务器。
如果 DRAUTO = 2,那么辅
助数据库服务器将自动转换
为主数据库服务器。在旧的
主数据库服务器重新启动并
与其他服务器连接,并确定
它现在是主数据库服务器之
后,它将成为辅助数据库服
务器。
2.
如果提示您从磁带恢复逻辑日志记录,
请执行此步
骤。
ontape 命令
% ontape -l
ON-Bar 命令
onbar -r -l

TO_SINGLE_BYTE
语法
TO_SINGLE_BYTE(arg)
函数说明
将传入的arg 从全角字符转半角字符。arg 可以是任何类型的值和列,如果arg 为
字符串,并且字符串里面含有全角的话,在输出结果中就会将全角字符转为半角
字符,其他字符保持不变。
该函数仅在UTF8 字符集和GBK 字符集下有效。

当前仅95 个字符支持全角转半角。
95 个字符如下:
空格

"
#
$
%
&



*
+



/


<
=
>

@
[
\
]
^
_

{
|
}

A-Z
a-z
0-9
create as select 时候,包含函数列的字段类型根据查询结果的字段类型来确
定,如果是查询结果的字段类型为字符类型,会根据结果的最大长度来判断
是varchar、longblob 类型。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
675
注意

只有VARCHAR、CHAR、TEXT 支持字符串类型的列类型支持全角
字符,并且使用to_single_byte 转换成功。

LONGBLOB、BLOB 虽然能存放全角字符,但是是按二进制存储的,
TO_SINGLE_BYTE 转换后还是全角字符。

BLOB 类型经TO_SINGLE_BYTE 转换后为VARBINARY 类型
示例
示例:
create table t(a int, b varchar(10), c datetime, t text, e longblob, f blob, g char(10));
gbase> insert into t values(1, 'aaaaaa', '2011-01-01 11:11:11', 'aaaa', 'aaaa',
'aaaa', 'aaaa');
Query OK, 1 row affected (Elapsed: 00:00:00.05)
gbase> select to_single_byte(a) as sing_a,to_single_byte(b) as sing_b,
to_single_byte(c) as sing_c, to_single_byte(t) as sing_t, to_single_byte(e) as sing_e,
to_single_byte(f) as sing_f, to_single_byte(g) as sing_g from t;
+--------+--------+---------------------+--------+--------------+--------------+------------+
| sing_a | sing_b | sing_c
| sing_t | sing_e
| sing_f
| sing_g
|
+--------+--------+---------------------+--------+--------------+--------------+------------+
| 1
| aaaaaa | 2011-01-01 11:11:11 | aaaa
| aaaa
| aaaa
|
aaaa
|
+--------+--------+---------------------+--------+--------------+--------------+------------+
1 row in set (Elapsed: 00:00:00.03)
gbase> create table ty as select to_single_byte(a) as sing_a,to_single_byte(b) as
sing_b, to_single_byte(c) as sing_c, to_single_byte(t) as sing_t, to_single_byte(e) as
sing_e, to_single_byte(f) as sing_f, to_single_byte(g) as sing_g from t;
Query OK, 1 row affected (Elapsed: 00:00:00.11)
gbase>
show create table ty \G
*************************** 1. row ***************************
Table: ty
Create Table: CREATE TABLE "ty" (
"sing_a" varchar(11) DEFAULT NULL,
"sing_b" varchar(10) DEFAULT NULL,
"sing_c" varchar(26) DEFAULT NULL,
"sing_t" varchar(10922) DEFAULT NULL,

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
676
"sing_e" longblob,
"sing_f" varbinary(32767) DEFAULT NULL,
"sing_g" varchar(10) DEFAULT NULL
) ENGINE=EXPRESS DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace'
1 row in set (Elapsed: 00:00:00.00)
gbase> select * from ty;
+--------+--------+---------------------+--------+--------------+--------------+------------+
| sing_a | sing_b | sing_c
| sing_t | sing_e
| sing_f
| sing_g
|
+--------+--------+---------------------+--------+--------------+--------------+------------+
| 1
| aaaaaa | 2011-01-01 11:11:11 | aaaa
| aaaa
| aaaa
|
aaaa
|
+--------+--------+---------------------+--------+--------------+--------------+------------+
1 row in set (Elapsed: 00:00:00.02)


GBase 8a MPP Cluster 参数手册
目录
文档版本2022-06-07
南大通用数据技术股份有限公司
XIII