DM 数据库中的数据存储在数据库的物理数据文件中,数据文件按照页、簇和段的方式
进行管理,数据页是最小的数据存储单元。任何一个对 DM 数据库的操作,归根结底都是对
某个数据文件页的读写操作。
因此,DM 备份的本质就是从数据库文件中拷贝有效的数据页保存到备份集中,这里的
有效数据页包括数据文件的描述页和被分配使用的数据页。而在备份的过程中,如果数据库
系统还在继续运行,这期间的数据库操作并不是都会立即体现到数据文件中,而是首先以日
志的形式写到归档日志中,因此,为了保证用户可以通过备份集将数据恢复到备份结束时间
点的状态,就需要将备份过程中产生的归档日志也保存到备份集中。
还原与恢复是备份的逆过程。还原是将备份集中的有效数据页重新写入目标数据文件的
过程。恢复则是指通过重做归档日志,将数据库状态恢复到备份结束时的状态;也可以恢复
到指定时间点和指定 LSN。恢复结束以后,数据库中可能存在处于未提交状态的活动事务,
这些活动事务在恢复结束后的第一次数据库系统启动时,会由 DM 数据库自动进行回滚。备
份 、 还 原 与 恢 复 的 关 系 如:
达梦数据库物理可以分为全库备份(完全备份)、表空间备份、归档备份、表备份
备份方式分为联机备份(热备份)、脱机备份(冷备份)
备份可以说是DBA的生命线,没有备份数据库是绝对不安全的,那么达梦数据库有备份?
数据备份 | 解读 |
完全备份 | 执行完全备份,备份程序会扫描数据文件,拷贝所有被分配、使用的数据页,写入到备份片文件中,库备份会扫描整个数据库的所有数据文件;支持联机状态和脱机状态下备份 |
增量备份 | 执行增量备份,备份程序会扫描数据文件,拷贝所有基备份结束以后被修改的数据页,写入到备份片文件中,同样库增量备份会扫描整个数据库的所有数据文件,表空间增量备份只扫描表空间内的数据文件;支持联机状态和脱机状态下备份 |
表空间备份 | 表空间备份只拷贝指定表空间的数据页,因此,相对于数据库备份而言,表空间备份的速度会更快,生成的备份集会更小。对一些包含关键数据的用户表空间,我们可以使用表空间备份功能,进一步保障数据安全。表空间备份支持完全备份和增量备份,但只能在联机状态下执行。不支持 temp 表空间备份还原。 |
表备份 | 表备份主要包括数据备份和元信息备份两部分。与库备份和表空间备份不同,表备份不是直接扫描数据文件,而是从 BUFFER 中加载数据页,拷贝到备份片文件中。表备份的元信息则包括建表语句、重建约束语句、重建索引语句,以及其他相关属性信息。表备份不需要配置归档就可以执行,并且不支持增量表备份;只能在联机状态下执行 |
除了数据备份,达梦数据库也支持日志备份,所谓日志备份,就是将备份过程中产生的 REDO 日志拷贝到备份片文件中,用来在数据库还原结束后,将数据库恢复到一致性状态。在执行备份过程中,用户可能修改数据库中的数据,并产生对应的 REDO 日志
接下来我将记录常用的数据备份:完全备份与增量备份
备份语法:
BACKUP DATABASE [[[FULL] [DDL_CLONE]]| INCREMENT [CUMULATIVE][WITH BACKUPDIR '< -----------------------------------------//参数解读//----------------------------------------------
#DDL_CLONE:数据库克隆。该参数只能用于完全备份中,表示仅拷贝所有的元数据不 #DDL_CLONE 会克隆 HUGE 表的元数据信息,之后库还原时会还原 HUGE表的表定义。 #INCREMENT:备份类型。INCREMENT 表示增量备份,若要执行增量备份必须指定该参数。 #CUMULATIVE:用于增量备份中,指明为累积增量备份类型,若不指定则缺省为差异增量备份类型。 #WITH BACKUPDIR:用于增量备份中,指定基备份的搜索目录,最大长度为 256 个字 #BASE ON BACKUPSET:用于增量备份中,指定基备份集路径。 #TO:指定生成备份名称。若未指定,系统随机生成,默认备份名格式为:DB_库名_备 #BACKUPSET:指定当前备份集生成路径。若指定为相对路径,则在默认备份路径中生 #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:指定备份时的加密密码。密码可以用双引号括起来,这样可以避免 #WITH ENCRYPTION:指定加密类型,0 表示不加密,不对备份文件进行加密处理;1 #ENCRYPT WITH:指定加密算法。当不指定 ENCRYPT WITH 子句时,使用 AES256_CFB |
备份前,一定要确保归档开启,否者会报错
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.1、使用DMRMAN管理工具进行备份
BACKUP DATABASE '/dm8/dmdbms/GRP1_RT_01/dm.ini' FULL BACKUPSET '/dm8/db_cold_full_bak_01';
Database mode = 0, oguid = 0 |
2.1.2.2、使用CONSOLE管理工具进行备份
通过CONSOLE脱机可以实现脱机备份,但是我一般很少使用这个
使用 RESTORE 命令完成脱机还原操作,在还原语句中指定库级备份集,可以是脱机库
级备份集,也可以是联机库级备份集。数据库的还原包括数据库配置文件还原和数据文件还
原,目前可能需要还原的数据库配置文件包括 dm.ini、dm.ctl、服务器秘钥文件
(dm_service.prikey 或者 dm_external.config,若备份库指定 usbkey 加密,则无秘钥文件)、联机日志文件
语法如下:
RESTORE DATABASE -------------------------------------------//参数解读//--------------------------------------------------- #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 数据库还 #TASK THREAD:指定还原过程中用于处理解压缩和解密任务的线程个数。若未指定, #RENAME TO:指定还原数据库后是否更改库的名字,若指定该参数则将还原后的库改 #USE BAK_MAGIC:指定备份集魔数,若不指定,则默认为 0。使用备份集进行还原恢 #SHOW BACKUPSET 命令查看备份集的 BAK_MAGIC。该参数仅在 DMDPC 环境下有效。 #WITH CHECK:指定还原前校验备份集数据完整性。缺省不校验。 #WITHOUT SPACE: 指定还原数据库时不再为数据文件尾部未使用的数据页分配磁盘, #AUTO EXTEND:还原数据库时设置文件自动拓展,避免指定 WITHOUT SPACE 关键字 #DB_MAGIC 时存储空间不足。 #OVERWRITE: 还原数据库时,存在重名的数据文件时,是否覆盖重建,不指定则默认报错。
|
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已经从备份集中还原回来,但是到了这一步还是不能开启数据库,因为这一步只是到了备份集的那一刻,数据库没有备份的应该从归档和联机日志中恢复,所以还需要进行下一步恢复工作,才能让数据库完全恢复正常。
上一步完成后,需要进行数据恢复操作, 使用 RECOVER 命令完成数据库恢复工作,可以是基于备份集的恢复工作,也可以是使用本地归档日志的恢复工作。如果还原后,数据已经处于一致性状态了,则可以使用更新DB_MAGIC 方式恢复。
语法如下:
RECOVER DATABASE ' RECOVER DATABASE ' ------------------------------------//参数解读//------------------------------------- #DATABASE:指定还原库目标的 dm.ini 文件路径。 #FORCE:若恢复到 DMTDD 前端库,且恢复的 REDO 日志中包含创建表空间的记录,则 #WITH ARCHIVEDIR:本地归档日志搜索目录。 #USE DB_MAGIC:指定本地归档日志对应数据库的 DB_MAGIC,若不指定,则默认使 #UNTIL TIME:恢复数据库到指定的时间点。如果指定的结束时间早于备份结束时间, #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:指定备份时使用的加密算法,供恢复过程解密使用,若未指定,则 #USE BAK_MAGIC:指定备份集魔数,若不指定,则默认为 0。具体用法请参考3.3.5.1.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;
1)启动数据库
2)验证数据库是否处于OPEN状态
语法和第大点完全一致,这里我就不提语法概述了,直接接入实战
为什么要做增量备份?
每一做全量备份不好吗?
解答:增量备份,从字面上来很容易理解,增量备份基于指定的完全备份集或最近一次的备份集,从效率和空间占用来看,增量备份是基于完全备份后期产生变动的数据,包含的操作增/删/改
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;
数据库备份与还原, 在实际生产库中,可能会出现突然掉电或者其他情况,出现归档日志不完整,在数据库恢复的时候,首先要先对归档进行连续性恢复,才能进行库恢复
------------------------------------------//物理备份与恢复到此结束//---------------------------------------
更多内容,请访问达梦社区地址:https:eco.dameng.com