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

第一种:当前控制文件全部损坏,而数据文件备份,控制文件备份及当前日志处于不同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,结束。 转载请标明出处。

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

  1. 用备份控制文件做不完全恢复下的完全恢复(全备<老>--备份控制文件<次新>--删除表空间andy--日志文件<新>)

    为什么会使用备份的控制文件? 实际工作中主要有两种情况:第一种:当前控制文件全部损坏,而数据文件备份,控制文件备份及当前日志处于不同SCN版本,它们之间又增加过表空间(数据文件).第二种:当前控制文件 ...

  2. 前端vue之属性指令、style和class、条件渲染、列表渲染、事件处理、数据双向绑定、表单控制、v-model进阶

    今日内容概要 属性指令 style和class 条件渲染 列表渲染 事件处理 数据的双向绑定 v-model进阶 购物车案例 内容详细 1.属性指令 <!DOCTYPE html> < ...

  3. 己亥清爽恢复系列之数据文件1篇:SYSTEM物理损坏或丢失(关键表空间)

    己亥清爽系列说明:清爽系列是作为恢复系列的基础篇,基于FS(File System)文件系统的手工还原恢复,也叫基于用户管理的还原恢复.来自于博客园AskScuti 实验说明:在有完全备份基础下,物理 ...

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

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

  5. 【RMAN】Oracle中如何备份控制文件?备份控制文件的方式有哪几种?

    真题1. 如何备份控制文件?备份控制文件的方式有哪几种? 答案:备份控制文件的方式有多种. ① 备份控制文件可以在线进行: SQL> ALTER DATABASE BACKUP CONTROLF ...

  6. Oracle DB备份恢复篇之丢失控制文件

    实验目的 本篇主要模拟控制文件丢失后,如何根据实际情况恢复数据库,才能使数据库尽可能不丢失数据. 实验环境 1)Linux系统环境 [oracle@DG1 ~]$ lsb_release -a LSB ...

  7. ORACLE11g 没有控制文件如何通过rman备份恢复数据的详细实战过程

    1.副总裁需要裸恢复的严峻现实 集团总部的信息部负责人给我打电话说为了找一年前的记录,所以需要对一年前2015年5月1日的数据进行恢复.而2016年初因为进行迁移,所以有些文件可能丢失,手上只有rma ...

  8. 为什么 RMAN 控制文件自动备份的名称格式没有遵循 %F 规则

    在 Oracle 中越是简单的问题,往往越难找到答案,举个例子: 你是否留意观察过在 RMAN 进行备份的时候,自动生成的控制文件名称是否是按照 %F 规则来生成的? 关于控制文件自动备份路径格式,在 ...

  9. Oracle控制文件多路复用以及Oracle备份重建控制文件

    控制文件中记录了oracle数据库的物理结构,也就是记录了数据库数据文件和日志文件的位置,控制文件中还记录了多种SCN,用这些SCN来确定数据文件和日志文件是否是正确的.如果不正确那么数据库就需要恢复 ...

随机推荐

  1. OpenGL绘制棱锥,剔除

    /** * 缓冲区工具类 */public class BufferUtil { /**  * 将浮点数组转换成字节缓冲区  */ public static ByteBuffer arr2ByteB ...

  2. JavaScript实例技巧精选(14)—动态变化背景颜色

    >>点击这里下载完整html源码<< 这是截图: 网页背景颜色随时间变化,核心代码如下: <SCRIPT LANGUAGE="JavaScript"& ...

  3. GridView动态增加行

    GridView动态增加行GridView动态增加行 很多时候,我们需要可编辑的表格,来比较方便的进行数据的录入,比如学习成绩的录入.当然这就要求能够动态的增加行,来一次性录入多个学生的信息.现在用A ...

  4. 10.26最后的模拟DAY2 改造二叉树[中序遍历+严格递增的最长不下降子序列]

    改造二叉树 [题目描述] 小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作“左孩子”和“右孩子”.二叉树被用作二叉搜索树和二叉堆.随后他 ...

  5. Maven-01 安装maven

      maven是apache的一个开源项目.用于管理java项目的构建等.

  6. hdu 2159

    二维背包,dp[i][j]表示忍耐度为i,且还可以杀j个怪时能获得的最大经验值 dp[i][j]=max(dp[i][j],dp[i-r[k]][j-1]+e[k]),r[k]为杀死第k种怪掉的忍耐度 ...

  7. 小菜的SharePoint Tips

    07. 设计模式应用案例(下) 前文用C#代码实现了Facade模式.Adapter模式.Strategy模式.Bridge模式和Abstract Factory模式解决实际业务需求.本文将继续以C# ...

  8. FAQ:仓储实现为什么在基础设施层?

    FAQ:仓储实现为什么在基础设施层? 目录 问答部分参考文章 问答部分返回目录 问: 仓储实现为什么在基础设施层? 答: 领域模型包含三种元素:实体.值对象和服务,这三种元素都可以以某种形式使用仓储, ...

  9. [原创*精华]一键发布ASP.NET Web安装程序,搞WebForm的童鞋看过来...

          重要更新:鉴于很多小伙伴们说看不到图,我这边换了几个浏览器看了下,都看得到的,估计是网速问题,请耐心等待,另外,为了更好的方便大家学习,特此提供源码以及一个word文档,word文档就是本 ...

  10. iOS 开发问题集锦(一)

    最近在QQ群里好多人问一些比较基础的问题,在这罗列一下: 1.键盘上的斜杠键坏掉了,怎么样用快捷键进行注释呢? 首先在Xcode中注释的默认快捷键为:command+/: 其次可以自行修改快捷键:Xc ...