[小e笔记]之一步一步学习备份恢复——第三篇 数据库恢复案例(Part 6)

小e随笔:今天帮导员跑到小区监控室搞了半多天,查看10月1日到2日的录像,原因是导员的车停在小区里被什么东西给刮了,想从监控录像里查出什么,看了半天只发现了一些可疑的地方,还有一些不得不提,中国的社会啊,看那些警察。。。唉!!!

案例 2:控制文件的损坏

方案(1):利用脚本重建控制文件

(1)创建脚本

a.默认目录

SQL> alter database backup controlfile to trace;

Database altered.

目录可以从告警日志文件中读取到如下:

Tue Oct 09 19:11:39 2012

alter database backup controlfile to trace

Backup controlfile written to trace file /u01/oracle/diag/rdbms/elvis/elvis/trace/elvis_ora_4541.trc

Completed: alter database backup controlfile to trace

b.也可以 指定目录指定文件名字

SQL> alter database backup controlfile to trace as '/u01/createctl.trc';

Database altered.

里面即包含resetlogs和noresetlogs两种模式

c.也可以指定生成什么模式的,比如这样

SQL> alter database backup controlfile to trace as '/u01/createctl.trc' resetlogs;

Database altered.

当然如果需要noresetlogs一样的格式,不在演示,我都已经够菜了,相信大虾们会说,哎呀!早懂了,赶紧进行下一步,好的好的,小鸟马上下一步。。。

在补充一句哈,其实生成那种模式都可以,就是在脚本代码里改下resetlogs变为noresetlogs就OK了。

d.也可以直接拷贝一份,当然即可以用OS复制也可以,但复制数据库要是关闭的情况,如果开启的时候复制数据很不安全,数据库在线可以使用下面命令复制

SQL> alter database backup controlfile to '/u01/createctl1.ctl';

Database altered.

脚本范例(noresetlogs):

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE "ELVIS" RESETLOGS  ARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 '/u01/oracle/oradata/elvis/redo01.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 2 '/u01/oracle/oradata/elvis/redo02.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 3 '/u01/oracle/oradata/elvis/redo03.log'  SIZE 50M BLOCKSIZE 512

-- STANDBY LOGFILE

DATAFILE

  '/u01/oracle/oradata/elvis/system01.dbf',

  '/u01/oracle/oradata/elvis/sysaux01.dbf',

  '/u01/oracle/oradata/elvis/undotbs01.dbf',

  '/u01/oracle/oradata/elvis/users01.dbf',

  '/u01/oracle/oradata/elvis/test01.dbf'

CHARACTER SET ZHS16GBK

;

大家仔细看看这些代码,其实很简单不是么?你完全可以根据模板,在你了解你数据库文件数量,日志文件的路径,等一些参数的值,自己改写一个适合自己库的控制文件,当然还是这样比较安全,毕竟如果库的文件多了,工作量还是很大的。。。

(2)创建一个sql脚本

[oracle@elvis u01]$ cat createctl.sql

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE "ELVIS" NORESETLOGS  ARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 '/u01/oracle/oradata/elvis/redo01.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 2 '/u01/oracle/oradata/elvis/redo02.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 3 '/u01/oracle/oradata/elvis/redo03.log'  SIZE 50M BLOCKSIZE 512

-- STANDBY LOGFILE

 

DATAFILE

  '/u01/oracle/oradata/elvis/system01.dbf',

  '/u01/oracle/oradata/elvis/sysaux01.dbf',

  '/u01/oracle/oradata/elvis/undotbs01.dbf',

  '/u01/oracle/oradata/elvis/users01.dbf',

  '/u01/oracle/oradata/elvis/test01.dbf'

CHARACTER SET ZHS16GBK

;

(3)关闭数据库&损坏控制文件

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

[oracle@elvis elvis]$ rm -f control01.ctl

[oracle@elvis elvis]$ ll

total 1789008

drwxr-xr-x 2 oracle oinstall      4096 Oct  8 08:58 bak

-rw-r----- 1 oracle oinstall  52429312 Oct  9 19:51 redo01.log

-rw-r----- 1 oracle oinstall  52429312 Oct  9 18:58 redo02.log

-rw-r----- 1 oracle oinstall  52429312 Oct  9 18:58 redo03.log

-rw-r----- 1 oracle oinstall 629153792 Oct  9 19:51 sysaux01.dbf

-rw-r----- 1 oracle oinstall 734011392 Oct  9 19:51 system01.dbf

-rw-r----- 1 oracle oinstall  71311360 Oct  8 08:50 temp01.dbf

-rw-r----- 1 oracle oinstall  52436992 Oct  9 19:51 test01.dbf

-rw-r----- 1 oracle oinstall 235937792 Oct  9 19:51 undotbs01.dbf

-rw-r----- 1 oracle oinstall   5251072 Oct  9 19:51 users01.dbf

SQL> startup

ORACLE instance started.

Total System Global Area  598437888 bytes

Fixed Size                  1338140 bytes

Variable Size             394265828 bytes

Database Buffers          197132288 bytes

Redo Buffers                5701632 bytes

ORA-00205: error in identifying control file, check alert log for more info

(4)创建控制文件

[oracle@elvis u01]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Tue Oct 9 20:08:13 2012

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> @createctl.sql

ORACLE instance started.

Total System Global Area  598437888 bytes

Fixed Size                  1338140 bytes

Variable Size             394265828 bytes

Database Buffers          197132288 bytes

Redo Buffers                5701632 bytes

Control file created.

SQL> alter database open;

Database altered.

总结:控制文件对数据库的重要性就不用说了,很关键,最后冗余几个,而且放在不同的磁盘上。有人会问数据会不会有丢失,当然没有啦,你的其他数据文件都没丢,如果你具体了解控制文件对数据库的作用你肯定一下子就明白了,这个是备份恢复的笔记,不会对体系结构和基础讲的太细,小e正在策划要记这部分的笔记,了解Oracle的原理是很有必要的,但简单的说一下吧,控制文件是一个相当小的文件(最多能增长到64MB左右),其中包含Oracle需要的其他文件的一个目录。参数文件告知实例控制文件的位置,控制文件则告知实例数据库和在线重做日志文件的位置。控制文件还告知了Oracle其他一些事情,如。。。不行了,说多了,总之以后小e基础笔记中会有详细记录。。。

方案2:有catalog的控制文件的恢复,这个放在以后一步一步学习RMAN讲解,敬请期待,哇哈哈~~~

 

elvis
2012.10.10
知识共享~共同进步
转载请注明:

http://blog.csdn.net/elvis_dataguru/article/details/8058097

你可能感兴趣的:(oracle,sql,数据库,脚本,database,character)