Oracle 备份恢复体系 一

1.数据库故障类型

a】用户进程故障  user process failure :pmon自动处理

b】实例故障  instance failure :smon自动处理

c】user errors 用户错误 :需要dba通过备份恢复解决

d】介质故障 media failure 必须通过备份和日志恢复

2. 备份和恢复计划

a】根据生产环境的恢复周期,制定详细的备份计划,然后严格执行

b】对备份,要在一定的事件内利用测试环境,进行故障恢复的练习

3.备份和恢复的分类

无论是rman还是expdp impdp 都要打开归档

4.还原和恢复

先还原,后恢复,才能达到一致性恢复,这是2步不同的操作

那么,如何确认数据库的一致性呢?

select current_scn,checkpoint_change# from v$database;
select file#,last_chanbge# from v$datafile;
select file#,checkpoint_change# from v$datafile_header;

 

强制关库

shutdown abort

如果last_change#为空代表非正常关库

再次启动,数据库会自动发起恢复,然后last-change#会自动恢复为非空

rman恢复 有风险,一般小范围恢复用的都是闪回技术

5.归档与非归档

a】归档模式:redo log 写入archive log

b】非归档模式:没有archive log,redo log file 循环覆盖

当处于非归档模式下时,在丢失数据文件后唯一的选择就是执行完整的数据库还原,而不能进行恢复,recover

非归档模式只能进行冷备即一致性备份,只能进行完整还原,还原到最后一次备份。

归档模式可以冷备也可以热备,可以恢复到最后一次commit。

5.Rman配置参数详解

#在linux系统命令下
rman target /
#进入rman界面
show all #查看配置的参数

a】CONFIGURE RETENTION POLICY TO REDUNDANCY 1; #default,备份保留策略,。默认是1份。每做一次备份,就会产生一个备份集,

     通过report obsolete 可以查看过期的备份

b】CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; #按照保留策略进行保留,7天前的备份会被标记为过期

c】CONFIGURE RENTENTION POLICY TO REDUNDANCY 3;#按照冗余数进行保留,设置3份,超过3份就会被标记为obsolete 过期

d】CONFIGURE BACKUP OPTIMIZATION OFF;#default  默认关闭备份优化器,可以通过ON 打开

CONFIGURE BACKUP OPTIMIZATION ON

d】CONFIGURE DEFAULT DEVICE TYPE TO DISK;#defautl  备份到磁盘

e】CONFIGURE CONTGROLFILE AUTOBACKUP ON #default 自动备份控制文件 

f】CONFIGURE CONTROLFILE ATUOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F';#default 自动备份控制文件的格式指定,备份到本地。

g】CONFIGURE DEVICE TYPE DISK PARALLELISM 2; #备份的并行度,数值越大任务执行越快

h】CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1;#default 备份的副本数

i】CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1;#default 归档日志备份的副本

j】CONFIGURE MAXSETSIZE TO UNLIMITED;#default 备份集的最大限制,默认是无限制

k】CONFIGURE ENCRYPTION FOR DATABASE OFF ;#default 备份加密开关 可以设置为ON,打开加密

l】CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;#default 归档日志的删除策略,当前不设置

脚本里面不注明的地方,默认按照默认设置进行。

自动备份控制文件的路径:如何配置中没有指定绝对路径,那么控制文件就是在自动恢复区,那么如何指定路径呢?

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/路径/名称_%T%F';

那么自动恢复区在哪呢?可以通过查找参数获取

show parameter recovery_

上图是RMAN工作时连接到目标数据库时通过通道连接数据库

run {

allocate channel ch_1 device type disk
format = '/路径/backup_%u_%c.bak';
backup tablespace system,users channel ch_1;
}

RMAN可以进行两种类型的备份,即完全备份FULL BACKUP,增量备份 INCREMENT BACKUP。在进行完全备份时,RMAN会将数据文件中除空白数据块之外的所有数据块都复制到备份集中。需要注意,在RMAN中可以对数据文件进行完全备份或增量备份,但是对控制文件和日志文件只能进行完全备份。

与完全备份相反,在进行增量备份时RMAN也会读取整个数据文件,但是只会备份与上一次备份相比发生了变化的数据块。RMAN可以会单独的数据文件,表空间,或者整个数据库进行增量备份。

当数据库打开时,可以使用RMAN的backup命令备份如下:

a】归档重做日志

b】数据文件

c】数据库

d】表空间

e】控制文件

f】备份集

