DM8:数据库物理备份与还原实战

(一)、什么是物理备份

    DM 数据库中的数据存储在数据库的物理数据文件中,数据文件按照页、簇和段的方式
进行管理,数据页是最小的数据存储单元。任何一个对 DM 数据库的操作,归根结底都是对
某个数据文件页的读写操作。
   因此,DM 备份的本质就是从数据库文件中拷贝有效的数据页保存到备份集中,这里的
有效数据页包括数据文件的描述页和被分配使用的数据页。而在备份的过程中,如果数据库
系统还在继续运行,这期间的数据库操作并不是都会立即体现到数据文件中,而是首先以日
志的形式写到归档日志中,因此,为了保证用户可以通过备份集将数据恢复到备份结束时间
点的状态,就需要将备份过程中产生的归档日志也保存到备份集中。
   还原与恢复是备份的逆过程。还原是将备份集中的有效数据页重新写入目标数据文件的
过程
恢复则是指通过重做归档日志,将数据库状态恢复到备份结束时的状态;也可以恢复
到指定时间点和指定 LSN。恢复结束以后,数据库中可能存在处于未提交状态的活动事务,
这些活动事务在恢复结束后的第一次数据库系统启动时,会由 DM 数据库自动进行回滚。备
份 、 还 原 与 恢 复 的 关 系 如:

 (二)、物理备份实战

   达梦数据库物理可以分为全库备份(完全备份)、表空间备份、归档备份、表备份

   备份方式分为联机备份(热备份)、脱机备份(冷备份)

    备份可以说是DBA的生命线,没有备份数据库是绝对不安全的,那么达梦数据库有备份?

数据备份解读
完全备份执行完全备份,备份程序会扫描数据文件,拷贝所有被分配、使用的数据页,写入到备份片文件中,库备份会扫描整个数据库的所有数据文件;支持联机状态和脱机状态下备份
增量备份执行增量备份,备份程序会扫描数据文件,拷贝所有基备份结束以后被修改的数据页,写入到备份片文件中,同样库增量备份会扫描整个数据库的所有数据文件,表空间增量备份只扫描表空间内的数据文件;支持联机状态和脱机状态下备份
表空间备份表空间备份只拷贝指定表空间的数据页,因此,相对于数据库备份而言,表空间备份的速度会更快,生成的备份集会更小。对一些包含关键数据的用户表空间,我们可以使用表空间备份功能,进一步保障数据安全。表空间备份支持完全备份和增量备份,但只能在联机状态下执行。不支持 temp 表空间备份还原。
表备份表备份主要包括数据备份和元信息备份两部分。与库备份和表空间备份不同,表备份不是直接扫描数据文件,而是从 BUFFER 中加载数据页,拷贝到备份片文件中。表备份的元信息则包括建表语句、重建约束语句、重建索引语句,以及其他相关属性信息。表备份不需要配置归档就可以执行,并且不支持增量表备份;只能在联机状态下执行

   除了数据备份,达梦数据库也支持日志备份,所谓日志备份,就是将备份过程中产生的 REDO 日志拷贝到备份片文件中,用来在数据库还原结束后,将数据库恢复到一致性状态。在执行备份过程中,用户可能修改数据库中的数据,并产生对应的 REDO 日志

   接下来我将记录常用的数据备份:完全备份与增量备份

2.1、完全备份

备份语法:

