Oracle数据库备份与还原1:RMAN基本用法

1 相关基本概念

归档

  1. 归档开启:
    在mount状态下开启归档:alter database archivelog;
    ps:归档有些信息要写入到controlFile,所以要在mount(加载了controlFile后)修改。
    归档是数据库级变动。
    归档开启后,归档日志不会自动删除,要注意在rman脚本里删除,否则引起数据库hang。

  2. 可通过rman删除归档日志
    rman>crosscheck archivelog all;
    rman>delete noprompt archivelog until time “sysdate-3”;
    注:用OS命令删除归档日志不管用,归档文件信息仍保存在数据库中,仍会报空间不足。

  3. 归档是切换后的redo日志会按日期保存起来。
    归档日志不会自动删除。
    联机日志和归档日志构成了持续的、完整的操作日志,可用来rman恢复。

  4. rman与归档的关系:
    开启归档,可以开机下rman全库备份。否则,只能停机备份。
    因为备份会持续区间,不同的数据文件可能checkpoint scn不一致,需要归档日志的协助。

控制文件

Oracle重要的保存元数据的文件,二进制。为了防止损坏和丢失,一般在不同盘保存多分。进入mount阶段的必备文件。
控制文件里中保存的信息:
1.数据库名、id
2.表空间名
3.数据文件
4.日志文件
5.数据库checkpoint信息
6.rman元数据库

scn

Oracle数据库内部时间戳。

  1. 数据文件:里有scn和stop scn。scn表checkpoint时的scn,stop表数据库正常关闭是的scn。没有关闭是最大值,0xffff.ffffffff。
  2. 日志文件:包括First_change#(Low SCN)和Next_change#(Next SCN),表日志文件对应的活动区间。
  3. 控制文件:数据库的checkpoint scn。
  4. 数据块:保存有最近修改数据块的scn,增量备份中用来判定是否属于增量。

2 基本操作

2.1 登陆

rman target user/pwd@dbname 

恢复管理器: Release 11.2.0.1.0 - Production on 星期四 11月 28 19:45:03 2019
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
连接到目标数据库: ORCL (DBID=1464394244)
	rman>connect target user/pwd@dbname 
执行OS命令 ,不退出RMAN
	rman>host "dir";
执行rman脚本文件。
	rman target user/pwd@dbname cmdfile=e:\oracle_backup\database_backup.rman

这个方法很重要,自动备份脚本就是通过这种方式执行的。
ps:RMAN的使用风格与sqlplus类似。
为便于记忆,总结RMAN命令的风格:

  1. 一般格式:参数名+空格+参数值
  2. 不一般格式:如果参数名包含2个单词,为:参数名1 2+=号+参数名.
  3. 每个命令用分号分隔;
  4. 如果限定参数,放在命令与操作对象之间。如增量备份:backup incremental level=1 database;

2.2 查看及配置参数

rman>  show all;
db_unique_name 为 ORCL 的数据库的 RMAN 配置参数为:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 2 DAYS;
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'e:/oracle_backup/%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'E:\ORACLE\PRODUCT\11.2.0\DBHOME_2\DATABASE\SNCFORCL.ORA'; # default

查看单个参数

RMAN> show retention policy;

2.3 配置参数

rman> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 2 DAYS;
旧的 RMAN 配置参数:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 2 DAYS;
新的 RMAN 配置参数:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
已成功存储新的 RMAN 配置参数

2.4 备份

最简单的,全库备份

