备份概述
备份的目的是当数据库遇到损坏的情况下,可以执行还原恢复操作,把数据库复原到损坏前的某个时间点。用于还原恢复数据库的载体是备份集,生成备份集的过程便是备份了。备份就是从源库(备份库)中读取有效数据页、归档日志等相关信息,经过加密、压缩等处理后写入备份片,并将相关备份信息写入备份元数据文件的过程
对联机备份的支持与限制:
1) MPP 环境仅允许库和归档备份,且各节点都会执行,生成相应的备份集,支持 DDLCLONE;
2) DSC 环境支持库备份、表空间备份和表备份,要求 DSC 环境的所有节点都处于 OPEN状态;
3) MOUNT 状态仅支持归档备份;
4) SUSPEND 状态所有备份均不支持;
5) OPEN 状态支持所有备份,支持 DDL CLONE;
6) PRIMARY 模式支持所有备份,支持 DDL CLONE;
7) STANDBY 模式仅支持库级、表空间级和归档备份,支持 DDL CLONE;
8) DDL CLONE 必须备份归档,不允许指定 WITHOUT LOG。
仅支持表级还原,对联机还原的支持与限制:
1) MPP 和分布式数据库不支持;
2) PRIMARY 支持;
3) SUSPEND 状态所有还原均不支持;
4) OPEN/NORMAL 支持。
脱机备份支持库级和归档备份。
1) MPP 视同单机环境,仅当前节点执行备份操作;
2) 允许异常退出后备份,支持 DDL_CLONE;
3) DSC 支持库级备份,支持 DDL_CLONE;当 DSC 环境下正常节点的 CKPT_LSN 小于故障节点的 CKPT_LSN 时,不支持脱机备份。
脱机还原跟目标库所处的模式、状态以及集群环境(MPP 和 DSC)无关,允许库级、表空间级和归档还原。在一般的应用场景中,常规性的数据库维护工作,即在不影响数据库正常运行的情况下,建议定期执行联机数据库备份,且完全备份和增量备份结合使用。执行两次完全备份的时间间隔可以尽量长一点,在两次完全备份之间执行一定数量的增量备份,比如,可以选择每周备份与还原执行一次完全备份,一周内每天执行一次增量备份。为了尽量减少对数据库正常工作的影响,建议备份时间,选择在工作量较少的时间,比如深夜。
在 DIsql 工具中使用 BACKUP 语句可以备份整个数据库。
备份语法:
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 <写速度上限>
说明:
DIsql 中备份语句如果仅指定了必选参数如“ BACKUP DATABASE BACKUPSET ‘db_bak_01’;”,那么会默认地指定备份介质类型、备份路径、备份片大小及备份联机日志等。备份时也可以指定这些参数来修改默认值
用BACKUPSET参数备份数据库到指定路径 /home/bak
语句:
SQL> BACKUP DATABASE BACKUPSET '/home/bak';
执行结果:
创建备份集,备份名设置为“WEEKLY_FULL_BAK”
语句:
SQL> BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET '/home/bak';
执行结果:
通过BACKUPINFO语句来实现备份描述
语句:
SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_04' BACKUPINFO '完全备份';
MAXPIECESIZE 指定了单个备份片文件大小的上限,单位为 M,最小为 32M, 32 位系
统最大可设置为 2G, 64 位系统最大可设置为 128G。如果不设置该参数则 32 位系统默认
为 2G, 64 位系统默认为 4G。例如,要限制备份片大小不超过 300M,可指定 MAXPIECESIZE
300,备份时会限定所有的备份片大小不超过 300M。
语句:
SQL> BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_05' MAXPIECESIZE 300;
指定 COMPRESSED 参数后备份集会先被压缩然后再写到磁盘或磁带。压缩选项有不同的压缩级别可以选择,取值范围为 0~9。 0 表示不压缩, 1 表示 1 级压缩, 9 表示 9 级压缩。压缩级别越高,压缩越慢,但压缩比越高。若仅指定 COMPRESSED, 则压缩级别为 1。实际应用中用户可根据存储空间、数据文件大小、备份效率等确定合适的压缩级别。
语句:
SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_06' COMPRESSED LEVEL 5;
DM 支持对库级和表空间级的并行备份,待备份数据文件很大时使用并行备份可以显著
提高备份效率。用户可通过关键字 PARALLEL 指定是否执行并行备份,以及执行并行备份的并行数。执行备份时实际使用的并行数由用户指定的并行数和实际可使用的最大并行数决定,而实际可使用的最大并行数由数据文件的个数决定。
语句:并行为8
SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_07' PARALLEL 8;
增量备份指基于指定的库(或者表空间)的某个备份(完全备份或者增量备份),备份自该备份以来所有发生修改的数据页。执行增量备份的主要目的是快速备份数据库中的修改,减少备份时间和避免重复的备份。备份策略要根据可接受的最小恢复时间进行制定。例如,每周执行一次完全备份,每天执行一次增量备份,那么恢复时要重做的归档就不会超过一天
步骤:
SQL> BACKUP DATABASE INCREMENT WITH BACKUPDIR '/home/bak' BACKUPSET '/home/incrbak';
备份语句中的 INCREMENT 参数不可省略,该参数用来指定执行的备份类型为增量备份。若要创建累积增量备份,还需要指定 CUMULATIVE 参数,否则缺省为差异增量备份。 WITHBACKUPDIR 参数用来指定基备份集的搜索目录,如果基备份集不在默认备份目录或当前备份目录则该参数不可省略。
在 DIsql 工具中使用 BACKUP 语句也可以备份单个表空间。同备份数据库一样,执行表空间备份数据库实例也必须运行在归档模式下
语法如下:
BACKUP TABLESPACE <表空间名> [FULL | 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 <压缩级别>]]
[TRACE FILE ‘<TRACE 文件名>’] [TRACE LEVEL <TRACE 日志级别>]
[TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]];
<read_limit>::= READ SPEED <读速度上限> [WRITE SPEED <写速度上限>]
<write_limit>::= WRITE SPEED <写速度上限>
使用说明:
完全备份
执行表空间备份, 表空间必须处于 OPEN 状态, MOUNT 和 SUSPEND 状态下不允许执行表空间备份。 表空间备份就是拷贝表空间内所有数据文件中的有效数据的过程。 DM 仅支持表空间联机备份。
备份语句:
SQL> BACKUP TABLESPACE MAIN FULL BACKUPSET '/home/tablespace_bak';
执行结果:
执行表空间增量备份的主要目的同数据库增量备份一样是为了快速备份数据库中的修改,减少备份时间和避免重复的备份。
语句:
BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/home/tablespace_bak' BACKUPSET '/home/tablespace_incrbak';
执行结果:
与备份数据库与表空间不同,备份表不需要服务器配置归档, DIsql 中输入以下即可
备份用户表:
SQL>BACKUP TABLE TAB_01 BACKUPSET 'tab_bak_01';
语法如下:
BACKUP TABLE <表名>
[TO <备份名>] [BACKUPSET ‘<备份集路径>’] [DEVICE TYPE <介质类型> [PARMS ‘<介质参数>’]]
[BACKUPINFO ‘<备份描述>’]
[MAXPIECESIZE <备份片限制大小>]
[LIMIT <read_limit>|<write_limit>]
[IDENTIFIED BY <密码>|”<密码>” [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]]
[TRACE FILE ‘<TRACE 文件名>’] [TRACE LEVEL <TRACE 日志级别>];
<read_limit>::= READ SPEED <读速度上限> [WRITE SPEED <写速度上限>]
<write_limit>::= WRITE SPEED <写速度上限>
使用说明:
表备份拷贝指定表所使用的所有数据页到备份集中,并记录各个数据页之间的逻辑关系用来恢复表数据结构。表备份均为联机完全备份,不需要备份归档日志,不存在增量备份之说。当数据库中某张表比较重要而又没必要备份整个数据库或表空间时就可以选择表备份。
完整的备份表步骤如下:
SQL> BACKUP TABLE ADDRESS BACKUPSET '/home/table_bak';
表还原操作:
表还原之后不需要恢复操作。 DIsql 中输入以下简单的 RESTORE 语句就可还原表:
SQL>RESTORE TABLE TAB_01 FROM BACKUPSET ‘tab_bak_01’;
语法如下:
RESTORE TABLE [<表名>] [STRUCT] [KEEP TRXID]
FROM BACKUPSET’<备份集路径>’ [DEVICE TYPE <介质类型> [PARMS ‘<介质参数>’]]
[IDENTIFIED BY <密码>|”<密码>” [ENCRYPT WITH <加密算法>]]
[TRACE FILE ‘<TRACE 文件名>’] [TRACE LEVEL <TRACE 日志级别>];
使用说明:
实验以上面备份的TEST.ADDRESS表还原为例:
SQL> RESTORE TABLE ADDRESS FROM BACKUPSET '/home/table_bak';
数据已成功还原
DMRMAN(DM RECOVERY MANAGER)是 DM 的脱机备份还原管理工具,由它来统一负责库级脱机备份、脱机还原、 脱机恢复等相关操作,该工具支持命令行指定参数方式和控制台交互方式执行,降低了用户的操作难度
LINUX 上数据库的执行码目录为/opt/dmdbms/bin,转到执行码目录直接在操作系统的命令行中输入以下命令就可启动 DMRMAN。若配置了环境变量DM_HOME,可直接命令行执行:
./dmrman
启动后控制台中输入 exit 命令即可退出 DMRMAN 环境:
RMAN>exit
在 DMRMAN 工具中使用 BACKUP 命令可以备份整个数据库。使用 DMRMAN 脱机备份数据库需要关闭数据库实例。 若是正常退出的数据库,则脱机备份前不需要配置归档; 若是故障退出的数据库,则备份前,需先进行归档修复。 在 DMRMAN 中输入以下命令即可备份数据库:
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini';
语法如下:
BACKUP DATABASE ‘<INI 文 件 路 径 >’ [[[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]
[TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]]
[USE BAK_MAGIC <备份集魔数>];
<read_limit>::= READ SPEED <读速度上限> [WRITE SPEED <写速度上限>]
<write_limit>::= WRITE SPEED <写速度上限>
使用说明:
语句:BACKUP DATABASE '/opt/dmdbms/data/DAMENG2/dm.ini' FULL BACKUPSET '/home/bak';
执行结果:
语句:BACKUP DATABASE '/opt/dmdbms/data/DAMENG2/dm.ini' INCREMENT WITH BACKUPDIR '/home/bak' BACKUPSET '/home/incrbak';
执行结果:
在 DMRMAN 工具中使用 BACKUP 命令可以备份库的归档。使用 DMRMAN 备份归档需要设置归档,否则会报错。关闭数据库实例, 在 DMRMAN 中输入以下命令即可备份归档:
RMAN>BACKUP ARCHIVE LOG DATABASE '/opt/dmdbms/data/DAMENG/dm.ini';
语句:BACKUP ARCHIVE LOG ALL DATABASE '/opt/dmdbms/data/DAMENG2/dm.ini' BACKUPSET '/home/arch_bak';
执行结果:
使用 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 ‘<介质参数>’]
使用说明:
通过 RESTORE 命令还原后的数据库不可用,需进一步执行 RECOVER 命令,将数据库
恢复到备份结束时的状态。
数据库备份集分为联机和脱机两种类型。通常情况下,用户会在联机状态下备份数据库,
因此下面以联机数据库备份为例说明使用 DMRMAN 如何执行数据库还原操作
实验步骤:
SQL> backup database backupset '/home/bak';
执行语句:
restore database '/opt/dmdbms/data/DAMENG3/dm.ini' from backupset '/home/bak';
使用 RECOVER 命令完成数据库恢复工作,可以是基于备份集的恢复工作,也可以是使用本地归档日志的恢复工作。如果还原后,数据已经处于一致性状态了,则可以使用更新DB_MAGIC 方式恢复,前提是不需要重做日志。
语法如下:
RECOVER DATABASE ‘<ini_path>’[FORCE]
WITH ARCHIVEDIR ‘<归档日志目录>’{,‘<归档日志目录>’}
[USE DB_MAGIC <db_magic>] [UNTIL TIME ‘<时间串>’] [UNTIL LSN <LSN>]; |备份与还原
153
RECOVER DATABASE ‘<ini_path>’ [FORCE] FROM BACKUPSET ‘< 备 份 集 路
径>’[<device_type_stmt>] [IDENTIFIED BY <密码>|”<密码>” [ENCRYPT WITH <加密算
法>]][USE BAK_MAGIC <备份集魔数>];
<device_type_stmt>::= DEVICE TYPE <介质类型> [PARMS ‘<介质参数>’]
数据库恢复实验:(继3.3.1还原后的步骤)
语句:
RECOVER DATABASE '/opt/dmdbms/data/DAMENG3/dm.ini' from backupset '/home/bak';
数据库更新是指更新数据库的 DB_MAGIC,并将数据库调整为可正常工作状态,与数据
库恢复一样使用 RECOVER 命令完成。数据库更新发生在重做 REDO 日志恢复数据库后,或
者目标库不需要执行重做日志已经处于一致状态的情况。
实验步骤:(继3.3.1和3.3.2的步骤)
语句:RMAN> RECOVER DATABASE '/opt/dmdbms/data/DAMENG3/dm.ini' update DB_MAGIC;
启动恢复的库:
DmServiceDMSERVER3 start
验证数据:
结论:数据库还原恢复正常
文章
阅读量
获赞