物理备份
1. RMAN Advisor
# 恢复指导需要全备和归档才能使用,归档是必须的
list failure——列出故障原因
advise failure——恢复建议
repair failure——按advice来恢复
change failure——改变故障状态
# 步骤
1. list failure
#例如删除数据文件后,list failure(要有相关备份)
rm -f test1.dbf
RMAN> list failure;
2. advise failure
RMAN> advise failure;
3. repair failure
#如果产生了automatic repairs,就可以使用repair failure恢复
#恢复预览
RMAN> repair failure preview;
#恢复
RMAN> repair failure;
SQL> select open_mode from v$database;
2. 归档模式
# 检查服务器是否为归档模式
SQL> SELECT log_mode FROM v$database;
# 查看归档信息
SQL> archive log list;
# 设置归档模式步骤
# 设置参数,修改日志地址(首先创建文件夹)
alter system set log_archive_dest_1='location=/home/oracle/log_archive/arch01';
alter system set log_archive_dest_2='location=/home/oracle/log_archive/arch02';
# 设置状态
SQL> shutdown immediate; //立即关闭数据库
SQL> startup mount //启动实例并加载数据库,但不打开
SQL> alter database archivelog; //更改数据库为归档模式
SQL> alter database open; //打开数据库
# 查看归档信息
SQL> archive log list;
# 其他
SQL> alter system archive log start; //启用自动归档
SQL> alter system switch logfile; //手动切换一下日志文件存档,使修改生效
SQL> alter system archive log current; //手动归档
3. 备份操作
1. 参数配置
# 事先创建备份文件所在文件夹并授权
mkdir /orabackup
chown -R oracle.oinstall /orabackup
# 查看默认备份参数
SQL> show parameter recover
# 修改备份参数
# 先修改备份空间大小(快速恢复区 fast_recovery_area,闪回恢复区 flash recovery area)
SQL> alter system set db_recovery_file_dest_size=10G;
# 修改备份空间(快速恢复区 fast_recovery_area,闪回恢复区 flash recovery area)
SQL> alter system set db_recovery_file_dest='/home/oracle/fast_recovery_area' scope=both;
# 查看备份保留时间
SQL> show parameter control_file_record_keep_time;
# 修改备份保留时间
RMAN> configure retention policy to recovery window of 7 days;
# RMAN操作
# 查看配置
RMAN> show all;
# 打开控制文件与服务器参数文件的自动备份
RMAN> configure controlfile autobackup on;
# 设置控制文件与服务器参数文件自动备份的文件格式
RMAN> configure controlfile autobackup format for device type disk to '/home/oracle/oracle_bak/ctl_%F';
# 设置备份的并行级别,通道数1,内容为备份集(backupset)
RMAN> configure device type disk parallelism 1 BACKUP TYPE TO BACKUPSET;
# 设置备份内容为copy(与上一条命令对应)
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO COPY;
主:back up as copy制作数据库文件的简单副本(与Linux cp命令相同),而backupset则是将片段备份为数据文件的表空间的逻辑实体.备份片段采用RMAN特定的二进制格式.
# 设置默认的备份设备为磁盘(或'SBT_TAPE')
RMAN> configure default device type to disk;
# 设置备份的文件格式,只适用于磁盘设备 (设置前要创建文件夹,channel参数可选)
RMAN> configure channel 1 device type disk format '/home/oracle/oracle_bak/bakup_%U';
# 备份整个数据库并指定名称位置
RMAN> backup database format '/orabackup/ora_%d_%U.bak';
# 参数一:
备份保留策略
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; # 备份保留天数
CONFIGURE RETENTION POLICY TO REDUNDANCY 3; # 备份冗余数
CONFIGURE RETENTION POLICY TO NONE;
Note:
可以按时间策略进行保留,设置7天的窗口,7天后就会被标记为obsolete。
可以按冗余数进行保留,设置3份,超过3份就会被标记为obsolete。
report obsolete; 可以查看
# 参数二:
备份优化器开关
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE BACKUP OPTIMIZATION OFF;
Note:rman自动采用优化算法进行备份,判断哪些需要备份,哪些可以跳过,防止备份冗余,节省空间。
# 参数三:
默认的备份设备类型
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE DEFAULT DEVICE TYPE TO SBT_TAPE;
Note:
指定默认备份的设备类型,可以是磁盘或者磁带,可以是第三方的SBT库。
Oracle自带SBT库位置SBT_LIBRARY=oracle.disksbt。
# 参数四:
控制文件自动备份开关
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
Note:
当数据库发起备份,或者数据库结构发生变化,将会自动备份控制文件。
12c之后默认为开启状态。
# 参数五:
控制文件自动备份的路径和格式
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘%F’; # default
Note:
配置控制文件自动备份的位置和格式,可以是磁盘或者磁带。
# 参数六:
配置备份通道的并行度
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 2;
Note:
配置默认的通道数量,可以是磁盘的通道或者磁带的通道。
# 参数七:
备份副本数
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
# 参数八:
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK clear;
Note:
数据文件和归档的默认备份副本数。
# 参数九:
备份集的最大限制
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
Note:
默认是无限制大小。
# 参数十:
备份加密开关
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
# 参数十一:
备份加密的算法
CONFIGURE ENCRYPTION ALGORITHM ‘AES128’; # default
Note:
对备份集进行加密,当然进行还原备份集的时候,需要解密。
可以通过v$rman_encryption_algorithms查看加密算法种类,
加密算法有AES128、AES192、AES256
设置口令:
set encryption on identified by ‘oracle’ only;
解密:
set decryption identified by ‘oracle’;
关闭:
set encryption off;
# 参数十二:
备份集压缩算法
CONFIGURE COMPRESSION ALGORITHM ‘BASIC’ AS OF RELEASE ‘DEFAULT’ OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE COMPRESSION ALGORITHM 'MEDIUM';
Note:
配置默认的压缩算法。
自带4种压缩算法:
BASIC:基本的压缩算法,
LOW:对备份吞吐量的影响最小,适用于CPU资源是限制因素的环境
MEDIUM:适用大部分环境,压缩比和速度最优组合
HIGH:最高压缩,适合网络慢的场景
V$RMAN_COMPRESSION_ALGORITHM视图有详细描述。
# 参数十三:
归档删数策略
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
Note:
配置归档可自动删除的策略,可以配置备库应用完自动删除。
还有被备份的次数等。
需要归档存在在FRA区域才能自动删除。
# 参数十四:
控制文件的快照保存位置和格式
CONFIGURE SNAPSHOT CONTROLFILE NAME TO ‘/u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/snapcf_pretty.f’; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '+DATA/WLDB/snapcf_wldb.f';
Note:
配置控制文件快照的保存位置,RAC需要配置在ASM磁盘组上。
快照控制文件是为了保障控制文件的一致性,
每次备份会刷新快照文件。
# 参数十五:
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
RMAN输出结果的保留天数。
V$RMAN_OUTPUT视图的记录内容。
2. 备份命令
# 备份整个数据库并指定名称位置
RMAN> backup database format '/orabackup/ora_%d_%U.bak';
# 备份数据库
RMAN> backup database plus archivelog; # 备份所有数据文件、UNDO文件,包括归档日志文件,临时文件不备份,另外RMAN会自动备份Control File and SPFILE
# 备份整个数据库并压缩备份集
RMAN> backup as compressed backupset database format '/u01/app/oracle/rmanbak/whole_%d_%U';
# 备份数据文件
select FILE# from v$datafile; //使用文件号备份可以先查看
RMAN> backup datafile 8,10,11;
RMAN> backup as copy datafile 8,10,11;
RMAN> backup as compressed backupset datafile 8,10,11; //备份时压缩
RMAN> backup datafile '/oracle/oradata/orcl/users01.dbf','/oracle/oradata/orcl/tbs4.dbf';
# 备份参数文件
RMAN> backup spfile;
# 备份控制文件
RMAN> backup current controlfile;
# 备份表空间
RMAN> backup tablespace tbs1;
RMAN> backup tablespace tbs1,tbs2;
# 备份归档日志文件
RMAN> backup format '/u01/app/oracle/rmanbak/lf_%d_%U' archivelog all delete input;
--delete input 删除所有已经备份过的归档日志
RMAN> backup archivelog sequence between 50 and 120 thread 1 delete input;
RMAN> backup archivelog from time "sysdate-15" until time "sysdate-7";
# 备份在备份操作期间产生的新的归档日志
RMAN> backup database plus archivelog format '/u01/app/oracle/rmanbak/lg_%d_%U' delete input;
# 备份闪回区
RMAN> backup recovery area;
# 检查备份操作
RMAN> report obsolete; //报告过期备份
RMAN> delete obsolete; //删除过期备份
RMAN> list backup; //列出所有备份
RMAN> list backupset; //列出所有备份
RMAN> report need backup; //查看所需要的备份文件
RMAN> list expired backup; //列出无效备份
RMAN> list expired backupset; 列出无效backupset
3. 增量备份
# 0级增量
# 开启块跟踪
mkdir /home/oracle/tracking
chown -R oracle.oinstall /home/oracle/tracking
SQL> ALTER DATABASE enable block change tracking using file '/home/oracle/tracking/orcl.trc';
# 增量与差异备份
RMAN> backup incremental level 0 database; 0级增量
RMAN> backup incremental level 1 database; 差异备份
RMAN> backup incremental level 1 cumulative database; 累积备份
4. 数据恢复
数据文件datafile
Restore 使用备份的数据进行还原
Recover 使用日志进行恢复
1. 非关键型数据文件损坏的服务器离线处理方法
SQL> startup mount
SQL> alter database datafile 16 offline;
SQL> alter database open;
RMAN> restore datafile 16;
RMAN> recover datafile 16;
SQL> alter database datafile 16 online;
2. 非关键型数据文件损坏的服务器在线处理方法
SQL> alter database datafile 16 offline;
RMAN> restore datafile 16;
RMAN> recover datafile 16;
SQL> alter database datafile 16 online;
--或
RMAN> run {
sql 'alter database datafile 16 offline';
restore datafile 16;
recover datafile 16;
sql 'alter database datafile 16 online';
}
3.临时文件不备份
# 破环临时文件
rm -f /oracle/oradata/orcl/temp01.dbf
rm -f /oracle/oradata/orcl/temp1.dbf
# 修复
1.添加新临时文件
alter tablespace temp add tempfile '/oracle/oradata/orcl/temp001.dbf' size 100M autoextend on;
2 .删除旧新临时文件
alter tablespace temp drop tempfile '/oracle/oradata/orcl/temp1.dbf';
控制文件controlfile
# 破坏控制文件
rm -f /oracle/oradata/orcl/control01.ctl
rm -f /oracle/oradata/orcl/control03.ctl
# 启动
SQL> shutdown abort;
SQL> startup
提示:
ORACLE instance started.
Total System Global Area 943718400 bytes
Fixed Size 8627440 bytes
Variable Size 805309200 bytes
Database Buffers 121634816 bytes
Redo Buffers 8146944 bytes
ORA-00205: error in identifying control file, check alert log for more info
SQL> alter system set control_files='/oracle/flash_recovery_area/orcl/control02.ctl' scope=spfile;
System altered.
SQL> shutdown abort
SQL> startup
日志文件组
# 破坏
rm -f /oracle/oradata/orcl/redo01.log
rm -f /oracle/oradata/orcl/redo02.log
rm -f /oracle/oradata/orcl/redo03a.log
SQL> select a.GROUP#,a.SEQUENCE#,b.MEMBER,a.STATUS from v$log a, v$logfile b where a.GROUP#=b.GROUP# order by 1;
GROUP# SEQUENCE# MEMBER STATUS
---------- ---------- ----------------------------------- ----------------
1 19 /oracle/oradata/orcl/redo01.log INACTIVE
1 19 /oracle/oradata/orcl/redo01a.log INACTIVE
2 20 /oracle/oradata/orcl/redo02a.log INACTIVE
2 20 /oracle/oradata/orcl/redo02.log INACTIVE
3 21 /oracle/oradata/orcl/redo03a.log CURRENT
3 21 /oracle/oradata/orcl/redo03.log CURRENT
# 修复方法:从库中清除损坏的文件
alter database drop logfile member '/oracle/oradata/orcl/redo01.log';
alter database drop logfile member '/oracle/oradata/orcl/redo02.log';
alter database drop logfile member '/oracle/oradata/orcl/redo03a.log';
如果该文件为current 切换日志 alter system switch logfile; 再清除
5.2 一组成员都损坏 ---数据库不完全恢复 重置日志
查看归档日志 sequence 26
基于sequence 不完全恢复
run {
startup mount;
set until sequence=27;
restore database;
recover database;
alter database open resetlogs;
}
# 一旦发生重置日志 立刻备份
RMAN> backup incremental level 0 database;
参数文件spfile
# 平时收集信息
SQL> select dbid from v$database;
# 模拟
mv spfileorcl.ora /tmp
关机状态
RMAN> startup nomount
RMAN> set DBID=1469582717
RMAN> restore spfile from '/oracle/flash_recovery_area/ORCL/autobackup/2022_09_04/o1_mf_s_1114527962_kk8mltyd_.bkp'; 此处为最新的控制文件自动备份 控制文件自动备份里含有参数文件的数据
SQL> startup force 重启服务器