BACKUP DATABASE [[[FULL] [DDL_CLONE]]| INCREMENT [CUMULATIVE][WITH BACKUPDIR '<
基备份搜索目录>'{,'<基备份搜索目录>'}]|[BASE ON BACKUPSET '<基备份目录>']][TO <备份
名>][BACKUPSET '<备份集路径>']
[DEVICE TYPE <介质类型> [PARMS '<介质参数>']] 
[BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>] 
[LIMIT <read_limit>|<write_limit>] 
[IDENTIFIED BY <密码>|”<密码>” [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]] [WITHOUT LOG]
[TRACE FILE '<TRACE 文件名>'] [TRACE LEVEL <TRACE 日志级别>] 
[TASK THREAD <线程数>][PARALLEL [<并行数>] [READ SIZE <拆分块大小>]];
<read_limit>::= READ SPEED <读速度上限> [WRITE SPEED <写速度上限>]
<write_limit>::= WRITE SPEED <写速度上限>

           -----------------------------------------//参数解读//----------------------------------------------


#FULL:备份类型。FULL 表示完全备份,可不指定,默认为完全备份。

#DDL_CLONE:数据库克隆。该参数只能用于完全备份中,表示仅拷贝所有的元数据不
拷贝数据。如对于数据库中的表来说,只备份表的定义不备份表中数据。表空间和表备份不
支持该参数。数据库克隆必须备份日志。

#DDL_CLONE 会克隆 HUGE 表的元数据信息,之后库还原时会还原 HUGE表的表定义。

#INCREMENT:备份类型。INCREMENT 表示增量备份,若要执行增量备份必须指定该参数。

#CUMULATIVE:用于增量备份中,指明为累积增量备份类型,若不指定则缺省为差异增量备份类型。

#WITH BACKUPDIR:用于增量备份中,指定基备份的搜索目录,最大长度为 256 个字
节。若不指定,自动在默认备份目录和当前备份目录下搜索基备份。如果基备份不在默认的
备份目录或当前备份目录下,增量备份必须指定该参数。

#BASE ON BACKUPSET:用于增量备份中,指定基备份集路径。
增量备份时,DM 不会在默认备份目录或当前备份目录的子目录中搜索基备份
集,因此若基备份集在默认备份目录或当前备份目录的子目录中,则需要指
定基备份的搜索目录或直接指定基备份集路径,否则将无法搜索到相应的基
备份集,备份操作将会失败。

#TO:指定生成备份名称。若未指定,系统随机生成,默认备份名格式为:DB_库名_备
份类型_备份时间。其中,备份时间为开始备份时的系统时间。

#BACKUPSET:指定当前备份集生成路径。若指定为相对路径,则在默认备份路径中生
成备份集。若不指定,则在默认备份路径中按约定规则,生成默认备份集目录。库级备份默
认 备 份 集 目 录 名 生 成 规 则 : DB_ 库 名 _ 备份类型 _ 备 份 时间,如
DB_DAMENG_FULL_20180518_143057_123456。表明该备份集为 2018 年 5 月 18 日备份与还原
14 时 30 分 57 秒 123456 毫秒时生成的库名为 DAMENG 的数据库完全备份集。若库名超长
使备份集目录完整名称长度大于 128 个字节将直接报错路径过长。

#DEVICE TYPE:指存储备份集的介质类型,支持 DISK 和 TAPE,默认 DISK,详见 1.3介质管理层。

#PARMS:只对介质类型为 TAPE 时有效,详见 1.3 介质管理层。

#BACKUPINFO:备份的描述信息。最大不超过 256 个字节。

#MAXPIECESIZE:最大备份片文件大小上限,以 M 为单位,最小 32M,32 位系统最大2G,64 位系统最大 128G。

#LIMIT:指定备份时最大的读写文件速度,单位为 M/S,默认为 0,表示无速度限制。

#IDENTIFIED BY:指定备份时的加密密码。密码可以用双引号括起来,这样可以避免
一些特殊字符通不过语法检测。密码的设置规则遵行 ini 参数 pwd_policy 指定的口令策略。

#WITH ENCRYPTION:指定加密类型,0 表示不加密,不对备份文件进行加密处理;1
表示简单加密,对备份文件设置口令,但文件内容仍以明文方式存储;2 表示完全数据加密,
对备份文件进行完全的加密,备份文件以密文方式存储。当不指定 WITH ENCRYPTION 子
句时,采用简单加密。

#ENCRYPT WITH:指定加密算法。当不指定 ENCRYPT WITH 子句时,使用 AES256_CFB
加密算法。

2.1.1、联机备份(热备份)

备份前,一定要确保归档开启,否者会报错

 2.1.1.1、使用DM管理工具进行备份

#命令方式创建备份:如果不指定路径,将备份到系统默认的路径下

backup database full to "DB_DMDATA_FULL_2022_11_01_00_11_37" backupset '/dm8/DB_DMDATA_FULL_2022_11_01_00_11_37';

 通过查询服务,可以看到相应的备份集:包含元数据和备份片

 #图形化创建备份:登陆管理工具->库备份->右键【新建备份】->

 

2.1.1.2、使用DISQL管理工具进行备份:登陆disql,输入备份脚本

SQL>  backup database full to "DB_DMDATA_FULL_2022_11_01_00_11_38" backupset '/dm8/DB_DMDATA_FULL_2022_11_01_00_11_38';

2.1.2、脱机备份(冷备份)

脱机备份相对联机备份,允许有停机窗口才能进行脱机备份

2.1.2.1、使用DMRMAN管理工具进行备份

BACKUP DATABASE '/dm8/dmdbms/GRP1_RT_01/dm.ini' FULL BACKUPSET  '/dm8/db_cold_full_bak_01';

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[306596], file_lsn[306596]
Processing backupset /dm8/db_cold_full_bak_01
[Percent:100.00%][Speed:0.00M/s][Cost:00:00:02][Remaining:00:00:00]
backup successfully!
time used: 00:00:03.760 

2.1.2.2、使用CONSOLE管理工具进行备份

 通过CONSOLE脱机可以实现脱机备份,但是我一般很少使用这个

2.1.3、完全备份与还原恢复实战

2.1.3.1、数据还原

   使用 RESTORE 命令完成脱机还原操作,在还原语句中指定库级备份集,可以是脱机库
级备份集
,也可以是联机库级备份集。数据库的还原包括数据库配置文件还原和数据文件还
原,目前可能需要还原的数据库配置文件包括 dm.ini、dm.ctl、服务器秘钥文件
(dm_service.prikey 或者 dm_external.config,若备份库指定 usbkey 加密,则无秘钥文件)、联机日志文件

语法如下:

RESTORE DATABASE <restore_type> FROM BACKUPSET '<备份集路径>' 
[<device_type_stmt>]
[IDENTIFIED BY <密码>|”<密码>” [ENCRYPT WITH <加密算法>]]
[WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'}]
[MAPPED FILE '<映射文件路径>'][TASK THREAD <任务线程数>]
[RENAME TO '<数据库名>'] [USE BAK_MAGIC <备份集魔数>];
<restore_type>::=<type1>|<type2>
<type1>::='<ini_path>' [WITH CHECK] [REUSE DMINI] [WITHOUT SPACE] [AUTO EXTEND]
[OVERWRITE] [FORCE]
<type2>::= TO '<system_dbf_dir>' [WITH CHECK] [OVERWRITE]
<device_type_stmt>::= DEVICE TYPE <介质类型> [PARMS '<介质参数>']

-------------------------------------------//参数解读//---------------------------------------------------

#DATABASE:指定还原目标库的 dm.ini 文件路径或 system.dbf 文件路径。

#BACKUPSET:指定用于还原目标数据库的备份集路径。若指定为相对路径,会在默认备份目录下搜索备份集。

#DEVICE TYPE:指存储备份集的介质类型,包括 DISK 和 TAPE,默认为 DISK,详见1.3 介质管理层。

#PARMS:介质参数,只对介质类型为 TAPE 时有效,详见 1.3 介质管理层。

#IDENTIFIED BY:指定备份时使用的加密密码,供还原过程解密使用。密码可以用双引号括起来,这样可以避免一些特殊字符通不过语法检测。

#ENCRYPT WITH:指定备份时使用的加密算法,供还原过程解密使用,若未指定,则使用默认算法 AES256_CFB。具体可以使用的加密算法请参考 3.2.2.1.1 概述。

#WITH BACKUPDIR:用于增量备份的还原中,指定基备份的搜索目录,最大长度为 256
个字节。若不指定,自动在默认备份目录和当前备份目录下搜索基备份。如果基备份不在默
认的备份目录或当前备份目录下,增量备份的还原必须指定该参数。

#MAPPED FILE:指定存放还原目标路径的映射文件路径,参见 3.3.5.2.1 数据库还
原。当参数 BACKUPSET 指定的路径和 MAPPED FILE 中指定的路径不一致时,以 MAPPED 
FILE 中指定的路径为主。

#TASK THREAD:指定还原过程中用于处理解压缩和解密任务的线程个数。若未指定,
则默认为 4;若指定为 0,则调整为 1;若指定超过当前系统主机核数,则调整为主机核数。

#RENAME TO:指定还原数据库后是否更改库的名字,若指定该参数则将还原后的库改
为指定的数据库名,默认使用备份集中的 db_name 作为还原后库的名称。

#USE BAK_MAGIC:指定备份集魔数,若不指定,则默认为 0。使用备份集进行还原恢
复时指定的 BAK_MAGIC 需要与备份集的 BAK_MAGIC 一致,用户可通过 DMRMAN 工具的

#SHOW BACKUPSET 命令查看备份集的 BAK_MAGIC。该参数仅在 DMDPC 环境下有效。

#WITH CHECK:指定还原前校验备份集数据完整性。缺省不校验。

#WITHOUT SPACE: 指定还原数据库时不再为数据文件尾部未使用的数据页分配磁盘,
不指定则默认分配。

#AUTO EXTEND:还原数据库时设置文件自动拓展,避免指定 WITHOUT SPACE 关键字
后,由于源库未设置文件自动拓展,从而导致恢复过程或从 DDL_CLONE 库还原后更新

#DB_MAGIC 时存储空间不足。

#OVERWRITE: 还原数据库时,存在重名的数据文件时,是否覆盖重建,不指定则默认报错。


/*还原时指定 OVERWRITE 选项,所有重名的文件和非空目录均会删除重建,该
过程是无法撤销的。为避免删除重要的文件,还原前请务必确保数据库系统
路径下未存放无关文件。*/

2.1.3.2、数据还原实战

1)、模拟数据库故障,我这里在自己的虚拟机上删除了MAIN表空间,启动数据库后发现数据库装填为mount,日志报错(注意一定不能在实际生产环境中操作),此时MAIN.DBF表空间已经不见了。

 #启动数据库库:模拟的是意外掉电,数据文件丢失,启动的目的是为了模拟实际生产中,数据库以正常的情况下启动

  #从上图可以看出,似乎数据启动[OK],但是实际上是OK的吗?我们来看看,实际上数据库已经处于mount状态

 #查看服务日志,这也是一般排错定位的基本办法

cd /dm8/dmdbms/log

tail -100   dm_GRP1_RT_01_202210.log 

报错:缺少MAIN.DBF文件, [ERROR] database P0000009193 T0000000000000009193  os_file_open_low_real error!              desc: No such file or directory, path: /dm8/dmdbms/GRP1_RT_01/MAIN.DBF, code: 2

2)将MAIN.DBF还原(一定要脱机):否者会报错:[-137]:服务器正在运行或者存在其他进程正在操作同一个库

