达梦数据库主备集群(数据守护)搭建-主库需要停机


环境:
OS:Centos 7
DB:V8

说明:
主库上安装数据库软件和启动数据库,主库在归档模式
从库上只安装了数据库软件

主备库的数据目录一致

 

说明:
主库上安装数据库软件和启动数据库,主库在归档模式
从库上只安装了数据库软件

主备库的数据目录一致

目录规划(主备一致):
/dmdbms/dmarch ##归档日志目录
/dmdbms/dmbak ##dmrman备份目录
/dmdbms/dmdata ##数据目录
/dmdbms/product ##软件安装目录

 

1.环境准备
服务器 主库IP:192.168.1.135 dm8数据库 实例名:slnngk 端口号:5236
服务器 备库IP:192.168.1.134 dm8数据库 实例名:slnngkbak 端口号:5236

2.主库需要配置归档
若已经在归档模式的,可以省略该步骤
disql sysdba/dameng123
alter database mount;
alter database add archivelog ‘dest=/dmdata/dmarch,TYPE=local,FILE_SIZE=1024,SPACE_LIMIT=204800’;
alter database archivelog;
alter database open;

 

3.初始化备库
因为备库目前只是安装了数据库软件,没有安装数据库,是新的库,可以进行初始化(字符集跟主库保持一致)
[root@localhost ~]# su – dmdba
[dmdba@localhost ~]$ cd /dmdbms/product/bin
[dmdba@localhost ~]$./dminit path=/dmdbms/dmdata charset=1 db_name=slnngk instance_name=slnngkbak SYSDBA_PWD=”dameng123″ SYSAUDITOR_PWD=”dameng123″

 

4.关闭主库,以 dmrman 备份数据库

关闭数据库
[dmdba@localhost ~]$ disql sysdba/dameng123
SQL> shutdown immediate;

或是使用操作系统命令关闭
systemctl stop DmServiceslnngk.service

这个时候查看服务情况
systemctl status DmServiceslnngk.service

[root@localhost dmdbms]# su – dmdba
[dmdba@localhost ~]$ dmrman
dmrman V8
RMAN>backup database ‘/dmdbms/dmdata/slnngk/dm.ini’ backupset ‘/dmdbms/dmbak’;

 

 

