一、实验说明:

本文转载于Luocs的丢失控制文件恢复实验记录--4,此处属于转载+模拟。该实验其实跟 《丢失控制文件恢复实验记录--2(当前的控制文件损坏,使用旧控制文件进行恢复(旧控制文件之后新增了表空间的情况))》类似,就是少了利用备份的旧控制文件恢复而已。

操作系统:rhel 5.4 x32

数据库:oracle 11g r2

二、实验操作:

  ----先导出一个跟踪文件trace----  1 SQL> alter database backup controlfile to trace;
  2
  3 Database altered.
  4
  5 SQL> select value from v$diag_info where NAME = 'Default Trace File';
  6
  7 VALUE
  8 --------------------------------------------------------------------------------
  9 /u01/app/oracle/diag/rdbms/yft/yft/trace/yft_ora_3844.trc
 10
  ----查看trace内容---- 11 [oracle@yft ~]$ sed -n '/CREATE CONTROLFILE.*NORESETLOGS/,/;/p' /u01/app/oracle/diag/rdbms/yft/yft/trace/yft_ora_3844.trc
 12 CREATE CONTROLFILE REUSE DATABASE "YFT" NORESETLOGS  ARCHIVELOG
 13     MAXLOGFILES 16
 14     MAXLOGMEMBERS 3
 15     MAXDATAFILES 100
 16     MAXINSTANCES 8
 17     MAXLOGHISTORY 292
 18 LOGFILE
 19   GROUP 1 '/u01/app/oracle/oradata/yft/redo01.log'  SIZE 50M BLOCKSIZE 512,
 20   GROUP 2 '/u01/app/oracle/oradata/yft/redo02.log'  SIZE 50M BLOCKSIZE 512,
 21   GROUP 3 '/u01/app/oracle/oradata/yft/redo03.log'  SIZE 50M BLOCKSIZE 512
 22 -- STANDBY LOGFILE
 23 DATAFILE
 24   '/u01/app/oracle/oradata/yft/system01.dbf',
 25   '/u01/app/oracle/oradata/yft/sysaux01.dbf',
 26   '/u01/app/oracle/oradata/yft/undotbs01.dbf',
 27   '/u01/app/oracle/oradata/yft/users01.dbf',
 28   '/u01/app/oracle/oradata/yft/example01.dbf',
 29   '/u01/app/oracle/oradata/yft/jack01.dbf'
 30 CHARACTER SET AL32UTF8
 31 ;
 32
  ----产生一些数据---- 33 SQL> create tablespace luocs datafile '/u01/app/oracle/oradata/yft/luocs01.dbf' size 50m;
 34
 35 Tablespace created.
 36
 37 SQL> create user luocs identified by oracle default tablespace luocs;
 38
 39 User created.
 40
 41 SQL> grant resource,connect to luocs;
 42
 43 Grant succeeded.
 44
 45 SQL> create table luocs.t1 as select * from dba_objects where rownum<10000;
 46
 47 Table created.
 48
 49 SQL> alter system switch logfile;
 50
 51 System altered.
 52
 53 SQL> alter system switch logfile;
 54
 55 System altered.
 56
 57 SQL> alter system switch logfile;
 58
 59 System altered.
 60
 61 SQL> alter system switch logfile;
 62
 63 System altered.
 64
 65 SQL> alter system switch logfile;
 66
 67 System altered.
 68
 69 SQL> alter system switch logfile;
 70
 71 System altered.
 72
 73 SQL> alter system switch logfile;
 74
 75 System altered.
 76
 77 SQL> select max(sequence#) from v$archived_log;
 78
 79 MAX(SEQUENCE#)
 80 --------------
 81          8
 82
 83 SQL> alter system switch logfile;
 84
 85 System altered.
 86
 87 SQL> select max(sequence#) from v$archived_log;
 88
 89 MAX(SEQUENCE#)
 90 --------------
 91          9
 92
 93 SQL> insert into luocs.t1 select * from luocs.t1;
 94
 95 9999 rows created.
 96
 97 SQL> commit;
 98
 99 Commit complete.
100
101 SQL> select count(*) from test.t1;
102
103   COUNT(*)
104 ----------
105      43452
106
107 SQL> insert into test.t1 select * from test.t1 where rownum<10000;
108
109 9999 rows created.
110
111 SQL> alter system switch logfile;
112
113 System altered.
114
115 SQL> select count(*) from test.t1;
116
117   COUNT(*)
118 ----------
119      53451
120
121 SQL> select count(*) from luocs.t1;
122
123   COUNT(*)
124 ----------
125      19998
126
127 SQL> select max(sequence#) from v$archived_log;
128
129 MAX(SEQUENCE#)
130 --------------
131         10
132
133 SQL> insert into luocs.t1 select * from luocs.t1 where rownum<10000;
134
135 9999 rows created.
136
137 SQL> insert into test.t1 select * from test.t1 where rownum<10000;
138
139 9999 rows created.
140
141 SQL> commit;
142
143 Commit complete.
144
145 SQL> alter system switch logfile;
146
147 System altered.
148
149 SQL> select max(sequence#) from v$archived_log;
150
151 MAX(SEQUENCE#)
152 --------------
153         11
154
155 SQL> select count(*) from luocs.t1;
156
157   COUNT(*)
158 ----------
159      29997
160
161 SQL> select count(*) from test.t1;
162
163   COUNT(*)
164 ----------
165      63450
166 ----模拟丢失控制文件,丢失归档文件----167 SQL> shutdown abort;
168 ORACLE instance shut down.
169
170 [oracle@yft ~]$ mv /u01/app/oracle/flash_recovery_area/YFT/archivelog/2013_01_12/* /tmp/bak/
171 [oracle@yft ~]$ ll /tmp/bak
172 total 6572
173 -rw-r----- 1 oracle oinstall 2340864 Jan 12 08:44 o1_mf_1_10_8h1dgmdr_.arc
174 -rw-r----- 1 oracle oinstall 2326528 Jan 12 08:45 o1_mf_1_11_8h1djno1_.arc
175 -rw-r----- 1 oracle oinstall 2017280 Jan 12 08:42 o1_mf_1_2_8h1dcff7_.arc
176 -rw-r----- 1 oracle oinstall    1024 Jan 12 08:42 o1_mf_1_3_8h1dckqv_.arc
177 -rw-r----- 1 oracle oinstall    2560 Jan 12 08:42 o1_mf_1_4_8h1dcopp_.arc
178 -rw-r----- 1 oracle oinstall    1024 Jan 12 08:42 o1_mf_1_5_8h1dcpm6_.arc
179 -rw-r----- 1 oracle oinstall    1024 Jan 12 08:42 o1_mf_1_6_8h1dcqxs_.arc
180 -rw-r----- 1 oracle oinstall    1024 Jan 12 08:42 o1_mf_1_7_8h1dcrt3_.arc
181 -rw-r----- 1 oracle oinstall    1024 Jan 12 08:42 o1_mf_1_8_8h1dcsq9_.arc
182 -rw-r----- 1 oracle oinstall    1024 Jan 12 08:42 o1_mf_1_9_8h1dd31j_.arc
183 ----启动报错----184 SQL> startup
185 ORACLE instance started.
186
187 Total System Global Area  330600448 bytes
188 Fixed Size            1336344 bytes
189 Variable Size          247466984 bytes
190 Database Buffers       75497472 bytes
191 Redo Buffers            6299648 bytes
192 ORA-00205: error in identifying control file, check alert log for more info
193
194 ----直接重建控制文件----195 SQL>CREATE CONTROLFILE REUSE DATABASE "YFT" NORESETLOGS  ARCHIVELOG
196     MAXLOGFILES 16
197     MAXLOGMEMBERS 3
198     MAXDATAFILES 100
199     MAXINSTANCES 8
200     MAXLOGHISTORY 292
201 LOGFILE
202   GROUP 1 '/u01/app/oracle/oradata/yft/redo01.log'  SIZE 50M BLOCKSIZE 512,
203   GROUP 2 '/u01/app/oracle/oradata/yft/redo02.log'  SIZE 50M BLOCKSIZE 512,
204  10    GROUP 3 '/u01/app/oracle/oradata/yft/redo03.log'  SIZE 50M BLOCKSIZE 512
205   '/u01/app/oracle/oradata/yft/system01.dbf',
206   '/u01/app/oracle/oradata/yft/sysaux01.dbf',
207   '/u01/app/oracle/oradata/yft/undotbs01.dbf',
208   '/u01/app/oracle/oradata/yft/users01.dbf',
209   '/u01/app/oracle/oradata/yft/example01.dbf',
210   '/u01/app/oracle/oradata/yft/jack01.dbf'
211 CHARACTER SET AL32UTF8
212 19  ;
213
214 Control file created.
215 ----因为拿的是旧的控制文件来创建的,所以看不到后来添加的数据文件信息----216 SQL> col name for a45;
217 SQL> select file#,name,status from v$datafile;
218
219      FILE# NAME                                      STATUS
220 ---------- ----------------------------------------- -------
221      1 /u01/app/oracle/oradata/yft/system01.dbf      SYSTEM
222      2 /u01/app/oracle/oradata/yft/sysaux01.dbf      RECOVER
223      3 /u01/app/oracle/oradata/yft/undotbs01.dbf     RECOVER
224      4 /u01/app/oracle/oradata/yft/users01.dbf       RECOVER
225      5 /u01/app/oracle/oradata/yft/example01.dbf     RECOVER
226      6 /u01/app/oracle/oradata/yft/jack01.dbf        RECOVER
227
228 6 rows selected.
229 ----恢复数据库,报错找不到10号日志文件----230 RMAN> recover database;
231
232 Starting recover at 12-JAN-13
233 using target database control file instead of recovery catalog
234 allocated channel: ORA_DISK_1
235 channel ORA_DISK_1: SID=22 device type=DISK
236
237 starting media recovery
238
239 unable to find archived log
240 archived log thread=1 sequence=10
241 RMAN-00571: ===========================================================
242 RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
243 RMAN-00571: ===========================================================
244 RMAN-03002: failure of recover command at 01/12/2013 08:48:40
245 RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 10 and starting SCN of 879342
246
247 SQL> col member for a45;
248 SQL> col status for a15;
249 SQL> select b.sequence#, a.member, b.status from v$logfile a, v$log b where a.group#=b.group#;
250 ----查看当前日志文件信息:----251  SEQUENCE# MEMBER                                 STATUS
252 ---------- -------------------------------------- ---------------
253     10 /u01/app/oracle/oradata/yft/redo01.log     INACTIVE
254     11 /u01/app/oracle/oradata/yft/redo02.log     INACTIVE
255     12 /u01/app/oracle/oradata/yft/redo03.log     CURRENT
256 ----发现上面正好有需要的10号文件,执行基于控制文件恢复一下----257 SQL> recover database using backup controlfile;
258 ORA-00279: change 879342 generated at 01/12/2013 08:42:42 needed for thread 1
259 ORA-00289: suggestion :
260 /u01/app/oracle/flash_recovery_area/YFT/archivelog/2013_01_12/o1_mf_1_10_%u_.arc
261 ORA-00280: change 879342 for thread 1 is in sequence #10
262
263
264 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
265 /u01/app/oracle/oradata/yft/redo01.log
266 ORA-00279: change 879375 generated at 01/12/2013 08:44:03 needed for thread 1
267 ORA-00289: suggestion :
268 /u01/app/oracle/flash_recovery_area/YFT/archivelog/2013_01_12/o1_mf_1_11_%u_.arc
269 ORA-00280: change 879375 for thread 1 is in sequence #11
270 ORA-00278: log file '/u01/app/oracle/oradata/yft/redo01.log' no longer needed
271 for this recovery
272
273
274 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
275 /u01/app/oracle/oradata/yft/redo02.log
276 ORA-00279: change 879451 generated at 01/12/2013 08:45:08 needed for thread 1
277 ORA-00289: suggestion :
278 /u01/app/oracle/flash_recovery_area/YFT/archivelog/2013_01_12/o1_mf_1_12_%u_.arc
279 ORA-00280: change 879451 for thread 1 is in sequence #12
280 ORA-00278: log file '/u01/app/oracle/oradata/yft/redo02.log' no longer needed
281 for this recovery
282
283
284 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
285 /u01/app/oracle/oradata/yft/redo03.log
286 Log applied.
287 Media recovery complete.----再查看数据文件的状态,在这里依然看不到我们后创建的数据文件----288 SQL> select file#,name,status from v$datafile;
289
290      FILE# NAME                                      STATUS
291 ---------- ---------------------------------------- ---------------
292      1 /u01/app/oracle/oradata/yft/system01.dbf      SYSTEM
293      2 /u01/app/oracle/oradata/yft/sysaux01.dbf      ONLINE
294      3 /u01/app/oracle/oradata/yft/undotbs01.dbf     ONLINE
295      4 /u01/app/oracle/oradata/yft/users01.dbf       ONLINE
296      5 /u01/app/oracle/oradata/yft/example01.dbf     ONLINE
297      6 /u01/app/oracle/oradata/yft/jack01.dbf        ONLINE
298
299 6 rows selected.
300 ----启动数据库----301 SQL> alter database open;
302 alter database open
303 *
304 ERROR at line 1:
305 ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
306
307
308 SQL> alter database open resetlogs;
309
310 Database altered.
311 ----查看数据文件信息,再$ORACLE_HOME/dbs目录下生成了一个数据文件,但这个却用不了----312 SQL> col name for a60;
313 SQL> select file#,name,status from v$datafile;
314
315      FILE# NAME                                                     STATUS
316 ---------- -------------------------------------------------------- ---------------
317      1 /u01/app/oracle/oradata/yft/system01.dbf                     SYSTEM
318      2 /u01/app/oracle/oradata/yft/sysaux01.dbf                     ONLINE
319      3 /u01/app/oracle/oradata/yft/undotbs01.dbf                    ONLINE
320      4 /u01/app/oracle/oradata/yft/users01.dbf                      ONLINE
321      5 /u01/app/oracle/oradata/yft/example01.dbf                    ONLINE
322      6 /u01/app/oracle/oradata/yft/jack01.dbf                       ONLINE
323      7 /u01/app/oracle/product/11.2.0/db_1/dbs/MISSING00007         RECOVER
324
325 7 rows selected.
326 ----先将7号数据文件offline----327 SQL> alter database datafile 7 offline;
328
329 Database altered.
330 ----将新生成的数据文件重名一下----331 SQL> alter database rename file '/u01/app/oracle/product/11.2.0/db_1/dbs/MISSING00007' to '/u01/app/oracle/oradata/yft/luocs01.dbf';
332
333 Database altered.
334 ----首先需要设置一下_allow_resetlogs_corruption参数----335 SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile;
336
337 System altered.
338
339 SQL> shutdown immediate;
340 Database closed.
341 Database dismounted.
342 ORACLE instance shut down.
343 SQL> startup
344 ORACLE instance started.
345
346 Total System Global Area  330600448 bytes
347 Fixed Size            1336344 bytes
348 Variable Size          247466984 bytes
349 Database Buffers       75497472 bytes
350 Redo Buffers            6299648 bytes
351 Database mounted.
352 Database opened.
353 ----由于v$datafile中checkpoint_change#仍然大于v$recover_file中的change#,决定用adjust_scn来调整scn----354 SQL> alter session set events 'immediate trace name adjust_scn level 1';
355
356 Session altered.
357
358 SQL> shutdown immediate;
359 Database closed.
360 Database dismounted.
361 ORACLE instance shut down.
362 SQL> startup mount;
363 ORACLE instance started.
364
365 Total System Global Area  330600448 bytes
366 Fixed Size            1336344 bytes
367 Variable Size          247466984 bytes
368 Database Buffers       75497472 bytes
369 Redo Buffers            6299648 bytes
370 Database mounted.
371
372 SQL> select ts#,file#,name,status,checkpoint_change# from v$datafile;
373
374        TS#    FILE# NAME                                              STATUS       CHECKPOINT_CHANGE#
375 ---------- ---------- ------------------------------------------- --------------- ------------------
376      0        1 /u01/app/oracle/oradata/yft/system01.dbf               SYSTEM               880126
377      1        2 /u01/app/oracle/oradata/yft/sysaux01.dbf               ONLINE               880126
378      2        3 /u01/app/oracle/oradata/yft/undotbs01.dbf              ONLINE               880126
379      4        4 /u01/app/oracle/oradata/yft/users01.dbf                ONLINE               880126
380      6        5 /u01/app/oracle/oradata/yft/example01.dbf              ONLINE               880126
381      7        6 /u01/app/oracle/oradata/yft/jack01.dbf                 ONLINE               880126
382      8        7 /u01/app/oracle/oradata/yft/luocs01.dbf                RECOVER                0
383
384 7 rows selected.
385 ----这一步很重要,虽然不做这个操作也能打开数据库,但是我们要用resetlogs来打开数据库,否则仍然将其他数据文件联机的时候仍然会报ORA-01189。386 SQL> recover until cancel;
387 Media recovery complete.----将数据文件置于online---- 388 SQL> alter database datafile 2,3,4,5,6,7 online;
389
390 Database altered.
391
392 SQL> alter database open resetlogs;
393
394 Database altered.
395 ----打开数据库以后查看v$datafile,文件都已经是online,而且checkpoint_change#都变成一样的----396 SQL> select ts#,file#,name,status,checkpoint_change# from v$datafile;
397
398        TS#    FILE# NAME                                               STATUS       CHECKPOINT_CHANGE#
399 ---------- ---------- ---------------------------------------------- --------------- ------------------
400      0        1 /u01/app/oracle/oradata/yft/system01.dbf               SYSTEM               880130
401      1        2 /u01/app/oracle/oradata/yft/sysaux01.dbf               ONLINE               880130
402      2        3 /u01/app/oracle/oradata/yft/undotbs01.dbf              ONLINE               880130
403      4        4 /u01/app/oracle/oradata/yft/users01.dbf                ONLINE               880130
404      6        5 /u01/app/oracle/oradata/yft/example01.dbf              ONLINE               880130
405      7        6 /u01/app/oracle/oradata/yft/jack01.dbf                 ONLINE               880130
406      8        7 /u01/app/oracle/oradata/yft/luocs01.dbf                ONLINE               880130
407
408 7 rows selected.
409 ----查看一下数据有没有丢失----410 SQL> select count(*) from luocs.t1;
411
412   COUNT(*)
413 ----------
414       9999
415
416 SQL> select count(*) from test.t1;
417
418   COUNT(*)
419 ----------
420      63450至此,我们得知:在线日志没有损坏,控制文件丢失,归档日志丢失,利用旧的trace恢复controlfile,再重建新的控制文件,无法恢复所有数据,最后还需要添加临时表空间的数据文件,[oracle@yft ~]$ rm /u01/app/oracle/oradata/yft/temp01.dbf SQL>alter tablespace temp add tempfile '/u01/app/oracle/oradata/yft/temp01.dbf' size 200m;

转载于:https://www.cnblogs.com/Richardzhu/articles/2857155.html

丢失控制文件恢复实验记录--4(在线日志文件没有损坏,归档日志丢失,直接重建控制文件(跟踪控制文件trace是旧的情况))...相关推荐

  1. 块设备文件读取实验记录

    块设备文件读取实验记录 添加实验设备 简单分区测试 简单设备测试 设备偏移量测试 分区偏移量测试 结语 文件: 一个linux文件就是一个字节序列,所有的IO设备(例如网络,磁盘和终端)都被模型化为文 ...

  2. CentOS 7系统升级备份恢复实验记录

    一.系统版本 1) CentOS 7.1.1503 2) CentOS 7.2.1511 二.通过tar命令备份当前操作系统 #tar cvpzf /mnt/linuxbackup.tgz--excl ...

  3. linux恢复fat文件系统,磁盘存储结构与文件恢复实验(FAT文件系统)

    任务四:查找文件 记录并说明对文本文件进行查找的过程,以及每步产生的结果与分析. 1.根据BPB中的信息,计算FDT位置. 2.编写代码显示FDT,观察长文件名的显示格式,并记录目标文件的首簇号. 3 ...

  4. oracle 删除已备份归档,通过RMAN联机全库备份,包括控制文件,归档日志文件,备份成功后,删除已备份的归档日志。...

    RMAN> backup as backupset full database format '/u01/app/backup/db_%U.rmn' include current contro ...

  5. 电脑文件丢失了怎么恢复?2021最新教程汇总

    电脑对于日常生活和工作都起着重要作用,相比手机而言,电脑在操作上以及数据存储上有着绝对的优势.但是在我们日常办公中,有时会误删除一些文档,甚至永久删除,**那电脑文件丢失了怎么恢复?**可能很多电脑用 ...

  6. 拥有所有归档文件,但没有备份情况下的数据文件恢复

    前提条件 1.      归档模式下. 2.      数据文件在当前控制文件之后创建. 否则会报ORA-01178错误. ORA-01178: file 5 created before last ...

  7. OCP学习——数据库整库备份恢复实验

    数据库版本信息:Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.7.0.0.0 一. ...

  8. 分区恢复和NTFS文件恢复试验

    一.实验室名称:主楼实验室A2-412                  二.实验项目名称:分区恢复和NTFS文件恢复试验 三.实验学时:6学时 四.实验原理: 借助fdisk.diskgen软件对磁 ...

  9. 固态硬盘文件恢复方法有哪些?四种恢复方法助您解忧

    固态硬盘简称ssd,又叫固态驱动器,而固态硬盘对比机械硬盘,它的读取速度更快.耐摔耐震,但是不论是什么设备或多或少都会出现文件丢失问题,那么固态硬盘文件怎么找回来?固态硬盘文件恢复方法有哪些呢?下面小 ...

  10. Mysql中如何根据.frm和.idb文件恢复表结构

    .frm和.idb文件是Mysql数据库使用InnoDB数据库引擎时产生的两个文件. ~表名.frm文件存储的相关表的表结构.索引等元数据. ~表名.idb文件存储的相关表中的数据记录. 举例: ad ...

最新文章

  1. 创业公司,怎么用人更划算?
  2. SAP中如何实现<生产订单>的批量删除方法!
  3. MPU6050首例整合性6轴的姿态模块(转)
  4. html5中高德、腾讯、百度 地图api调起手机app
  5. 【Python】Python语言学习:pip工具使用知识,模型保存pickle,PDF与docx相互转换处理...
  6. 面试字节跳动后的2点总结,建议收藏!
  7. 基于svm图像分类C语言,基于SVM的图像分类算法与实现.PDF
  8. python使用python-barcode生成任意长度字符串的条形码(一维码)详细教程
  9. vue项目原理分析-1:组件间传值
  10. Mysql中eft join、right join、inner join的区别
  11. 《计算机组成原理》第五版(唐朔飞考研版) 全书知识梳理
  12. 便携式嵌入式软件接口测试工具
  13. python编写回文程序上海自来水来自海_回文句式初探:“上海自来水来自海上”...
  14. 微信开发--IOS微信端confirm以及alert去掉网址的方法
  15. MySQL 视图、索引、外键关联策略
  16. 如何用matlab画超越方程组的图像,【求助】超越方程组的fsolve解法
  17. MEX and Increments-(先拿一些的贪心思维)
  18. 国内Android应用推广的六大主流方式
  19. 短视频寒冬,抖音、美拍、快手等将何去何从?
  20. 01.Android之基础组件问题 1

热门文章

  1. 拓端tecdat|Python中的ARIMA模型、SARIMA模型和SARIMAX模型对时间序列预测
  2. 拓端tecdat|R语言数据可视化分析案例:探索BRFSS数据
  3. 安装opcenccv-python以后仍然No module named ‘cv2‘
  4. 任务调度的合理性 (25 分)(拓扑排序)
  5. 同事发来的文件是个html,逮到一个疑是感染html,htm,网页文件的木马
  6. mysql id 不连续_MySQL中自增主键不连续之解决方案。(20131109)
  7. visual studio配置opencv
  8. fer2013表情数据集
  9. Expected object of backend CPU but got backend CUDA for argument #4 ‘mat1‘
  10. yolo v4模型训练过程(超详细)