RMAN>restore database '/dm8/dmdbms/GRP1_RT_01/dm.ini' from backupset '/dm8/db_cold_full_bak_01';

 #在/dm8/dmdbms/GRP1_RT_01目录下,MAIN.DBF已经从备份集中还原回来,但是到了这一步还是不能开启数据库,因为这一步只是到了备份集的那一刻,数据库没有备份的应该从归档和联机日志中恢复,所以还需要进行下一步恢复工作,才能让数据库完全恢复正常

2.1.4、数据恢复

   上一步完成后,需要进行数据恢复操作,  使用 RECOVER 命令完成数据库恢复工作,可以是基于备份集的恢复工作,也可以是使用本地归档日志的恢复工作。如果还原后,数据已经处于一致性状态了,则可以使用更新DB_MAGIC 方式恢复。

语法如下:

RECOVER DATABASE '<ini_path>'[FORCE]
WITH ARCHIVEDIR '<归档日志目录>'{,'<归档日志目录>'}
[USE DB_MAGIC <db_magic>] [UNTIL TIME '<时间串>'] [UNTIL LSN <LSN>];

RECOVER DATABASE '<ini_path>' [FORCE] FROM BACKUPSET '< 备份集 路
径>'[<device_type_stmt>] [IDENTIFIED BY <密码>|”<密码>” [ENCRYPT WITH <加密算
法>]][USE BAK_MAGIC <备份集魔数>]; 
<device_type_stmt>::= DEVICE TYPE <介质类型> [PARMS '<介质参数>']

