主备机搭建

日常工作中,为了防止误操作,或者可能因为故障导致数据的丢失,或者天灾,以防遭遇“不测”,常常对数据进行备份,接下来介绍一个环境–主备机的搭建,这个环境当主机有故障时可以切换备机进行使用,防止数据的缺失。
第一步:数据准备

注意事项:

主备机要同一版本的数据库,然后安装,查看主备机的版本
主机:
SQL> select * from v$version;

行号 BANNER


1 DM Database Server x64 V7.6.0.197-Build(2019.09.12-112648)ENT

2 DB Version: 0x7000a

已用时间: 10.567(毫秒). 执行号:1.

SQL>

备机:

SQL> select * from v$version;

行号 BANNER



1 DM Database Server x64 V7.6.0.197-Build(2019.09.12-112648)ENT

2 DB Version: 0x7000a

已用时间: 506.718(毫秒). 执行号:1.

SQL>

准备数据的时候为了确保两个库的数据保持一致,所以可以利用备份还原方式将主库的数据还原到备库,或者通过拷贝数据文件将数据拷贝到备库里。

第二步:检查一致性

查询永久魔数

SQL> select file_lsn,cur_lsn from
v$rlog;

行号 FILE_LSN CUR_LSN



1 81988 81988

已用时间: 2.982(毫秒). 执行号:2.

SQL>

SQL> select file_lsn,cur_lsn from
v$rlog;

行号 FILE_LSN CUR_LSN



1 81988 81988

已用时间: 12.591(毫秒). 执行号:2.

SQL>

SQL> select PERMANENT_MAGIC;

行号 PERMANENT_MAGIC


1 1913193310

已用时间: 4.882(毫秒). 执行号:3.

SQL>

SQL> select PERMANENT_MAGIC;

行号 PERMANENT_MAGIC


1 1913193310

已用时间: 5.316(毫秒). 执行号:3.

SQL>

确保LSN和永久魔数都一致的情况下,检查完毕后关闭主备数据库服务。如果不一致说明主备库数据不一致,那么就要重新数据准备。

第三步:主机数据库配置参数

dm.ini 修改以下的参数 ,这个文件是数据库初始化文件一般是在数据文件的目录下

INSTANCE_NAME = DM1

PORT_NUM = 42141#数据库实例监听端口

DW_PORT = 43141 #守护环境下,监听守护进程连接端口

DW_ERROR_TIME =60 #接收守护进程消息超时时间

ALTER_MODE_STATUS= 1 #允许手工方式修改实例模式/状态

ENABLE_OFFLINE_TS= 2 #不允许备库OFFLINE表空间

MAL_INI = 1 #打开MAL系统

ARCH_INI = 1 #打开归档配置

HA_INST_CHECK_FLAG = 1 #检测是否多个实例进程同时启动

编辑主库的dmmal.ini文件,放于dm.ini的同一目录下
vi dmmal.ini

MAL_CHECK_INTERVAL= 5 #MAL链路检测时间间隔

MAL_CONN_FAIL_INTERVAL= 5 #判定MAL链路断开的时间

[MAL_INST1]

MAL_INST_NAME = DM1 #实例名,和dm.ini中的INSTANCE_NAME一致

MAL_HOST = 192.168.73.3#MAL系统监听TCP连接的IP地址

MAL_PORT = 61141#MAL系统监听TCP连接的端口

MAL_INST_HOST = 192.168.73.3#实例的对外服务IP地址

MAL_INST_PORT = 42141#实例的对外服务端口,和dm.ini中的PORT_NUM一致

MAL_DW_PORT = 52141 #实例对应的守护进程监听TCP连接的端口

[MAL_INST2]

MAL_INST_NAME = DM2

MAL_HOST = 192.168.73.4

MAL_PORT = 61142

MAL_INST_HOST = 192.168.73.4

MAL_INST_PORT = 42142

MAL_DW_PORT = 52142
编辑dmarch.ini

[ARCHIVE_REALTIME]

ARCH_TYPE =REALTIME #实时归档类型

ARCH_DEST = DM2 #实时归档目标实例名

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL#本地归档类型

ARCH_DEST = /home/DM7/bin/dmdata/DAMENG/arch#本地归档文件存放路径

ARCH_FILE_SIZE =128 #单位Mb,本地单个归档文件最大值

ARCH_SPACE_LIMIT = 0 #单位Mb,0表示无限制,范围1024~4294967294M

