RMAN 备份数据库到DISK后进行数据恢复
RMAN 备份数据库到DISK,然后进行数据恢复
一、rman备份
1. 全备脚本
vi bakup_level0.sql connect target / run { allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk; backup incremental filesperset format "/backup/orcl/lev0_%d_%s_%I_%T_%t.bak" database; release channel c1; release channel c2; release channel c3; allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk; sql "alter system archive logcurrent"; backup format '/backup/orcl/arch_%T_%t_%U' archivelog all delete all input; release channel c1; release channel c2; release channel c3; allocate channel c1 type disk; backup format "/backup/orcl/spfile_%d_%s_%I_%T_%t.bak" spfile; release channel c1; allocate channel c1 type disk; backup format "/backup/orcl/controlfile_%d_%s_%I_%T_%t.bak" (current controlfile); release channel c1; }
-- 执行调用rman脚本(start.sh)
#!/bin/sh # exec: sh start.sh # reload oracle env # reload profile [ -f ${HOME}/.bash_profile ] && . ${HOME}/.bash_profile export NLS_DATE_FORMAT='yyyy-mm-dd HH24:MI:SS' " ]]; then SCRIPT_NAME=$ else echo "usage: $0 filename... " fi # Define the work path APP_PATH=/home/oracle/scripts LOGPATH=${APP_PATH}/logs [[ -d "${APP_PATH}" ]] || mkdir -p ${APP_PATH} [[ -d "${LOGPATH}" ]] || mkdir -p ${LOGPATH} SCRIPT_FILE=${APP_PATH}/${SCRIPT_NAME} LOGFILE=${LOGPATH}/bklevel0_$(date +%Y%m%d%H%M%S).log # execute scripts [[ -f "${SCRIPT_FILE}" ]] && ${ORACLE_HOME}/bin/rman cmdfile ${SCRIPT_FILE} msglog ${LOGFILE}
2. 增备(level 1)脚本
connect target / run { allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk; # REM cumulative backup incremental filesperset format "/backup/orcl/lev1_%d_%s_%I_%T_%t.bak" database; release channel c1; release channel c2; release channel c3; allocate channel c1 type disk; allocate channel c2 type disk; sql "alter system archive log current"; backup format '/backup/orcl/arhc_%T_%t_%U' archivelog all delete all input; release channel c1; release channel c2; allocate channel c1 type disk; backup format "/backup/orcl/spfile_%d_%s_%I_%T_%t.bak" spfile; release channel c1; allocate channel c1 type disk; backup format "/backup/orcl/controlfile_%d_%s_%I_%T_%t.bak" (current controlfile); release channel c1; }
2.2 执行增备脚本
sh start.sh bakup_level1.sh
3. 备份归档日志
-- vi bakup_arch.sql connect target / run { allocate channel c1 type disk; allocate channel c2 type disk; sql "alter system archive log current"; backup format '/backup/orcl/arhc_%T_%t_%U' archivelog all delete all input; release channel c1; release channel c2; allocate channel c1 type disk; backup format "/backup/orcl/spfile_%d_%s_%I_%T_%t.bak" spfile; release channel c1; allocate channel c1 type disk; backup format "/backup/orcl/controlfile_%d_%s_%I_%T_%t.bak" (current controlfile); release channel c1; }
4. 维护rman备份集
connect target / run{ allocate channel for maintenance type disk; report obsolete; delete noprompt obsolete; release channel; }
二、利用rman备份集恢复
1. 恢复步骤
1)安装oracle db软件,建议与源库版本一致;
2)目标端创建pfile,即相关目录(adump);
3)目标端创建密码文件
4)目标端启动nomount状态并创建spfile;
5)rman 恢复控制文件
6)还原数据文件
7)同步归档备份集到目标端并还原归档日志到目标端数据库
8)resetlog打开数据库
9)创建临时表空间
2. 具体操作代码
2.1)目标端创建pfile,即相关目录(adump)
# 创建pfile文件 vi pfile.ora *.audit_file_dest='/oracle/app/oracle/admin/orcl/adump' *.audit_sys_operations=TRUE *.audit_trail='DB' *.compatible='11.2.0.4.0' *.control_files='/oradata1/orcl/control01.ctl' *.db_block_size= *.db_domain='' *.db_files= *.db_name='orcl' *.diagnostic_dest='/oracle/app/oracle' *.dispatchers='' orcl.log_archive_dest_1='location=/arch1' orcl.log_archive_format='orcl_%t_%s_%r.arc' *.max_dump_file_size='1024M' *.O7_DICTIONARY_ACCESSIBILITY=FALSE *.open_cursors= *.parallel_force_local=TRUE *.parallel_max_servers= *.parallel_threads_per_cpu= *.pga_aggregate_target= *.processes= *.remote_login_passwordfile='EXCLUSIVE' *.sga_target= *.undo_tablespace='UNDOTBS1' # 创建目录 export ORACLE_SID=orcl mkdir -p /oracle/app/oracle/admin/${ORACLE_SID}/{adump,pfile,dpdump}
2.2)目标端创建密码文件
2.3)目标端启动nomount状态并创建spfile
sqlplus / as sysdba startup nomount pfile='/home/oracle/pfile.ora'; create spfile from pfile='/home/oracle/pfile.ora'; --使用spfile启动数据库
sqlplus / as sysdba <<EOFshutdown immediate;startup nomount;quit;EOF
2.4)rman 恢复控制文件
rman target /
set dbid=<database id>;
run{ restore controlfile from '/backup/orcl/controlfile_orcl_292_1223534412_20170418_941608807.bak'; # 启动到mount sql 'alter database mount';}
2.5)还原数据文件
connect target /
set dbid=<database id>;
run{allocate channel c1 type disk; allocate channel c2 type disk; allocate channel c3 type disk; to '/oradata1/orcl/system01.dbf'; to '/oradata1/orcl/sysaux01.dbf'; to '/oradata1/orcl/undotbs01.dbf'; to '/oradata1/orcl/users01.dbf'; to '/oradata1/orcl/orcltbs01.dbf'; to '/oradata1/orcl/orcltbs02.dbf'; to '/oradata1/orcl/orcltbs03.dbf'; to '/oradata1/orcl/orcltbs04.dbf'; to '/oradata1/orcl/orcltbs05.dbf'; restore database; switch datafile all; recover database; release channel c1; release channel c2; release channel c3; }
2.6)同步归档备份集到目标端并还原归档日志到目标端数据库
rman target /
set dbid=<database id>;
run{ allocate channel c1 type disk; allocate channel c2 type disk; set archivelog destination to '/backup/orcl/archivelog'; ; release channel c1; release channel c2; }
2.7)resetlog打开数据库
sqlplus "/ as sysdba" <<EOF# reset redo log
alter database rename file '/oraredo1/redo01_1.log' to '/oradata1/orcl/redo01_1.rd';
alter database rename file '/oraredo2/redo01_2.log' to '/oradata1/orcl/redo01_2.rd';
alter database rename file '/oraredo1/redo02_1.log' to '/oradata1/orcl/redo02_1.rd';
alter database rename file '/oraredo2/redo02_2.log' to '/oradata1/orcl/redo02_2.rd';
alter database open resetlogs; quit; EOF
2.8)创建临时表空间
select tablespace_name from dba_tablespaces where contents='TEMPORARY'; create temporary tablespace TEMP1 tempfile '/oradata1/orcl/temp01.dbf' size 10240M reuse; alter database default temporary tablespace TEMP1; drop tablespace TEMP including contents and datafiles;
RMAN 备份数据库到DISK后进行数据恢复的更多相关文章
- Oracle使用rman备份数据库时出现cannot reclaim的错误
1. 按照<2 day DBA>中的guide,设置fast recovery area. SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_S ...
- RMAN备份数据库与恢复数据库(整库)
1 准备 2 1.1 检查数据库归档状态 2 1.2 RMAN登陆目标 2 2 备份全库 2 2.1 创建备份数据存储目录 2 2.2 RMAN备份全库 2 2.3 试验(备份后,改变数据) 5 2. ...
- 数据文件、日志文件、归档文件、控制文件、参数文件及RMAN备份数据库信息查询
一.查看数据库信息:=====================1.数据文件 SQL> SELECT FILE#,STATUS,ENABLED,NAME FROM V$DATAFILE; FILE ...
- 使用RMAN备份数据库
1.1使用控制文件备份全库 1.1.1配置备份路径 1.1.2 RMAN备份全库 1.2使用catalog数据库备份全库 1.2.1配置到远程数据库的TNS 1.2.2创建表空间及设置用户 1.2.3 ...
- RMAN备份数据库与表空间
脚本: 数据库备份: backup database format='/u01/app/oracle/oradata/Backup/oradb_%d_%s.bak'; 表空间备份:backup tab ...
- RAC数据库的RMAN备份异机恢复到单节点数据库
1.首先在rac环境用rman备份数据库.[oracle@rac1 admin]$ rman target /run{allocate channel c1 device type disk conn ...
- Oracle RMAN备份恢复指导书
目 录 1 目的与范围... 1 2 术语和定义... 1 3 角色和职责... 2 4 使用RMAN备份数据库... 2 4.1.1 检查数据库模式... 2 4.1.2 连接到target数据库. ...
- 配置RMAN备份环境
关于配置RMAN备份环境你可以给每个目标数据库设置一些固定的配置,这些配置控制着RMAN多个方面的行为.例如,你可配置备份的保存策略.默认的备份目录.默认的备份设备类型等.你可以用show命令来查看配 ...
- RMAN备份到NFS,报错 ORA-27054
使用RMAN备份数据库到NFS挂载到的本地目录/backup 失败,失败提示如下: RMAN-03009: failure of backup command on ORA_DISK_1 channe ...
随机推荐
- Eclipse中使用printf报错 提示参数类型不对
报错信息: The method printf(String, Object[]) in the type PrintStream is not applicable for the argument ...
- winform窗体 控件【MDI 窗体容器】
MDI :窗体容器 -- 在窗体中放置窗体 属性 IsMdiContainer : 是否是窗体 -- 只有 Form 有此属性 Form2 f2 = new Form2(); ...
- NavicatForOracle无法连接数据库,报错ORA-28547
因为换了新项目,要用到oracle数据库,但是用Navicat连接oracle不像连接MySql那样简单,连接的时候总是报ORA-28547,最后搜了一下解决方案发现是install client没有 ...
- C++ auto 关键字的使用
C++98 auto 早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,自动变量意为拥有自动的生命期,这是多余的,因为就算不使用auto声明,变量依旧拥有自动的生命期: ...
- HDU3416(KB11-O spfa+最大流)
Marriage Match IV Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- iTerm通过堡垒机自动登录服务器
为了保障网络和数据安全,越来越多公司使用堡垒机.iTerm作为一个好用的终端利器,要实现自动通过堡垒机登录服务器的方式有多种.下面我就来介绍一种通过expect脚本的方式完成配置. 第一步,进入/us ...
- 高性能JavaScript(字符串和正则表达式)
字符串连接 +/+=操作符连接 str += "one" + "two"; 这是常用的连接字符串的方法,它运行的时候会经历下面四个步骤: 1.在内存中创建一个临 ...
- [Android] Activity间切换,传递数据
前面照着android系统的裁剪图片的功能自己写了一个相似的工具.功能是大体上实现了,但留下了一个调用的问题:如何从我的程序调用这个裁剪工具,并且获得裁剪后的图片呢? 其实这个也很简单了,就是inte ...
- Python基础知识之疑点难点
一.标识符 (1) 标识符不能以数字开头:以下划线开头的标识符具有特殊的意义,使用时需要特别注意. 以单下划线开头(如_foo)的标识符代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 “ ...
- 【python】python中的json、字典dict
定义 python中,json和dict非常类似,都是key-value的形式,而且json.dict也可以非常方便的通过dumps.loads互转.既然都是key-value格式,为啥还需要进行格式 ...