暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

达梦8 联机拷贝恢复功能介绍

数据库笔记 2021-10-14
935

达梦数据库支持的备份恢复方式:

  • dexp/dimp   --逻辑备份

  • dmrman       --脱机物理备份

  • disql BACKUP/RESTORE  --联机物理备份

  • 联机拷贝      --联机物理拷贝


联机拷贝方式备份的特点:

  • 相较于传统备份,直接拷贝文件,备份速度更快

  • 备份文件为原格式,可以快速拉起服务

  • 适用于不同操作系统间快速数据迁移


联机拷贝原理概述:

在备份前记录BEGIN_LSN,BEGIN_SEQ,通过cp,rsync,ftp等方式直接拷贝达梦数据文件进行备份,备份后记录END_LSN,END_SEQ,[BEGIN_LSN,END_LSN]之间对应的REDO日志用于恢复时保证数据一致性。

在还原阶段,通过重建数据文件,联机日志以及更新控制文件来重建目标库的文件结构,利用[BEGIN_LSN,END_LSN]的归档日志将数据库推到最新状态。


约束与限制:

前提条件:

  • 数据库已经开启归档模式

  • DmAP服务正常运行

注意事项:

  1. 调用SP_BACKUP_COPY_BEGIN前需设置当前连接AUTO_COMMIT为FALSE,关闭事务自动提交。

  2. SP_BACKUP_COPY_BEGIN和SP_BACKUP_COPY_END必须在同一连接中执行。

  3. 每次调用SP_BACKUP_COPY_END前必须先调用SP_BACKUP_COPY_BEGIN,否则将报错。

  4. 调用SP_BACKUP_COPY_BEGIN和SP_BACKUP_COPY_END之间不能执行CREATE TABLESPACE操作。

  5. SP_BACKUP_COPY_END产生的空备份集只能用于源库副本的还原,当利用该备份集还原其他库或从该备份集进行恢复时将报错。


联机拷贝流程:

SP_BACKUP_COPY_BEGIN