复制一份到备机,然后修改ARCH_DEST根据实际情况修改。

编辑dmwatcher.ini文件

[GROUP_A]

DW_TYPE =REALTIME #实时守护类型

DW_MODE = AUTO #自动切换模式

DW_ERROR_TIME =10 #远程守护进程故障认定时间

INST_RECOVER_TIME= 60 #主库守护进程启动恢复的间隔时间

INST_ERROR_TIME =10 #本地实例故障认定时间

INST_OGUID =453331 #守护系统唯一OGUID值

INST_INI = /home/DM7/bin/dmdata/DAMENG/dm.ini
#dm.ini配置文件路径

INST_AUTO_RESTART= 1 #打开实例的自动启动功能

INST_STARTUP_CMD = /home/DM7/bin/dmserver #命令行方式启动

dmwatcher.ctl:

同一个守护进程组,必须使用同一份dmwatcher.ctl。因此,只需要使用dmctlcvt工具生成一份dmwatcher.ctl文件,然后分别拷贝到各个数据库目录下即可。

在配置完成dmwatcher.ini后,使用dmctlcvt工具生成dmwatcher.ctl:

./dmctlcvt t2dwctl ./dmdata/DAMENG/dmwatcher.ini ./dmdata/DAMENG/

注意:dmwatcher.ini:中设置了[GROUP_A],所以对应的转换会生成GROUP_A/dmwatcher.ini

第四步:启动数据库服务并设置数据守护唯一标识码OGUID

以mount方式启动主机:

./dmserver …/data/DAMENG/dm.ini mount

设置数据守护唯一标识码OGUID:

sp_set_oguid(453331);改值为dmwatch.ini中INST_OGUID值

修改数据库模式:

ALTER DATABASE PRIMARY;

第五步:备机数据库配置参数

dm.ini:
INSTANCE_NAME = DM2
#实例名,建议使用“组名_守护类型_序号”的命名方式,总长度不能超过16

PORT_NUM = 42142#数据库实例监听端口

DW_PORT = 43142 #守护环境下,监听守护进程连接端口

DW_ERROR_TIME =60 #接收守护进程消息超时时间

ALTER_MODE_STATUS= 1 #不允许手工方式修改实例模式/状态

ENABLE_OFFLINE_TS= 2 #不允许备库OFFLINE表空间

MAL_INI = 1 #打开MAL系统

ARCH_INI = 1 #打开归档配置

HA_INST_CHECK_FLAG = 1 #检测是否多个实例进程同时启动

dmmal.ini(和主数据库完全一致)

MAL_CHECK_INTERVAL= 5 #MAL链路检测时间间隔

MAL_CONN_FAIL_INTERVAL= 5 #判定MAL链路断开的时间

[MAL_INST1]

MAL_INST_NAME = DM1 #实例名,和dm.ini中的INSTANCE_NAME一致

MAL_HOST = 192.168.73.3#MAL系统监听TCP连接的IP地址

MAL_PORT = 61141#MAL系统监听TCP连接的端口

MAL_INST_HOST = 192.168.73.3#实例的对外服务IP地址

MAL_INST_PORT = 42141#实例的对外服务端口,和dm.ini中的PORT_NUM一致

MAL_DW_PORT = 52141 #实例对应的守护进程监听TCP连接的端口

[MAL_INST2]

MAL_INST_NAME = DM2

MAL_HOST = 192.168.73.4

MAL_PORT = 61142

MAL_INST_HOST = 192.168.73.4

MAL_INST_PORT = 42142

MAL_DW_PORT = 52142

dmarch.ini

[ARCHIVE_REALTIME]

ARCH_TYPE =REALTIME #实时归档类型

ARCH_DEST = DM1 #实时归档目标实例名

[ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL#本地归档类型

ARCH_DEST = /home/DM7/bin/dmdata/DAMENG/arch
#本地归档文件路径

ARCH_FILE_SIZE =128 #单位Mb,本地单个归档文件最大值

ARCH_SPACE_LIMIT = 0 #单位Mb,0表示无限制,范围1024~4294967294M

dmwatcher.ini

[GROUP_A]

DW_TYPE= REALTIME #实时守护类型

DW_MODE= AUTO #自动切换模式

DW_ERROR_TIME= 10 #远程守护进程故障认定时间

INST_RECOVER_TIME= 60 #主库守护进程启动恢复的间隔时间

INST_ERROR_TIME= 10 #本地实例故障认定时间

INST_OGUID= 453331 #守护系统唯一OGUID值

INST_INI= /home/DM7/bin/dmdata/DAMENG/dm.ini #dm.ini配置文件路径

INST_AUTO_RESTART= 1 #打开实例的自动启动功能

INST_STARTUP_CMD
= /home/DM7/bin/dmserver #命令行方式启动

dmwatcher.ctl

同一个守护进程组,必须使用同一份dmwatcher.ctl文件,这里直接拷贝配置主库时已经生成的dmwatcher.ctl到本地数据文件目录/home/DM7/bin/dmdata/DAMENG。

第六步:启动数据库服务并设置数据守护唯一标识码OGUID

以mount方式启动备机:

./dmserver
…/data/DAMENG/dm.ini mount

可以修改为后台启动,就是将DmService修改一下

INI_PATH=/home/DM7/bin/dmdata/DAMENG/dm.ini

START_MODE=mount

设置备机数据守护唯一识别码

sp_set_oguid(453331);
–如果不设置就获取不到守护进程

修改数据库模式为备机模式

SP_SET_PARA_VALUE(1,‘ALTER_MODE_STATUS’, 1);

ALTER DATABASE STANDBY;

SP_SET_PARA_VALUE(1,‘ALTER_MODE_STATUS’, 0);

第七步:配置监视器

监视器支持两种运行模式:监控模式和确认模式。监视器运行模式由配置文件 (dmmonitor.ini)的 MON_DW_CONFIRM参数来确定。MON_DW_CONFIRM参数的默认
值是0,表示监控模式;MON_DW_CONFIRM参数值为1时,表示监视器运行在确认模式下。

MON_DW_Confirm= 1 #确认监视器模式

MON_LOG_PATH =d:\dmdbms\data\DAMENG\log\ #监视器日志文件存放路径

MON_LOG_INTERVAL= 60 #每隔60s定时记录系统信息到日志文件

MON_LOG_FILE_SIZE= 32 #每个日志文件最大32M

MON_LOG_SPACE_LIMIT= 0 #不限定日志文件总占用空间

[GROUP_A]

MON_INST_OGUID= 453331 #组GRP1的唯一OGUID

#以下配置为监视器到组GRP1的守护进程的连接信息,以“IP:PORT”的形式配置

#IP对应dmmal.ini中的MAL_HOST,PORT对应dmmal.ini中的MAL_DW_PORT

MON_DW_IP = 192.168.73.3:52141

MON_DW_IP = 192.168.73.4:52142

第八步:启动主备机的守护进程

可以设置为后台启动
ls ./service_template/

找出DmWatcherService进行配置修改

以下是前台启动

启动主机DW_P上的守护进程。

./dmwatcher ./dmdata/DAMENG/dmwatcher.ini

启动备机DW_S上的守护进程。

./dmwatcher ./dmdata/DAMENG/dmwatcher.ini

注意:主机和副机的防火墙都需要关闭

Linux7 关闭防火墙的命令:systemctl stop firewalld

Systemctl status firewalld是查看防火墙的状态

第八步:启动监视器

这个是搭建在window下的

dmmonitor.exe …\data\DAMENG\dmmonitor.ini

Linux下的监视器是这样启动

./dmmonitor ./dmdata/DAMENG/dmmonitor.ini

环境搭建基本上完成。
测试:

主机创建表,插入数据,在备机查看是否同步。备机插入数据失败。

SQL> select * from test;

行号 ID NAME


1 1 22

2 2 222

3 3 333

4 4 444

5 4 444

SQL> insert into test values(6,‘666’);

影响行数 1

已用时间: 1.257(毫秒). 执行号:11.

SQL> commit;

操作已执行

已用时间: 4.579(毫秒). 执行号:12.

SQL>

SQL> select * from test;

行号 ID NAME


1 1 22

2 2 222

3 3 333

4 4 444

5 4 444

6 6 666

6 rows got

备机插入数据会报错误

SQL> insert into test values(7,‘777’);

insert into test values(7,‘777’);

第1 行附近出现错误[-2018]:STANDBY模式下不支持对非临时表或含有lob类型列的表进行增删改操作.

已用时间: 0.981(毫秒). 执行号:0.

SQL>

你可能感兴趣的:(达梦数据库)