RMAN 备份有很多名词,比如下面的
RMAN 可以创建两类备份:映像副本和备份集。映像副本备份会生成一个输出文件,其中的每个字节都与输入文件相同。备份集是一种比较智能的结构。它可以把几个输入文件合并到一个输出文件中,不包含从来没有使用的输入文件块,可以压缩和加密,可以分解为多个块。这些块是构成备份集的物理文件。
数据库打开时启用的备份文件和数据文件不一致,只有归档开启的情况下才能使用热备份.未开启归档的话只能在 mount 状态下,数据库此时是关闭的,进行冷备份,实现日志和数据文件一致性。
完整备份是备份所有数据文件和控制文件。局部备份是备份数据库的一个子集。完整备份是非归档日志模式下唯一可用的备份类型。这是由于要打开数据库,因此所有的数据文件必须有相同的系统变更号(SCN)。如果备份包含几个局部备份,每个局部备份就有不同的 SCN。之后还原时,就需要重做数据,使所有的备份具有相同的 SCN。这些重做数据不能在非归档日志模式下使用。
完整备份包含每个文件中每个使用过的块。增量备份只有自上一次备份以前改变的块。增量备份策略必须从一个完整备份开始,之后可以有随意多次增量备份,但还原总是需要先还原完整备份(称为 0 级备份,0 级备份包括未使用的块),再应用增量备份,使文件保持最新。只有进行了新的 0 级备份,才能丢弃以前的备份。
#!/bin/bash rman target sys/manager <
执行完毕可以看到在对应目录生成了数据文件备份和归档重做日志备份
RMAN> show all;
RMAN configuration parameters for database with db_unique_name ORCL are: CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 2 DAYS;#2 天外的备份标记为过期#如果使用了 FRA,则会自动删除过期备份,此时执行 report obsolete 将不会出现过期备份,否则需要手动执行 delete noprompt obsolete CONFIGURE BACKUP OPTIMIZATION OFF; # default 如果为 on,表示已经备份了相同副本,则跳过此文件 CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default 仅启用磁盘通道 CONFIGURE CONTROLFILE AUTOBACKUP ON; # default 自动备份控制文件 CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default 指定自动备份控制文件的名称和位置 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 RMAN OUTPUT TO KEEP FOR 7 DAYS; # default rman 作业队列结果保留 7 天 CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default 自动删除不需要的归档日志 CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/dbs/snapcf_ORCL.f'; # default 为控制文件的临时副本指定名称和位置
RMAN> CONFIGURE BACKUP OPTIMIZATION ON; RMAN> SHOW BACKUP OPTIMIZATION; RMAN configuration parameters for database with db_unique_name ORCL are: CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE DEFAULT DEVICE TYPE TO disk; # backup goes to disk CONFIGURE DEVICE TYPE disk PARALLELISM 2; # two channels used in parallel CONFIGURE CHANNEL 1 DEVICE TYPE DISK FORMAT '/disk1/%U' # 1st channel to disk1 CONFIGURE CHANNEL 2 DEVICE TYPE DISK FORMAT '/disk2/%U' # 2nd channel to disk2 BACKUP DATABASE; # backup - first channel goes to disk1 and second to disk2
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
CONFIGURE COMPRESSION ALGORITHM 'HIGH';
Configuring the RMAN Environment: Advanced Topics (oracle.com)
RMAN> CONFIGURE BACKUP OPTIMIZATION CLEAR; old RMAN configuration parameters: CONFIGURE BACKUP OPTIMIZATION ON; RMAN configuration parameters are successfully reset to default value RMAN> SHOW BACKUP OPTIMIZATION; RMAN configuration parameters for database with db_unique_name ORCL are: CONFIGURE BACKUP OPTIMIZATION OFF; # default RMAN> register database;
恢复目录是 RMAN 用来存储有关一个或多个 Oracle 数据库的元数据的数据库架构。通常,将目录存储在专用数据库中。恢复目录具有以下优点:
恢复目录为每个目标数据库的控制文件中存储的 RMAN 存储库创建冗余。恢复目录用作辅助元数据存储库。如果目标控制文件和所有备份丢失,则恢复目录中仍存在 RMAN 元数据。恢复目录集中了所有目标数据库的元数据。将元数据存储在一个位置可以更轻松地执行报告和管理任务。
恢复目录可以存储元数据历史记录的时间比控制文件长得多。如果必须执行比控制文件中的历史记录更远的恢复,则此功能非常有用。管理恢复目录数据库增加的复杂性可以通过提供扩展备份历史记录的便利性来抵消。
某些 RMAN 功能仅在使用恢复目录时起作用。例如,可以将 RMAN 脚本存储在恢复目录中。存储脚本的主要优点是,它可以供任何可以连接到目标数据库和恢复目录的 RMAN 客户端使用。仅当 RMAN 客户端有权访问存储命令文件的文件系统时,命令文件才可用。在 Data Guard 环境中使用 RMAN 时,需要恢复目录。通过存储所有主数据库和备用数据库的备份元数据,该目录使您能够将备份任务卸载到一个备用数据库,同时使您能够在环境中的其他数据库上还原备份。
数据文件和存档的重做日志备份集和备份件数据文件副本
存档的重做日志及其副本
数据库结构(表空间和数据文件)
存储的脚本,这些脚本被命名为用户创建的 RMAN 命令序列
持久 RMAN 配置设置
Managing a Recovery Catalog - 11g Release 2 (11.2) (oracle.com)
--1.创建表空间
create tablespace rman datafile '/usr/local/oracle19c/oradata/ORCL/rman.dbf' size 50m autoextend on next 50m;
drop user rcat cascade; create user rcat identified by rcat default tablespace rman quota unlimited on rman; grant recovery_catalog_owner to rcat;
--3.创建恢复目录
[oracle@MyHost tmp]$ rman catalog rcat/rcat RMAN> create catalog; recovery catalog created
--4.注册数据库
[oracle@MyHost tmp]$ rman target sys/manager catalog rcat/rcat RMAN> register database;
--5.同步恢复目录
RMAN> resync catalog;
--6.查询
select * from RCAT.RC_ARCHIVED_LOG; Select * from rcat.rc_backup_datafile;
RMAN> create global script global_backup_db { backup database plus archivelog;}
RMAN> list script names;
RMAN> run { execute script global_backup_db; }
ORA-19809: limit exceeded for recovery files ORA-19804: cannot reclaim 67108864 bytes disk space from 5368709120 bytes limit
这个错误一看就是快速恢复区不够了,
alter system set db_recovery_file_dest_size = 10g;
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
RMAN> run { execute script global_backup_db; }
上一节 catalog 里面编写的是备份整个数据库,为了省空间我们可以进行增量备份。
增量备份包含级别 0 和级别 1 的备份。
级别 0 备份包括数据库对象中的所有块,但在高水标(HWM)之上从来没有使用的块除外。
在标识有改变的块时,后续的级别 1 备份使用最近的级别 0 备份作为比较的基础。
为了演示级别 0 的部分增量备份,我们创建一个表空间和表
create tablespace backup_test datafile '/usr/local/oracle19c/oradata/ORCL/backup_test.dbf' size 10m autoextend on next 1m; create table cux_backup_test(id number) tablespace backup_test; insert into cux_backup_test(id) values(1); commit;RMAN> backup incremental level 0 tablespace backup_test;
3.6.2 级别 1
级别 1 分为差异备份和累积备份,
差异备份:增量备份的默认类型,它备份自上次级别 0 或级别 1 增量备份以来所有变更的块。下面再次使用 USERS 表空间,进行增量备份:
RMAN>backup incremental level 1 tablespace backup_test;
累积增量备份:用于备份自上次级别 0 增量备份以来所有变更的块。累积增量级别 1 备份的方式与差异级别 1 备份相同,但要指定 CUMULATIVE 关键字,如下所示:
RMAN> backup incremental level 1 cumulative tablespace backup_test;
RMAN> CONFIGURE COMPRESSION ALGORITHM 'HIGH';
backup validate check logical database;
backup database skip readonly skip offline skip inaccessible;
backup database force;
backup database not backed up;
backup database not backed up since time ='sysdate-1';
backup database copies=2;
backup database plus archivelog;#备份数据库同时备份归档 backup tablespace xxx plus archivelog;#备份表空间同时备份归档 backup datafile "/xxx/xxx.dbf" plus archivelog;#备份数据文件同时备份归档
backup archivelog all;#备份所有归档 backup archivelog all from time 'sysdate-1';#备份昨天到今天的归档 backup archivelog all from sequence xxx;#sequence 可以执行查询 select * from v$archived_log
在 3.3.7 基础上加上 delete input 就行了,比如
backup archivelog all delete input;
backup current controlfile; backup spfile;
run{ allocate channel d1 type disk; allocate channel d2 type disk; backup as compressed backupset database ; backup as compressed backupset archivelog all delete all input; }
backup incremental level=0 database;#基本备份 backup incremental level=1 database;#差异增量备份 backup incremental level=1 cumulative database;#累积增量备份
backup as compressed backupset incremental level=0 database; backup as compressed backupset incremental level=1 database;
可以看到压缩之后 0 级备份少了 1/3 的大小
备份恢复验证
restore database validate; restore controlfile validate; restore archivelog validate; restore spfile validate;单纯验证
validate database; validate tablespace xxx;带时间的验证
restore database validate until scn 3160152; restore database validate until until time 'to_date(xxxx)'
backup as copy database;#数据库备份印象副本 backup as copy tablespace xxxx;#表空间备份印象副本 backup as copy datafile 1;数据文件 backup as copy datafile "xxxx/xxx.dbf";数据文件 backup as copy current controlfile;#控制文件副本 backup as copy archivelog all;归档日志副本,logminer 使用副本比备份集更方便
#删除归档 delete archivelog all; delete archivelog until sequence xxx; delete archivelog all completed before 'sysdate-1' #删除所有的备份 delete noprompt backup; delete backup tag xxx; #删除所有的归档备份 delete backup of archivelog all; delete backup of archivelog all completed before 'sysdate-1' #删除过期的备份和归档(备份目录存在,但是找不到对应的备份文件) crosscheck backup; delete noprompt expired backup; delete noprompt expired archivelog all; #删除过时的备份(超过保留期的备份) delete noprompt obsolete; #备份归档时删除归档 backup archivelog all delete input;
SELECT decode(b.backup_type ,'L' ,'归档备份' ,'D' ,'完整备份' ,'I' ,'增量备份') backup_type --备份类型 ,b.incremental_level --备份级别 ,b.controlfile_included--是否包括控制文件 ,b.start_time ,round(bp.bytes/1024/1024)||'m' bytes --备份片的大小 ,bp.deleted--是否已经被删除 ,bp.compressed--是否被压缩 ,bp.encrypted --是否被加密 ,bp.backed_by_osb--是有由 OSB 安全备份生成备份文件 ,bp.handle--备份文件路径 ,bpd.tag ,bpd.completion_time FROM v$backup_set b ,v$backup_piece bp ,v$backup_piece_details bpd WHERE b.set_stamp = bp.set_stamp and bp.SET_STAMP=bpd.SET_STAMP
select to_char(scn_to_timestamp(57181807),'YYYY-MM-DD HH24:MI:SS') from dual; select timestamp_to_scn(sysdate ) from dual;--查询当前时间戳
select d.current_scn from v$database d union all select dbms_flashback.get_system_change_number() from dual;--查询还原点
select * from v$restore_point;--查询闪回进度
select * from v$session_longops;--闪回查询
select * from cux_trunc_backup_test as of timestamp(sysdate -3/24); select * from cux_trunc_backup_test as of scn(57181807);--闪回范围查询
select * from cux_trunc_backup_test versions between timestamp systimestamp -3/24 and systimestamp; select * from cux_trunc_backup_test versions between scn 57181807 and 57183624--查询闪回时间戳和时间范围
select * from v$flashback_database_log;--闪回操作
flashback table cux_trunc_backup_test to before drop;--必须在回收站存在 flashback table cux_trunc_backup_test to scn 57181807;--必须在回收站存在 flashback table cux_trunc_backup_test to timestamp systimestamp -3/24 ;--必须在回收站存在
点击加载更多