备份还原(物理备份)
简介
备份的主要目的是数据容灾,保证数据的安全性,在数据库发生故障时,通过还原备份集,将数据恢复到可用状态。DM读写分离集群搭建、故障处理过程中经常用到物理备份。数据迁移时也有可能用到,前段时间有个机构要求将数据迁移到新的服务器上,两个数据库之间网络隔离,只能通过硬盘拷贝备份到新服务器上进行还原。
DM 数据库的表空间是一个逻辑概念,其目的主要是为了方便数据库的管理,数据库的所有对象在逻辑上都存放在某个表空间中,而物理上都存储在所属表空间的数据文件中。
一个表空间由一个或多个数据文件组成。数据存储在数据库的物理数据文件中,数据文件按照页、簇和段的方式进行管理,数据页是最小的数据存储单元。任何一个对 DM 数据库的操作,归根结底都是对某个数据文件页的读写操作。
物理备份直接扫描数据库文件,找出那些已经分配、使用的数据页,拷贝并保存到备份集中。物理备份过程中,不关心数据页的具体内容是什么,也不关心数据页属于哪一张表,只是简单的根据数据库文件系统的描述,来挑选有效的数据页。
限制
- DM的物理备份还原不支持:TEMP 表空间。
- 表空间备份、表备份只能在联机状态下执行。
- 表空间还原、表还原只支持在联机状态下执行
- 库备份、归档日志备份联机、脱机备份都可以。
备份集
备份集用来存放备份过程中产生的备份数据及备份信息,一个备份集就是一个目录,备份集包含一个或多个备份片文件,以及一个备份元数据文件。
- 备份片用来存储备份数据的文件。备份时,目标数据文件内容或归档日志内容经过处理后,都会存放到各自的备份片文件中。备份片文件后缀为.bak
- 元数据文件用来存放备份信息,元数据文件的后缀为.meta
元数据文件包含如下信息:
- 备份集本身相关的信息,如是否联机备份,备份的范围,备份的加密信息,以及备份的压缩信息等;
- 备份源库的建库参数信息,如 DSC 的节点数,是否大小写敏感,PAGE_CHECK 属性等;
- 数据文件信息,如备份了哪些数据文件,文件大小,以及文件相关的表空间信息等;
- 备份片的信息,如包含哪些备份片文件、备份片大小等信息;
- 备份库的dm.ini参数信息和密钥文件。
联机备份和脱机备份
DM支持联机备份和脱机备份。
- 联机备份时,可能存在一些处于活动状态的事务正在执行,为确保备份数据的一致性,需要将备份期间产生的 REDO 日志一起备份。因此,只能在配置本地归档、并开启本地归档的数据库上执行联机备份。
- 只有已经关闭的数据库才允许执行脱机备份。正在运行的数据库,无法执行脱机备份,系统会报错。DM支持对异常关闭的数据库进行脱机库备份。备份异常关闭的数据库,要求配置了本地归档,如果本地归档不完整,则需要先修复本地归档,再进行备份。
注意:联机备份时,关闭已配置的本地归档之后再重新打开,会造成归档文件中部分日志缺失,备份时检查归档文件连续性时将会报错。存在该类操作时,若要避免该错误,备份前需要调用checkpoint(100)。
一致性备份:
- 一致性备份包含完整的数据文件内容和归档日志信息
- 脱机备份是一致性备份。数据库正常关闭时,会生成完全检查点,脱机备份生成的备份集中,不包含任何 REDO 日志。
- 不指定 WITHOUT LOG 选项的联机备份生成的备份集就是一致性备份。
非一致性备份的备份集只包含数据文件相关内容,没有归档日志信息,利用非一致性备份还原的数据库,无法直接启动,必须借助归档日志来恢复。
数据备份
数据备份:
- 数据备份过程中,根据 DM 数据文件系统的描述信息,准确判断每一个数据页是否被分配、使用,将未使用的数据页剔除,仅保留有效数据页进行备份。
- 与直接文件拷贝方式相比,DM 物理备份丢弃了那些没有使用的数据页,因此可以节省对存储空间的要求,并有效减少 IO 数量,提升备份、还原的效率。
- 对处于 RES_OFFLINE 和 CORRUPT 状态的表空间,则只记录表空间相关信息和状态,不会真正拷贝数据页
压缩与加密
DM 共支持 9 个级别的压缩处理,级别越高压缩比越高,但相应的压缩速度越慢、CPU 开销越大。
还原、恢复
还原的主要动作是将数据页从备份集中拷贝回数据库文件相应位置,恢复则是重做 REDO 日志将数据库恢复到一致性状态,并执行更新 DB_MAGIC 的过程。
库还原:
根据库备份集中记录的文件信息重新创建数据库文件,并将数据页重新拷贝到目标数据库的过程。DM 既可以将一个已存在的数据库作为还原目标库,也可以指定一个路径作为还原目标库的目录。
步骤:
- 清理目标库环境
- 重建数据库文件
- 拷贝数据页
- 重建联机日志文件
- 修改配置参数
PERMANENT_MAGIC 和 DB_MAGIC:
数据库时生成 PERMANENT_MAGIC 和 DB_MAGIC 值,其中 PERMANENT_MAGIC 一经生成永远不会改变(DDL_CLONE 还原库的 PMNT_MAGIC 除外)
DB_MAGIC 称为数据库魔数,同样可以用来表示某一个数据库,但 DB_MAGIC是可以变化的,每经过一次还原、恢复操作后,DB_MAGIC 就会产生变化,用来区分备份源库和还原目标库。
查看系统的 PERMANENT_MAGIC 和 DB_MAGIC 值:
SELECT PERMANENT_MAGIC;
SELECT DB_MAGIC FROM V$RLOG;

也可通过dmmdf工具查看
./dmmdf type=1 file=/home/dmdba/dmdbms/data/DAMENG/SYSTEM.DBF

备份还原语法:
BACKUP DATABASE '<INI 文件路径>' [FULL| INCREMENT [WITH BACKUPDIR '<基备份搜索目录>' | [BASE ON <BACKUPSET '<基备份目录>']][TO <备份名>][BACKUPSET '<备份集路径>']
RESTORE DATABASE '<INI 文件路径>' FROM BACKUPSET '<备份集目录>' [WITH BACKUPDIR '<基备份集搜索目录>'];
RECOVER DATABASE '<INI 文件路径>' FROM BACKUPSET '<备份集目录>'
或
RECOVER DATABASE '<INI 文件路径>' WITH ARCHIVEDIR '<归档日志目录>' [UNTIL TIME '<时间串>'] [UNTIL LSN <LSN>];
脱机备份示例
./dmrman CTLSTMT="BACKUP DATABASE '/dmdata/DAMENG/dm.ini' FULL TO BACKUP_FILE1 BACKUPSET '/dmdata/fullback'"

将备份目录拷贝到要还原数据库服务器上
scp -r /dmdata/fullback/ dmdba@192.168.116.52:/dmdata

还原
./dmrman ctlstmt="RESTORE DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/fullback'"

恢复:
./dmrman ctlstmt="RECOVER DATABASE '/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/fullback'"

更新DB_MAGIC:
./dmrman ctlstmt="RECOVER DATABASE '/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC"


浙公网安备 33010602011771号