5.将备份文件复制到备库对应目录下(如果是root用户,复制成功需要将备份文件设置属于dmdba:dinstall用户组)
我这里是使用dmdba账号进行scp传输的
scp -r /dmdbms/dmbak/* dmdba@192.168.1.134:/dmdbms/dmbak

 

6.备库使用dmrman执行数据库还原
这个时候备库是没有启动的,疑惑备库原来初始化的数据目录下的文件是否可以删除掉?
[root@localhost ~]# su – dmdba
[dmdba@localhost ~]$ dmrman
dmrman V8

按顺序执行3个命令:
restore database ‘/dmdbms/dmdata/slnngk/dm.ini’ from backupset ‘/dmdbms/dmbak’;
recover database ‘/dmdbms/dmdata/slnngk/dm.ini’ from backupset ‘/dmdbms/dmbak’;
recover database ‘/dmdbms/dmdata/slnngk/dm.ini’ update db_magic;

 

RMAN> restore database '/dmdbms/dmdata/slnngk/dm.ini' from backupset '/dmdbms/dmbak';
restore database '/dmdbms/dmdata/slnngk/dm.ini' from backupset '/dmdbms/dmbak';
file dm.key not found, use default license!
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:06][Remaining:00:00:00]                                 
restore successfully.
time used: 00:00:06.952
RMAN> recover database '/dmdbms/dmdata/slnngk/dm.ini' from backupset '/dmdbms/dmbak';
recover database '/dmdbms/dmdata/slnngk/dm.ini' from backupset '/dmdbms/dmbak';
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[40437], file_lsn[40437]
no log generates while the backupset [/dmdbms/dmbak] created
recover successfully!
time used: 401.954(ms)
RMAN> recover database '/dmdbms/dmdata/slnngk/dm.ini' update db_magic;
recover database '/dmdbms/dmdata/slnngk/dm.ini' update db_magic;
Database mode = 0, oguid = 0
Normal of FAST
Normal of DEFAULT
Normal of RECYCLE
Normal of KEEP
Normal of ROLL
EP[0]'s cur_lsn[40437], file_lsn[40437]
recover successfully!
time used: 00:00:01.160

 

7.配置集群文件

7.1  vim dm.ini    #主备库实例都需更改下面参数

ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置

 

7.2 vim dmmal.ini  #主备库配置必须完全一致

MAL_CHECK_INTERVAL       = 5      #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL   = 5  #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME       = SLNNGK            #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST              = 192.168.1.135     #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT            = 61141             #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST       = 192.168.1.135     #实例的对外服务 IP 地址
MAL_INST_PORT       = 5236                 #实例的对外服务端口,dm.ini 中的 PORT_NUM 一致
MAL_DW_PORT         = 52141             #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT    = 33141             #实例监听守护进程 TCP 连接的端口

[MAL_INST2]
MAL_INST_NAME       = SLNNGKBAK
MAL_HOST            = 192.168.1.134
MAL_PORT            = 61141
MAL_INST_HOST       = 192.168.1.134
MAL_INST_PORT       = 5236
MAL_DW_PORT         = 52141
MAL_INST_DW_PORT    = 33141

 

在主库上创建然后scp到备库

scp /dmdbms/dmdata/slnngk/dmmal.ini dmdba@192.168.1.134:/dmdbms/dmdata/slnngk/

 

7.3 vim dmarch.ini

主库:
若主库上已经配置了本地归档的,那么只需要添加ARCHIVE_REALTIME部分

[ARCHIVE_REALTIME]
ARCH_TYPE        = REALTIME #实时归档类型
ARCH_DEST        = SLNNGKBAK   #实时归档目标实例名,这里是备库的实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE        = LOCAL          #本地归档类型
ARCH_DEST        = /dmdbms/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE   = 1024           #单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 204800         #单位Mb,0 表示无限制,范围 1024~4294967294M
ARCH_FLUSH_BUF_SIZE = 0
ARCH_HANG_FLAG = 1

 

备库:

[ARCHIVE_REALTIME]
ARCH_TYPE        = REALTIME #实时归档类型
ARCH_DEST        = SLNNGK   #实时归档目标实例名,这里是主库的实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE        = LOCAL          #本地归档类型
ARCH_DEST        = /dmdbms/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE   = 1024           #单位Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 204800         #单位Mb,0 表示无限制,范围 1024~4294967294M
ARCH_FLUSH_BUF_SIZE = 0
ARCH_HANG_FLAG = 1

 

7.4 配置dmwatcher.ini #主备库配置一致

[GRP1]
DW_TYPE       =  GLOBAL     ##全局守护类型
DW_MODE       =  MANUAL     ##手工切换 AUTO自动切换模式必须部署一个确认监视器
DW_ERROR_TIME    =  10      ##远程守护进程故障认定时间
INST_RECOVER_TIME =  60     ##主库守护进程启动恢复的间隔时间
INST_ERROR_TIME  =  10      ##本地实例故障认定时间
INST_OGUID     =  453332    ##守护系统唯一 OGUID 值
INST_INI      =  /dmdbms/dmdata/slnngk/dm.ini  #dm.ini配置文件路径
INST_AUTO_RESTART =  1      ##打开实例的自动启动功能
INST_STARTUP_CMD  =  /dmdbms/product/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD =  0    ##指定主库发送日志到备库的时间阀值,默认关闭
RLOG_APPLY_THRESHOLD =  0   ##指定备库重演日志的时间阀值,默认关闭

 

7.5 vim dmmonitor.ini

#生产环境如果是自动切换需单独一台服务器配置监视器(我这里只需要手工切换,该配置文件省略)

 

MON_DW_Confirm    = 0           ## 0表示普通监视器 ,最多配置8个,1 确认监视器模式
MON_LOG_PATH    = /dmdbms/log   ##监视器日志文件存放路径
MON_LOG_INTERVAL  = 60          ##每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE   = 32        ##每个日志文件最大 32M
MON_LOG_SPACE_LIMIT  = 0        ##不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID    = 453332     #组 GRP1 的唯一OGUID 值
##配置为监视器到组GRP1的守护进程的连接信息以―IP:PORT‖的形式配置
##IP对应dmmal.ini中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP     = 192.168.1.135:52141
MON_DW_IP     = 192.168.1.134:52141

 

8.以 Mount方式启动主备库
su – dmdba
dmserver /dmdbms/dmdata/slnngk/dm.ini mount

启动主库
[root@localhost dmdbms]# su – dmdba
dmserver /dmdbms/dmdata/slnngk/dm.ini mount

改成后台启动
nohup dmserver /dmdbms/dmdata/slnngk/dm.ini mount>dmserver.log &

启动备库
su – dmdba
dmserver /dmdbms/dmdata/slnngk/dm.ini mount

改成后台启动
nohup dmserver /dmdbms/dmdata/slnngk/dm.ini mount>dmserver.log &

#一定要以 Mount 方式启动数据库实例,否则系统启动时会重构回滚表空间,生成 Redo 日志;
##启动后应用可能连接到数据库实例进行操作,破坏主备库的数据一致性。数据守护配置结束后,守护进程会自动 Open 数据库

 

9.启动命令行工具 disql,登录主备库设置 OGUID 值和数据库模式。
9.1 主库
disql sysdba/dameng123
sp_set_oguid(453332);
alter database primary;

9.2 备库
disql sysdba/dameng123
sp_set_oguid(453332);
alter database standby;

这个时候数据库是在mount状态的:
System in mount status.

 

10.启动各个主备库上的守护进程
主库
dmwatcher /dmdbms/dmdata/slnngk/dmwatcher.ini

后台执行:
nohup dmwatcher /dmdbms/dmdata/slnngk/dmwatcher.ini>dmwatcher.log &

备库
dmwatcher /dmdbms/dmdata/slnngk/dmwatcher.ini

后台执行:
nohup dmwatcher /dmdbms/dmdata/slnngk/dmwatcher.ini>dmwatcher.log &

这个时候主库是open状态了

SQL> select status$,mode$ from v$instance;

LINEID STATUS$ MODE$
———- ——- ——-
1 OPEN PRIMARY

从库:
SQL> select status$,mode$ from v$instance;

LINEID STATUS$ MODE$
———- ——- ——-
1 OPEN STANDBY

used time: 4.518(ms). Execute id is 100.
SQL>

 

11.数据验证
主库上建表并写入数据
[dmdba@localhost ~]$ disql hxl/dameng123

create table tb_test01
(
id number,
name varchar(32)
);

insert into tb_test01 values(1,’name1′);
insert into tb_test01 values(2,’name2′);
insert into tb_test01 values(3,’name3′);
insert into tb_test01 values(4,’name4′);
insert into tb_test01 values(5,’name5′);

从库上登陆查看:
[dmdba@localhost ~]$ disql hxl/dameng123
SQL> select * from tb_test01;

LINEID ID NAME
———- — —–
1 1 name1
2 2 name2
3 3 name3
4 4 name4
5 5 name5

used time: 3.782(ms). Execute id is 200.

 

12.这个时候查看数据库的系统服务
主库,我们这里启动都是采用dmserver方式启动的,可以不用理会系统的启动方式

 

[root@localhost ~]# systemctl status DmServiceslnngk.service
● DmServiceslnngk.service - DM Instance Service
   Loaded: loaded (/usr/lib/systemd/system/DmServiceslnngk.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Tue 2022-07-12 10:07:26 CST; 1h 29min ago
  Process: 32474 ExecStop=/dmdbms/product/bin/DmServiceslnngk stop (code=exited, status=0/SUCCESS)
  Process: 32017 ExecStart=/dmdbms/product/bin/DmServiceslnngk start (code=exited, status=0/SUCCESS)
 Main PID: 32043 (code=exited, status=0/SUCCESS)

Jul 12 10:04:06 localhost.localdomain systemd[1]: Starting DM Instance Service...
Jul 12 10:04:21 localhost.localdomain DmServiceslnngk[32017]: [37B blob data]
Jul 12 10:04:21 localhost.localdomain systemd[1]: Started DM Instance Service.
Jul 12 10:07:20 localhost.localdomain systemd[1]: Stopping DM Instance Service...
Jul 12 10:07:26 localhost.localdomain DmServiceslnngk[32474]: [37B blob data]
Jul 12 10:07:26 localhost.localdomain systemd[1]: Stopped DM Instance Service.

 

13.备库重启动
停掉
disql sysdba/dameng123
SQL> shutdown immediate;
executed successfully

启动
dmserver /dmdbms/dmdata/slnngk/dm.ini

SQL> select status$,mode$ from v$instance;

LINEID STATUS$ MODE$
———- ——- ——-
1 MOUNT STANDBY

SQL> alter database open;
alter database open;
[-720]:Error in line: 1
Dmwatcher is active, or current configuration(ALTER_MODE_STATUS) not allowed to alter database.
used time: 0.284(ms). Execute id is 0.

这个是需要主备都启动dmwatcher,后数据库才能open模式
dmwatcher /dmdbms/dmdata/slnngk/dmwatcher.ini

SQL> select status$,mode$ from v$instance;

Server[LOCALHOST:5236]:mode is standby, state is open
connected

LINEID STATUS$ MODE$
———- ——- ——-
1 OPEN STANDBY

 

原创文章,作者:,如若转载,请注明出处:https://blog.ytso.com/tech/database/273844.html

(0)
上一篇 2022年7月12日 16:59
下一篇 2022年7月12日 16:59

相关推荐

发表回复

登录后才能评论