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


    环境:
    OS:Centos 7
    DB:V8

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

    主备库的数据目录一致

     

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

    主备库的数据目录一致

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

     

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

     

     

    2.主库需要配置归档

    若未安装主库的可以使用如下语句进行安装主库

    [root@localhost ~]# su - dmdba
    [dmdba@localhost ~]$ cd /dmdbms/product/bin
    [dmdba@localhost ~]$./dminit path=/dmdbms/data charset=1 db_name=slnngk instance_name=slnngk SYSDBA_PWD="dameng123" SYSAUDITOR_PWD="dameng123"

    注册服务

    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
    Created symlink from /etc/systemd/system/multi-user.target.wants/DmServiceslnngk.service to /usr/lib/systemd/system/DmServiceslnngk.service.
    Finished to create the service (DmServiceslnngk)

     

    启动主库

    [root@localhost root]#systemctl start DmServiceslnngk.service
    [root@localhost root]#systemctl status DmServiceslnngk.service



    注意这里的实例名与备库要区分

     


    若已经在归档模式的,可以省略该步骤
    disql sysdba/dameng123
    alter database mount;
    alter database add archivelog 'dest=/dmdbms/arch,TYPE=local,FILE_SIZE=2048';
    alter database archivelog;
    alter database open;

     

    3.初始化备库
    因为备库目前只是安装了数据库软件,没有安装数据库,是新的库,可以进行初始化(字符集跟主库保持一致)
    [root@localhost ~]# su - dmdba
    [dmdba@localhost ~]$ cd /dmdbms/product/bin
    [dmdba@localhost ~]$./dminit path=/dmdbms/data 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/data/slnngk/dm.ini' backupset '/dmdbms/backup';

     

    注意备份目录需要是空目录

     

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

     

    6.备库使用dmrman执行数据库还原
    这个时候备库是没有启动的,疑惑备库原来初始化的数据目录下的文件是否可以删除掉?

    备库前车初始化的文件可以删除
    [dmdba@host135 slnngk]$cd /dmdbms/data/slnngk
    [dmdba@host135 slnngk]$ rm *.log
    [dmdba@host135 slnngk]$ rm *.DBF
    [dmdba@host135 slnngk]$ cd ctl_bak
    [dmdba@host135 ctl_bak]$ rm dm_20220810161243_244942.ctl

     

     


    [root@localhost ~]# su - dmdba
    [dmdba@localhost ~]$ dmrman
    dmrman V8

    按顺序执行3个命令:
    restore database '/dmdbms/data/slnngk/dm.ini' from backupset '/dmdbms/backup';
    recover database '/dmdbms/data/slnngk/dm.ini' from backupset '/dmdbms/backup';
    recover database '/dmdbms/data/slnngk/dm.ini' update db_magic;

     

    [root@host135 backup]# su - dmdba
    Last login: Wed Aug 10 15:15:23 CST 2022 on pts/5
    [dmdba@host135 ~]$ dmrman
    dmrman V8
    RMAN> restore database '/dmdbms/data/slnngk/dm.ini' from backupset '/dmdbms/backup';
    restore database '/dmdbms/data/slnngk/dm.ini' from backupset '/dmdbms/backup';
    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:05][Remaining:00:00:00]
    restore successfully.
    time used: 00:00:05.941
    RMAN> recover database '/dmdbms/data/slnngk/dm.ini' from backupset '/dmdbms/backup';
    recover database '/dmdbms/data/slnngk/dm.ini' from backupset '/dmdbms/backup';
    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[37510], file_lsn[37510]
    no log generates while the backupset [/dmdbms/backup] created
    recover successfully!
    time used: 469.501(ms)
    RMAN> recover database '/dmdbms/data/slnngk/dm.ini' update db_magic;
    recover database '/dmdbms/data/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[37510], file_lsn[37510]
    recover successfully!
    time used: 00:00:01.409

     

    7.配置集群文件

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

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

     

    7.2 vim /dmdbms/data/slnngk/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.134     #MAL 系统监听 TCP 连接的 IP 地址
    MAL_PORT            = 61141             #MAL 系统监听 TCP 连接的端口
    MAL_INST_HOST       = 192.168.1.134     #实例的对外服务 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.135
    MAL_PORT            = 61141
    MAL_INST_HOST       = 192.168.1.135
    MAL_INST_PORT       = 5236
    MAL_DW_PORT         = 52141
    MAL_INST_DW_PORT    = 33141

     

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

    scp /dmdbms/data/slnngk/dmmal.ini dmdba@192.168.1.135:/dmdbms/data/slnngk/

     

    7.3 vim /dmdbms/data/slnngk/dmarch.ini

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

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

     

    7.4 配置/dmdbms/data/slnngk/dmwatcher.ini #主备库配置一致

    [GRP1]
    DW_TYPE       =  GLOBAL     ##全局守护类型
    DW_MODE       =  AUTO     ##手工切换 AUTO自动切换模式必须部署一个确认监视器
    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.5 vim /dmdbms/data/slnngk/dmmonitor.ini

    #生产环境如果是自动切换需单独一台服务器配置监视器,我这里部署在其中一台实例上面,部署在主库:192.168.1.134上面

     

    MON_DW_Confirm    = 1           ## 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

     

    注意这里的日志目录需要存在,不存在需要提前创建好

     

    [root@host134 backup]# su - dmdba
    [dmdba@host134 ~]$ mkdir -p /dmdbms/log

     

     

     

    8.以 Mount方式启动主备库启动主库

    [root@localhost dmdbms]# su - dmdba

    [dmdba@host134 ~]$ cd ~
    [dmdba@host134 ~]$ nohup dmserver /dmdbms/data/slnngk/dm.ini mount>dmserver.log &

     

    启动备库
    [root@host135 backup]#su - dmdba

    [dmdba@host135 ~]$cd ~

    [dmdba@host135 ~]$nohup dmserver /dmdbms/data/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状态的:
    select status$,mode$ from v$instance;

     

    主库:

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

    LINEID STATUS$ MODE$
    ---------- ------- -------
    1 MOUNT PRIMARY

    used time: 2.057(ms). Execute id is 1.

     

    备库:

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

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

    used time: 2.160(ms). Execute id is 1.

     

     

    10.注册守护进程

     

    主库:192.168.1.134
    su - root
    [root@host134 root]# cd /dmdbms/product/script/root
    [root@host134 slnngk]#./dm_service_installer.sh -t dmwatcher -p GRP1 -watcher_ini /dmdbms/data/slnngk/dmwatcher.ini

     

    备库2:192.168.1.135
    su - root
    [root@host135 root]# cd /dmdbms/product/script/root
    [root@host135 slnngk]#./dm_service_installer.sh -t dmwatcher -p GRP1 -watcher_ini /dmdbms/data/slnngk/dmwatcher.ini

     

     

    启动守护进程

     

    每个实例都启动(root账号)
    192.168.1.134
    [root@host134 dmdba]#systemctl start DmWatcherServiceGRP1

     

     

    192.168.1.135
    [root@host135 dmdba]#systemctl start DmWatcherServiceGRP1

     

     

    或是使用命令后台执行(主备库都一样执行)

    su - dmdba

    cd ~
    nohup dmwatcher /dmdbms/data/slnngk/dmwatcher.ini>dmwatcher.log &

     

    这个时候守护进程会把数据库从mount状态启动到open状态,目前主备库是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.注册数据库服务

     

    我们这里2个数据库使用的服务名都统一使用: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

     

     

     

    11.数据验证

    创建表空间和用户

     

    su - dmdba
    disql sysdba/dameng123
    
    create tablespace tps_hxl datafile '/dmdbms/data/slnngk/tps_hxl01.DBF' size 1024 autoextend on maxsize 32768; ##这里单位是M,文件目录存储在/dmdata/dmdb/DAMENG,这里设置文件最大值,不设置的话就是16TB
    create user hxl identified by dameng123 default tablespace tps_hxl default index tablespace tps_hxl;
    grant dba to hxl;

     

     

     

    从库查询

     

    SQL> select tablespace_name from SYS.DBA_TABLESPACES;
    
    LINEID     TABLESPACE_NAME
    ---------- ---------------
    1          SYSTEM
    2          ROLL
    3          TEMP
    4          MAIN
    5          TPS_HXL
    6          MAIN
    
    6 rows got
    
    SQL> select username from SYS.DBA_USERS;
    
    LINEID     USERNAME  
    ---------- ----------
    1          SYSAUDITOR
    2          HXL
    3          SYSSSO
    4          SYSDBA
    5          SYS
    
    used time: 25.592(ms). Execute id is 102.

     

     

    主库建表写入数据

    disql hxl/dameng123
    create table tb_test(id number,name varchar(32));
    insert into tb_test values(1,'name1');
    insert into tb_test values(2,'name2');
    insert into tb_test values(3,'name3');
    insert into tb_test values(4,'name4');
    insert into tb_test values(5,'name5');
    insert into tb_test values(6,'name6');
    insert into tb_test values(7,'name7');
    insert into tb_test values(8,'name8');
    insert into tb_test values(9,'name9');
    insert into tb_test values(10,'name10');
    commit;

     

    从库查询

    [dmdba@host135 ~]$ disql hxl/dameng123   
    
    Server[LOCALHOST:5236]:mode is standby, state is open
    login used time : 3.146(ms)
    disql V8
    SQL> select * from tb_test;
    
    LINEID     ID NAME  
    ---------- -- ------
    1          1  name1
    2          2  name2
    3          3  name3
    4          4  name4
    5          5  name5
    6          6  name6
    7          7  name7
    8          8  name8
    9          9  name9
    10         10 name10
    
    10 rows got
    
    used time: 3.369(ms). Execute id is 200.
    SQL> 

     

    12.注册监控器

    我这里是在192.168.1.134上面执行

    su - root
    [root@host134 root]# cd /dmdbms/product/script/root
    [root@localhost ~]# ./dm_service_installer.sh -t dmmonitor -p Monitor -monitor_ini /dmdbms/data/slnngk/dmmonitor.ini

     

    启动监控器

    [root@host134 root]# systemctl start DmMonitorServiceMonitor

     

    13.使用监视器

    在监视器上执行如下命令,我这里是在192.168.1.134机器上执行

    1.登陆监视器模式
    [dmdba@host134 ~]$ dmmonitor /dmdbms/data/slnngk/dmmonitor.ini
    Exist multiple CONFIRM dmmonitor, can only startup one!

     

    这里提示只能配置一个确认监视器,我们拷贝下一份dmmonitor.ini,将MON_DW_Confirm修改为0,改成普通监视器
    [dmdba@host134 ~]$ cp /dmdbms/data/slnngk/dmmonitor.ini /dmdbms/data/slnngk/dmmonitor0.ini

     

    vi /dmdbms/data/slnngk/dmmonitor0.ini

    如下项修改为0
    MON_DW_Confirm = 0 ## 0表示普通监视器 ,最多配置8个,1 确认监视器模式

    [dmdba@host134 ~]$ dmmonitor /dmdbms/data/slnngk/dmmonitor0.ini
    [monitor]         2022-08-11 10:49:00: DMMONITOR[4.0] V8
    [monitor]         2022-08-11 10:49:01: DMMONITOR[4.0] IS READY.
    
    [monitor]         2022-08-11 10:49:01: Received message from(SLNNGKBAK)
                      WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                      2022-08-11 10:49:01  OPEN           OK        SLNNGKBAK        OPEN        STANDBY   NULL     3        39324           39324           
    
    [monitor]         2022-08-11 10:49:02: Received message from(SLNNGK)
                      WTIME                WSTATUS        INST_OK   INAME            ISTATUS     IMODE     RSTAT    N_OPEN   FLSN            CLSN            
                      2022-08-11 10:49:02  OPEN           OK        SLNNGK           OPEN        PRIMARY   VALID    3        39325           39326
  • 相关阅读:
    ASP.NET Core – Web API Versioning
    ASP.NET Core – Handle Error on Web API
    ASP.NET Core – MVC vs Razor Page
    EF Core – Library use EF
    ASP.NET Core – Filter
    GeoServer地图开发解决方案
    参透人生的一道计算题
    iscroll4 精讲
    各种分割线Html代码
    iBatis入门教程
  • 原文地址:https://www.cnblogs.com/hxlasky/p/16470069.html
Copyright © 2020-2023  润新知