royalwzy
作者royalwzy·2017-03-30 11:15
技术经理·海通证券股份有限公司

Oracle数据库的备份与恢复—如何使用RMAN恢复目录

字数 9361阅读 3355评论 0赞 2

Objectives

1.对比使用恢复目录作为rman资料库和使用控制文件作为rman资料库的差异;
2.创建和配置恢复目录;
3.注册数据库到恢复目录中;
4.同步recovery catalog;
5.使用rman存储脚本;
6.备份recovery catalog;
7.创建一个虚拟私有目录;

RMAN Repository Data Storage Comparison of Options

1.rman的备份信息默认是存放在目标数据库的控制文件中的,存放时间由control_file_record_keep_time参数控制,默认是7天;
2.同时,也可以把rman的备份信息保存到一个独立的数据库中,叫做recovery catalog;
3.使用recovery catalog可以保存更长时间的备份信息,当目标数据库的控制文件丢失时非常有用;
4.recovery catalog可以保存多个目标数据库的备份信息,可以保存RMAN stored scripts(类似于存储过程,就是一系列rman脚本);
5.如果只是简单的备份管理需求的话,建议使用控制文件即可,因为如果使用recovery catalog的话,意味着还要对其它的数据库做备份管理,Licence费用;所以,只有在使用recovery catalog带来的好处比较大时才使用;

Storing Information in the Recovery Catalog

1.使用recovery catalog的话,在每次更新资料库操作之后和某些操作之前rman都会把数据库结构信息,归档日志,备份集信息,数据文件的镜像信息从目标数据库的控制文件中推送到recovery catalog中;
2.查看数据库结构的命令;
rman target /
RMAN> report schema;
3.查看归档日志信息;
RMAN> list archivelog all;
4.查看备份集信息;
RMAN> list backup [of database/controlfile/archivelog];
5.查看数据文件镜像信息;
RMAN> list copy [of database/controlfile/archivelog];

Reasons to User a Recovery Catalog

1.比控制文件存储更多的历史信息,控制文件中存放备份信息的空间是有限的;
2.可以使用RMAN存储脚本;
3.可以针对所有注册的目标数据库创建定制化的报表;因为连接到recovery catalog后就可以查看RC_*的视图,如果不用recovery catalog的话需要连接到每一个目标数据库分别查看相应的v$视图;
4.使用backup命令时可以使用keep forever子句;keep子句的意义在于创建一个备份单独指定过期策略,不受默认的过期策略影响,而keep forever表示备份永久不过期,所以需要使用recovery catalog来永久保存备份信息;
5.可以列出目标数据库任何给定时间的数据库结构(数据文件和表空间),report schema [at time|scn|logseq]命令,只有在使用recovery catalog时才可以使用at子句;

Creating the Recovery Catalog:Three Steps

1.配置想要存储recovery catalog的数据库;
2.创建recovery catalog的用户;
3.创建recovery catalog;

Configuring the Recovery Catalog Database

1.为Recovery Catalog分配空间,要考虑的因素有:

  • 支持的数据库的数量;
  • 归档日志文件的数量和备份信息的数量;
  • 存储的RMAN stored scripts;

2.创建表空间,用于作为Recovery Catalog拥有者的默认表空间;
CREATE TABLESPACE tbs_rc DATAFILE '/u01/app/oracle/oradata/ORCL/tbs_rc01.dbf' SIZE 50M AUTOEXTEND ON MAXSIZE 2G;

Creating the Recovery Catalog Owner

1.创建Recovery Catalog拥有者,默认表空间为刚刚创建的表空间,而且要可以无限制使用空间;
2.需要授予recovery_catalog_owner角色;
CREATE USER rman IDENTIFIED BY oracle DEFAULT TABLESPACE tbs_rc QUOTA UNLIMITED ON tbs_rc;
GRANT recovery_catalog_owner TO rman;
补充:
查看recovery_catalog_owner角色有哪些权限:SELECT * FROM dba_sys_privs WHERE grantee = 'RECOVERY_CATALOG_OWNER';
查看有recovery_catalog_owner角色的用户:SELECT * FROM dba_role_privs WHERE granted_role = 'RECOVERY_CATALOG_OWNER';