------------------------------------//参数解读//-------------------------------------

#DATABASE:指定还原库目标的 dm.ini 文件路径。

#FORCE:若恢复到 DMTDD 前端库,且恢复的 REDO 日志中包含创建表空间的记录,则
可以指定该选项来强制创建表空间而忽略 REDO 日志中对该表空间的副本数和区块策略的
严格限制。具体用法请参考 3.3.5.1.1 数据库还原章节中 RESTORE 命令的 FORCE 选项。

#WITH ARCHIVEDIR:本地归档日志搜索目录。

#USE DB_MAGIC:指定本地归档日志对应数据库的 DB_MAGIC,若不指定,则默认使
用目标数据库的 DB_MAGIC。

#UNTIL TIME:恢复数据库到指定的时间点。如果指定的结束时间早于备份结束时间,
忽略 UNTIL TIME 参数,重做所有小于备份结束 LSN(END_LSN)的 REDO 日志,将系统
恢复到备份结束时间点的状态,此时并不能精确恢复到 END_LSN,只能保证重演到

#END_LSN 之后的第一个时间戳日志,该日志对应的 LSN 值略大于 END_LSN。

#UNTIL LSN:恢复数据库到指定的 LSN。如果指定的 UNTIL LSN 小于备份结束 LSN(END_LSN),则报错。

