达梦数据库学习分享

一、主备复制搭建:

1、主节点脱机备份
如果数据库服务是打开的,需要关闭两个节点的服务(即关库)
shutdown immediate
[dmdba@DaMengDB1 ~]#cd /dm8/bin
[dmdba@DaMengDB1 bin]# dmrman
dmrman V8
RMAN> BACKUP DATABASE '/data/dm8/DM01/dm.ini' full BACKUPSET '/data/backup/master0205/';

BACKUP DATABASE '/data/dm8/DM01/dm.ini' full BACKUPSET '/data/backup/master0205/';
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[360807]
BACKUP DATABASE [DM01],execute......
CMD CHECK LSN......
BACKUP DATABASE [DM01],collect dbf......
CMD CHECK ......
DBF BACKUP SUBS......
total 1 packages processed...
total 2 packages processed...
total 3 packages processed...
total 4 packages processed...
total 8 packages processed...
total 9 packages processed...
total 10 packages processed...
total 11 packages processed...
DBF BACKUP MAIN......
BACKUPSET [/data/backup/master0205] END, CODE [0]......
META GENERATING......
total 13 packages processed...
total 13 packages processed...
total 13 packages processed!
CMD END.CODE:[0]
backup successfully!
time used: 00:00:01.497
RMAN> exit
time used: 0.004(ms)

执行完毕之后,会生成一个备份文件,通过scp命令传输到从库的/data/backup 目录下面
注:上面的过程使用的是脱机备份,主库是需要关闭的,如果是生产环境,那么我们也可以采用联机备份:


2、备库执行数据库还原

脱机还原:
[dmdba@DaMengDB2 backup]# cd /dm8/bin
[dmdba@DaMengDB2 bin]# dmrman
dmrman V8
RMAN> RESTORE DATABASE '/data/dm8/DM01/dm.ini' FROM BACKUPSET '/data/backup/master1208';
RESTORE DATABASE '/data/DAMENG/dm.ini' FROM BACKUPSET '/data/backup/';
file dm.key not found, use default license!
RESTORE DATABASE CHECK......
RESTORE DATABASE,data collect......
RESTORE DATABASE,database refresh ......
RESTORE BACKUPSET [/data/backup] START......
total 11 packages processed...
total 13 packages processed...
RESTORE DATABASE,UPDATE ctl file......
RESTORE DATABASE,REBUILD key file......
RESTORE DATABASE,CHECK db info......
RESTORE DATABASE,UPDATE db info......
total 13 packages processed...
total 13 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 00:00:02.562

恢复:

RMAN> recover database '/data/dm8/DM01/dm.ini' from backupset '/data/backup/master1208';
recover database '/data/DAMENG/dm.ini' from backupset '/data/backup';
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[360807]
RESTORE RLOG CHECK......
CMD END.CODE:[603],DESC:[no log generates while the backupset [/data/backup] created]
no log generates while the backupset [/data/backup] created
recover successfully!
time used: 804.560(ms)

更新db_magic:

RMAN> recover database '/data/dm8/DM01/dm.ini' update db_magic;
recover database '/data/DAMENG/dm.ini' update db_magic;
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[360807]
EP[0]'s apply_lsn[360807] >= end_lsn[360807]
recover successfully!
time used: 00:00:01.150

3、主从配置文件(配置文件路径无具体说明,都与dm.ini文件路径同级)

修改dm.ini(主备一样)

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

增加文件dmmal.ini(主备一样)

MAL_CHECK_INTERVAL = 5 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 #判定 MAL 链路断开的时间
[MAL_INST1]
MAL_INST_NAME = DM01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致
MAL_HOST = 10.18.35.114 #MAL系统监听TCP连接的IP地址,即为当前机器的IP
MAL_PORT = 61141 #MAL系统监听TCP连接的端口
MAL_INST_HOST = 10.18.35.114 #实例的对外服务IP地址,即为当前机器的公网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 = DMSERVER
MAL_HOST = 10.18.11.196
MAL_PORT = 61142
MAL_INST_HOST = 10.18.11.196
MAL_INST_PORT = 5236
MAL_DW_PORT = 52142
MAL_INST_DW_PORT = 33142 #实例监听守护进程 TCP 连接的端口

