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后进行数据恢复的更多相关文章

  1. Oracle使用rman备份数据库时出现cannot reclaim的错误

    1. 按照<2 day DBA>中的guide,设置fast recovery area. SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_S ...

  2. RMAN备份数据库与恢复数据库(整库)

    1 准备 2 1.1 检查数据库归档状态 2 1.2 RMAN登陆目标 2 2 备份全库 2 2.1 创建备份数据存储目录 2 2.2 RMAN备份全库 2 2.3 试验(备份后,改变数据) 5 2. ...

  3. 数据文件、日志文件、归档文件、控制文件、参数文件及RMAN备份数据库信息查询

    一.查看数据库信息:=====================1.数据文件 SQL> SELECT FILE#,STATUS,ENABLED,NAME FROM V$DATAFILE; FILE ...

  4. 使用RMAN备份数据库

    1.1使用控制文件备份全库 1.1.1配置备份路径 1.1.2 RMAN备份全库 1.2使用catalog数据库备份全库 1.2.1配置到远程数据库的TNS 1.2.2创建表空间及设置用户 1.2.3 ...

  5. RMAN备份数据库与表空间

    脚本: 数据库备份: backup database format='/u01/app/oracle/oradata/Backup/oradb_%d_%s.bak'; 表空间备份:backup tab ...

  6. RAC数据库的RMAN备份异机恢复到单节点数据库

    1.首先在rac环境用rman备份数据库.[oracle@rac1 admin]$ rman target /run{allocate channel c1 device type disk conn ...

  7. Oracle RMAN备份恢复指导书

    目 录 1 目的与范围... 1 2 术语和定义... 1 3 角色和职责... 2 4 使用RMAN备份数据库... 2 4.1.1 检查数据库模式... 2 4.1.2 连接到target数据库. ...

  8. 配置RMAN备份环境

    关于配置RMAN备份环境你可以给每个目标数据库设置一些固定的配置,这些配置控制着RMAN多个方面的行为.例如,你可配置备份的保存策略.默认的备份目录.默认的备份设备类型等.你可以用show命令来查看配 ...

  9. RMAN备份到NFS,报错 ORA-27054

    使用RMAN备份数据库到NFS挂载到的本地目录/backup 失败,失败提示如下: RMAN-03009: failure of backup command on ORA_DISK_1 channe ...

随机推荐

  1. Eclipse中使用printf报错 提示参数类型不对

    报错信息: The method printf(String, Object[]) in the type PrintStream is not applicable for the argument ...

  2. winform窗体 控件【MDI 窗体容器】

    MDI :窗体容器 -- 在窗体中放置窗体 属性 IsMdiContainer  : 是否是窗体          -- 只有 Form 有此属性    Form2 f2 = new Form2(); ...

  3. NavicatForOracle无法连接数据库,报错ORA-28547

    因为换了新项目,要用到oracle数据库,但是用Navicat连接oracle不像连接MySql那样简单,连接的时候总是报ORA-28547,最后搜了一下解决方案发现是install client没有 ...

  4. C++ auto 关键字的使用

    C++98 auto 早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,自动变量意为拥有自动的生命期,这是多余的,因为就算不使用auto声明,变量依旧拥有自动的生命期: ...

  5. HDU3416(KB11-O spfa+最大流)

    Marriage Match IV Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  6. iTerm通过堡垒机自动登录服务器

    为了保障网络和数据安全,越来越多公司使用堡垒机.iTerm作为一个好用的终端利器,要实现自动通过堡垒机登录服务器的方式有多种.下面我就来介绍一种通过expect脚本的方式完成配置. 第一步,进入/us ...

  7. 高性能JavaScript(字符串和正则表达式)

    字符串连接 +/+=操作符连接 str += "one" + "two"; 这是常用的连接字符串的方法,它运行的时候会经历下面四个步骤: 1.在内存中创建一个临 ...

  8. [Android] Activity间切换,传递数据

    前面照着android系统的裁剪图片的功能自己写了一个相似的工具.功能是大体上实现了,但留下了一个调用的问题:如何从我的程序调用这个裁剪工具,并且获得裁剪后的图片呢? 其实这个也很简单了,就是inte ...

  9. Python基础知识之疑点难点

    一.标识符 (1) 标识符不能以数字开头:以下划线开头的标识符具有特殊的意义,使用时需要特别注意. 以单下划线开头(如_foo)的标识符代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 “ ...

  10. 【python】python中的json、字典dict

    定义 python中,json和dict非常类似,都是key-value的形式,而且json.dict也可以非常方便的通过dumps.loads互转.既然都是key-value格式,为啥还需要进行格式 ...