#BACKUPSET:指定用于恢复目标数据库的备份集目录。

#DEVICE TYPE:指存储备份集的介质类型,包括 DISK 和 TAPE,默认为 DISK,详见1.3 介质管理层。

#PARMS:介质参数,只对介质类型为 TAPE 时有效,详见 1.3 介质管理层。

#IDENTIFIED BY:指定备份时使用的加密密码,供恢复过程解密使用。密码可以用双
引号括起来,这样可以避免一些特殊字符通不过语法检测。

#ENCRYPT WITH:指定备份时使用的加密算法,供恢复过程解密使用,若未指定,则
使用默认算法 AES256_CFB。具体可以使用的加密算法请参考 3.2.2.1.1 概述。

#USE BAK_MAGIC:指定备份集魔数,若不指定,则默认为 0。具体用法请参考3.3.5.1.1 数据库还原。

2.1.4.1、数据恢复实战

1)、上述已经模拟数据库故障,并且已经完成了数据还原工作,接下来将进行数据恢复

RMAN>recover database '/dm8/dmdbms/GRP1_RT_01/dm.ini' from backupset '/dm8/db_cold_full_bak_01';

 2)、更新数据库魔数
RMAN>recover database '/dm8/dmdbms/GRP1_RT_01/dm.ini'  update db_magic;

2.1.4.2、启动数据库

1)启动数据库

2)验证数据库是否处于OPEN状态

2.2、增量备份

语法和第大点完全一致,这里我就不提语法概述了,直接接入实战

为什么要做增量备份?

每一做全量备份不好吗?

解答:增量备份,从字面上来很容易理解,增量备份基于指定的完全备份集或最近一次的备份集,从效率和空间占用来看,增量备份是基于完全备份后期产生变动的数据,包含的操作增/删/改

2.2.1、增量备份实战

1)指定完全备份集

backup database increment base on backupset '/dm8/db_cold_full_bak_01' to "DB_GRP1_RT_01_INCRE_2022_11_01_21_44_34" backupset '/dm8/DB_GRP1_RT_01_INCRE_2022_11_01_21_44_34';

2)不指定完全备份集(以最近一次备份作为基备份)

backup database increment  to "DB_DMDATA_INCRE_2022_11_01_22_14_00" backupset '/dm8/DB_DMDATA_INCRE_2022_11_01_22_14_00';

2.2.2、增量备份还原与恢复

1)使用增量备份还原数据库

RMAN>restore database '/dm8/dmdbms/DMDATA/dm.ini' from backupset '/dm8/DB_DMDATA_INCRE_2022_11_01_22_14_00';

2)使用增量备份恢复数据库

RMAN>recover database '/dm8/dmdbms/DMDATA/dm.ini' from backupset '/dm8/DB_DMDATA_INCRE_2022_11_01_22_14_00';

3)更新数据库魔数

RMAN>recover database '/dm8/dmdbms/DMDATA/dm.ini'   update db_magic;

 3、总结

    数据库备份与还原, 在实际生产库中,可能会出现突然掉电或者其他情况,出现归档日志不完整,在数据库恢复的时候,首先要先对归档进行连续性恢复,才能进行库恢复

------------------------------------------//物理备份与恢复到此结束//---------------------------------------

更多内容,请访问达梦社区地址:https:eco.dameng.com

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值