配置 dmarch.ini (备库将实例名修改)

主:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DMSERVER #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 512 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 500000 #单位 Mb,0 表示无限制,范围 1024~4294967294M

备:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DM01     #实时归档目标实例名
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/arch #本地归档文件存放路径
ARCH_FILE_SIZE = 512 #单位 Mb,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 500000 #单位 Mb,0 表示无限制,范围 1024~4294967294M


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

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

配置监听dmmonitor.ini 
(只需配一个,本例放备库)其中 MON_DW_IP 中的 IP 和 PORT 和dmmal.ini 中的 MAL_HOST 和 MAL_DW_PORT 配置项保持一致。

vi dmmonitor.ini

MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /data/log/ #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32M
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP1]
MON_INST_OGUID = 453331 #组 GRP1 的唯一 OGUID 值
#以下配置为监视器到组 GRP1 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 10.18.35.114:52141
MON_DW_IP = 10.18.11.196:52142

4、启动主从库并设置主备模式
DM 数据库包含以下几种模式:

a. 普通模式(NORMAL): 用户可以正常访问数据库,操作没有限制;
b. 主库模式(PRIMARY): 用户可以正常访问数据库,所有对数据库对象的修改强制 生成 REDO 日志,在归档有效时,发送 REDO 日志到备库;
c. 备库模式(STANDBY): 接收主库发送过来的 REDO 日志并重做。数据对用户只读。
三种模式只能在 MOUNT 状态下设置,模式之间可以相互转换。 对于新初始化的库,首次启动不允许使用 mount 方式,需要先正常启动并正常退出, 然后才允许 mount 方式启动


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

以 Mount 方式启动主库:
[dmdba@DaMengDB1 DM01]# dmserver /data/dm8/DM01/dm.ini mount
file dm.key not found, use default license!
version info: develop
Use normal os_malloc instead of HugeTLB
Use normal os_malloc instead of HugeTLB
DM Database Server x64 V8 1-1-78-20.04.28-121039-ENT  startup...
Database mode = 0, oguid = 0
License will expire on 2021-04-28
file lsn: 360807
ndct db load finished
ndct fill fast pool finished
nsvr_startup end.
aud sys init success.
aud rt sys init success.
systables desc init success.
ndct_db_load_info success.
SYSTEM IS READY.

[dmdba@DaMengDB1 ~]# disql
disql V8
username:sysdba
password:

Server[LOCALHOST:5236]:mode is normal, state is mount
login used time: 3.017(ms)

设置 OGUID 值。主库修改数据库为 Primary 模式:(先允许手工方式修改实例模式/状态/OGUID)
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL executed successfully
used time: 17.953(ms). Execute id is 1.
SQL> sp_set_oguid(453331);
DMSQL executed successfully
used time: 35.520(ms). Execute id is 2.
SQL> alter database primary;
executed successfully
used time: 41.947(ms). Execute id is 0.
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL executed successfully
used time: 3.695(ms). Execute id is 3.

从库操作一样(注意文件路径):

以 Mount 方式启动从库:
[dmdba@DaMengDB2 DAMENG]# dmserver /data/dm8/DM01/dm.ini mount
file dm.key not found, use default license!
version info: develop
Use normal os_malloc instead of HugeTLB
Use normal os_malloc instead of HugeTLB
DM Database Server x64 V8 1-1-78-20.04.28-121039-ENT  startup...
Database mode = 0, oguid = 0
License will expire on 2021-04-28
file lsn: 360807
ndct db load finished
ndct fill fast pool finished
nsvr_startup end.
aud sys init success.
aud rt sys init success.
systables desc init success.
ndct_db_load_info success.
SYSTEM IS READY.