在使用backup命令备份数据文件时,可以为其设置参数定义备份段的文件名,文件数和每个文件的通道。

rman target /
#注意路径一定要有效存在
backup database format '/路径/名称_%Y_%M_%D_%U.bak' maxsetsize 2G;
#在非一致性备份后,一定要做联机在线日志的归档。否则恢复的时候是无法做到同步的
RMAN> sql'alter system archive log current';
#查看备份集
list backup of database;
#备份表空间
run {
allocate channel ch_1 type disk;
backup tablespace users
format '/路径/名称_%d_%p_%t_%c.dbf';
}
list backup of tablespace users;
#备份数据文件
backup datafile 1,2,3,4,5 filesperset 3;
#查看
list backup of datafile 1,2,3,4,5
#备份控制文件
backup current controlfile;
#备份归档重做日志文件
backup archivelog all delete all input; #
backup database plus archivelog

运行backup database plus archivelog,的运行步骤是;
1.alter system archive log current; 归档当前日志
2.backup archivelog all; 备份所有归档日志
3.backup database; 备份数据库
4.alter system archive log current; 归档当前日志
5.backup archivelog recently generated ; 备份刚生成的归档日志

Backup database plus archivelog delete input;
会备份归档日志并且会在备份结束后删除默认目录下的归档日志、datafile copy还有backup set。适用于单个归档dest路径如FRA。
Backup database plus archivelog delete all input;
会备份归档日志并且会在备份结束后删除所有目录下的归档日志、datafile copy还有backup set。适用于复数归档dest路径。

6.RMAN 备份脚本

#!/bin/bash
#ScriptName:backup_all.sh
#Usage: backup all files in oracle user environment.
#ex: nohup /bin/bash backup_all.sh > backup.log &
#Author: xxxxx
#Creation: 2020-09-11
#Version: 1.0.0

#Define variable <You may need to change the value of basedir.>
basedir=/u01/app/orabak
date=`date +%Y%m%d`

#Create pfile
sqlplus / as sysdba <<EOF
create pfile='$basedir/pfile$date.ora' from spfile;
EOF

#RMAN BACKUP
rman target / log=$basedir/backup_all_$date.log <<EOF
run{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
backup database filesperset 4 format '$basedir/full_%d_%T_%s_%p';
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
backup archivelog all format '$basedir/arch_%d_%T_%s_%p' delete input;
backup current controlfile format '$basedir/ctl_%d_%T_%s_%p';
release channel c1;
release channel c2;
}
EOF

 

7. RMAN 恢复

基于更改的不完全恢复,需要确定SCN号。LogMiner是确认SCN号的常用工具

完全恢复

#丢失数据文件,进行完全恢复
RMAN>startup mount; RMAN>restore database; RMAN>recover database; RMAn>sql 'alter database open';
#丢失重做日志文件,进行不完全恢复
SQL>startup mount;
SQL>recover database until cancel;
SQL>alter database open resetlogs;
#丢失数据文件、控制文件和重做日志文件,进行不完全恢复
RMAN>startup nomount;
RMAN>restore controfile from autobackup;
RMAN>alter database mount;
RMAN>restore database;
SQL>recover database using backup controlfile until cancel;
SQL>alter database open resetlogs;
#基于时间点的恢复(常用)
RMAN>startup mount;
RMAN>restore database;
RMAN>sql 'alter session set nls_date_format="yyyymmdd hh24:mi:ss"'; #设置显示时间格式
RMAN>recover database until time '20140312 17:07:00'; #把数据库恢复到2014-03-12 17:07:00这一时间点上
RMAN>sql 'alter database open resetlogs';
#基于SCN的恢复
RMAN>startup mount;
RMAN>restore database;
RMAN>recover database until scn  scn号;
RMAN>sql 'alter database open resetlogs';
①查询当前SCN号:
SQL>select dbms_flashback.get_system_change_number from dual;
②根据SCN号查询时间:
SQL>select to_char(scn_to_timestamp(963959),'yyyymmdd hh24:mi:si') from dual;
③根据时间查询SCN号:
SQL>select timestamp_to_scn(to_date('20140309 17:55:10','yyyymmdd hh24:mi:ss')) from dual;
④查询一段时间内的SCN号:
SQL>select * from (select time_dp,scn from smon_scn_time order by time_dp desc) where  rownum<20;

 

posted @ 2022-07-24 15:41  BlackData  阅读(66)  评论(0编辑  收藏  举报