Creating the Recovery Catalog

1.使用catalog的拥有者连接数据库;
2.执行create catalog命令创建recovery catalog;
rman catalog rman/oracle@ORCL(如果当前的ORACLE_SID就是就是catalog数据库的SID,就不用使用net_service_name了)
create catalog;

Managing Target Database Records in the Recovery Catalog

1.注册目标数据库到recovery catalog中;
2.把附加的备份添加到recovery catalog中;
3.从recovery catalog中移除对目标数据库的注册;

Registering a Database in the Recovery Catalog

rman主要做以下三件事:
1.在recovery catalog表中为目标数据库添加记录;
2.拷贝目标数据库控制文件信息到recovery catalog表中;
3.同步recovery catalog与控制文件;
rman target sys/ORACLE@ORCL catalog rman/oracle@ORCL(rman target / catalog rman/oracle)
register database

Use EM to Register a Database

1.在EM->Availability->Recovery Catalog Settings页面;
2.点击[Use Recovery Catalog],然后点击[Add Recovery Catalog]来添加信息;
3.如果想要在EM中使用recovery catalog做备份还原的操作,必须使用EM的方式注册目标数据库;
4.建议不要使用EM配置,本身命令行操作起来已经非常简单;

Unregistering a Target Database from the Recovery Catalog

1.如果unregister database,则会从recovery catalog中移除目标数据库的信息,可以再重新的注册目标数据库,但是recovery catalog中只保存重新注册之后的信息;
2.只有当目标数据库不再使用recovery catalog或者目标数据库不在存在时才unregister;
rman target / catalog rman/oracle
unregister database;

Cataloging Additional Backup Files

1.CATALOG命令可以把已经存在的备份文件(但是它们的信息并不在控制文件中)添加到catalog中;
2.当使用rman做还原时可以使用到这些文件;
3.主要的备份文件类型有:

  • 控制文件拷贝;
  • 数据文件拷贝;
  • 备份片;
  • 归档日志文件;
  • 语法有:CATALOG CONTROLFILECOPY/DATAFILECOPY/BACKPIECE/ARCHIVELOG 'filename';

4.也可以把某个文件夹中的文件都注册进来:CATALOG RECOVERY AREA|DB_RECOVERY_FILE_DEST NOPROMPT;
5.start with选项:可以指定文件的前缀,然后使用通配符,把类似的文件都catalog进来;
把/tmp/bset目录和子目录下的文件都加入到catalog中:catalog start with '/tmp/bset';

Recovery Catalog Resynchronization:Concepts

1.当rman执行同步时,会比较recovery catalog中的信息和目标数据库中控制文件信息是否一致,然后更新recovery catalog中缺失或者改变的信息;
2.有两种重新同步的方式:partial和full

  • partial:比较recovery catalog和控制文件的信息,然后更新备份集,归档日志,数据文件拷贝等元数据信息;
  • full:首先创建一个控制文件快照,用于跟recovery catalog比较,然后做与partial相同的事情,然后会添加数据库结构的变化(比如schema的改变或者表空间的改变);

3.database schema包括数据文件的名称和位置,在线日志文件,归档日志文件,UNDO段和其它能在控制文件中找到的信息;
4.如果控制文件改变的信息都在control_file_record_keep_time参数指定的时间内的话,只需要做部分同步即可,否则做完全同步,手动发出resync catalog命令也可以执行完全同步;

Manually Resynchronizing the Recovery Catalog

1.当一下三种情况发生时需要手动同步recovery catalog:

  • 当执行rman命令触发部分同步时,recovery catalog不可用时;
  • 当不经常备份目标数据库从而导致recovery catalog没有自动更新在线日志切换或者在线日志归档的信息时;
  • 当目标数据库的物理结构发生变化时;

2.执行命令;
resync catalog;

Using RMAN Stored Scripts

