为什么会使用备份的控制文件? 实际工作中主要有两种情况:

第一种:当前控制文件全部损坏,而数据文件备份,控制文件备份及当前日志处于不同SCN版本,它们之间又增加过表空间(数据文件)。
第二种:当前控制文件没有损坏,但想要恢复被删除的表空间。

实验1:  有所有数据文件备份(老)------(新建表空间andy)-----备份控制文件(次新)------日志文件(新)

环境:当前控制文件损坏,数据文件损坏,有全备但之后增加了表空间,并备份了配套的控制文件,利用备份控制文件备份。

分析:新建表空间数据文件损坏, 全备里没有该数据文件的备份及控制文件描述,当前控制文件又丢失,只能用备份的控制文件恢复。

1)准备环境

--生成要备份的数据文件的命令
SQL>  select 'ho cp ' || name || ' /home/oracle/coldbak' from v$datafile;

'HOCP'||NAME||'/HOME/ORACLE/COLDBAK'
-------------------------------------------------------------------------
ho cp /home/oracle/app/oradata/orcl/system01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/sysaux01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/undotbs01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/users01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/tbtb01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/ogg01.dbf /home/oracle/coldbak

6 rows selected.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> ho cp /home/oracle/app/oradata/orcl/control01.ctl /home/oracle/coldbak
ho cp /home/oracle/app/flash_recovery_area/orcl/control02.ctl /home/oracle/coldbak
SQL> ho cp /home/oracle/app/oradata/orcl/system01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/sysaux01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/undotbs01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/users01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/tbtb01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/ogg01.dbf /home/oracle/coldbak

SQL> startup;
ORACLE instance started.

Total System Global Area 1068937216 bytes
Fixed Size    2220200 bytes
Variable Size  729812824 bytes
Database Buffers  331350016 bytes
Redo Buffers    5554176 bytes
Database mounted.
Database opened.

SQL> select * from v$tablespace;

TS# NAME                           INC BIG FLA ENC
---------- ------------------------------ --- --- --- ---
         0 SYSTEM                         YES NO  YES
         1 SYSAUX                         YES NO  YES
         2 UNDOTBS1                       YES NO  YES
         4 USERS                          YES NO  YES
         3 TEMP                           NO  NO  YES
         6 LZY                            YES NO  YES
         7 GOLDGATE                       YES NO  YES

7 rows selected.

SQL> create tablespace andy datafile '/home/oracle/app/oradata/orcl/andy01.dbf' size 1m;

Tablespace created.

SQL> select * from andy.andy;
select * from andy.andy
                   *
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> create table andy.andy(id int) tablespace andy;

Table created.

SQL> insert into andy.andy values (1) ;

1 row created.

SQL> commit;

Commit complete.

SQL> select * from andy.andy;

ID
----------
         1
SQL> alter system switch logfile;

-- 备份控制文件

SQL> alter database backup controlfile to '/home/oracle/coldbak/ctl01.bak';

Database altered.

2)模拟andy01.dbf损坏

SQL> ho rm -rf /home/oracle/app/oradata/orcl/andy01.dbf

SQL> alter system flush buffer_cache;

System altered.

SQL> select * from andy;
select * from andy
*
ERROR at line 1:
ORA-01116: error in opening database file 7
ORA-01110: data file 7: '/home/oracle/app/oradata/orcl/andy01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

3)关闭数据库

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

4)恢复所有数据文件备份,准备做不完全恢复
[oracle@11g orcl]$ rm -rf *.dbf
[oracle@11g orcl]rm -rf /home/oracle/app/oradata/orcl/control01.ctl
[oracle@11g orcl]$ rm -rf /home/oracle/app/flash_recovery_area/orcl/control02.ctl
[oracle@11g coldbak]$ cp ctl01.bak /home/oracle/app/oradata/orcl/control01.ctl
[oracle@11g coldbak]$ cp ctl01.bak /home/oracle/app/flash_recovery_area/orcl/control02.ctl
[oracle@11g coldbak]$ cp *.dbf /home/oracle/app/oradata/orcl/

SQL> alter database create datafile '/home/oracle/app/oradata/orcl/andy01.dbf';

Database altered.

SQL> startup;
ORACLE instance started.

Total System Global Area 1068937216 bytes
Fixed Size    2220200 bytes
Variable Size  729812824 bytes
Database Buffers  331350016 bytes
Redo Buffers    5554176 bytes
Database mounted.
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