[dmdba@DaMengDB2 ~]# disql
disql V8
username:sysdba
password:
Server[LOCALHOST:5236]:mode is normal, state is mount
login used time: 4.529(ms)
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
DMSQL executed successfully
used time: 29.455(ms). Execute id is 1.
SQL> sp_set_oguid(453331);
DMSQL executed successfully
used time: 70.741(ms). Execute id is 2.
SQL> alter database standby;
executed successfully
used time: 92.647(ms). Execute id is 0.
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DMSQL executed successfully
used time: 35.792(ms). Execute id is 3.

5.启动各个主备库上的守护进程:
[dmdba@DaMengDB1 ~]# dmwatcher /data/dm8/DM01/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY

[dmdba@DaMengDB2 DAMENG]# dmwatcher /data/dm8/DM01/dmwatcher.ini
DMWATCHER[4.0] V8
DMWATCHER[4.0] IS READY

6.备库启动监视器:
[dmdba@root1 ~]$ dmmonitor /data/dm8/DM01/dmmonitor.ini
[monitor]         2021-02-05 16:13:16: DMMONITOR[4.0] V8
[monitor]         2021-02-05 16:13:16: DMMONITOR[4.0] IS READY.
[monitor]         2021-02-07 17:02:29: Received message from(DMSERVER)
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2021-02-07 17:02:29  OPEN           OK        DMSERVER         OPEN        STANDBY   NULL     13       362065          362065          

[monitor]         2021-02-07 17:02:29: Received message from(DM01)
                  WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                  2021-02-07 17:02:30  OPEN           OK        DM01             OPEN        PRIMARY   VALID    13       362065          362065 

[monitor]         2021-02-08 10:02:29:
                  GROUP            OGUID       MON_CONFIRM MODE         MPP_FLAG
                  GRP1             453331      TRUE        MANUAL       FALSE


                  <<DATABASE GLOBAL INFO:>>
                  IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT
                  10.18.35.114    52141        2021-02-08 10:02:32  GLOBAL    VALID     OPEN           DM01             OK        1     1     OPEN        PRIMARY   DSC_OPEN       REALTIME  VALID

                  EP INFO:
                  INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CONTROL_NODE RTYPE     RSTAT    PKG_SEQNO       FLSN            CLSN            DW_STAT_FLAG
                  5236       OK        DM01             OPEN        PRIMARY   0          0                REALTIME  VALID    6990            362081          362081          NONE

                  <<DATABASE GLOBAL INFO:>>
                  IP              MAL_DW_PORT  WTIME                WTYPE     WCTLSTAT  WSTATUS        INAME            INST_OK   N_EP  N_OK  ISTATUS     IMODE     DSC_STATUS     RTYPE     RSTAT
                  10.18.11.196    52142        2021-02-08 10:02:28  GLOBAL    VALID     OPEN           DMSERVER         OK        1     1     OPEN        STANDBY   DSC_OPEN       REALTIME  VALID

                  EP INFO:
                  INST_PORT  INST_OK   INAME            ISTATUS     IMODE     DSC_SEQNO  DSC_CONTROL_NODE RTYPE     RSTAT    PKG_SEQNO       FLSN            CLSN            DW_STAT_FLAG
                  5236       OK        DMSERVER         OPEN        STANDBY   0          0                REALTIME  VALID    6984            362081          362081          NONE

                  DATABASE(DMSERVER) APPLY INFO FROM (DM01):
                  DSC_SEQNO[0], (ASEQ, SSEQ, KSEQ)[6990, 6990, 6990], (ALSN, SLSN, KLSN)[362081, 362081, 362081], N_TSK[0], TSK_MEM_USE[0]  


关闭过程:关闭确认监视器——关闭备机守护进程——关闭主机守护进程——关闭主机实例服务——关闭备机实例服务       

在上面的主备库服务,守护进程和监视器都是我们直接启动的(使用ini文件启动的),页面关闭或者ctrl+c、exit就会断开自动关闭。
 