1.是可选的命令文件,主要是用来管理那些经常使用的rman命令脚本;
2.对于能够连接到目标数据库和recovery catalog的任何rman客户端都可用;
3.有两种类型:

  • local:关联到创建脚本时连接的目标数据库,只能在这个目标数据库中使用;
  • global:可以被任何注册到recovery catalog中的数据库使用;

4.可以从一个文本文件中创建:CREATE [GLOBAL] SCRIPT script_name FROM 'file_name';
(1)创建一个局部脚本;
rman target sys/ORACLE@ORCL catalog rman/oracle@ORCL
CREATE SCRIPT backup_tbs_users
COMMENT "backup users tablespace"
{

BACKUP TABLESPACE USERS;

}
(2)创建一个全局的脚本;
rman target sys/ORACLE@ORCL catalog rman/oracle@ORCL
CREATE GLOBAL SCRIPT backup_whole
COMMENT "backup whole database and archived redo log files"
{

CONFIGURE CONTROLFILE AUTOBACKUP ON;
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK;
ALLOCATE CHANNEL ch2 DEVICE TYPE DISK;
ALLOCATE CHANNEL ch3 DEVICE TYPE DISK;
BACKUP INCREMENTAL LEVEL 0 TAG backup_whole DATABASE PLUS ARCHIVELOG;

}

Executing RMAN Stored Scripts

1.执行局部的脚本:run{execute script script_name;};
2.执行全局的脚本:run{execute global script script_name;};
3.execute script命令必须在run块中执行;如果脚本中的命令失败,则接下来的命令不再执行;执行脚本时默认使用的是自动分配channels,可以通过allocate channel命令手动分配;

Maintaining RMAN Stored Scripts

1.显示脚本:PRINT [GLOBAL] SCRIPT script_name;
print script backup_tbs_users;
print script backup_whole;
2.把脚本内容转存到文件中:PRINT [GLOBAL] SCRIPT script_name TO FILE 'file_name';
print script backup_tbs_users to file '/tmp/backup_tbs_users.rc';
print script backup_whole to file '/tmp/backup_whole.rc';
3.列出所有的脚本名称:LIST [GLOBAL] SCRIPT NAMES;
list script names;
4.更新脚本:REPLACE [GLOBAL] SCRIPT script_name{ <RMAN commands> ; }
5.删除脚本:DELETE SCRIPT script_name;
补充:相关的视图
SELECT * FROM rman.rc_stored_script;
SELECT * FROM rman.rc_stored_script_line ORDER BY script_name, line;

Backing Up the Recovery Catalog

1.首先要明确的是:recover catalog也是Oracle数据库,所以它也需要像其它数据库一样备份;备份Oracle数据库,肯定推荐使用rman;
2.配置recovery catalog数据库的备份恢复环境的建议:

  • 要运行在ARCHIVELOG模式下;
  • 设置冗余策略大于1:CONFIGURE RETENTION POLICY TO REDUNDANCY n;
  • 备份数据到磁盘或者磁带上;
  • 每次备份数据库都要加上归档日志文件:backup database plus archivelog;
  • 使用控制文件作为rman的资料库,而不是再使用另外的recovery catalog;
  • 配置控制文件自动备份:CONFIGURE CONTROLFILE AUTOBACKUP ON

Re-Creating an Unrecoverable Recovery Catalog

如果recovery catalog数据库丢失或者损坏的话,而且使用常规的办法无法恢复时就需要重建catalog,然后执行以下两种命令:
1.resync catalog命令:从目标数据库的控制文件或者控制文件拷贝来更新recovery catalog中rman资料库;
2.catalog start with命令:把合法的备份文件加入到catalog中;

Exporting and Importing the Recovery Catalog

1.主要是通过exp/imp工具或者expdp/impdp工具做数据的导出导入;
2.移动recovery catalog从一个数据库到其它的数据库,导入之后不需要再执行create catalog命令,导入过程中自动创建;
3.也可以作为一个逻辑备份;
tips:也可以使用可传输表空间的方式导入导出recovery catalog;

Upgrading and Dropping the Recovery Catalog

1.如果recovery catalog的版本低于rman客户端的版本,就需要升级catalog:upgrade catalog;
2.要删除recovery catalog的话使用命令:drop catalog;

