1、参数设置---rman

  • 设置channel数量,增加备份/恢复传输速度。

  • 设置最大坏块数,set maxcorrupt,避免少数坏块引起备份或恢复失败。(仅备份集使用)

  • 跳过只读数据块,backup指令加上skip readonly参数。(仅备份集使用)

2、备份类型,默认为disk,可改为sbt,rman将顺序执行sbt库中函数。---rman

3、backup as copy备份元数据,异机可iscsi、nfs远程挂载备份和快速恢复。---rman

  • backup as copy increment level 0 tag 'full_bak' database format '/home/***path/%U.dbf';  (全备)
  • backup as copy increment level 1 for recover of copy with tag 'full_bak' database;(增量,产生增量文件)
  • recover of copy database  with tag 'full_bak'; (合并上次增量到全备文件,之后可删除增量文件)
  • restore controlfile **; catalog **; switch database to copy. (快速恢复)

注:归档日志需备份,还原时需先restore 控制文件,再catalog ,再 recover。。。

4、清理操作---rman(闪回区)

  • 删除归档日志:delete archivelog all completed before 'SYSDATE-7';
  • 校验controlfile中过期归档:crosscheck archivelog all;
  • 删除controlfile中过期归档:delete expired archivelog all;
  • 删除表空间镜像:delete datafilecopy *;
  • 校验controlfile过期镜像:crosscheck copy of database;
  • 删除controlfile过期镜像:delete expired copy of database;

5、备份/恢复进度查询,登入sys,输入如下sql:

select sid,OPNAME,TARGET_DESC,serial#,context,sofar,TOTALWORK,trunc(sofar/totalwork*100,2)||'%' as perwork from v$session_longops where sofar!=totalwork;

6、备份历史查询 ---rman(主要关注copy类)

  • 数据文件:list copy of database tag 'tagname';
  • 控制文件:list copy of controlfile tag 'tagname';
  • 归档日志:list copy of archivelog all tag 'tagname';
  • 参数文件:list backup of spfile tag 'tagname';
  • 增量备份片:list backuppiece tag 'tagname';

7、重做日志与归档日志的区别:归档日志是重做日志的备份集合,重做日志空间大小有限只能存储短期的操作记录,当开启归档模式时重做日志组中某个日志写满时会保存到归档日志中。

8、各类文件存放路查询---sqlplus

  • 参数文件:show parameter spfile;
  • 控制文件:select * from v$controlfile;
  • 数据文件:select file_name from dba_data_files;
  • 重做日志:select * from v$logfile;
  • 归档日志:archive log list; 中的Archive destination字段。默认为闪回区在/data/oracle/flash_recovery_area/大写服务名/archivelog/日期/ (闪回区)

9、归档模式--sqlplus

  • 检查:archive log list;
  • 停机:shutdow immediate;
  • 挂载模式启动:startup mount;
  • 开启归档:alter database archivelog;
  • 开启数据库:alter database open;

10、闪回区---sqlplus(作用:oracle特有,帮助快速恢复。ORA-19815:闪回区使用大小告警,需清理归档日志)

  • 查询是否开启闪回区:select flashback_on from v$database;
  • 启动闪回区:alter database flashback on; (归档模式需开启)
  • 使用率:select * from v$flash_recovery_area_usage;(归档日志:archivelog目录,IMAGE COPY:datafile目录,备份片:autobackup目录------在rman中delete;crosscheck;delete expired等操作清理)
  • 总大小:show parameter db_recovery_file_dest_size;
  • 修改大小:alter system set db_recovery_file_dest_size=3g;

11、rac集群

  • 存在多台服务器,多个实例,访问同一组表空间,表空间存放于共享盘由asm实例进行管理,su - grid用户后执行asmcmd可查看编辑(包含ls cd mkdir等指令)
  • 备份指令与普通单机相同,rman进入后执行backup等操作即可。
  • 恢复到共享盘:进入asmcmd执行cp指令将外部文件系统的备份文件拷贝至+data的对应目录下,再rman进行switch database to copy。
  • 恢复单个节点:直接rman进行switch database to copy即可。