SQL> col name for a50;
SQL> select file#,checkpoint_change#,name from v$datafile;

FILE# CHECKPOINT_CHANGE# NAME
---------- ------------------ --------------------------------------------------
         1            2036303 /home/oracle/app/oradata/orcl/system01.dbf
         2            2036303 /home/oracle/app/oradata/orcl/sysaux01.dbf
         3            2036303 /home/oracle/app/oradata/orcl/undotbs01.dbf
         4            2036303 /home/oracle/app/oradata/orcl/users01.dbf
         5            2036303 /home/oracle/app/oradata/orcl/tbtb01.dbf
         6            2036303 /home/oracle/app/oradata/orcl/ogg01.dbf
         7            2036424 /home/oracle/app/oradata/orcl/andy01.dbf

7 rows selected.

SQL> select file#,checkpoint_change#  from v$datafile_header;

FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1            2035583
         2            2035583
         3            2035583
         4            2035583
         5            2035583
         6            2035583
         7                  0

7 rows selected.
说明:
a)file7 在控制文件里记录是andy01.dbf,而与之对应的数据文件3是不存在的
b)备份的数据备份的scn比控制文件scn的还老。

5)使用备份控制文件恢复

SQL> recover database using backup controlfile;
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 7: '/home/oracle/app/oradata/orcl/andy01.dbf'
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: '/home/oracle/app/oradata/orcl/andy01.dbf'

说明:
此错是因为老备份里没有andy表空间,但只要控制文件里记录了andy就好办,方法是建一个datafile的空文件,而其中内容可由日志文件recover(前滚)时填补出来。

SQL> alter database create datafile '/home/oracle/app/oradata/orcl/andy01.dbf';

Database altered.

--再次使用备份控制文件恢复
SQL> recover database using backup controlfile;
ORA-00279: change 2035583 generated at 12/12/2014 04:53:45 needed for thread 1
ORA-00289: suggestion : /home/oracle/archivelog/1_1_866090437.dbf
ORA-00280: change 2035583 for thread 1 is in sequence #1

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: change 2036542 generated at 12/12/2014 05:11:01 needed for thread 1
ORA-00289: suggestion : /home/oracle/archivelog/1_2_866090437.dbf
ORA-00280: change 2036542 for thread 1 is in sequence #2
ORA-00278: log file '/home/oracle/archivelog/1_1_866090437.dbf' no longer
needed for this recovery

ORA-00308: cannot open archived log '/home/oracle/archivelog/1_2_866090437.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

说明:
//archive日志前滚结束了,但当前日志里还有信息需要恢复
//注意: 对于这个例子来说,一定要看清提示:如果提示的不是归档的日志(是当前日志),则要直接要输入filename 不能输入auto,否则open时会失败。

--再次做恢复
SQL> recover database using backup controlfile;
ORA-00279: change 2036542 generated at 12/12/2014 05:11:01 needed for thread 1
ORA-00289: suggestion : /home/oracle/archivelog/1_2_866090437.dbf
ORA-00280: change 2036542 for thread 1 is in sequence #2

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/home/oracle/app/oradata/orcl/redo02.log                  ## 把current日志给它
Log applied.
Media recovery complete.

6)resetlogs打开数据库

SQL> alter database open resetlogs;

Database altered.

7) 验证

SQL> select * from andy.andy;

ID
----------
         1

OK,结束。 转载请标明出处。

转载于:https://www.cnblogs.com/andy6/p/6277637.html

