ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2022-07-12 15:03:26  阅读:218  来源: 互联网

标签:主库 dm dmdbms slnngk 主备 ini MAL 达梦 dmdata


环境:
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

 

标签:主库,dm,dmdbms,slnngk,主备,ini,MAL,达梦,dmdata
来源: https://www.cnblogs.com/hxlasky/p/16470069.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有