12.服务器管理恢复--RMAN配置(练习19)
恢复管理器(Recovery Manager,RMAN)是Oracle的一个工具,该工具用来备份、还原以及恢复Oracle数据库,自从 Oracle8.0版本引入RMAN改变了DBA手工备份、恢复数据库的方法。RMAN是一个将用户命令解释为PL/SQL命令行的解释器,通过解释这些PL/SQL命令进行数据库的备份、还原以及恢复操作。RMAN称之为服务器管理的恢复是因为它负责处理绝大多数备份、还原以及恢复的工作。
在本练习之前,首先介绍RMAN的体系结构以及各组件之间如何交换:
- RMAN执行体:用于备份、还原和恢复数据库的命令工具。该程序在安装Oracle服务器时自动安装,并可以从数据库备份的服务器上进行调用或者被其他服务器调用;
- Recover.bsp:组成RMAN执行体的一个独立文件,该文件驻留在$ORACLE_HOME/rdbms/admin目录下,该目录必须对RMAN可见,该文件包含了结构信息及其他RMAN使用的数据;
- 目标数据库:被备份、还原或恢复数据库;
- 目标数据库控制文件:被备份、还原或恢复数据库的控制文件,只要在数据库上进行RMAN备份,备份的信息都要保存在目标数据库控制文件中;
- 通道:允许RMAN执行体从目标数据库向备份介质传送数据的通信信道。当通道打开时,就创建一个到服务器的服务会话进程,然后在执行RMAN命令时,利用该通道处理数据库向内、向外的数据传输;
- 恢复目录:存储在其他数据(非目标数据库)包含RMAN信息的集合。
以下特性是RMAN在处理备份和恢复方面比前面讲述的用户管理技术更合适:
- 自动备份、还原与恢复:由增加数据文件、增加表控件或创建更多的归档日志文件等引起物理数据结构的变化, RMAN将自动备份最新生成的结构。每次备份数据库时,RMAN都要读取控制文件以确保备份正确的结构内容(数据文件、控制文件和归档日志文件);
- 自动备份记录:RMAN自动将每次备份都记录在目标数据库控制文件和可选的恢复目录中,即RMAN知道哪个备份需要还原以及在恢复时需要哪些日志文件,可以减轻DBA保留备份记录的负担;
- 增量备份:用户管理备份数据文件,整个文件都必须拷贝到其他位置上,即数据库占用200G的磁盘空间则数据库备份也需要占用200G的空间。由RMAN提供的增量备份可以值备份使用的数据块或者只备份上次增量备份以来改变的数据块,这样可以减少备份的数量并提供恢复的性能;
- 损坏检查:RMAN可以在备份期间检查每个数据块的损坏类型(介质损坏、校验非法以及逻辑结构损坏),该损坏检查也可以在恢复过程中执行。任何在备份期间发生的损坏块都在目标数据块的alert.log给出报告,而且也可以在目标数据库的V$BACKUP_CORRUPTION和V$COPY_CORRUPTION视图中找到;
- 智能的打开数据库备份:在打开数据库备份期间,RMAN不需要设置每个表空间为热备份模式,因此打开数据库备份不需要类似用户管理打开数据库备份那样增加重做生成的数量,这样RMAN打开数据库备份速度比较快,而且不需要额外的重做动作;
- 性能调整提高:RMAN允许调整备份、还原和恢复操作的性能,可以并行方式操作数据库、服用读写磁带或磁盘设备、限制备份文件的读取速度等方式减少I/O系统的工作;
- 简易的归档日志备份:与数据库文件类似,归档重做日志文件可以通过RMAN轻松备份,没有必要手工生成一系列备份所需要的归档日志文件,然后又删除—RMAN能够轻松完成这一切工作;
对于DBA保护Oracle数据库是首要的任务,经常进行备份操作已经成为习惯。使用用户管理恢复,必须了解备份存储在什么位置以及备份包含的内容,当需要恢复数据时,DBA必须迅速找到并还原正确的备份、找到恢复所需要的归档日志文件。而使用服务器管理恢复的最大有点就是,备份的记录存放在控制文件或可选的恢复目录中,因此在还原与恢复过程中,只要掌握了正确的RMAN命令,RMAN就能够将这些命令解释执行为一系列数据库恢复所需要的数据文件和归档日志文件。
既然所有的RMAN信息都存储在目标数据库的日志文件,那为什么还要额外努力维护RMAN的目录呢?下表罗列了应用RMAN目录的优点:
只有目标控制文件 |
目标控制文件与目录 |
如果所有的目标数据库控制文件都丢失,可以恢复但非常困难 |
所有控制的目标数据库控制文件都丢失了,则只需要几个简单命令就可以恢复,最新的目录包含了控制文件备份的位置 |
控制文件包含了备份信息的时间控制量 |
目录包含了所有RMAN备份操作的无限制历史记录 |
控制文件只保留了当前数据库结构模式信息,例如,控制文件只知道数据库文件的名称以及所在的表空间 |
目录存储了所有模式信息并随着目标日志文件信息的更新而更新,因此可以报告任务以前存在的结构模式 |
RMAN命令可以在 RMAN提示符下或通过脚本运行 |
RMAN命令可以在 RMAN提示符或者存储脚本运行 |
没有目录的情况,目标控制文件备份必须发生在每次RMAN备份之后,同样DBA必须保留详细的控制文件备份的路径和细节 |
目录包括了所有类似于包含在目标控制文件中的关于备份需要的信息,因此,目录提供了一个备份记录保存功能并且可以用于从RMAN备份还原控制文件 |
目标数据库控制文件在某个极大日期范围内存储值得保留的备份与归档日志信息,而这一范围由init.ora文件中 CONTROL_FILE_RECORD_TIME参数确定,默认情况下该参数设定为7天,即在第8天时最陈旧的信息(从第1天开始)可以覆盖。
恢复管理目录包含了关于数据库的信息(表空间、数据文件以及日志文件等),这些信息都是从目标的控制文件中拷贝的。RMAN使用目录信息来执行备份、还原、恢复以及维护操作,例如目录存储了所有目标数据文件和归档日志文件的文件名以及位置。RMAN提供报告机制,这样就可以查询目录浏览关于RMAN在目标数据库上执行备份的信息,目录可以有选择性地包含成组的RMAN命令,即存储脚本。
当使用RMAN部署一个恢复目录时,应该注意如下事项:
- 将目录保存在与注册在其中任何一个目标数据库都不同的数据库和机器上,也可以使用产品数据库作为其他产品数据库的目录数据库,反之亦然。例如,可以在数据库PRD1上成成一个目录以管理PRD2动作,而在PRD2生成一个目录来管理PRD1的RMAN动作;
- 为避免在不同目标数据库版本上使用不同RMAN版本而引起的升级和兼容性问题,应该为每一个准备使用RMAN的 Oracle数据库版本应用一个独立的目录所有者,为每个需要备份的不同版本的数据库创建不同的用户模式。对于一个 10.1.0数据库,创建一个名称为rman1010的模式并使用10.1.0创建一个目录,当备份10.1.0数据库时,应该使用 10.1.0RMAN执行体;而对于一个10.2.1数据库创建一个名称为RMAN1021模式并使用创建目录命令创建一个10.2.1恢复目录,对于该备份,应该使用10.2.1的RMAN执行体。一个RMAN目录可以管理多个目标数据库,需要注意,Oracle确实支持一个版本的目录保存多个版本的目标数据库,例如,可以创建一个10.2.1目录并保存来自10.1.0、10.2.0、10.2.1版本数据库的备份。通过为每个版本建立一个目录用户,可以避免必须进行的繁琐的配置步骤以便RMAN可以在旧版本的数据库上工作;
- 应该确保备份目录数据库或至少目录数据库中的任何目录用户安全,在恢复目录中包含的信息对于数据库备份至关重要。
练习19:创建恢复管理器目录
本章练习讲述如何创建一个恢复管理器目录,并在新创建的目录中注册PRACTICE数据库,一旦完成这些任务,就可以在RMAN命令和SQL*PLUS查询语句来分析该目录。
步骤一:准备目录数据库
回顾第2练习中我们为RMAN目录创建了一个名为RCAT的数据库,在实际情况中,保存恢复目录的数据库应该保存在于目录中注册的任何一个数据库都不同的服务器上。当创建一个目录用户时,需要表、索引、视图以及PL/SQL对象等的存储控件,尽管目录模式可以在任何表空间上创建,但最好在RCAT数据库中创建一个独立的表空间。
将目录存放在独立的表空间中,可以迁移目录空间,导出它并从其他表空间分别备份,下一步用SQL语句创建一个包含目录模式的用户:
2 SQL>CREATE USER rman1010 IDENTIFIED BY rman
3 TEMPORARY TABLESPACE temp
4 DEFAULT TABLESPACE cattbs
5 QUOTA UNLIMITED ON cattbs;
6 SQL>GRANT connect, recovery_catalog_owner to rman1010;
![](https://images.cnblogs.com/cnblogs_com/shishanyuan/OracleRMAN/Configuration/image004.jpg)
RECOVERY_CATALOG_OWNERE是一个特殊的角色,应该只看做恢复目录的所有者,该角色间接地向被选择的用户赋予许多系统特权,该用户必须在恢复管理器创建目录之前就存在。
步骤二:创建恢复管理器目录
在创建该目录之前,首先介绍几个从操作系统提示符下运行RMAN时的命令行选项,输入rman可以启动RMAN,当执行RMAN时可以增加命令行参数,下表列举了一些有用的命令行参数:
命令行参数 |
描 述 |
target |
为目标数据库定义一个连接字符串,当连接到一个目标数据库时,该连接是SYSDBA连接。应用户拥有启动和关闭数据库的权利,必须属于OS DBA组,必须建立一个口令文件允许SYSDBA连接 |
Catalog |
为一个恢复目录用户管理的一个连接字符串,当连接到一个目标数据库时,该连接不是一个SYSDBA连接 |
Nocatalog |
特殊用法,RMAN将不应用恢复目录,该参数与catalog参数互斥 |
Log/msglog |
定义包含RMAN输出信息的文件的字符串、Log参数只能特别运行在命令行中,不能在RMAN中启动spooling,而在SQL*PLUS的spool命令可以执行,当应用日志时,输出的信息不再屏幕上显示 |
trace |
类似log/msglog参数,将产生一个显示RMAN输出信息的文件,使用trace能在屏幕上显示信息 |
Append |
特殊用户,如果消息日志文件存在则将消息追加到该文件中,该参数经常和log参数联合使用 |
当在命令行中向RMAN传送参数时,参数值可以是引号的字符串或者是没有引号的字符串。例如,当通过命令行定义数据库时,下面每个命令都是一样的:
2 SQL>rman target 'system/system@practice' #enclosed in '
3 SQL>rman target "system/system@practice" #enclosed in quotes
4 SQL>rman
5 RMAN>connect target system/system@practice
在RMAN提示符下创建一个目录:
2 RMAN>connect catalog rman1010/rman@rcat
3 RMAN>CREATE CATALOG TABLESPACE cattbs;
![](https://images.cnblogs.com/cnblogs_com/shishanyuan/OracleRMAN/Configuration/image006.jpg)
在创建过程中,将创建表、索引、视图和PL/SQL包来存储目标数据库的元数据,以一个目录所有者身份通过 SQL*Plus连接可以查询这些对象的列表
2 SQL>CONNECT rman1010/rman@rcat
3 SQL>SELECT object_name, object_type FROM user_objects;
![](https://images.cnblogs.com/cnblogs_com/shishanyuan/OracleRMAN/Configuration/image008.jpg)
步骤三:注册PRACTICE数据库
在RMAN可以对一个有目录的数据库操作之前,必须在该目录中注册该目标数据库,在注册期间RMAN从目标数据库的控制文件得到目标数据库结构信息并组装目录的表,例如数据库ID、数据库名称、表控件、数据文件、重做日志文件以及归档日志文件等都保存在目录中。
当注册PRACTICE数据库时,将要在同样的RMAN会话中连接到目录数据库和目标数据库,可以在RMAN提示符下应用连接命令建立这些连接,然后在目录中注册连接的数据库:
2 RMAN>connect catalog rman1010/rman@rcat
3 RMAN>connect target sys/system@practice
4 RMAN>register database;
![](https://images.cnblogs.com/cnblogs_com/shishanyuan/OracleRMAN/Configuration/image010.jpg)
完成注册后,rman1010目录用户将包括备份PRACTICE数据库所需的所有PRACTICE数据的信息。
在RMAN提示符下,执行两个命令可以可以提供有关当前目标数据库状态的信息,可以用LIST INCARNATION命令查看已经注册的数据库。如果多个数据库在该目录中注册,则下面的命令将显示所有这些数据库:
![](https://images.cnblogs.com/cnblogs_com/shishanyuan/OracleRMAN/Configuration/image012.jpg)
使用REPORT命令可以查找当前存储在目录中的PRACTICE数据库的注册信息。
![](https://images.cnblogs.com/cnblogs_com/shishanyuan/OracleRMAN/Configuration/image014.jpg)
如果得到类似上面的PRACTICE数据库,则表明已经成功将PRACTICE数据库注册到RCAT数据库的目录中了。
步骤四:为目录再同步控制文件
当将RMAN应用到恢复目录时,必须保持目录信息与目标数据库控制文件的同步,RMAN使用两种类型的同步方式:全部和部分。
- 全部再同步将以控制文件中左右已经改变的非重用的记录来更新目录,非重用记录包括数据文件、表空间以及联机重做日志文件;
- 部分再将用控制文件中的重用记录来更新目录,重用记录包括日志历史、归档日志信息以及任何RMAN备份记录。
可以用RESYNC CATALOG命令重新通过控制文件,为了进行全部再同步,RMAN将提取当前目标控制文件的一个快照拷贝。该快照控制文件确保控制文件的信息在目录更新时没有改变。该快照控制文件命名为SNCF%ORACLE_HOME%.ORA (SNCFPRACTICE.ORA是PRACTICE对应的名称),位于%ORACLE_HOME%/database下,可以使用那个如下命令在下次再同步时将该文件转移到其他目录下:
2 RMAN>connect catalog rman1010/rman@rcat
3 RMAN>connect target sys/system@practice
4 RMAN> set snapshot controlfile name to 'D:\oracle\PRACTICE\snap_PRACTICE.ctl';
5 RMAN> resync catalog;
![](https://images.cnblogs.com/cnblogs_com/shishanyuan/OracleRMAN/Configuration/image016.jpg)
![](https://images.cnblogs.com/cnblogs_com/shishanyuan/OracleRMAN/Configuration/image018.jpg)
该resync命令是一个再同步的实例,一些RMAN操作会自动为目录同步数据库控制文件,RMAN将检测是需要再同步还是部分再同步。如果只需要部分再同步,就不应用快照控制文件,也可以应用RESNC CATALOG命令,在这个命令中,目录表将使用全部再同步的机制更新最新的控制文件信息。能触发目录部分或全部再同步的命令包括BackUp、Copy、Crosscheck 、List、Report、Delete Expired Backup Set、Dulicate、Restore、Recover和Switch。
为了解释控制文件与目录的同步,再打开一个命令提示并执行以下命令,重新命名一个数据文件(当完成这个测试后,可以再将该数据文件的名称复原):
2 SQL>ALTER DATABASE DATAFILE 7 OFFLINE;
3 SQL>host move D:\oracle\PRACTICE\TS4DROP01.DBF D:\oracle\PRACTICE\TS4DROP1.DBF;
4 SQL>ALTER DATABASE RENAME FILE 'D:\oracle\PRACTICE\TS4DROP01.DBF' TO 'D:\oracle\PRACTICE\TS4DROP1.DBF';
5 SQL>ALTER DATABASE DATAFILE 7 ONLINE;
![](https://images.cnblogs.com/cnblogs_com/shishanyuan/OracleRMAN/Configuration/image020.jpg)
(在设置TS4DROP01数据文件为脱机时,修改其名称为TS4DROP1)
PRACTICE数据库的控制文件知道TS4DROP表控件数据文件的真实位置,但目录并不知道准确的位置。当在RMAN提示符下运行report模式时,将会执行全部再同步。在report命令运行之前,RMAN自动执行目录的再同步:
![](https://images.cnblogs.com/cnblogs_com/shishanyuan/OracleRMAN/Configuration/image022.jpg)
步骤五:备份目录用户
要保护Oracle数据库还应该保护目录数据库的内容,可以通过用户管理或者服务器管理方法备份整个目录数据库,还可以经常导出目录用户,使用导出参数文件如下:
2 FILE = D:\oracle\CODE\chap12 \export_user_rman1010.dmp
3 LOG = D:\oracle\CODE\chap12 \export_user_rman1010.log
4 OWNER = rman1010
该应用参数文件执行导出时,可以创建一个二进制导出文件以便后来用于还原恢复目录。
![](https://images.cnblogs.com/cnblogs_com/shishanyuan/OracleRMAN/Configuration/image024.jpg)