达梦主从部署(主库在线备份)

环境:
OS:Centos 7
DB:V8
主备库都已经安装好了数据库软件和数据库实例

主库:192.168.1.135 5236
备库:192.168.1.134 5236
监视器:192.168.1.135

 

-------------------------------------------------------------------------主库操作----------------------------------------------------------------

1.确保主库是否在归档模式
SQL> select name,arch_mode from v$database;

LINEID NAME ARCH_MODE
---------- ------ ---------
1 slnngk Y

used time: 1.576(ms). Execute id is 710.
若主库不在归档模式,需要配置为归档模式

 

2.确保主库存在dmmal.ini文件
若该文件不存在需要进行手工创建
文件内容如下:

复制代码
[dmdba@localhost slnngk]$ more dmmal.ini
#DaMeng Database Mail Configuration file
#this is comments
MAL_CHECK_INTERVAL     = 5
MAL_COMBIN_BUF_SIZE    = 0
MAL_SEND_THRESHOLD = 2048
MAL_CONN_FAIL_INTERVAL = 5
MAL_LOGIN_TIMEOUT      = 15
MAL_BUF_SIZE           = 100
MAL_SYS_BUF_SIZE       = 0
MAL_VPOOL_SIZE         = 128
MAL_COMPRESS_LEVEL     = 0
MAL_TEMP_PATH          = 

[MAL_INST1]
    MAL_INST_NAME    = SLNNGK
    MAL_HOST         = 192.168.1.135
    MAL_PORT         = 61141
    MAL_INST_HOST    = 192.168.1.135
    MAL_INST_PORT    = 5236
    MAL_DW_PORT      = 52141
    MAL_LINK_MAGIC   = 0
    MAL_INST_DW_PORT = 33141

