20180513
逻辑备份和物理备份:rman是物理 备份
热备份和冷备份:冷备是指关闭数据库时执行的备份,热备是数据库打开状态下执行的备份,热备只能在归档模式下进行
全备份和局部备份:全备份指所有的数据文件,局部备份指部分数据文件
完整备份和增量备份:完整备份所有使用的文件块,增量只包括上次备份以来更改的块
使用rman进行备份和恢复:
RMAN实用程序由两部分组成:可执行文件和recover.bsq文件。recover.bsq文件实质上是库文件,可执行文件从recover.bsq文件中析取代码来创建在目标数据库上执行的PL/SQL调用。recover.bsq文件是整个操作的中枢。这两个文件始终保持链接,并从逻辑上构成RMAN客户端实用程序。需要指出的是,recover.bsq文件和可执行文件的版本必须相同,否则就不能正常工作。RMAN实用程序有一种独特的,有序的,可预测的用法:解释在目标数据库中远程执行的PL/SQL调用中的命令。实质上,RMAN实用程序完成了我们需要做的所有备份,还原,恢复,和处理备份工作。由可执行解释程序负责解释这些程序命令,并且使这些命令与recover.bsq文件中的PL/SQL块匹配。RMAN随后将这些RPC传递给数据库,并基于用户的请求收集信息。如果命令要求I/O操作(可能是备份或还原操作),RMAN会在返回信息时准备另一个过程块,并将这个过程块传递回目标数据块。这些过程块负责执行OS的系统调用以进行指定的读或写操作。rman在备份期间使用快照控制文件(控制文件的副本),就是rman在开始时最新的检查点信息和文件结构信息,在rman中可以设置
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/data/u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_eskdb.f';
rman可以备份的文件类型:数据文件,控制文件,归档重做日志文件,spfile,备份集片
rman不能备份的文件类型:临时文件,联机重做日志文件,口令文件,init参数文件,tnsnames.ora配置文件
rman生成的三类备份:
备份集,专用格式的备份文件,在还原时必须使用rman,可以是完整或增量的备份,不备份未分配到段的文件块
压缩备份集,对备份集文件进行压缩
映像副本,与原本的输入文件相同的备份文件,只能是完整备份
rman存储仓库:存放备份信息的元数据,可以是数据库的控制文件,也可以是一个专用的目录数据库
开启归档模式:
alter system set db_recovery_file_dest_size=50g scope=spfile;
alter system set db_recovery_file_dest='/home/oracle/db_recovery' scope=spfile;
shutdown immediate
startup mount
alter database archivelog;
alter database open;
archive log list;
使用rman连接到数据库:rman target /
使用rman执行一次脱机-全部-完整备份:
run {
shutdown immediate;
startup mount;
allocate channel d1 type disk;
backup as backupset database;
alter database open;
}
使用rman执行一次完整的全部热备,每个备份集包含4个文件,同时备份所有的归档日志,之后删除:
run {
allocate channel t1 type disk;
allocate channel t2 type disk;
backup as compressed backupset filesperset 4 database;
backup as compressed backupset archivelog all delete all input;
}
备份某一个表空间:
backup as backupset tablespace example;
0级增量备份:包含所有的块,一个完整备份
1级增量累积备份:自上一个级别0备份以来所有更改的块
1级增量差异备份:自上一个增量备份以来更改的块
backup as backupset incremental level 0 database;
backup as backupset incremental level 1 database;--1级差异
backup as backupset incremental level 1 cumulative database;--1级累积
如果当前没有0备份,第一次1级备份实际执行的是0备份。
启用块变化跟踪:
sqlplus:alter database enable block change tracking using file '/home/oracle/bct.dbf';
在后台会增加一个新的进程ctwr,会加快1级增量备份的速度
备份为映像副本(不常用):
backup as copy database;
backup as copy archivelog all delete all input;
查看rman的默认配置:
show all;
configure device type disk PARALLELISM 4 backup type to compressed backupset;
配置信道1创建的每个备份片最大为100m,最多打开8个文件,只允许最大100m的吞吐量
configure channel 1 device type disk maxpiecesize 100m maxopenfiles 8 rate 100m;
configure backup optimization on; #启用备份优化,和保留策略相关,适用于归档和只读文件
configure retention policy to redundancy 3;#将多余的副本标记为冗余,作为删除的候选。
configure retention policy to recovery window of 7 days;#至少有一个副本保留7天
configure controlfile autobackup on;
configure device type disk clear;#恢复到默认配置
list命令查看已创建的备份:list backup;
report命令查看数据文件和需要备份的文件 :
report schema;
report need backup;
report obsolete;#通过比较保留策略列出所有可以删除的冗余备份
delete obsolete;#删除冗余备份
delete backup;#删除所有备份
delete backupset 30;#删除30号备份集
crosscheck backup;#将存在与仓库中但实际已经不存在的备份标记为expired
delete expired backupset;#不删除文件只更新仓库信息
还原指从之前的备份中提取文件,恢复指应用重做日志和归档日志中的重做条目使数据文件保持最新,完全恢复没有数据丢失,不完全恢复指故意丢失数据或重做数据丢失,跳过坏事务恢复所有其他工作是不可能的。
使用数据恢复顾问,当碰到启动异常时,如丢失数据文件,可以在rman中进行如下操作:
list failure;
advise failure;
repair failure;#执行建议工具中的步骤,也可以按提示进行操作
在非归档日志模式下,只能进行整库还原,同时在此备份之后产生的所有数据都将丢失,强烈建议数据库运行在归档模式下
startup mount;
restore database;
alter database open resetlogs;
归档模式下还原恢复整个数据库:
startup mount;
restore database;
recover database;
alter database open;
系统表空间和undo表空间受损会导致实例终止,其他的数据文件受损不会导致实例终止。
丢失普通数据文件时在rman中进行如下操作:
sql 'alter database datafile 5 offline';
restore datafile 5;
recover datafile 5;
sql 'alter database datafile 5 online';
对于关键数据文件的丢失恢复,将数据库启动到mount状态,然后还原,恢复,再打开
控制文件丢失恢复示例
configure controlfile autobackup on;
backup database plus archivelog;
shutdown immediate;
重命名控制文件
startup --会失败
restore controlfile from autobackup;
alter database mount;
recover database;
alter database open resetlogs;
不完全恢复还原所有数据文件
不完全恢复操作有三个选项(rman):
until time,恢复到确切的时间点,通常用于纠正用户错误
until scn,恢复到一个确切的系统改变号
until sequence,如果丢失了一些日志文件,指定一个日志序列号
run {
shutdown immediate;
startup mount;
set until time = "to_date('2018-01-07 09:45:01','yyyy-mm-dd hh24:mi:ss')";
restore database;
recover database;
alter database open resetlogs;
}
完整恢复,包括参数文件,控制文件和数据文件
编辑最简单的参数文件
vi initorcl.ora
db_name=orcl
使用这个参数文件将数据库启动到nomount状态 ,以下操作在rman下进行:
startup nomount pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora';
set dbid=1487720582;
restore spfile from '/home/oracle/db_recovery/ORACLE/autobackup/2018_01_07/o1_mf_s_964779109_f530h5gy_.bkp';
shutdown abort;
startup nomount;
restore controlfile from '/home/oracle/db_recovery/ORACLE/autobackup/2018_01_07/o1_mf_s_964779109_f530h5gy_.bkp';
或者使用如下命令
restore controlfile from autobackup;
alter database mount;
restore database;
recover database;
alter database open resetlogs;
恢复目录:包含目标数据库的物理结构的详细信息,数据文件的位置,已执行的所有备份的详细信息和rman的持久性配置设置。采用恢复目录主要是基于备份安全的考虑
控制文件中始终存储这些信息,保留时间由control_file_record_keep_time参数控制
使用控制文件恢复时大部分操作必须使数据库处于mount状态,使用恢复目录没有此要求。
rman同时可连接最多三个数据库实例:目恢复目标数据库,录数据库,使用备份创建的辅助数据库
为了使用恢复目录,在恢复目录数据库中创建专用的用户:
create user rman identified by rman default tablespace users;
grant recovery_catalog_owner to rman;
alter user rman quota unlimited on users;
使用rman连接恢复目录数据库:
rman target / catalog rman/rman@catadb
初次使用之前必须创建恢复目录并把目标数据库注册到恢复目录中
create catalog;
register database;
删除注册信息
unregister database;
drop catalog;
恢复目录再同步
resync catalog;
可以使用rman创建一个复制数据库,这也是搭建dataguard的一个步骤
duplicate target database to newdb from active database;
非rman备份(用户管理的备份):
非归档日志模式下的备份,安全关闭数据库,然后备份数据文件和控制文件。如果数据库异常关闭,需要同时备份重做日志。
备份控制文件:
alter database backup controlfile to '/home/oracle/con_bak';--控制文件的镜像副本
alter database backup controlfile to trace as '/home/oracle/con_bak_0107';--包含创建控制文件的sql语句
热备份数据文件:必须在归档模式下,需要将表空间置于备份模式,此时的重做日志将大于正常情况
alter tablespace users begin backup;
alter tablespace users end backup;
备份参数文件: create pfile='/home/oracle/pfile0917' from spfile;
备份压缩:
备份文件可以进行四个级别的压缩,basic,low,medium,high,高级别的压缩文件小,消耗的cpu更多,同样在恢复时消耗的cpu也多
CONFIGURE COMPRESSION ALGORITHM 'HIGH';
backup as compressed backupset database;
增量更新的镜像副本备份
run{
recover copy of database with tag 'incr_update';
backup incremental level 1 for recover of copy with tag 'incr_update' database;
}