IMPORT CATALOG Command

1.连接到目标recovery catalog:;
2.命令解释(查看帮助文档):IMPORT CATALOG <connectStringSpec> [DBID = <dbid> [, <dbid>,…]] [DB_NAME=<dbname>[, <dbname,…]] [ NO UNREGISTER ];

  • connectStringSpec:源recovery catalog的连接串,如果不指定其它选项的话表示导入所有已注册的数据库的元信息:import catalog rman/oracle@orcl;
  • DBID:指定需要导入的的数据库的DBID列表,如果要导入的数据库已经在目的数据库中注册的话,则会报错;
  • DB_NAME:跟DBID相同,如果数据库名称重复的话,则报错;
  • NO UNREGISTER:默认情况下,从源recovery catalog导入到目的recovery catalog后,数据库会自动的从源recovery catalog中unregister掉,如果使用此选项,则保留在源catalog中的信息

3.可以从不同的catalog中导入元信息;

Creating and Using Virtual Private Catalogs(VPC)

1.如果在生产环境中,多台数据库需要多个人维护,但是给每台数据库都独立使用一个catalog数据库又太浪费,它们的元信息存放在一个catalog中,基于安全的考虑,每个维护人员只能看到自己所维护数据库的元信息,这就是VPC的作用;
2.就需要两个角色:

  • catalog owner:之前提到的,它是标准catalog的拥有者,具有recovery_catalog_owner角色;可以看到所有注册的目标数据库;
  • virtual catalog owner:也具有recovery_catalog_owner角色,并由catalog owner用户被授予REGISTER DATABASE权限;只能连接到特定的目标数据库和注册目标数据库;
  • 查看自己管理的数据库:SELECT DISTINCT db_name FROM DBINC;
    3.配置VPC的目的就是让VPC的拥有者使用VPC就跟使用标准的catalog一样

Using RMAN Virtual Private Catalogs

1.创建标准的catalog; -- 已经创建了;
rman catalog rman/oracle@ORCL
create catalog;

2.创建vpc用户并授权;
sqlplus / as sysdba
CREATE USER vpc1 IDENTIFIED BY oracle DEFAULT TABLESPACE tbs_rc QUOTA UNLIMITED ON tbs_rc;
CREATE USER vpc2 IDENTIFIED BY oracle DEFAULT TABLESPACE tbs_rc QUOTA UNLIMITED ON tbs_rc;
GRANT recovery_catalog_owner TO vpc1,vpc2; -- 此时它们虽然有recovery_catalog_owner角色,但是看不到注册的数据库;
查看vpc用户;SELECT * FROM rman.vpc_users;

3a.授予vpc1用户REGISTER DATABASE权限,则vpc1就可以注册新的目标数据库到VPC中;
rman catalog rman/oracle@ORCL
grant register database to vpc1;
稍后使用vpc1用户创建VPC然后注册数据库;

3b.直接把某个数据库的catalog权限授予vpc2,这样它就可以直接管理这个数据库;
rman catalog rman/oracle@ORCL
grant catalog for database orcl to vpc2;
查看vpc2用户管理的数据库信息:SELECT * FROM rman.vpc_databases;

4a.11g中客户端创建VPC;
rman catalog vpc1/oracle@ORCL
create virtual catalog;
rman catalog vpc2/oracle@ORCL
create virtual catalog;

4b.11g版本之前客户端创建VPC的方法,了解一下;
exec catowner.dbms_rcvcat.create_virtual_catalog;

5.测试:
查看vpc1管理的数据库信息;
conn vpc1/oracle
SELECT DISTINCT db_name FROM DBINC; -- 无记录;
查看vpc2管理的数据库信息;
conn vpc1/oracle
SELECT DISTINCT db_name FROM DBINC; -- ORCL数据库;
查看vpc1注册数据库;
rman target / catalog vpc1/oracle@ORCL
register database; -- 提示可以注册;
查看vpc2注册数据库;
rman target / catalog vpc2/oracle@ORCL
register database; -- 提示无权限;

6.使用;
rman target / catalog vpc2/oracle@ORCL
backup tablespace users

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广