rman> backup database;
启动 backup 于 25-11月-19
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00006 名称=E:\ORACLE\ORADATA\ORCL\TS_INDEX_01.DBF
输入数据文件: 文件号=00007 名称=E:\ORACLE\ORADATA\ORCL\TS_INDEX_02.DBF
输入数据文件: 文件号=00008 名称=E:\ORACLE\ORADATA\ORCL\TS_DATA_01.DBF
输入数据文件: 文件号=00009 名称=E:\ORACLE\ORADATA\ORCL\TS_DATA_02.DBF
输入数据文件: 文件号=00010 名称=E:\ORACLE\ORADATA\ORCL\TS_DATA_03.DBF
输入数据文件: 文件号=00011 名称=E:\ORACLE\ORADATA\ORCL\TS_DATA_04.DBF
输入数据文件: 文件号=00012 名称=E:\ORACLE\ORADATA\ORCL\TS_DATA_05.DBF
输入数据文件: 文件号=00013 名称=E:\ORACLE\ORADATA\ORCL\DFXTBLA_01.DBF
输入数据文件: 文件号=00014 名称=E:\ORACLE\ORADATA\ORCL\DFXIDXA_01.DBF
输入数据文件: 文件号=00015 名称=E:\ORACLE\ORADATA\ORCL\TS_DATA_06.DBF
输入数据文件: 文件号=00016 名称=E:\ORACLE\ORADATA\ORCL\TS_DATA_07.DBF
输入数据文件: 文件号=00017 名称=E:\ORACLE\ORADATA\ORCL\TS_DATA_08.DBF
输入数据文件: 文件号=00022 名称=E:\ORACLE\ORADATA\ORCL\DFXTBLA_02.DBF
输入数据文件: 文件号=00018 名称=E:\ORACLE\ORADATA\ORCL\TS_DATA_09.DBF
输入数据文件: 文件号=00003 名称=E:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF
输入数据文件: 文件号=00002 名称=E:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF
输入数据文件: 文件号=00019 名称=E:\ORACLE\ORADATA\ORCL\TS_GOLDENGATE_01.DBF
输入数据文件: 文件号=00001 名称=E:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF
输入数据文件: 文件号=00004 名称=E:\ORACLE\ORADATA\ORCL\USERS01.DBF
输入数据文件: 文件号=00021 名称=D:\ORADATAIDX_DATA01.DBF
输入数据文件: 文件号=00005 名称=E:\ORACLE\ORADATA\ORCL\EXAMPLE01.DBF
输入数据文件: 文件号=00020 名称=E:\ORACLE\ORADATA\ORCL\APPADMINISTRATORORKXBARIII_DATA.DBF
通道 ORA_DISK_1: 正在启动段 1 于 25-11月-19
通道 ORA_DISK_1: 已完成段 1 于 25-11月-19
段句柄=E:\ORACLE_BACKUP\05UHOHAH_1_1 标记=TAG20191125T111529 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:01:18:16
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
备份集内包括当前控制文件
备份集内包括当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 25-11月-19
通道 ORA_DISK_1: 已完成段 1 于 25-11月-19
段句柄=E:\ORACLE_BACKUP\06UHOLTB_1_1 标记=TAG20191125T111529 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 25-11月-19

可以看到分配的通道、要备份的数据文件、控制文件、参数文件和备份文件名。

还可以单独备份表空间和数据文件。

RMAN> backup datafile 23;

启动 backup 于 28-11月-19
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=70 设备类型=DISK
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00023 名称=E:\ORACLE\ORADATA\ORCL\TS_ONLY1.DBF
通道 ORA_DISK_1: 正在启动段 1 于 28-11月-19
通道 ORA_DISK_1: 已完成段 1 于 28-11月-19
段句柄=E:\ORACLE\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2019_11_28\O1_MF_NNNDF_TAG20191128T195316_GXZF9DLG_.BKP 标记=TAG2019
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 28-11月-19

启动 Control File and SPFILE Autobackup 于 28-11月-19
段 handle=E:\ORACLE_BACKUP\C-1464394244-20191128-05 comment=NONE
完成 Control File and SPFILE Autobackup 于 28-11月-19

2.5 还原

用备份集中的文件覆盖损坏的问题。
需要将数据库切换到mount状态下。
数据库启停操作可直接在RMAN中执行。

RMAN> shutdown immediate;

数据库已关闭
数据库已卸装
Oracle 实例已关闭

RMAN> startup mount;

已连接到目标数据库 (未启动)
Oracle 实例已启动
数据库已装载

系统全局区域总计    2137886720 字节

Fixed Size                     2177456 字节
Variable Size               1392510544 字节
Database Buffers             738197504 字节
Redo Buffers                   5001216 字节

以还原数据文件为例:

RMAN>	restore datafile 7;
启动 restore 于 28-11月-19
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=63 设备类型=DISK

通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00023 还原到 E:\ORACLE\ORADATA\ORCL\TS_ONLY1.DBF
通道 ORA_DISK_1: 正在读取备份片段 E:\ORACLE\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2019_11_28\O1_MF_NNNDF_TAG20191128T195316_GXZF9DLG_.BKP
通道 ORA_DISK_1: 段句柄 = E:\ORACLE\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2019_11_28\O1_MF_NNNDF_TAG20191128T195316_GXZF9DLG_.BKP 标记 = TAG20191128T195316
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
完成 restore 于 28-11月-19

注意:restore会自动用备份集中的文件还原,相当于数据文件的物理覆盖,前边讲数据文件里边有一致性校验的scn,很可能备份的数据文件和当前数据库的scn、其他数据文件的scn不一致。
因此需要后续的recover。

2.6 恢复

根据还原的数据文件scn,找到其后发生的归档日志和联机日志,进行实物重做。确保恢复到数据库损坏前提交的事务。

RMAN> recover datafile 23;

启动 recover 于 28-11月-19
使用通道 ORA_DISK_1

正在开始介质的恢复
介质恢复完成, 用时: 00:00:00

完成 recover 于 28-11月-19

3 总结

这是最简单的RMAN上手指南,演示了备份、还原的一个简单流程。
其中的原理需要结合Oracle原理才能理解掌握。
如归档、如scn、如怎么用scn找到恢复后要重做的那部分事务。这个得自己慢慢学习了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章