RMAN 系列(一)---- RMAN 体系结构概述


一. 服务器管理恢复

恢复管理器, Recovery Manager, 简陈 RMAN。 RMAN 实现一直服务器管理恢复(Server Managed Recovery: SMR)。 SMR 是一种数据库执行所需要的操作以确保自身备份成功的能力,依赖于Oracle RDBMS 内核中的内置代码可以完成这一功能。 SMR 的功能主要体现在能够减少用户的操作。

二. RMAN 使用程序

RMAN SMR的具体实现,它是Oracle 提供的,RMAN 是一个独立的应用程序,它负责建立到Oracle 数据库的客户端连接,以访问数据库内部的备份和恢复数据包。RMAN 的核心命令是解释程序,命令解释程序接受所输入的命令,并将这些命令转换为在数据库上执行的远程调用(Remote Procedure call: RPC.

要强调的事,RMAN 只是做少量的工作。虽然时间的协调非常重要,但是备份和恢复一个数据库的具体工作实际上是由目标数据库上的进程完成的,目标数据库(target database)指的是要备份的数据库。Oracle 数据库的内部数据包可以将RMAN 中的PL/SQL 块变成系统调用,这些调用即可以写入数据库服务器的磁盘系统,也可以读取数据库服务器的磁盘子系统。

RMAN 实用程序是Database Utilities的一部分Database Utilities是一组命令行形式的使用程序,包括Importexportsql*loader和 dbverify。 典型的安装Oracle 时会自动安装RMANRMAN 分企业版和标准版2种,如果只能使用标准版的RMAN,那么RMAN 就只能分配一个通道。

RMAN 实用由两部分组成,可执行文件和recover.bsq 文件。 Recover.bsq 文件实质上是库文件可执行文件从recover.bsq 文件中析取代码来创建在目标数据库上执行的PL/SQL 调用Recover.bsq 文件是整个操作的中枢。这个文件始终保持链接,并在逻辑上构成RMAN 客户端使用程序。要注意的是: recover.bsq 文件和 可执行文件的版本必须是相同,否则不能正常工作。

RMAN 实用程序有一种独特的,有序的,可预测的用法:解释在目标数据库上远程执行的PL/SQL 调用中的命令。 RMAN 实用程序完成了我们需要做的所有备份,还原,恢复和处理备份工作。由可执行解释程序负责解释这些程序命令,并基于用户的请求收集信息。 如果要求I/O 操作(即一条备份命令或一条还原命令),RMAN 会在返回信息时准备另一个过程块,并将这个过程块传递回目标数据库。这些过程负责执行OS的系统调用以进行指定的读或写操作。

RMAN 与数据库权限

RMAN 需要访问目标数据库上sys模式中存在的各种数据包,还需要具有启动和关闭目标数据库的权限。 因此RMAN 通常以sysdba 用户身份连接到目标数据库。 如果以不具有sysdba 权限的用户连接到目标数据库,RMAN 会报ORA-01031: insufficient privileges 错误。 

在一般情况下,大多数Unix 系统中都有一个Oracle 用户,它是dba组的一个成员。 这是最初安装Oracle 软件的用户,如果以Oracle 用户登录,在RMAN 中以什么身份连接就变的不重要,它将总是作为sysdba 互用来连接目标数据库,并且能够访问sys 模式,同时也具有启动和关闭数据库的能力。 在windows 平台上,Oracle 会创建一个ORA_DBA本地组,并将安装Oracle 软件的用户添加到这个本地组中。

如果作为dba组成员之外的用户登录并需要使用RMAN,就必须创建和使用一个口令文件来连接来连接到目标数据库。如果要使用一个客户系统通过网络来连接RMAN,也需要创建和使用一个口令文件。

三. RMAN 备份的网络拓扑结构

RMAN 是一个客户端应用程序,它通过Oracle net 连接来与目标数据库连接。 如果目标数据库位于ORACLE_HOME 主目录中,运行同样位于这个主目录中的RMAN 可执行文件,ORACLE net连接就会是一个本地连接。  只要在Oracle 环境中设置了合适的ORACLE_SID 变量,就不需要为这个连接提供一个Oracle net 别名。 否则,我们必须配置tnsnames.ora 文件,在文件中指定目标数据库,并且在将要运行RMAN的位置上完成这个操作。 

一般倾向与在目标数据库的ORACLE_HOME 中运行rman, 这是避免在混合环境中出现兼容性问题的最简单和最直观的方法。 我们需要在这种混合环境中负责跨越多个Oracle 数据库和版本的备份。也可以使用OEM 来处理。

3.1 远程运行RMAN

如果你负责管理许多数据库。最好在单个客户端系统上将应用程序合并,这样就可以在这个客户端系统上更好的管理tnsnames.ora 文件内容。如果在RMAN 配置中使用了恢复目录(recovery catalog),由于每次操作RMAN时都会生成一个以上的Oracle net 连接,所以这样的客户端服务端模型不会让人混淆。另一方面,运行与目标数据库不同系统(或者是不同ORACLE_HOME主目录)上的RMAN时,我们需要建立一个口令文件,这样在每个目标数据库上都需要更过的配置和管理。

恢复目录: 用于存储RMAN 备份的历史记录,它含有有关备份发生时间,备份内容和备份大小的元数据。 历史记录中还含有恢复备份所需的关键信息。 元数据是从默认位置(目标数据库控制文件)析取的,并保留在用户模式的数据库表内。

如果要建立一个RMAN 和 目标数据库之间的远程连接,需要创建一个使用专用服务器进程连接到目标数据库的tnsnames.ora 条目。 因为RMAN 不能使用共享服务器(通常称多线程服务器或者MTS)来建立数据库连接。 

MYICD =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = DavidDai)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = myicd)

    )

  )