二、注册服务
在上面的主从过程,守护进程和监视器都是我们直接启动的,如果命令中断,就无法运行。 因此需要将这些注册到服务里,方便管理。 
注册过程用root用户在安装目录script/root下:
[root@DaMengDB1 root]# ./dm_service_installer.sh -help
Usage: dm_service_installer.sh -t service_type [-p service_name_postfix] [-i ini_file] [-d dcr_ini_file] [-m open|mount]
  or dm_service_installer.sh [ -s service_file_path ]
  or dm_service_installer.sh -h
   -t     Service Type, include: dmimon,dmap,dmserver,dmwatch,dmrww,dmwmon,dmwatcher,dmmonitor,dmcss,dmcssm,dmasmsvr.
   -p     Service Name Postfix, is invalid for dmimon,dmap.
   -i     The path of the ini file, is invalid for dmimon,dmap.
   -d     The path of dmdcr.ini, is valid for dmserver only, select.
   -m     Set the start modeof the server, include:open or mount, is valid for dmserver only, select.
   -s     The path of the service script file, if set this parameter, and ignore other parameter.
   -h     Help


1.先在主备库创建一个开启mount状态的服务,因为守护进程需要库在mount状态下。
[root@DaMengDB1 root]# cd /dm8/script/root
主库创建mount启动状态的服务:
[root@DaMengDB1 root]# ./dm_service_installer.sh -t dmserver -p masterm -dm_ini /data/dm8/DM01/dm.ini -m mount  
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServicemasterm.service to /usr/lib/systemd/system/DmServicemasterm.service.
Finished to create the service (DmServicemasterm)
备库创建mount启动状态的服务:
[root@DaMengDB2 root]# ./dm_service_installer.sh -t dmserver -p slavem -dm_ini /data/dm8/DM01/dm.ini -m mount
Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceslavem.service to /usr/lib/systemd/system/DmServiceslavem.service.
Finished to create the service (DmServiceslavem)

2.再在主备库创建守护进程和监视进程的服务:
主库创建守护进程服务:
[root@DaMengDB1 root]# ./dm_service_installer.sh -t dmwatcher -p DMWATCHER -watcher_ini /data/dm8/DM01/dmwatcher.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServiceDMWATCHER.service to /usr/lib/systemd/system/DmWatcherServiceDMWATCHER.service.
Finished to create the service (DmWatcherServiceDMWATCHER)

备库创建守护进程服务:
[root@DaMengDB2 root]# ./dm_service_installer.sh -t dmwatcher -p DMWATCHER -watcher_ini /data/dm8/DM01/dmwatcher.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmWatcherServiceDMWATCHER.service to /usr/lib/systemd/system/DmWatcherServiceDMWATCHER.service.
Finished to create the service (DmWatcherServiceDMWATCHER)

备库创建监视进程服务:
[root@DaMengDB2  root]# ./dm_service_installer.sh -t dmmonitor -p DMMONITOR -monitor_ini /data/dm8/DM01/dmmonitor.ini
Created symlink from /etc/systemd/system/multi-user.target.wants/DmMonitorServiceDMMONITOR.service to /usr/lib/systemd/system/DmMonitorServiceDMMONITOR.service.
Finished to create the service (DmMonitorServiceDMMONITOR)

启动过程:开主机实例——开主机守护进程——开备机实例——开备机守护进程——打开确认监视器
systemctl start DmServicemasterm
systemctl start DmWatcherServiceDMWATCHER

systemctl start DmServiceslavem
systemctl start DmWatcherServiceDMWATCHER
systemctl start DmMonitorServiceDMMONITOR


关闭过程:关闭确认监视器——关闭备机守护进程——关闭主机守护进程——关闭主机实例服务——关闭备机实例服务
systemctl stop DmMonitorServiceDMMONITOR
systemctl stop DmWatcherServiceDMWATCHER
systemctl stop DmWatcherServiceDMWATCHER
systemctl stop DmServicemasterm
systemctl stop DmServiceslavem

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值