用备份控制文件做不完全恢复下的完全恢复(数据文件备份旧--新建表空间--控制文件备份次新--日志归档文件新)...
为什么会使用备份的控制文件? 实际工作中主要有两种情况:
第一种:当前控制文件全部损坏,而数据文件备份,控制文件备份及当前日志处于不同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
用备份控制文件做不完全恢复下的完全恢复(数据文件备份旧--新建表空间--控制文件备份次新--日志归档文件新)...相关推荐
- mysql数据库表空间压缩,表空间中有数据也可以压缩表空间(数据文件)大小!!...
首先说声抱歉,在 中提出以下观点,经过研究请教,发现观点都是错误的,在这里给予更正. 3.得知表空间中有数据不能resize数据文件的大小:要想resize数据文件,那么表空间中必须没有数据. 更正后 ...
- oracle 控制文件 dump,将控制文件dump出来研究下内容
今天有点时间,刚好研究下oracle的控制文件内容: SQL> oradebug setmypid 已处理的语句 SQL> oradebug dump controlf 3; 已处理的语句 ...
- oracle控制文件全备失败,Oracle数据库案例整理-恢复数据库失败-主备机控制文件所在目录不同...
1.1 现象描述 使用主机节点的控制文件在备机节点上进行恢复时失败. · 主节点控制文件目录为:"/opt/HUAWEI/cgp/workshop/omu/dat ...
- 创建表空间以及用户,授予权限,查看表空间名称及大小,物理文件的名称及大小,数据库的创建日期和归档方式,数据库的版本,数据库库对象,表空间的使用情况,表空间读写
需求: 数据库机器: 数据库类型:oracle 数据库用户名密码:mnp/mnp 表空间:tbs_mnp_data ...
- 前端之Vue:模板语法、指令、Style 和 Class、条件渲染、列表渲染、事件处理、数据双向绑定、表单控制
目录 一. 模板语法 插值语法 二. 指令 2.1 文本指令 v-html:让HTML渲染成页面 v-text:标签内容显示js变量对应的值 v-show:显示/隐藏内容 v-if:显示/删除内容 2 ...
- 丢失控制文件,有旧的备份控制文件,之后有drop表空间和create表空间的操作恢复。...
一.实验说明: 本实验是基于: <丢失控制文件恢复实验记录--1(当前的控制文件损坏,使用旧控制文件进行恢复(旧控制文件之后DROP了表空间的情况))> 和 <丢失控制文件恢复实验记 ...
- Oracle控制文件解析
宁愿做一朵篱下的野花,不愿做一朵受恩惠的蔷薇.与其逢迎献媚,偷取别人的欢心,毋宁被众人所鄙弃!---------<莎士比亚> 今朝有心,他朝有路,今日有情,明日有邻!掌握大脑,赢取人生.O ...
- oracle 控制文件在哪里设置_oracle的controlfile控制文件
参数文件中定义控制文件位置及个数,建议控制文件放在不同位置,最多可以创建8个,多个控制文件间是镜像的关系. 控制文件包含: 数据库名字及标识 数据库创建的时间戳 表空间名字 数据文件和联机重做日志文件 ...
- Oracle 无备份情况下的恢复--控制文件/数据文件
13.3无备份恢复控制文件 没有备份恢复控制文件其实就是在nomount状态,create control创建一个新的控制文件. dba必须知道4个信息才能正确的创建:数据库名.在线日志路径及其大小. ...
最新文章
- java前台传多个id用什么接收_jsp 页面传多个id 到java后台的处理方式
- AIoT重磅报告:四大关键助力,AI+IoT重新定义未来的可能性
- iOS 最新发布App Store流程
- pandas fillna_Pandas极简教程——数据清洗
- Oracle--SQL技巧之二(多行记录用逗号拼接在一起)
- UDP sendto和recvfrom使用详解
- C++ primer 笔记(二)
- 人脑意识转入量子计算机,人脑产生意识:可能是因为量子纠缠
- [新品发布]全球首个百万IOPS云盘来了 阿里云推出超高性能云盘ESSD
- Vue服务端配置示例
- android 拖动缩放窗口大小,Android小应用----图片的拖动、缩放
- vsftpd增加用户 linux,Ubuntu Linux中vsFTP添加用户
- Java基础知识之数组的初始化和基本操作
- 在线教育、直播教育、课程直播、订单系统、老师介绍、收入提现、在线学习、业绩统计、课程统计、选老师、选课程、作业管理、课程管理、报名统计、在线教育管理系统、axure原型、rp源文件
- 51Nod-1050 循环数组最大段和【最大子段和+最小子段和+DP】
- 关于动漫的HTML网页设计作业——动漫网页(刀剑神域6个页面)
- 计算机开机后无法正常显示桌面图标,电脑开机后不显示桌面图标怎么办
- Entrust Datacard完成对泰雷兹旗下市场领先的通用硬件安全公司nCipher Security的收购
- 数字孪生核电站促进界面监测的应用实践
- 博客大赛,我的一场生意一场梦