博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用备份控制文件做不完全恢复下的完全恢复(数据文件备份<旧>--新建表空间--控制文件备份<次新>--日志归档文件<新>)...
阅读量:5963 次
发布时间:2019-06-19

本文共 6892 字,大约阅读时间需要 22 分钟。

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



第一种:当前控制文件全部损坏,而数据文件备份,控制文件备份及当前日志处于不同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

本文转自 张冲andy 博客园博客,原文链接:http://www.cnblogs.com/andy6/p/6277637.html   ,如需转载请自行联系原作者

你可能感兴趣的文章
在澳大利亚为Mini团队实施Scrum2年总结
查看>>
HDU Problem 5395 Gym Class 【拓扑排序+优先队列】
查看>>
ExtJs combobox模糊匹配
查看>>
线程中断、线程让步、线程睡眠、线程合并
查看>>
Codeforces Round #532(Div. 2) A.Roman and Browser
查看>>
bupt summer training for 16 #4 ——数论
查看>>
【leetcode】145. Binary Tree Postorder Traversal
查看>>
[CodeForces - 296D]Greg and Graph(floyd)
查看>>
[译] SwiftUI 官方教程 (九)(完结)
查看>>
NodeJS Docker 打包全面优化:优雅停机、多阶段、上下文目录
查看>>
微信开发准备(四)--nat123内网地址公网映射实现
查看>>
EasyUI Calendar 日历
查看>>
26.Extjs 部门列表信息展示页面
查看>>
maven学习手记 - 3
查看>>
Window 命令行神器:cmder
查看>>
Oracle 索引
查看>>
23. requests安装与使用
查看>>
讲讲不怎么有用却很有意义的包围体测试
查看>>
Redhat/Centos6.x安装Chrome
查看>>
JSP 9大内置对象详解
查看>>