3.2 在目标数据库的ORACLE_HOME 中运行本地RMAN

从每个目标数据库中本地运行RMAN 实际上是管理具有数百或者上千 数据库目标的大型企业的唯一方法。 因为RMAN一直具有兼容性问题,将rman.exe 与目标数据库紧密绑定可在长期运行中节省时间。虽然这种方式部署RMAN 备份存在一些缺陷,但这也是最佳方式.

 本地运行RMAN意味着只需要本地连接数据库,而不需要建立口令文件和配置tnsnames.ora 文件。但这种简易性也正是它的缺陷。因为一旦引入恢复目录或者执行数据库复制操作,就会雨打我们之前的问题。

四. 数据库控制文件

控制文件平常的作用是负责数据库的物理结构,控制文件控制数据库查找物理文件的位置,并控制每个文件当前包含(或应当包含)的头信息,其内容包括数据文件信息,重做日志信息和归档文件信息。 控制文件还含有与数据库关联的关键文件的每一个文件头的快照(snapshot)。 

由于控制文件存储的是数据库文件信息,所以RMAN 会利用控制文件获取备份所需的信息,具体的操作方式是: RMAN 使用控制文件来编译文件列表,得到检查点信息,并确定可恢复性。通过直接访问控制文件,RMAN可以编译文件列表而不需要用户创建文件列表,这样避免了备份脚本时的一个非常繁琐的步骤,并且在添加一个新文件时不需要更改这个脚本。控制文件会存储新文件的信息,因此RMAN也能从控制文件中得到这个信息。

控制文件还能用作RMAN 目录。RMAN完成数据库任何部分的备份后,会在控制文件中添加该备份的记录,以及说明备份开始和结束时间的检查点。这也是从Oracle 7 Oracle 8 版本控制文件大小呈指数增长的一个主要原因:控制文件中存在RMAN记录。控制文件中的这些记录通常成为元数据,它和实际备份中记录的数据有 ,它也可以存储在恢复目录中。

4.1 在控制文件中重用记录

控制文件将内部数据记录分为两类: 循环重用记录 和 非循环重用记录。 循环重用记录包含可以从控制文件中删除的信息。如: 归档日志历史信息可以被删除,并且不会影响产品数据库。  非循环重用记录是哪些不能被删除的记录,如果控制文件因这类记录而空间不足,则会删除这些记录以得到更多的空间。 非循环重用记录包括 数据文件列表 和日志文件列表。

