目录
一、逻辑导出工具——dexp
dexp工具可以对本地或者远程数据库进行数据库级、用户级、模式级和表级的逻辑备份。备份的内容非常灵活,可以选择是否备份索引、数据行和权限,是否忽略各种约束(外键约束、非空约束、唯一约束等),在备份前还可以选择生成日志文件,记录备份的过程以供查看。
(一)dexp工具的使用
dexp工具需要从命令行启动。以数据库软件安装目录为/dm8/bin为例,在/dm8/bin路径下输入dexp和参数后回车。参数在下一节详细介绍。
语法如下
dexp PARAMETER=<value> { PARAMETER=<value> }
(二)dexp相关参数含义
参数 | 含义 | 备注 |
USERID | 数据库的连接信息 | 必选 |
FILE | 明确指定导出文件名称 | 可选。如果缺省该参数,则导出文件名为dexp.dmp |
DIRECTORY | 导出文件所在目录 | 可选 |
FULL | 导出整个数据库(N) | 可选,四者中选其一。缺省为SCHEMAS |
OWNER | 用户名列表,导出一个或多个用户所拥有的所有对象 | |
SCHEMAS | 模式列表,导出一个或多个模式下的所有对象 | |
TABLES | 表名列表,导出一个或多个指定的表或者表分区 | |
FUZZY_MATCH | TABLES 选项是否支持模糊匹配(N) | 可选 |
QUERY | 用于指定对导出表的数据进行过滤的条件 | 可选 |
PARALLEL | 用于指定导出的过程中所使用的线程数目 | 可选 |
TABLE_PARALLEL | 用于指定导出每张表所使用的线程数,在MPP模式下会转换成单线程 | 可选 |
TABLE_POOL | 用于设置导出过程中存储表的缓冲区个数 | 可选 |
(三)四种级别导出功能
1.FULL
FULL 方式导出数据库的所有对象。
##设置FULL=Y,导出数据库的所有对象,导出数据库文件和日志文件放在路径 /mnt/data/dexp下。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dexp
2.OWNER
OWNER 方式导出一个或多个用户拥有的所有对象。
##设置OWNER=USER01,导出用户USER01所拥有的对象全部导出。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/mnt/data/dexp
3.SCHEMAS
SCHEMAS 方式的导出一个或多个模式下的所有对象。
##设置SCHEMAS=USER01,导出模式USER01模式下的所有对象。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log SCHEMAS=USER01 DIRECTORY=/mnt/data/dexp
4.TABLES
TABLES方式导出一个或多个指定的表或表分区。导出所有数据行、约束、索引等信息。
##设置TABLES=table1,table2,导出 table1,table2 两张表的所有数据和信息。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/mnt/data/dexp
和TABLES导出有关的参数还有QUERY、EXCLUDE和INCLUDE,都是用来设置过滤条件的。
(四)使用示范
1.环境准备
导出库:环境为Linux,服务器为10.0.0.11,用户名和密码均为SYSDBA。导出的是DM数据库系统安装时自带的名为BOOKSHOP的示例库,端口号5236。
2.dexp 逻辑导出
导出数据库的所有对象 (FULL=Y),导出文件为 dexp01.dmp ,导出日志为dexp01.log,导出文件和日志文件都存放在/emc_2/data/dexp 目录中。
./dexp SYSDBA/SYSDBA@10.0.0.11:5236 FILE=dexp01.dmp LOG=dexp01.log DIRECTORY=/emc_2/data/dexp FULL=Y
##若使用加密参数对备份进行加密,可使用加密参数 ENCRYPT、ENCRYPT_PASSWORD、ENCRYPT_NAME 。
##具体使用方法如下:
./dexp SYSDBA/SYSDBA@10.0.0.11:5236 FILE=dexp03.dmp LOG=dexp03.log DIRECTORY=/emc_2/data/dexp FULL=Y ENCRYPT=Y ENCRYPT_PASSWORD=damengren ENCRYPT_NAME= DES_CBC
##导出数据库的所有对象 (FULL=Y),导出文件为 dexp03.dmp,导出日志为 dexp03.log,导出文件和日志文件都存放在 /emc_2/data/dexp 目录中。
二、逻辑导入工具——dimp
dimp逻辑导入工具利用dexp工具生成的备份文件对本地或远程的数据库进行联机逻辑还原。dimp导入是dexp导出的相反过程。还原的方式可以灵活选择,例如是否忽略对象存在而导致的创建错误、是否导入约束、是否导入索引、导入时是否需要编译、是否生成日志等。
(一)dimp工具的使用
dimp工具需要从命令行启动。以数据库软件安装目录为/dm8/bin为例,在/dm8/bin路径下输入dimp和参数后回车。
##语法如下
dimp PARAMETER=value { PARAMETER=value }
##将逻辑备份采用 FULL 方式完全导入到用户名和密码为 SYSDBA,IP 地址为 10.0.0.11,端口号为 8888 的数据库。导入文件名为 db_str.dmp,导入的日志文件名为 db_str.log,路径为/mnt/data/dexp
./dimp USERID=SYSDBA/SYSDBA@10.0.0.11:8888 FILE=db_str.dmp DIRECTORY=/mnt/data/dexp LOG=db_str.log FULL=Y
(二)dimp相关参数含义
参数 | 含义 | 备注 |
USERID | 数据库的连接信息 | 必选 |
FILE | 输入文件,即 dexp 导出的文件 | 必选 |
DIRECTORY | 导入文件所在目录 | 可选 |
FULL | 导入整个数据库 (N) | 可选,四者中选其一。缺省为SCHEMAS |
OWNER | 导入指定的用户名下的模式 | |
SCHEMAS | 导入的模式列表 | |
TABLES | 表名列表,指定导入的 tables 名称。不支持对外部表进行导入 | |
PARALLEL | 用于指定导入的过程中所使用的线程数目 | 可选 |
TABLE_PARALLEL | 用于指定导入的过程中每个表所使用的子线程数目 | 可选。在 FAST_LOAD 为 Y 时有效 |
IGNORE | 忽略创建错误 (N)。如果表已经存在则向表中插入数据,否则报错表已经存在 | 可选 |
TABLE_EXISTS_ACTION | 需要的导入表在目标库中存在时采取的操作 [SKIP| APPEND | TRUNCATE | REPLACE] | 可选 |
FAST_LOAD | 是否使用 dmfldr 进行数据导入(N) | 可选 |
FLDR_ORDER | 使用 dmfldr 是否需要严格按顺序来导数据(Y) | 可选 |
COMMIT_ROWS | 批量提交的行数(5000) | 可选 |
(三)四种级别导入功能
1.FULL
FULL方式导入整个数据库。
##设置 FULL=Y,导入数据库,导入的数据库文件在 /mnt/data/dexp,即将生成的日志文件放在 /mnt/data/dimp。
./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dimp
2.OWNER
OWNER 方式导入一个或多个用户拥有的所有对象。
##设置 OWNER=USER01,导入用户 USER01 所拥有的对象全部导出。导入的数据库文件在 /mnt/data/dexp,即将生成的日志文件放在 /mnt/data/dimp。
./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/mnt/data/dimp
3.SCHEMAS
SCHEMAS 方式的导入一个或多个模式下的所有对象。
##设置 SCHEMAS=USER01,导入模式 USER01 模式下的所有对象。导入的数据库文件在/mnt/data/dexp,即将生成的日志文件放在 /mnt/data/dimp。
./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log SCHEMAS=USER01 DIRECTORY=/mnt/data/dimp
4.TABLES
TABLES 方式导入一个或多个指定的表或表分区。导入所有数据行、约束、索引等信息。
##设置 TABLES=table1,table2,导入 table1,table2 两张表的所有数据和信息。导入的数据库文件在 /mnt/data/dexp,即将生成的日志文件放在 /mnt/data/dimp。
./dimp USERID=SYSDBA/SYSDBA FILE=/mnt/data/dexp/db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/mnt/data/dimp
与TABLES导入有关的参数还有EXCLUDE,用来指定导入时过滤某类对象。
(四)使用示范
1.环境准备
导入库:环境为 Linux,服务器为 10.0.0.11,用户名和密码均为 SYSDBA。准备一个空数据库作为导入库,端口号为 8888。
2.dimp逻辑导入
导入 SYSDBA、OTHER、PERSON 模式中的数据 (SCHEMAS = SYSDBA,OTHER,PERSON),导入文件就是上一步导出的文件dexp01.dmp,导入日志dimp02.log放入/emc_2/data/dimp目录中。
./dimp SYSDBA/SYSDBA@10.0.0.11:8888 FILE=/emc_2/data/dexp/dexp01.dmp LOG=dimp02.log DIRECTORY=/emc_2/data/dimp SCHEMAS=SYSDBA,OTHER,PERSON
三、使用图形化工具进行逻辑导入导出
使用方式:打开数据库管理工具,右键选择【导入】/【导出】即可进行逻辑导入导出。
(一)逻辑导出
以下图片为逻辑导出的选项界面,包含导出目录、导出文件、日志文件和导出选项。
- 导出目录可以选择逻辑导出的文件存储位置,例如下图中导出目录为 D:\DM8\data\DAMENG\dexp。
- 导出文件的命名格式为 .dmp。
- 日志文件与导出文件存储在同一导出目录下。
导出选项可以根据逻辑导出的实际需要设置。包括设置文件大小、文件数、描述信息、权限、压缩等等。
(二)逻辑导入
以下图片为逻辑导入的选项界面,包含导入目录、导入文件、日志文件和导入选项。
- 导入目录可以选择逻辑导入的文件存储位置,例如下图中导入目录为 D:\DM8\data\DAMENG\dexp。
- 导入文件选择逻辑导出的文件。例如,逻辑导出表的相关数据,导出文件的格式为 test.dmp,逻辑导入时,导入文件选择为 test.dmp。
- 日志文件不能与旧文件同名。
导入选项可以根据逻辑导入的实际需要设置。包括数据行,是否选择索引约束、并发数等等。
四、脱机备份与还原工具——DMRMAN
(一)DMRMAN工具简介
DMRMAN(DM RECOVERY MANAGER)是脱机备份还原命令行工具,无需额外安装,由它来统一负责库级脱机备份、脱机还原、脱机恢复等相关操作,该工具支持命令行指定参数方式和控制台交互方式执行,降低用户的操作难度。
启动和退出 DMRMAN。进入数据库安装目录的 bin 目录下,例如 /dm8/bin,执行以下命令:
##启动DMRMAN
./dmrman
##退出DMRMAN##启动后控制台中输入 exit 命令RMAN>exit;
(二)数据备份
因表空间备份和表备份都只能在联机状态下进行,因此脱机状态下的数据备份只包括数据库备份和归档备份。
1.数据库备份
- 创建完全备份
注意
- 执行数据库脱机备份要求数据库处于脱机状态。
- 若是正常退出的数据库,则脱机备份前不需要配置归档;若是故障退出的数据库,则备份前,需先进行归档修复。
创建一个完整的数据库脱机备份的步骤如下:
##保证数据库处于脱机状态
##启动DMRMAN命令行工具
./dmrman
##DMRMAN中输入以下命令:
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini ' FULL BACKUPSET '/home/dm_bak/db_full_bak_01';
##FULL参数表示执行的备份为完全备份
- 创建增量备份
增量备份指基于指定的库的某个备份(完全备份或者增量备份),备份自该备份以来所有发生修改了的数据页。脱机增量备份要求两次备份之间数据库必须有操作,否则备份会报错。
创建脱机增量备份数据库的步骤如下:
##保证数据库处于脱机状态
##启动DMRMAN命令行工具
./dmrman
##DMRMAN中输入以下命令:
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/home/dm_bak'BACKUPSET '/home/dm_bak/db_increment_bak_02';
##INCREMENT参数表示执行的备份为增量备份
2.归档备份
使用 DMRMAN 备份归档需要设置归档,否则会报错。同时,归档备份得是归档日志,防止归档日志的丢失导致重要数据缺失。
执行归档备份要求数据库处于脱机状态,完整的创建脱机归档备份的过程如下:
##配置归档,请参考归档配置;##保证数据库处于脱机状态;
##启动 DMRMAN 命令行工具;
##DMRMAN 中输入以下命令:
RMAN>BACKUP ARCHIVE LOG ALL DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET '/home/dm_bak/arch_all_bak_01';
(三)备份管理
管理备份一个重要的目的是删除不再需要的备份。DMRMAN 工具提供 SHOW、CHECK、REMOVE、LOAD 等命令分别用来查看、校验、删除和导出备份集。
1.备份信息查看
DMRMAN 中使用 SHOW 命令可以查看备份集的信息,若指定具体备份集目录,则会生成相应的备份集链表信息。使用方法如下:
##查看单个备份集信息RMAN> show backupset '/home/test/yy/dm_bak/db_full_bak_01'
##批量显示备份集信息##SHOW BACKUPSETS...命令用于批量显示指定搜索目录下的备份集信息。
##可通过WITH BACKUPDIR 参数指定多个备份集搜索目录,同时查看所有的备份集。RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
BACKUPSET'/home/dm_bak1/db_bak_for_show_01'; RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
BACKUPSET'/home/dm_bak2/db_bak_for_show_01'; RMAN>SHOW BACKUPSETS WITH BACKUPDIR '/home/dm_bak1','/home/dm_bak2';
2.备份集校验
DMRMAN 中使用 CHECK 命令对备份集进行校验,校验备份集是否存在及合法。
##语法:CHECK BACKUPSET '<备份集目录>' ;
##CHECK BACKUPSET...命令用于校验特定备份集,每次只能检验一个备份集。
RMAN>CHECK BACKUPSET '/home/dmbak/dbbakforcheck01';
3.备份集删除
DMRMAN 中使用 REMOVE 命令删除备份集,可删除单个备份集,也可批量删除备份集。单个备份集删除时并行备份中的子备份集不允许单独删除;在指定备份集搜集目录中,发现存在引用待删除备份集作为基备份的需要执行级联删除,默认报错。批量删除备份集时,跳过收集到的单独的子备份集。
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
BACKUPSET'/home/dm_bak/db_bak_for_remove_01'; RMAN>REMOVE BACKUPSET '/home/dm_bak/db_bak_for_remove_01'
4.备份集导出
DMRMAN 中使用 LOAD 命令导出备份集。
##导出磁带/dev/nst0 上所有备份集的 meta 文件到目录/mnt/hgfs/dmsrc/bak_ dir中。
直接输##入导出语句将报错,如下所示:
RMAN>LOAD BACKUPSETS FROM DEVICE TYPE TAPE TO BACKUPDIR '/mnt/hgfs/dmsrc/bak_dir';
LOAD BACKUPSETS FROM DEVICE TYPE TAPE TO BACKUPDIR '/mnt/hgfs/dmsrc/bak_dir'; ##load backupsets failed.error code:-10000 [-10000]:[错误码:-20022]磁带打开失败
##退出 dmrman,设置环境变量 TAPE,值为/dev/nst0:
[root@192 debug]#export TAPE=/dev/nst0
[root@192 debug]#echo $TAPE /dev/nst0
##启动 dmrman,再次执行
[root@192 debug]# ./dmrman
RMAN>LOAD BACKUPSETS FROM DEVICE TYPE TAPE TO BACKUPDIR '/mnt/hgfs/dmsrc/bak_dir';
LOAD BACKUPSETS FROM DEVICE TYPE TAPE TO BACKUPDIR '/mnt/hgfs/dmsrc/bak_dir';
load meta file [SBT_TEST_T-20140909192629000000-4966] to path
[/mnt/hgfs/dmsrc/bak_dir/0/0.meta]...
load meta file [SBT_TEST_T-20140909192629000000-4966] to path
[/mnt/hgfs/dmsrc/bak_dir/0/0.meta]...success
load meta file [SBT_TEST_T2-20140909192746000000-9983] to path
[/mnt/hgfs/dmsrc/bak_dir/1/1.meta]...
load meta file [SBT_TEST_T2-20140909192746000000-9983] to path
[/mnt/hgfs/dmsrc/bak_dir/1/1.meta]...success
load backupsets successfully.
##退出 dmrman,查看本地磁盘目录/mnt/hgfs/dmsrc/bak_dir:
[root@192 debug]# ls -1 /mnt/hgfs/dmsrc/bak_dir total 0
drwxrwxrwx 1 root root 0 Sep 11 00:23 0
drwxrwxrwx 1 root root 0 Sep 11 00:23 1
[root@192 debug]# ls -1 /mnt/hgfs/dmsrc/bak_dir/0 total 12
-rwxrwxrwx 1 root root 24576 Sep 11 00:23 0.meta
[root@192 debug]# ls -1 /mnt/hgfs/dmsrc/bak_dir/1
total 12
-rwxrwxrwx 1 root root 24576 Sep 11 00:23 1.meta
5.备份集映射文件导出
备份集映射文件,又称为 mapped file。备份集映射文件导出,是将备份集中各数据文件的原始路径或者调整后的路径生成到一个本地文件中,可通过关键字 MAPPED FILE 应用于表空间和库的还原操作中。
DMRMAN 中使用 DUMP 命令导出映射文件。不支持导出到 DMASM 文件系统中。
##导出备份集中数据文件的原始路径
RMAN>DUMP BACKUPSET'/mnt/dmsrc/db_bak'DEVICE TYPE DISK MAPPED FILE '/mnt/dmsrc/db_bak_mapped.txt';
##指定 ini_path,导出调整后的数据文件路径到映射文件:
RMAN>DUMP BACKUPSET'/mnt/dmsrc/db_bak'DEVICE TYPE DISK DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'
MAPPED FILE '/mnt/dmsrc/db_bak_mapped.txt';
(四)数据还原恢复
1.数据库还原和恢复
- 数据库还原
使用 RESTORE 命令完成脱机还原操作,在还原语句中指定库级备份集,可以是脱机库级备份集,也可以是联机库级备份集。
注意
通过 RESTORE 命令还原后的数据库不可用,需进一步执行 RECOVER 命令,将数据库恢复到备份结束时的状态。
以联机数据库备份说明使用 DMRMAN 如何执行数据库还原操作:
##联机备份数据库,保证数据库运行在归档模式及 OPEN 状态;
SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
##准备目标库。还原目标库可以是已经存在的数据库,也可使用 dminit 工具初始化一个新库。如下所示:
./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RESTORE
##校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验;
RMAN>CHECK BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
##还原数据库。启动 DMRMAN,输入以下命令:
RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM
BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
- 数据库恢复
使用 RECOVER 命令完成数据库恢复工作,可以是基于备份集的恢复工作,也可以是使用本地归档日志的恢复工作。数据库恢复是指重做 REDO 日志,有两种方式:从备份集恢复,即重做备份集中的 REDO 日志;或从归档恢复,即重做归档中的 REDO 日志。
方式一:从备份集恢复
##执行还原数据库的命令之后,可以直接执行恢复数据库的命令,如下:
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_recover_backupset';
方式二:从归档恢复
##通过使用 WITH ARCHIVEDIR 关键字进行归档恢复,如下:
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' WITH ARCHIVEDIR'/home/dm_arch/arch'
- 数据库更新
数据库更新是指更新数据库的 DB_MAGIC,并将数据库调整为可正常工作状态,与数据库恢复一样使用 RECOVER 命令完成。数据库更新发生在重做 REDO 日志恢复数据库后。
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC;
2.表空间还原和恢复
- 表空间还原
使用 RESTORE 命令完成表空间的脱机还原,还原的备份集可以是联机或脱机生成的库备份集,也可以是联机生成的表空间备份集。脱机表空间还原仅涉及表空间数据文件的重建与数据页的拷贝。不需要事先设置目标表空间为 OFFLINE 状态。
表空间还原后,表空间状态被置为 RES_OFFLINE,并设置数据标记 FIL_TS_RECV_STATE_RESTORED,表示经过还原但数据不完整。表空间还原命令如下:
RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/home/dm_bak/ts_full_bak_for_restore';
注意
表空间还原的目标库只能是备份集产生的源库,否则将报错。
- 表空间恢复
表空间恢复通过重做 REDO 日志,以将数据更新到一致状态。由于日志重做过程中,修改好的数据页首先存入缓冲区,缓冲区分批次将修改好的数据页写入磁盘,如果在此过程中发生异常中断,可能导致缓冲区中的数据页无法写入磁盘,造成数据的不一致,数据库启动时校验失败,所以表空间恢复过程中不允许异常中断。
恢复完成后,表空间状态置为 ONLINE,并设置数据标记为 FIL_TS_RECV_STAT_RECOVERED,表示数据已恢复到一致状态。恢复表空间命令如下:
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RECOVER/dm.ini' TABLESPACE MAIN;
3.归档还原与修复
- 归档还原
使用 RESTORE 命令完成脱机还原归档操作,在还原语句中指定归档备份集。备份集可以是脱机归档备份集,也可以是联机归档备份集。归档还原的命令如下:
##还原归档。启动 DMRMAN,设置 OVERWRITE 为 2,如果归档文件已存在,会报错。
##1、指定还原的目标归档日志目录:
RMAN>RESTORE ARCHIVE LOG FROM BACKUPSET '/home/dm_bak/arch_all_for_restore' TO ARCHIVEDIR'/opt/dmdbms/data/DAMENG_FOR_RESTORE/arch_dest' OVERWRITE 2;
##2、指定还原目标库的 dm.ini 文件路径:
RMAN>RESTORE ARCHIVE LOG FROM BACKUPSET '/home/dm_bak/arch_all_for_restore' TO DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' OVERWRITE 2;
- 归档修复
使用 REPAIR 命令完成指定数据库的归档修复,归档修复会对目标库 dmarch.ini 中配置的所有本地归档日志目录执行修复。若目标库没有配置本地归档,则不执行修复。执行修复时,目标库一定不能处于运行状态。一般建议在数据库故障后,应立即执行归档修复,否则后续还原恢复将会导致联机日志中未刷入本地归档的 REDO 日志中而丢失,届时再利用本地归档恢复将无法恢复到故障前的最新状态。归档恢复的命令如下:
##单机环境下,确保目标库已经停止工作后,执行归档修复;
RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/data/dm.ini';
##DSC 环境下,需要每个节点停止工作后,每个节点独立执行修复操作;
##对于两节点 DSC01、DSC02 执行修复如下:
RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/dsc/dm01.ini';
RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/dsc/dm02.ini'
五、数据库备份实战案例
(一)全库 + 增量备份集还原数据库
1.还原原理
增量还原指通过增量备份集进行数据还原操作。在使用增量备份集进行数据库还原的前提是已对数据库进行全库备份。因为增量还原过程中隐含一个完全还原操作。选择增量备份还原时,直接选择最后一个增量备份集进行还原即可,数据库会自动从最早一个全库备份寻找开始还原。如果增量备份集的基备份集被删除了,那么单独使用这个增量备份集是无法进行还原操作的。
例如,数据库在使用全库 + 增量备份集进行数据库还原时,会先对数据库进行全库备份(在备份之前需要设置好归档)产生完全备份集 A,当对数据库进行相关操作(增删改)之后,依次进行增量备份并产生增量备份集 B、C、D。当使用增量备份集进行数据库还原时,可以直接使用最后一个增量备份集 D 进行还原操作,最终完成整个数据库还原过程。
注意
- 使用增量备份集进行还原时,增量备份集的基备份集不能被删除。
- 进行增量备份还原,需要将该增量备份之前完整的全库备份及增量备份都进行拷贝。
2.准备工作
(1)数据准备,执行以下命令:
--创建表并插入数据
create table test (a int );
insert into test values (1);
commit;
(2)第一次全库备份。
backup database full to "DB_DAMENG_FULL_2024_06_25_15_37_43" backupset '/dm8/data/DAMENG/bak' compressed level 1;
(3)第二次备份为增量备份。
##插入数据2
insert into test values(2);
commit;
##执行增量备份
backup database increment to "DB_DAMENG_INCRE_2024_06_25_15_39_43" backupset '/dm8/data/DAMENG/bak' compressed level 1;
(4)第三次备份为增量备份。
##插入数据3
insert into test values(3);
commit;
##执行增量备份
backup database increment to "DB_DAMENG_INCRE_2024_06_25_15_41_43" backupset '/dm8/data/DAMENG/bak' compressed level 1;
(5)查看备份集
##检查生成的备份集
[dmdba@localhost bak]$ ls
DB_DAMENG_FULL_2024_06_25_15_37_43
DB_DAMENG_INCRE_2024_06_25_15_39_43
DB_DAMENG_INCRE_2024_06_25_15_41_43
[dmdba@localhost bak]$ pwd
/dm8/data/DBOA/bak
注意
如果两个增量备份期间未产生新数据,则无法进行增量备份。
3.具体步骤
(1)停止数据库服务,还原步骤如下:
##检验备份集是否正确RMAN>CHECK BACKUPSET '/dm8/data/DAMENG/bak/DB_DAMENG_FULL_2024_06_25_15_37_43
';
##还原
RESTORE DATABASE '/dbdata/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/DAMENG/bak/DB_DAMENG_FULL_2024_06_25_15_39_43';
##恢复
RECOVER DATABASE '/dbdata/dmdata/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/DAMENG/bak/DB_DAMENG_FULL_2024_06_25_15_41_43';
##更新数据库魔数
RECOVER DATABASE '/dbdata/dmdata/DAMENG/dm.ini' UPDATE DB_MAGIC;
注意
当备份集为脱机备份即备份过程中无日志生成,那么此时还原后的数据库中数据与备份时数据状态一致。在不需要重做归档日志恢复数据的情况下,可以直接更新 DB_MAGIC 完成数据库恢复操作。
(2)还原成功后,启动数据库并开始检查数据。
--查看表数据
SQL> select * from test;
行号 A
1 1
2 2
3 3
(二)全库 + 增量备份集 + 归档还原数据库
1.还原原理
归档日志是保证数据一致性和完整性的重要保障。配有归档日志的数据库系统在出现故障时丢失数据的可能性更小,这是因为一旦出现介质故障如磁盘损坏时,利用归档日志,系统可被恢复至故障发生的前一刻,也可以还原到指定的时间点。当利用归档恢复到指定时间点时,需调用 UNTIL TIME 字段指定备份的截止时间点,即可以实现恢复数据库到指定时间点。
2.准备工作
(1)数据准备,执行以下命令:
create table test (a int );insert into test values (1);commit;
(2)第一次全库备份。
backup database full to "DB_DAMENG_FULL_2024_06_25_15_37_43" backupset '/dm8/data/DAMENG/bak' compressed level 1;
(3)第二次备份为增量备份。
##插入数据2
insert into test values(2);
commit;
##执行增量备份
backup database increment to "DB_DAMENG_FULL_2024_06_25_15_39_43 backupset '/dm8/data/DAMENG/bak' compressed level 1;
(4)第三次备份为增量备份。
##插入数据3
insert into test values(3);
commit;
##执行增量备份
backup database increment to "DB_DAMENG_FULL_2024_06_25_15_41_43" backupset '/dm8/data/DAMENG/bak' compressed level 1;
(5)插入数据 4 并提交,产生新数据归档。
##插入数据4
insert into test values(4);
commit;
(6)插入数据 5 并提交,产生新数据归档。
##插入数据5
insert into test values(5);
commit;
(7)查看备份集。
[dmdba@localhost bak]$ ls
DB_DAMENG_FULL_2024_06_25_15_37_43
DB_DAMENG_INCRE_2024_06_25_15_39_43
DB_DAMENG_INCRE_2024_06_25_15_41_43
[dmdba@localhost bak]$ pwd
/dm8/data/DBOA/bak
注意
如果两个增量备份期间未产生新数据,则无法进行增量备份。
3.具体步骤
(1)还原到当前最新数据时刻
- 停止数据库服务,还原步骤如下:
##检验备份集是否正确RMAN>CHECK BACKUPSET '/dm8/data/DAMENG/bak/DB_DAMENG_INCRE_2024_06_25_15_41_43';
##还原
RESTORE DATABASE '/dbdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/DAMENG/bak/DB_DAMENG_INCRE_2024_06_25_15_41_43';
##恢复
RECOVER DATABASE '/dbdata/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/dm8/dmarch';
##更新数据库魔数
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
- 还原成功后,启动数据库,并检验数据库里最新记录值。
##结果显示恢复到归档数据5##查看表数据
SQL> select * from test;
行号 A
---------- -----------
1 1
2 2
3 3
4 4
5 5
(2)恢复到指定时间点
- 停止数据库服务,还原步骤如下:
##检验备份集是否正确RMAN>CHECK BACKUPSET '/dm8/data/DAMENG/bak/DB_DAMENG_INCRE_2024_06_25_13_15_4';
##还原
RESTORE DATABASE '/dbdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/data/DAMENG/bak/DB_DAMENG_INCRE_2024_06_25_13_15_4';
##恢复
RECOVER DATABASE '/dbdata/data/DAMENG/dm.ini' WITH ARCHIVEDIR
'/dm8/dmarch' UNTIL TIME '2024-06-25 17:00:00 ';
##更新数据库魔数
RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
- 还原成功后,启动数据库,并检验数据库里最新记录值。
##结果显示恢复到归档数据4##查看表数据
SQL> select * from test;
行号 A
---------- -----------
1 1
2 2
3 3
4 4