[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_LINK_MAGIC   = 0
    MAL_INST_DW_PORT = 33141
复制代码

 

说明,若已经存在dmmal.ini文件,但是没有对方节点的部分,如这里的MAL_INST2,那么可以通过调用存储过程的方式修改
如下:
[dmdba@localhost arch]$ disql sysdba/dameng123
SQL>SF_MAL_CONFIG(1,0); ##设置配置状态
SQL>SF_MAL_INST_ADD('MAL_INST2','SLNNGKBAK','192.168.1.134',61141,'192.168.1.134',5236,52141,0,33141); ##新增备库节点信息
SQL>SF_MAL_CONFIG_APPLY(); ##将MAL配置生效
SQL>SF_MAL_CONFIG(0,0); ##取消配置状态

 

发现我这里还报错误,原因是需要提前配置好dmmal.ini(至少包括自己部分),同时需要在dm.ini参数中打开MAL_INI=1,然后重启数据库.

 

SQL> SF_MAL_CONFIG(1,0);
SF_MAL_CONFIG(1,0);
[-9501]:MAL sys has not configured or server is not enterprise version.

    

 

3.修改dm.ini文件

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

 

上面这几个参数也可以使用存储过程进行修改
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
SP_SET_PARA_VALUE(1, 'ENABLE_OFFLINE_TS', 2);
SP_SET_PARA_VALUE(2, 'MAL_INI', 1); ## 该参数配置了dmmal.ini文件的话,会自动设置为1
SP_SET_PARA_VALUE(2, 'ARCH_INI', 1);## 该参数设置了归档模式,会自动设置为1


获取参数值:
select SF_GET_PARA_VALUE(1,'MAL_INI');
select SF_GET_PARA_VALUE(1,'ALTER_MODE_STATUS');
select SF_GET_PARA_VALUE(1,'ENABLE_OFFLINE_TS');

 

4.主库添加远程归档(这里需要在mount模式下才能修改,说明主库是需要重启了的)
SQL>alter database mount;
SQL>alter database add archivelog 'DEST= SLNNGKBAK, TYPE= REALTIME';
SQL>alter database open;

这个时候主库的dmarch.ini会自动添加了配置项

复制代码
#DaMeng Database Archive Configuration file
#this is comments

        ARCH_WAIT_APPLY      = 0        

[ARCHIVE_LOCAL1]
        ARCH_TYPE            = LOCAL        
        ARCH_DEST            = /dmdbms/arch        
        ARCH_FILE_SIZE       = 1024        
        ARCH_SPACE_LIMIT     = 204800        
        ARCH_FLUSH_BUF_SIZE  = 0        
        ARCH_HANG_FLAG       = 1        

[ARCHIVE_REALTIME1]
        ARCH_TYPE            = REALTIME        
        ARCH_DEST            = SLNNGKBAK
复制代码

 

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

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

 

6.备份主库(联机备份在disql下进行)
disql sysdba/dameng123
SQL> backup database full backupset '/dmdbms/backup';
executed successfully
used time: 00:00:04.066. Execute id is 1000.

 

7.将备份集scp拷贝到备库
su - dmdba
scp /dmdbms/backup/backup.bak dmdba@192.168.1.134:/dmdbms/backup/
scp /dmdbms/backup/backup_1.bak dmdba@192.168.1.134:/dmdbms/backup/
scp /dmdbms/backup/backup.meta dmdba@192.168.1.134:/dmdbms/backup/

 

 

--------------------------------------------------------备库上的操作------------------------------------------------

1.停掉备库
若之前已经部署安装了的,需要将备库实例停掉
systemctl stop DmServiceslnngk.service

若备库还没有安装数据库的需要进行初始化数据库

 

[root@localhost ~]# su - dmdba
[dmdba@localhost ~]$ cd /dmdbms/product/bin

[dmdba@localhost ~]$/dmdbms/product/bin/dminit path=/dmdbms/data charset=1 case_sensitive=0 length_in_char=0 db_name=slnngk instance_name=slnngkbak SYSDBA_PWD="dameng123" SYSAUDITOR_PWD="dameng123"
 

  

a.db_name需要给主库一致

b.instance_name 不能与主库相同 

c.其他参数需要跟主库保持一致,charset=1 case_sensitive=0 length_in_char=0,若不知道主库的这些信息,可以在主库的data目录下找到初始化的日志文件dminit20240321133803.log 该文件记录了主库安装时的参数信息

d.这个时候可以创建系统服务,我们这里数据库使用的服务名都统一使用:DmServiceslnngk,与主库一致,方便维护

 

su - root
[root@localhost root]#cd /dmdbms/product/script/root
[root@localhost root]# ./dm_service_installer.sh -t dmserver -dm_ini /dmdbms/data/slnngk/dm.ini -p slnngk

 

这里可以尝试是否可以启动

systemctl start DmServiceslnngk
systemctl stop DmServiceslnngk

 

 

2.恢复

该步骤需要将备库停掉(若启动了的话)
进入到数据目录,删除不需要的文件,注意某些版本需要保留SYSTEM.DBF文件,我这里的版本可以不需要该文件

复制代码
[dmdba@host02 DAMENG]$ cd /dmdbms/data/slnngk
[dmdba@host02 DAMENG]$ rm *.log
[dmdba@host02 DAMENG]$ rm *.DBF
[dmdba@host02 DAMENG]$ rm dm_service.prikey
[dmdba@host02 DAMENG]$ rm -rf HMAIN
[dmdba@host02 DAMENG]$ rm -rf trace
[dmdba@host02 DAMENG]$ rm sqllog.ini

最后数据目录的文件如下:
[dmdba@host02 DAMENG]$ ls  -al
total 68
drwxr-xr-x 4 dmdba dinstall    60 Mar 27 15:28 .
drwxr-xr-x 3 dmdba dinstall    20 Mar 27 15:17 ..
drwxr-xr-x 2 dmdba dinstall     6 Mar 27 15:17 bak
drwxr-xr-x 2 dmdba dinstall    78 Mar 27 15:18 ctl_bak
-rw-r--r-- 1 dmdba dinstall  5632 Mar 27 15:18 dm.ctl
-rw-r--r-- 1 dmdba dinstall 59755 Mar 27 15:17 dm.ini
复制代码

 

执行恢复命令

[dmdba@host02 DAMENG]$ dmrman
RMAN> restore database '/dmdbms/data/slnngk/dm.ini' from backupset '/dmdbms/backup';
RMAN> recover database '/dmdbms/data/slnngk/dm.ini' from backupset '/dmdbms/backup';
RMAN> recover database '/dmdbms/data/slnngk/dm.ini'  update db_magic;

 

 

3.修改dm.ini文件
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
INSTANCE_NAME= SLNNGKBAK #备库的实例名不能与主库一样 该参数可以不需要配置

 

3.配置dmmal.ini文件
将主库的该文件拷贝到备库相应的位置,该文件主备库要一致
主库上执行:
scp /dmdbms/data/slnngk/dmmal.ini dmdba@192.168.1.134:/dmdbms/data/slnngk/

 

4.配置归档文件

主备库的归档日志是一样的,只是需要修改实时归档的arch_dest指向对方

复制代码
vi dmarch.ini
#DaMeng Database Archive Configuration file
#this is comments

        ARCH_WAIT_APPLY      = 0        

[ARCHIVE_LOCAL1]
        ARCH_TYPE            = LOCAL        
        ARCH_DEST            = /dmdbms/arch        
        ARCH_FILE_SIZE       = 1024        
        ARCH_SPACE_LIMIT     = 204800        
        ARCH_FLUSH_BUF_SIZE  = 0        
        ARCH_HANG_FLAG       = 1        

[ARCHIVE_REALTIME1]
        ARCH_TYPE            = REALTIME        
        ARCH_DEST            = SLNNGK
复制代码

 

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

可以从主库拷贝一份过来

复制代码
[GRP1]
DW_TYPE       =  GLOBAL     ##全局守护类型
DW_MODE       =  AUTO       ##手工切换设置为MANUAL 自动切换设置为AUTO,自动切换模式必须部署一个确认监视器(参数值为1)才会自动切换
DW_ERROR_TIME    =  10      ##远程守护进程故障认定时间
INST_RECOVER_TIME =  60     ##主库守护进程启动恢复的间隔时间
INST_ERROR_TIME  =  10      ##本地实例故障认定时间
INST_OGUID     =  453332    ##守护系统唯一 OGUID 值
INST_INI      =  /dmdbms/data/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.mount方式启动备库
su - dmdba
nohup dmserver /dmdbms/data/slnngk/dm.ini mount>dmserver.log &

 

不知道服务的方式如何启动到mount
systemctl start DmServiceslnngk.service

 

----------------------------------------------------主备库的操作--------------------------------------------

1.启动命令行工具 disql,登录主备库设置 OGUID 值和数据库模式.

A.主库
disql sysdba/dameng123
alter database mount;
sp_set_oguid(453332);
alter database primary;

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

这个时候数据库是在mount状态的:

复制代码
SQL> select status$,mode$ from v$instance;

LINEID     status$ mode$  
---------- ------- -------
1          MOUNT   PRIMARY

used time: 1.370(ms). Execute id is 801.
复制代码

 

 

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

LINEID     status$ mode$  
---------- ------- -------
1          MOUNT   STANDBY

 

 

 

2.注册 dmwatcher 服务

(root账号下执行)
主库

[root@host01 root]# cd /dmdbms/product/script/root
[root@host01 root]#/dmdbms/product/script/root/dm_service_installer.sh -t dmwatcher -p GRP1 -watcher_ini /dmdbms/data/slnngk/dmwatcher.ini
服务方式启动
systemctl start DmWatcherServiceGRP1

 

备库

[root@host02 root]# cd /dmdbms/product/script/root
[root@host02 root]# /dmdbms/product/script/root/dm_service_installer.sh -t dmwatcher -p GRP1 -watcher_ini /dmdbms/data/slnngk/dmwatcher.ini
systemctl start DmWatcherServiceGRP1

 

3.验证

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

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

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

 

4.数据验证

主库上建表并写入数据
[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');
commit;


从库上登陆查看:
[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.

 

 

5.将备库以服务的方式启动
之前我们是使用命令的方式启动备库到mount状态的
su - dmdba
nohup dmserver /dmdbms/data/slnngk/dm.ini mount>dmserver.log &

我们需要改成服务的方式启动
停掉备库
[dmdba@localhost ~]$ disql sysdba/dameng123
SQL> shutdown immediate;
executed successfully
used time: 0.555(ms). Execute id is 0.

这里停掉了,但是过一会儿,dmwatcher会把dmserver进程重新拉起来,然后打开数据到open状态

采用杀掉进程的方式
[root@localhost log]# ps -ef|grep slnngk
dmdba 14335 1 0 14:31 ? 00:00:02 /dmdbms/product/bin/dmwatcher path=/dmdbms/data/slnngk/dmwatcher.ini -noconsole
dmdba 15376 1 0 14:43 ? 00:00:04 /dmdbms/product/bin/dmserver /dmdbms/data/slnngk/dm.ini mount
root 19333 7733 0 15:22 pts/3 00:00:00 grep --color=auto slnngk

kill -9 14335
kill -9 15376

然后使用服务的方式启动(root账号):
systemctl start DmServiceslnngk.service ##实例进程
systemctl start DmWatcherServiceGRP1 ##watcher进程

 

说明:

我们在部署从库的时候,主库是对外提供服务的,部署从库这段时间生成的数据(如创建表空间,添加表空间)是会自动同步到从库的!!!

 

--------------------------------------------------------------模拟破坏主库-----------------------------------------------------

1.把主库直接关机或是杀掉主库进程
[root@localhost ~]# ps -ef|grep slnngk
dmdba 27457 1 0 14:30 ? 00:00:02 /dmdbms/product/bin/dmwatcher path=/dmdbms/data/slnngk/dmwatcher.ini -noconsole
dmdba 27879 1 0 14:34 ? 00:00:04 /dmdbms/product/bin/dmserver /dmdbms/data/slnngk/dm.ini mount

kill -9 27879
kill -9 27457
[root@localhost ~]# ps -ef|grep slnngk
root 32313 6195 0 15:13 pts/7 00:00:00 grep --color=auto slnngk

 

2.查看备库的状态
[dmdba@localhost ~]$ disql sysdba/dameng123
SQL> select status$,mode$ from v$instance;

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

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

我们这里配置的是手动方式,备库不会自动切换到主库的
DW_MODE = MANUAL ##手工切换 AUTO自动切换模式必须部署一个确认监视器

 

3.重新启动主库
systemctl start DmServiceslnngk.service ##实例进程
systemctl start DmWatcherServiceGRP1 ##watcher进程

 

Server[LOCALHOST:5236]:mode is primary, state is open
login used time : 3.186(ms)
disql V8
SQL> select status$,mode$ from v$instance;

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

used time: 4.125(ms). Execute id is 500.

这个时候重启后原来的主库角色没有改变.

 

 

--------------------------------------------------------配置监视器--------------------------------------------------

我这里是在其中一台机器上部署监视器,地址为:192.168.1.135

复制代码
$vi /dmdbms/data/slnngk/dmmonitor.ini
MON_DW_CONFIRM= 1          #1为确认监控器 0 为普通监控器 我这里配置为0,因为我配置的是手工模式,若是配置AUTO模式,需要配置1 确认监控器 否则从库停掉的话,主库在挂起模式SUSPEND
MON_LOG_PATH= /dmdbms/log  #监视器日志文件存放路径
MON_LOG_INTERVAL= 60       #每隔 60 s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE= 512     #每个日志文件最大 32 MB
MON_LOG_SPACE_LIMIT=0      #不限定日志文件总占用空间

[GRP1]            ##注意这里的组名必须跟dmwatcher.ini定义的保持一致
MON_INST_OGUID    = 453332 #组 GRP_RW 的唯一 OGUID 值
#以下配置为监视器到组 GRP_RW 的守护进程的连接信息,以"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
复制代码

 

2.注册服务
[root@localhost ~]# /dmdbms/product/script/root/dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /dmdbms/data/slnngk/dmmonitor.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmMonitorServiceMonitor.service to /usr/lib/systemd/system/DmMonitorServiceMonitor.service.

Finished to create the service (DmMonitorServiceMonitor)

 

3.启动服务
[root@localhost ~]#systemctl start DmMonitorServiceMonitor

 

4.手工启动查看
su - dmdba
[dmdba@localhost log]$ dmmonitor /dmdbms/data/slnngk/dmmonitor.ini

 

posted @   slnngk  阅读(1387)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2021-07-15 判断某个目录下半小时内是否有新文件
2021-07-15 centos 多路径下挂载磁盘目录
2021-07-15 rac多路径下添加lun(centos 7)
点击右上角即可分享
微信分享提示