通过disql调用系统过程SP_BACKUP_COPY_BEGIN记录BEGIN_LSN,BEGIN_SEQ,以确定恢复阶段日志重做的点位

    SQL> SP_BACKUP_COPY_BEGIN();
    DMSQL 过程已成功完成
    已用时间: 165.781(毫秒). 执行号:600
    复制


    拷贝数据库文件

    拷贝数据库文件到备份目录/opt/dmbak/dbbak,必须包含配置文件(dm.ini)、控 制文件(dm.ctl)、秘钥文件(dm_service.prikey)、联机日志文件(DAMENG01.log 和DAMENG02.log)以及数据文件(*.DBF)

      cp /opt/dmdb/data/DMDB/dm.ini opt/dmbak/dbbak/
      cp /opt/dmdb/data/DMDB/dm.ctl opt/dmbak/dbbak/
      cp /opt/dmdb/data/DMDB/dm_service.prikey opt/dmbak/dbbak/
      cp /opt/dmdb/data/DMDB/DMDB01.log opt/dmbak/dbbak/
      cp /opt/dmdb/data/DMDB/DMDB02.log opt/dmbak/dbbak/
      cp /opt/dmdb/data/DMDB/*.DBF opt/dmbak/dbbak/
      复制


      SP_BACKUP_COPY_END

      拷 贝 结 束 后 , 调 用 系 统 过 程 SP_BACKUP_COPY_END , 记 录 系 统 各 节 点 END_LSN/END_SEQ信息,以在恢复结束后校验数据完整性。该过程同时生成一个仅包含 meta文件的空备份集,并将记录的信息填充到该文件

        SQL> SP_BACKUP_COPY_END('/opt/dmbak/backupset');
        DMSQL 过程已成功完成
        已用时间: 856.339(毫秒). 执行号:601.
        复制


        归档日志拷贝

        将归档目录中备份期间新增的归档日志拷贝至/opt/dmbak/arch

          cp opt/dmdb/arch/ARCHIVE_LOCAL1_0x6D88836A[0]_2021-10-12_18-54-38.log opt/dmbak/arch
          复制


          恢复流程:

          配置拷贝后的dm.ini

          当源库的一个副本拷贝到/opt/dmbak/dbbak后,在恢复前需要修改dm.ini文件中全部的路径参数

            vi opt/dmbak/dbbak/dm.ini
            ================== 以下路径均改为拷贝后的路径 ====================
            CTL_PATH = dm/dmdbms/data/test/dm.ctl #ctl file path
            CTL_BAK_PATH = /dm/dmdbms/data/test/ctl_bak #dm.ctl backup path
            SYSTEM_PATH = /dm/dmdbms/data/test #system path
            CONFIG_PATH = /dm/dmdbms/data/test #config path
            TEMP_PATH = /dm/dmdbms/data/test #temporary file path
            BAK_PATH = /dm/dmdbms/data/test/bak #backup file path
            =================== 指定新的端口号(非必须)======================
            PORT_NUM = 5240 #Port number on which the database server will listen
            =================== 指定新的实例名(非必须)======================
            INSTANCE_NAME = DMRES #Instance name
            =================== MAL功能关闭(如果是集群备份) ================================
            MAL_INI = 0
            =================== 主从环境拷贝需打开ALTER_MODE_STATUS ========
            ALTER_MODE_STATUS = 1
            复制


            将控制文件dm.ctl转储为dm.txt

              [dmdba@test_dev02 dbbak]$ /opt/dmdb/bin/dmctlcvt TYPE=1 SRC=/opt/dmbak/dbbak/dm.ctl DEST=/opt/dmbak/dbbak/dm.txt                                                                                          /dm.ctl
              DMCTLCVT V8
              convert txt to ctl success!
              复制


              修改dm.txt中路径为拷贝后的路径

                [root@localhost ~]# vi /opt/dmbak/dbbak/dm.txt
                ······
                # file path
                fil_path=/opt/dmbak/dbbak/SYSTEM.DBF
                ······
                # file path
                fil_path=/opt/dmbak/dbbak/ROLL.DBF
                ······
                # file path
                fil_path=/opt/dmbak/dbbak/DMDB01.log
                ······
                # file path
                fil_path=/opt/dmbak/dbbak/DMDB02.log
                ······
                # file path
                fil_path=/opt/dmbak/dbbak/MAIN.DBF
                ······
                # HUGE table space path
                htspath=/opt/dmbak/dbbak/HMAIN
                复制


                将修改好的dm.txt重新转为二进制控制文件dm.ctl,替换原有dm.ctl

                  [dmdba@test_dev02 dbbak]$ /opt/dmdb/bin/dmctlcvt TYPE=2 SRC=/opt/dmbak/dbbak/dm.txt DEST=/opt/dmbak/dbbak/dm.ctl                                                                                           /dm.txt
                  DMCTLCVT V8
                  convert ctl to txt success!
                  复制


                  设置dmarch.ini

                    vi /opt/dmbak/dbbak/dmarch.ini
                    [ARCHIVE_LOCAL1]
                    ARCH_TYPE = LOCAL #本地归档类型
                    ARCH_DEST = /opt/dmbak/arch #本地归档文件存放路径(记得创建路径)
                    ARCH_FILE_SIZE = 128 #单位 Mb,本地单个归档文件最大值
                    ARCH_SPACE_LIMIT = 0 #单位 Mb,0 表示无限制,范围 1024~4294967294M
                    复制


                    RESTORE DATABASE

                    通过dmrman工具利用空备份集还原源库

                      [dmdba@test_dev02 dbbak]$ /opt/dmdb/bin/dmrman CTLSTMT="RESTORE DATABASE '/opt/dmbak/dbbak/dm.ini' FROM BACKUPSET '/opt/dmbak/backupset'"                                                                                            KUPSET '/opt/dmbak/backupset_copy'"
                      dmrman V8
                      RESTORE DATABASE '/opt/dmbak/dbbak/dm.ini' FROM BACKUPSET '/opt/dmbak/backupset'
                      file dm.key not found, use default license!
                      Read ini warning, default dm.ctl backup path [/opt/dmbak/dbbak/ctl_bak] does not exist.
                      Read ini warning, default backup path [/opt/dmbak/dbbak/bak] does not exist.
                      [Percent:0.00%][Speed:0.00M/s][Cost:00:00:00][Remaining:00:00:00]Database mode = 2, oguid = 453331
                      Normal of FAST
                      Normal of DEFAULT
                      Normal of RECYCLE
                      Normal of KEEP
                      Normal of ROLL
                      begin redo pwr log collect, last ckpt lsn: 27977 ...
                      redo pwr log collect finished
                      EP[0]'s cur_lsn[27977], file_lsn[27977]
                      [Percent:0.00%][Speed:0.00M/s][Cost:00:00:01][Remaining:00:00:00]
                      restore successfully.
                      复制


                      RECOVER DATABASE

                      利用源库的归档日志将副本恢复到最新状态

                        [dmdba@test_dev02 dbbak]$ /opt/dmdb/bin/dmrman CTLSTMT="RECOVER DATABASE '/opt/dmbak/dbbak/dm.ini' WITH ARCHIVEDIR '/opt/dmbak/arch'"                                                                        dmrman V8pt/dmbak/db_copy/dm.ini' WITH ARCHIVEDIR '/opt/dmbak/arch                                                                                                                                            RECOVER DATABASE '/opt/dmbak/db_copy/dm.ini' WITH ARCHIVEDIR '/opt/dmbak/arch'
                        file dm.key not found, use default license!
                        Read ini warning, default dm.ctl backup path [/opt/dmbak/dbbak/ctl_bak] does not exist.
                        Read ini warning, default backup path [/opt/dmbak/dbbak/bak] does not exist.
                        Database mode = 2, oguid = 453331
                        Normal of FAST
                        Normal of DEFAULT
                        Normal of RECYCLE
                        Normal of KEEP
                        Normal of ROLL
                        begin redo pwr log collect, last ckpt lsn: 27977 ...
                        redo pwr log collect finished
                        EP[0]'s cur_lsn[27977], file_lsn[27977]
                        EP:0 total 2 pkgs applied, percent: 18%
                        EP:0 total 4 pkgs applied, percent: 36%
                        EP:0 total 6 pkgs applied, percent: 54%
                        EP:0 total 8 pkgs applied, percent: 72%
                        EP:0 total 10 pkgs applied, percent: 90%
                        EP:0 total 11 pkgs applied, percent: 100%
                        recover successfully!
                        time used: 802.080(ms)
                        复制


                        修改数据库摩数DB_MAGIC

                          [dmdba@test_dev02 ~]$ /opt/dmdb/bin/dmrman CTLSTMT="RECOVER DATABASE '/opt/dmbak/dbbak/dm.ini' UPDATE DB_MAGIC"
                          dmrman V8
                          RECOVER DATABASE '/opt/dmbak/dbbak/dm.ini' UPDATE DB_MAGIC
                          file dm.key not found, use default license!
                          Read ini warning, default dm.ctl backup path [/opt/dmbak/dbbak/ctl_bak] does not exist.
                          Read ini warning, default backup path [/opt/dmbak/dbbak/bak] does not exist.
                          Database mode = 2, oguid = 453331
                          Normal of FAST
                          Normal of DEFAULT
                          Normal of RECYCLE
                          Normal of KEEP
                          Normal of ROLL
                          EP[0]'s cur_lsn[28032], file_lsn[28032]
                          recover successfully!
                          time used: 00:00:01.054
                          复制


                          注册达梦服务

                            [root@test_dev02 dmbak]# /opt/dmdb/script/root/dm_service_installer.sh -t dmserver -dm_ini /opt/dmbak/dbbad/dm.ini -p dmdb
                            Created symlink from /etc/systemd/system/multi-user.target.wants/DmServicedmdb.service to /usr/lib/systemd/system/DmServicedmdb.service.
                            创建服务(DmServicedmdb)完成
                            复制


                            启动达梦

                              [root@test_dev02 dmbak]# /opt/dmdb/bin/DmServicedmdb start
                              Starting DmServicedmdb: Last login: Tue Oct 12 18:56:08 CST 2021
                              [ OK ]
                              复制


                              文章转载自数据库笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                              评论