控制文件中的RMAN 备份记录属于循环重用记录类型,如果含有这些记录的控制文件区域已满,这些记录就会删除。这会给恢复带来灾难,致使控制文件中不存在任何备份记录,就好像从未发生过备份一样。一定要注意的一点: 如果控制文件不含有任何RMAN 备份记录,RMAN 就不能使用备份来执行恢复操作。

删除记录指发生在控制文件空间已经满的情况下,因此被删除的备份肯定是非常陈旧的。 我门还可以设置更大的时间帧(time frame) 来决定控制文件删除记录的时间Init.ora 文件中的CONTROLFILE_RECORD_KEEP_TIME 参数控制删除时间,默认值是7.既报错7天。可以设置成更大的参数值,如30天。 这些就会京城扩展控制文件,且只有当记录保留时间超过一个月时才会重写这些记录。 一般将该参数设为较大比较好。 如果参数设为0,将不会发生重用记录,相应地控制文件将不断扩展至无法管理。当然不推荐这么设置。

此外,如果要实现一个恢复目录,就不必担心会循环重用记录。因为只要在CONTROLFILE_RECORD_KEEP_TIME 

参数指定的时间内至少实现一次恢复目录同步,那么这些记录将随着时间的推移被删除-- 恢复目录则从不会删除记录。

重新构建控制文件

通常某些条件下需要重新构建数据库控制文件,如重新设置MAXLOGFILES 参数或者MAXLOGHISTORY参数。由于某些参数定义了保存非循环重用记录的内部控制文件表的大小,所有只有在重新构建控制文件时才能设置这些参数。如果需要更大的内部控制文件,就必须重新构建控制文件。

如果使用RMAN 而不使用恢复目录,就必须重视控制文件的重新构建。执行:

Alter database backup controlfile to trace;

生成的脚本不包含控制文件中标识备份的信息。如果不存在备份记录,就不能在使用这些备份恢复时访问它们,此时所有的RMAN 信息丢失并且无法恢复。在重新构建控制文件时,只有那些RMAN设置的永久配置参数才被重新构建。 在Oracle 10g有一些新的控制用于生成控制文件中的有限备份元数据,但仍然需要许多手工操作,并且无法完全生成所有的元数据。因此建议要避免重新构建控制文件。

如果将控制文件备份为一个二进制文件而不是一个跟踪文件,所有备份信息都将被保留。 该命令类似于:

Alter database backup controlfile to '/u01/backup/bkup_cfile.ctl';

4.2 快照控制文件

控制文件是一个非常繁忙的文件,它存储数据库的结构信息,这些信息包括用于恢复的检查点SCN信息。连续的SCN 和文件管理对于数据库的生命期来说至关重要,因此RDBMS 必须能够持续的使用控制文件。

这样就会为RMAN带来一个问题。RMAN 开始备份每一个数据文件时需要得到一个一致的控制文件视图,此时RMAN 只需要知道备份开始时最新的检查点信息和文件就够信息。开始备份后,RMAN 需要这些信息在备份操作期间保持一致,也就是说RMAN需要一个读取一致的控制文件视图。除非RMAN 在备份持续时间内锁定控制文件,否则数据库会不断更新控制文件,所以不可能。 但是,锁定控制文件意味着数据库不能执行检查点操作和切换日志,或则不能产生新的归档日志,这些操作是不可能的。

RMAN 使用快照控制文件(snapshot controlfile)来解决前面提出的问题,快照控制文件是控制文件的副本。 RMAN 只在备份和同步操作期间使用快照控制文件。 这些操作开始时,RMAN 会根据实际控制文件来刷新快照控制文件,这样会短暂的锁住控制文件,随后,RMAN 会切换到快照并在备份持续使用这个快照。 这种方式具有读取一致性,且不妨碍数据库活动。

在默认情况下,快照控制文件位于UNIX 平台上的ORACLE_HOME/dbs 目录中,或者是在windows ORACLE_HOME/database 目录下。 快照控制文件的默认名为SNCF<SID>.ORA。 使用configure snapshot controlfile命令可以在任何时候更改快照控制文件名:

Configure snapshot controlfile name to 'location/file_name';

  • 1
  • 2
  • 3
  • 下一页

相关内容