用备份控制文件做不完全恢复下的完全恢复(数据文件备份旧--新建表空间--控制文件备份次新--日志归档文件新)...相关推荐

  1. mysql数据库表空间压缩,表空间中有数据也可以压缩表空间(数据文件)大小!!...

    首先说声抱歉,在 中提出以下观点,经过研究请教,发现观点都是错误的,在这里给予更正. 3.得知表空间中有数据不能resize数据文件的大小:要想resize数据文件,那么表空间中必须没有数据. 更正后 ...

  2. oracle 控制文件 dump,将控制文件dump出来研究下内容

    今天有点时间,刚好研究下oracle的控制文件内容: SQL> oradebug setmypid 已处理的语句 SQL> oradebug dump controlf 3; 已处理的语句 ...

  3. oracle控制文件全备失败,Oracle数据库案例整理-恢复数据库失败-主备机控制文件所在目录不同...

    1.1       现象描述 使用主机节点的控制文件在备机节点上进行恢复时失败. ·         主节点控制文件目录为:"/opt/HUAWEI/cgp/workshop/omu/dat ...

  4. 创建表空间以及用户,授予权限,查看表空间名称及大小,物理文件的名称及大小,数据库的创建日期和归档方式,数据库的版本,数据库库对象,表空间的使用情况,表空间读写

    需求: 数据库机器:            数据库类型:oracle            数据库用户名密码:mnp/mnp            表空间:tbs_mnp_data           ...

  5. 前端之Vue:模板语法、指令、Style 和 Class、条件渲染、列表渲染、事件处理、数据双向绑定、表单控制

    目录 一. 模板语法 插值语法 二. 指令 2.1 文本指令 v-html:让HTML渲染成页面 v-text:标签内容显示js变量对应的值 v-show:显示/隐藏内容 v-if:显示/删除内容 2 ...

  6. 丢失控制文件,有旧的备份控制文件,之后有drop表空间和create表空间的操作恢复。...

    一.实验说明: 本实验是基于: <丢失控制文件恢复实验记录--1(当前的控制文件损坏,使用旧控制文件进行恢复(旧控制文件之后DROP了表空间的情况))> 和 <丢失控制文件恢复实验记 ...

  7. Oracle控制文件解析

    宁愿做一朵篱下的野花,不愿做一朵受恩惠的蔷薇.与其逢迎献媚,偷取别人的欢心,毋宁被众人所鄙弃!---------<莎士比亚> 今朝有心,他朝有路,今日有情,明日有邻!掌握大脑,赢取人生.O ...

  8. oracle 控制文件在哪里设置_oracle的controlfile控制文件

    参数文件中定义控制文件位置及个数,建议控制文件放在不同位置,最多可以创建8个,多个控制文件间是镜像的关系. 控制文件包含: 数据库名字及标识 数据库创建的时间戳 表空间名字 数据文件和联机重做日志文件 ...

  9. Oracle 无备份情况下的恢复--控制文件/数据文件

    13.3无备份恢复控制文件 没有备份恢复控制文件其实就是在nomount状态,create control创建一个新的控制文件. dba必须知道4个信息才能正确的创建:数据库名.在线日志路径及其大小. ...

最新文章

  1. java前台传多个id用什么接收_jsp 页面传多个id 到java后台的处理方式
  2. AIoT重磅报告:四大关键助力,AI+IoT重新定义未来的可能性
  3. iOS 最新发布App Store流程
  4. pandas fillna_Pandas极简教程——数据清洗
  5. Oracle--SQL技巧之二(多行记录用逗号拼接在一起)
  6. UDP sendto和recvfrom使用详解
  7. C++ primer 笔记(二)
  8. 人脑意识转入量子计算机,人脑产生意识:可能是因为量子纠缠
  9. [新品发布]全球首个百万IOPS云盘来了 阿里云推出超高性能云盘ESSD
  10. Vue服务端配置示例
  11. android 拖动缩放窗口大小,Android小应用----图片的拖动、缩放
  12. vsftpd增加用户 linux,Ubuntu Linux中vsFTP添加用户
  13. Java基础知识之数组的初始化和基本操作
  14. 在线教育、直播教育、课程直播、订单系统、老师介绍、收入提现、在线学习、业绩统计、课程统计、选老师、选课程、作业管理、课程管理、报名统计、在线教育管理系统、axure原型、rp源文件
  15. 51Nod-1050 循环数组最大段和【最大子段和+最小子段和+DP】
  16. 关于动漫的HTML网页设计作业——动漫网页(刀剑神域6个页面)
  17. 计算机开机后无法正常显示桌面图标,电脑开机后不显示桌面图标怎么办
  18. Entrust Datacard完成对泰雷兹旗下市场领先的通用硬件安全公司nCipher Security的收购
  19. 数字孪生核电站促进界面监测的应用实践
  20. 博客大赛,我的一场生意一场梦

热门文章

  1. ftp 425 问题
  2. 剑指offer:二位数组中的查找
  3. Ymal格式转Properties格式
  4. Jquery源码分析之匿名函数的自执行
  5. JavaScript 之 call和apply,bind 的模拟实现
  6. 简明现代魔法博客图书馆之php学习记录
  7. node.js 多异步之间的协作方案
  8. iOS开发关于block学习的总结
  9. 转:java中数组与List相互转换的方法
  10. 使用GDAL将12bit量化图像转为16bit或者8bit