Oracle RMAN的catalog并非指标备份恢复操做的一个必要组件,但oracle推荐使用该组件。启用以后,归档日志、备份集、镜像复制等备份信息的保存地点是RMAN资料库(catalog),sql
记录了全部的在DISK及SBT设备上的各类备份的详细信息,rman的catalog是一个逻辑概念,物理保存点能够在两个不一样的地方,目标数据库的控制文件中及catalog中,数据库
控制文件在默认状况下无须配置就能够保存rman资料库,而catalog须要建立、配置后才可使用。服务器
SYS@ orcl >show parameter control_file_record_keep_time NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_file_record_keep_time integer 7
默认状况下,控制文件可以保存多少短时间性信息受制与参数control_file_record_keep_timeoracle
是控制文件必须将归档日志、备份集合镜像复制等保存在rman资料库中的短时间性信息至少保留7天,控制文件自动增加app
SYS@ orcl >select type,records_total,records_used from v$controlfile_record_section where type='ARCHIVED LOG'; TYPE RECORDS_TOTAL RECORDS_USED ---------------------------- ------------- ------------ ARCHIVED LOG 308 200
RECORDS_TOTAL为308,说明如今控制文件中只可以保存308个归档日志的归档日志记录槽。ide
SYS@ orcl >host ls -l /u01/app/oracle/oradata/orcl/control01.ctl -rw-r----- 1 oracle oinstall 10076160 Jun 4 17:35 /u01/app/oracle/oradata/orcl/control01.ctl
参数 control_file_record_keep_time最大值365测试
寻回一个控制文件的自动备份spa
RMAN> catalog backuppiece '/u01/app/oracle/fra/ORCL/autobackup/2019_05_30/o1_mf_s_1009648986_ggzbltkq_.bkp'; cataloged backup piece backup piece handle=/u01/app/oracle/fra/ORCL/autobackup/2019_05_30/o1_mf_s_1009648986_ggzbltkq_.bkp RECID=38 STAMP=1010135802
寻回一个数据文件的备份--同上rest
寻回归档日志日志
RMAN> catalog archivelog '/u01/app/oracle/fra/ORCL/archivelog/2019_05_27/o1_mf_1_277_ggq5qlvl_.arc'; cataloged archived log archived log file name=/u01/app/oracle/fra/ORCL/archivelog/2019_05_27/o1_mf_1_277_ggq5qlvl_.arc RECID=203 STAMP=1010136222
将快速恢复区中的全部文件探测一遍,若是是rman资料库汇总没有记载的,则所有添加回资料库
RMAN> catalog db_recovery_file_dest;
为何要使用catalog
--1 保存比控制文件多得多的有关归档日志和备份的历史信息,使rman保存资料库信息不受参数control_file_record_keep_time的限制
--2 使rman能够用run命令调用catalog中的存储脚本,因为catalog能够在另一个服务器的db中,rman脚本自身也提供了高可用性
--3列出任意时间点上的表空间和数据库文件结构,report schema 命令可使用at子句查看某一时间点上的数据库结构
--4 简化在丢失控制文件状况下的还原和恢复操做。恢复控制文件简化到只要执行restore controlfile便可,无须from子句,以及在命令上告知控制文件备份的位置。
1 建立catalog
--在catalog所使用的db上建立catalog的schema
--为catalog填充对象,包括表、索引、视图、PL/SQL包等
虽然catalog的方案能够建立在目标db上,但是一旦目标db的控制文件损坏,因为db没法打开,致使catalog信息没法访问。因此应该只是将catalog的方案放到另一个服务器的db上,为catalog db,tns链接别名
--sqlplus sys/oracle@tns_name as sysdba --在目标库上建立表空间,用户并赋予相应的权限 SQL> create tablespace rc_data datafile '/u01/app/oracle/oradata/orcl/rc_data01.dbf' size 20m autoextend on next 4m; Tablespace created. SQL> create user rcowner identified by oracle temporary tablespace temp default tablespace rc_data quota unlimited on rc_data; 2 3 4 User created. SQL> grant recovery_catalog_owner to rcowner; Grant succeeded. [oracle@DSI ~]$ rman catalog rcowner/oracle@orcl ---这里在本机测试,正常的应该用目标库的tns_name connected to recovery catalog database RMAN> create catalog; recovery catalog created --登陆数据库查看对象 SQL> conn rcowner/oracle Connected. SQL> select object_type,count(*) objects from user_objects group by object_type; OBJECT_TYPE OBJECTS ------------------- ---------- SEQUENCE 1 PACKAGE 2 PACKAGE BODY 2 TYPE BODY 1 TRIGGER 3 TABLE 44 INDEX 96 FUNCTION 2 VIEW 98 TYPE 3 10 rows selected.
至此,rman catalog已经准备完成,可供目标数据库注册使用了。
目标数据库必须在catalog中注册以后才能使用catalog
--注册与同步
[oracle@DSI ~]$ rman target sys/oracle@orcl catalog rcowner/oracle@orcl ##后者tns_name Recovery Manager: Release 11.2.0.4.0 - Production on Mon Jun 17 15:37:22 2019 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (DBID=1534031567) connected to recovery catalog database
将目标数据库的注册信息写入catalog
RMAN> register database; database registered in recovery catalog starting full resync of recovery catalog full resync complete---表名register命令还完成了第一次彻底同步完成了
--向catalog中相应的表写入数据,好比在db的表发现目标数据的内容
SQL> select * from rcowner.db; DB_KEY DB_ID CURR_DBINC_KEY ---------- ---------- -------------- 1 1534031567 2
--将目标数据库控制文件中的rman资料库上传到catalog的相关表中
--最后同步控制文件与catalog
今后之后,使用rman链接目标数据库时记得必须使用catalog子句同时链接catalog,这样才能尽可能保证控制文件和catalog直接的信息同步,好比
[oracle@DSI ~]$ rman target sys/oracle@orcl catalog rcowner/oracle@orcl
信息同步--局部同步和彻底同步
--局部同步指同步归档日志信息、备份集信息和镜像复制信息。
--彻底同步则包括除了局部同步的全部信息以外,还要同步数据库表空间和数据文件物理结构的信息。
发生彻底同步时,RMAN会先建立一个当前目标控制文件的快照,(实际上就是当前控制文件的副本),而后RMAN会利用此快照与catalog进行比较,
若有须要,rman就会将目标控制文件中的归档日志信息、备份信息、镜像复制进行以及数据库表空间和数据文件物理结构上传至catalog。
能够查看控制文件快照的路径。控制文件的快照,执行任务备份命令时都会生成一个快照文件
RMAN> show snapshot controlfile name; RMAN configuration parameters for database with db_unique_name ORCL are: CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_orcl.f'; # default [root@DSI oracle]# ll /u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_orcl.f -rw-r----- 1 oracle oinstall 10076160 Jun 17 15:38 /u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_orcl.f
也可使用configure修改路径
RMAN> configure snapshot controlfile name to '/home/oracle/snapshot.ctl'; ###若是路径设置错误,报错,请看上一篇。
在同时链接到目标db和catalog执行rman命令时,不管是局部同步仍是全局同步,同步操做都可以由rman执行相关命令(backup、configure)时自动判断、自动发起
彻底同步也能够经过”resync catalog”手动发起,通常没有必要这样作,但如下3种状况除外
--1 使用rman执行了须要同步的操做(好比configure命令备份某个表空间),可是在执行此类命令时因为种种缘由rman没有链接catalog,只链接了目标db
--2 dba备份db的频率太低,好久不用一次rman,这样,因为control_file_record_keep_time参数的设置,catalog可能会遗忘某些归档日志信息
--3 在db物理结构发生变化以后,好比:添加数据文件,新建表空间等
RMAN> resync catalog; starting full resync of recovery catalog full resync complete
--rman能力的加强
有了catalog,rman保存历史的信息能力很强大,彻底不受参数control_file_record_keep_time的限制,另外,catalog还补全了rman全部的功能
--在nomount状态下查看rman 资料库
--查看数据库的物理结构历史
--将rman脚本保存在rman资料库中
--将数据库恢复到之前的incarnation
前3个功能只用控制文件是没法提供的。
RMAN> list backupset summary;
有了catalog,数据库没有mount也不是问题,记得链接catalog模式
第一个功能:没有catalog时执行restore命令还原控制文件时必须给出from 子句说明控制文件的备份在何处,而使用catalog时from子句不是必要的
第二个功能:report schema at命令可以显示数据库中数据文件的历史结构
RMAN> report schema; Report of database schema for database with db_unique_name ORCL List of Permanent Datafiles =========================== File Size(MB) Tablespace RB segs Datafile Name ---- -------- -------------------- ------- ------------------------ 1 780 SYSTEM YES /u01/app/oracle/oradata/orcl/system01.dbf 2 720 SYSAUX NO /u01/app/oracle/oradata/orcl/sysaux01.dbf 3 1250 UNDOTBS1 YES /u01/app/oracle/oradata/orcl/undotbs01.dbf 4 5 USERS NO /u01/app/oracle/oradata/orcl/users01.dbf 5 500 TEST NO /u01/app/oracle/oradata/orcl/test01.dbf 6 50 ASSM NO /u01/app/oracle/oradata/orcl/assm01.dbf 7 50 MSSM NO /u01/app/oracle/oradata/orcl/mssm01.dbf 8 20 RC_DATA NO /u01/app/oracle/oradata/orcl/rc_data01.dbf List of Temporary Files ======================= File Size(MB) Tablespace Maxsize(MB) Tempfile Name ---- -------- -------------------- ----------- -------------------- 1 59 TEMP 32767 /u01/app/oracle/oradata/orcl/temp01.dbf 2 1024 TEMP 32767 /u01/app/oracle/oradata/orcl/temp03.dbf RMAN> report schema at time "sysdate - interval '1' day"; Report of database schema for database with db_unique_name ORCL List of Permanent Datafiles =========================== File Size(MB) Tablespace RB segs Datafile Name ---- -------- -------------------- ------- ------------------------ 1 780 SYSTEM YES /u01/app/oracle/oradata/orcl/system01.dbf 2 720 SYSAUX YES /u01/app/oracle/oradata/orcl/sysaux01.dbf 3 1250 UNDOTBS1 YES /u01/app/oracle/oradata/orcl/undotbs01.dbf 4 5 USERS YES /u01/app/oracle/oradata/orcl/users01.dbf 5 500 TEST YES /u01/app/oracle/oradata/orcl/test01.dbf 6 50 ASSM YES /u01/app/oracle/oradata/orcl/assm01.dbf 7 50 MSSM YES /u01/app/oracle/oradata/orcl/mssm01.dbf List of Temporary Files ======================= File Size(MB) Tablespace Maxsize(MB) Tempfile Name ---- -------- -------------------- ----------- -------------------- 1 59 TEMP 32767 /u01/app/oracle/oradata/orcl/temp01.dbf 2 1024 TEMP 32767 /u01/app/oracle/oradata/orcl/temp03.dbf
第三个功能:保存rman脚本
RMAN> create script recover_controlfile { 2> startup force nomount; 3> restore controlfile; 4> mount database; 5> recover database; 6> alter database open resetlogs; 7> } created script recover_controlfile 也能够将现有的文本载入 RMAN> create script backup_db from file '/home/oracle/backup_db.rman'; script commands will be loaded from file /home/oracle/backup_db.rman created script backup_db RMAN> list script names; List of Stored Scripts in Recovery Catalog Scripts of Target Database ORCL Script Name Description ----------------------------------------------------------------------- backup_db recover_controlfile RMAN> print script backup_db; ##print查看脚本内容 printing stored script: backup_db run { allocate channel c1 device type disk; backup database; } 使用rman链接目标库和catalog后,执行run {execute script ...} RMAN> run {execute script backup_db;}