12、增量备份时异常断电保护--rman

  • list copy of controlfile tag 'tagname'; 检查最新的控制文件在存储目录是否存在
  • list backuppiece tag 'tagname';  查询在rman记录中是否有新的增量备份片,检查最新的增量备份片在存储目录是否存在,若增量丢失,需要重新全备。
  • list copy of archivelog all tag 'tagname';  检查最新id的归档日志在存储目录是否存在
  • 亦可使用crosscheck backuppiece tag 'tagname';检查是否有增量备份片过期,若存在过期的记录,则需要重新全备。若不执行重新全备,下次做增量时rman执行到recover copy of做合并时会判断没有全备文件,会自动在闪回区完成一次全备,以前使用的全备文件则不再关联。没有备份片过期,则再做一次增量即可。

13、归档日志重复备份问题---rman

因not backed up 1 times在backup as copy archivelog all的as copy模式下没有效果,故每次增量后需将最新的sequence保存到文件中,下次备份归档时加上from sequence参数从指定id开始镜像拷贝,可解决归档日志重复拷贝问题。(经验证,和闪回区的归档md5值比对成功,且异机switch切换后可成功启动)

14、块跟踪block change tracking  ---sqlplus

数据库开启块跟踪可缩短rman增量备份的时间,alter database enable block change tracking;或者指定文件记录alter database enable block change tracking using file '****';

15、查看控制文件内容

sqlplus执行alter database backup controlfile to trace as '/root/control_file.txt';  将内容以可视化方式导出到文件。

16、rman恢复到指定时间点

catalog注册数据文件和日志文件之后执行  run{set until time "to_date('20210916 17:38:00','yyyymmdd hh24:mi:ss')";restore database;recover database;}

注:每次alter database open resetlogs;   其中的resetlogs参数将强制修改控制文件的scn变更为指定时间点的scn+1,恢复时间点until time不能在最近的resetlogs时间之前,否则将报错RMAN-20207且后续无法打开数据库。若要跨resetlogs恢复,需要先执行list incarnation; 查询对应时间段的incarnation N再执行reset database to incarnation N操作即可正常恢复。(resetlogs可看做时间轴上的断点,incarnation可看做每个resetlogs断点间的段落id)

17、强制将redo日志进行归档(sqlplus下,备份时无需执行此命令,因为再rman backup过程中已经包含了这个步骤)

alter system archive log current;

18、redo日志大小限制查询和修改

查询select * from v$log;  (单位字节)

修改redo大小,没有resize选项,只能先删除再重建,对于status为current的日志需要先switch logfile切换到其他日志组。

  • alter system switch logfile;
  • alter database drop logfile group 1;
  • alter database add logfile group 1 ('/data/oracle/oradata/orcl11g/redo01.log') size 1024M;

*****************************************模拟丢失增量文件*************************************

执行backup as copy increment level 1 for recover of copy with tag 'full_bak' database;后直接将增量文件删除,进行recover copy of合并时将报错no such file。执行交叉校验后将修改该备份片的状态为失效,后续默认会在闪回区再做一次全备。

****************************************rman  image copy***********************************************

备份脚本

#!/bin/shfunction get_sequence_num(){num=$(echo $1 | awk -F'_S-' '{printf $2}' | awk -F'_T-' '{print $1}')echo $num
}function BACKUP_INC(){
next_sequence=$(cat next_sequence.txt)
echo "from sequence [${next_sequence}]"
if [[ $next_sequence == "" ]];thenecho "Invalid next_sequence"exit 3
firman target sys/123456 << !
CONFIGURE DEFAULT DEVICE TYPE TO 'disk';
backup as copy spfile format '/root/tmp_dir/%U.ora';
backup as copy current controlfile format '/root/tmp_dir/%U.ctl';
backup incremental level 1 for recover of copy with tag 'test1' database format '/root/tmp_dir/%U.inc';
backup as copy archivelog from sequence $next_sequence format '/root/tmp_dir/archivelog_dir/%U.arc';
recover copy of database with tag 'test1';
exit
!#获取下一个sequence
last_file=$(ls -rt /root/tmp_dir/archivelog_dir/ | tail -1)
num=$(get_sequence_num $last_file)
echo "~~$num"
let "next_sequence=$num+1"
#保存下一个sequence到文件
echo $next_sequence > next_sequence.txt
}
#backup as copy archivelog all format '/root/tmp_dir/archivelog_dir/%U.arc' not  backed up 1 times;
#recover copy of database with tag 'test1';function BACKUP_FULL(){
rman target sys/123456 << !
CONFIGURE DEFAULT DEVICE TYPE TO 'disk';
backup as copy spfile format '/root/tmp_dir/%U.ora';
backup as copy current controlfile format '/root/tmp_dir/%U.ctl';
backup incremental level 0 as copy tag 'test1' database format '/root/tmp_dir/%U.dbf';
backup as copy archivelog all format '/root/tmp_dir/archivelog_dir/%U.arc';
exit
!#获取下一个sequence
last_file=$(ls -rt /root/tmp_dir/archivelog_dir/ | tail -1)
num=$(get_sequence_num $last_file)
echo "~~$num"
let "next_sequence=$num+1"
#保存下一个sequence到文件
echo $next_sequence > next_sequence.txt
}
#backup as copy archivelog all format '/root/tmp_dir/archivelog_dir/%U.arc';curr_path=$(basename $0)
#清理rman过期记录
cd $curr_path
./crosscheck_clear.sh
if [[ ! $# -eq 1 ]];thenecho "param error!"exit 1
fiif [[ $1 == "full" ]] ;thenecho "---------------------------BACKUP_FULL----------------------------"BACKUP_FULL
elif [[ $1 = "inc" ]] ;thenecho "---------------------------BACKUP_INC----------------------------"BACKUP_INC
elseecho "param error!"exit 2
fi

清理脚本

#!/bin/shrman target sys/123456 << !
crosscheck archivelog all;
delete expired archivelog all;
yes
crosscheck copy of database;
delete expired copy of database;
yes
quit
!

恢复脚本 (创建channel和设置指定时间点需在run内)

#!/bin/shspfile_path=/root/test_dir/xfs_dir/ne0gq3ne_1_1.ora
controlfile_path=/root/test_dir/xfs_dir/cf_D-ORCL11G_id-1190235964_ng0gq3nh.ctlchmod 777 -R /root/test_dir/xfs_dirsqlplus  sys/123456 as sysdba << !
alter system set control_files='$controlfile_path' scope=spfile;
shutdown immediate;
startup nomount;
exit
!####################### SPFILE ##############################
rman target sys/123456 << !
startup nomount;
restore spfile to '/data/oracle/product/11.2.0/dbs/spfileorcl_mount_test.ora' from '$spfile_path';
!sqlplus  sys/123456 as sysdba << !
create pfile from spfile;
exit
!######################## CONTROLFILE AND DATAFILE ##############################
rman target sys/123456 << !
restore controlfile from '$controlfile_path';
alter database mount;catalog archivelog '/root/test_dir/xfs_dir/archivelog_dir/arch_D-ORCL11G_id-1190235964_S-195_T-1_A-1083521094_n10gq3h3.arc';
catalog archivelog '/root/test_dir/xfs_dir/archivelog_dir/arch_D-ORCL11G_id-1190235964_S-196_T-1_A-1083521094_n20gq3h4.arc';
catalog archivelog '/root/test_dir/xfs_dir/archivelog_dir/arch_D-ORCL11G_id-1190235964_S-197_T-1_A-1083521094_n30gq3h5.arc';
catalog archivelog '/root/test_dir/xfs_dir/archivelog_dir/arch_D-ORCL11G_id-1190235964_S-198_T-1_A-1083521094_nb0gq3l7.arc';
catalog archivelog '/root/test_dir/xfs_dir/archivelog_dir/arch_D-ORCL11G_id-1190235964_S-199_T-1_A-1083521094_nl0gq3og.arc';catalog datafilecopy '/root/test_dir/xfs_dir/data_D-ORCL11G_I-1190235964_TS-USERS_FNO-4_ll0gq3ff.dbf';
catalog datafilecopy '/root/test_dir/xfs_dir/data_D-ORCL11G_I-1190235964_TS-UNDOTBS1_FNO-3_lk0gq3f8.dbf';
catalog datafilecopy '/root/test_dir/xfs_dir/data_D-ORCL11G_I-1190235964_TS-SYSTEM_FNO-1_li0gq3dm.dbf';
catalog datafilecopy '/root/test_dir/xfs_dir/data_D-ORCL11G_I-1190235964_TS-SYSAUX_FNO-2_lj0gq3ef.dbf';
switch database to copy;run{
set until time "to_date('2022-03-10 16:50:00','yyyy-mm-dd hh24:mi:ss')";
recover database;
}exit
!sqlplus  sys/123456 as sysdba << !
alter database open resetlogs;
!echo "restore completely!"

原机恢复单个表空间

rman target sys/123456 << !
run{
sql'alter database datafile 4 offline';
catalog datafilecopy '/data/oracle/oradata/orcl11g/users01.dbf';
switch datafile 4 to copy;
recover datafile 4;
sql'alter database datafile 4 online';
}
exit
!

异机恢复部分表空间比较复杂,必须恢复sys、aux、undo三个表空间和要恢复的表空间一起,过程大致和上面一致,recover database的时候加上'skip tablespace ***'跳过没有数据文件的若干表空间,之后数据库启动会报部分datafile不存在,但不影响其他已恢复的表空间使用。(部分错误需重构控制文件解决)

异机恢复部分表空间(还原参数文件、控制文件,以及注册数据文件、归档日志等步骤此处省略)

rman target sys/123456 << !
run{
set until time "to_date('2022-03-10 16:50:00','yyyy-mm-dd hh24:mi:ss')";
recover database skip forever tablespace users;
}
alter database open resetlogs;
exit
!

查询备份进度

set line 9999
col opname for a35
col start_time for a19
SELECT SID, SERIAL#,opname, to_char(start_time,'yyyy-mm-dd HH24:MI:SS')  start_time, SOFAR, TOTALWORK,
ROUND(SOFAR/TOTALWORK*100,2) "%COMPLETE",ceil(ELAPSED_SECONDS/60) ELAPSED_MI
FROM V$SESSION_LONGOPS
where opname like 'RMAN%' order by start_time asc;

结果如下:(sofar为已完成块数量,totalwork为总备份块数量<单位为8K>。。。其中参数文件、控制文件、数据文件、归档日志的进度各自独立)

root用户下只能登录拥有sysdba权限的用户。(前提先在root用户下设置好ORACLE_HOME和ORACLE_SID环境变量)

查看是否拥有权限:select * from V_$PWFILE_USERS;

授予权限:grant  sysdba,dba,connect,resource,create session  to zhangchen;

撤销权限:revoke sysdba from zhangchen;

全量和增量大小判断(主要是数据文件和归档日志,注:增量大小需开启块跟踪)

开启块跟踪:alter database enable block change tracking using file '/data/oracle/product/11.2.0/bct/changed_block_tracking.log';

数据文件总大小:select sum(bytes) from v$datafile;

查看所有归档日志信息:select SEQUENCE#,NAME,BLOCKS,BLOCK_SIZE from v$archived_log where deleted='NO';

查看全备归档日志总大小(过滤RESETLOGS_ID,FIRST_CHANGE#相同的文件,此类文件MD5完全相同只会备份其中一个):select sum(BLOCKS*BLOCK_SIZE) from (select RECID,BLOCKS,BLOCK_SIZE,row_number() over (partition by RESETLOGS_ID,FIRST_CHANGE# order by RESETLOGS_ID ) rn from v$archived_log where deleted='NO') b where b.rn=1;

查看增量归档日志总大小(从下一个sqn开始):select sum(BLOCKS*BLOCK_SIZE) from (select RECID,BLOCKS,BLOCK_SIZE,row_number() over (partition by RESETLOGS_ID,FIRST_CHANGE# order by RESETLOGS_ID ) rn from v$archived_log where deleted='NO' and SEQUENCE#>=10) b where b.rn=1;

增量数据文件大小:

select
sum(blocks_changed * block_size)
from v$datafile join
(select fno
file#,
sum(bct) blocks_changed
from (select distinct fno, bno, bct from x$krcbit
where vertime >= (select curr_vertime from x$krcfde
where csno=x$krcbit.csno and fno=x$krcbit.fno))
group by fno order by 1)
using(file#);

注:异机恢复无法使用catalog start with自动识别目录下的备份文件,只能1个1个注册。

oracle--rman备份纪要相关推荐

  1. Oracle RMAN备份与还原 - 联机备份讲解

    Oracle RMAN备份与还原 - 联机备份讲解 脱机备份之后,对于RMAN备份有了初步的了解,相对于传统的用户手动管理备份文件,RMAN备份操作起来相对要简单方便的多,但是联机备份相对脱机备份操作 ...

  2. Oracle RMAN备份与还原 - 脱机备份讲解

    Oracle RMAN备份与还原 - 脱机备份讲解 RMAN在数据库服务器的帮助下实现数据库文件.控制文件.数据库文件与控制文件的映像副本.归档日志文件.数据库服务器参数文件的备份. RMAN的特点: ...

  3. Nagios 被动检测oracle Rman备份情况

    Nagios 被动检测oracle Rman备份情况 nagios监控服务器ip:192.168.9.172 被监控服务器ip:192.168.9.133 数据库实例名:orcl 需要开通被监控服务器 ...

  4. oracle rman备份时间点,Oracle Rman 控制RMAN的备份时间,减少IO消耗

    一.问题描述 由于服务器配置不高,备份策略为周末全备.周一至周六差异备份. 平时服务器CPU使用30%左右. 全备份时,开启两个通道,CPU达到70%-80%左右,业务不卡顿.不掉单,session不 ...

  5. oracle rman本地备份,【学习笔记】Oracle RMAN 备份集存储到远程其它服务器实现方法...

    天萃荷净 应运维DBA要求,将服务器本地Oracle数据库的RMAN备份集备份存储到远程其它服务器中,结合案例详细讲解实现步骤 在linux中,要使用rman备份后传输到远程服务器上,可以选择ftp, ...

  6. oracle rman备份时间,Oracle使用RMAN进行备份详述

    备份理论和基本语法 备份概念 执行备份或还原的数据库称为目标.在一些环境下,有许多数据库,因此有许多RMAN目标.应一次连接每个数据库.目标的每个备份都有一些属性: 打开或关闭 完整或部分 完整或增量 ...

  7. Oracle RMAN备份深入解析--联机备份

    RMAN> backup database plus archivelog;   此命令将触发以下操作:    1.首先,进程使用alter system archivelog current命 ...

  8. Windows下oracle RMAN备份脚本

    Windows 下RMAN备份脚本,比较简单.我们看内容. 1.      修改RMAN相关参数 RMAN>show all; RMAN>CONFIGURE CONTROLFILE AUT ...

  9. oracle备份慢,诊断Oracle RMAN备份慢的原因

    ㈠ 先在系统层面查询CPU.IO使用情况:top.iostat.sar...等 ㈡ EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT(); ㈢ rman ta ...

  10. oracle rman备份spfile,RMAN备份恢复之SPFILE的恢复(一)

    缺少初始化文件,数据库是无法启动的.如果通过RMAN备份了初始化参数,那么可以通过RMAN对初始化参数进行恢复. 这篇文章简单介绍CATALOG方式下初始化参数的恢复问题. 初始化参数的丢失和损坏,并 ...

最新文章

  1. pandas使用组合条件筛选、过滤数据行
  2. Spark RDD-行动算子
  3. 理想的计算机职业作文100,我的理想作文100字(通用30篇)
  4. jboss中控制台jmx-console 登录的用户名和密码设置
  5. public static float CompareExchange(ref float location1,float value,float comparand)
  6. 道路里程桩号标注_划重点!我区国、省道交通标志及里程桩“变脸”了,今后开车更享受~...
  7. 【C#】带等待窗体的BackgroundWorker
  8. linux录制声卡声音_不是你唱歌难听,选对麦克风和声卡了吗?
  9. 基础14——文件的上传和下载
  10. PHP编程中如何做到有效配置Apache
  11. 博弈论中的几个经典问题
  12. 我的孤独自学之路----kali 安装及更新源
  13. 创建FTP站点访问超链接
  14. 极品-React中的DOM虚拟DOM,与deff算法,router
  15. cmake-自动识别新增子模块
  16. oracle集群crs,oracle rac集群 crs常用命令(转)
  17. Windows 10的最新版本是什么?
  18. 一键代理浏览器_支持IPv6的防关联指纹浏览器 VMLogin 支持模拟电脑名称、支持修改MAC地址、支持模拟真人输入、支持自定义经纬度...
  19. 【在线翻译英文】的网站
  20. 【pandas 类库】

热门文章

  1. python实现Instagram网络爬虫
  2. STM32G030C8T6读写flash
  3. springtboot 操作es
  4. BD 之 逻辑题 赛马
  5. UML实例(五):在线购物系统设计类图
  6. 怎么直接运行js文件
  7. 视频flv转mp4最快的几种方法(就是不用格式工厂)
  8. red5 1.0.7 集成tomcat 并且 进行整合 官方例子oflaDemo
  9. 浙江行游14---千岛湖,清凉的世界里
  10. logo一键制作器源码