设为首页 收藏本站
查看: 1087|回复: 6

[经验分享] Oracle—用户管理的完全恢复(三)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2013-8-4 10:47:09 | 显示全部楼层 |阅读模式

在用户管理的恢复(二)中对归档模式的恢复进行了说明,但是都是在控制文件没有损坏的情况下,下面说明一下,当控制文件损坏了怎么恢复。




一.控制文件的相关说明


1.控制文件一般会多路复用,控制文件更新时则每个文件同时更新。



2.多个控制文件,如果有一个损坏则数据库不能工作,这点和联机重做日志文件不同。



3.在每次打开数据库时,数据库会自动检查控制文件和数据文件的SCN是否一致。



在视图v$datafile可以看到控制文件的SCN号,视图v$datafile是从控制文件中读取SCN号的。在视图v$datafile_header中读取数据文件头上的SCN号。



查看这两视图,



SQL> select file#,checkpoint_change# from v$datafile;


     FILE#        CHECKPOINT_CHANGE#

     ----------        ------------------

         1            3016606

         2            3016606

         3            3016606

         4            3016606

         5            3016606

         6            3016606

         8            3016606

        12            3016606


8 rows selected.





SQL> select file#,checkpoint_change# from v$datafile_header;


     FILE#      CHECKPOINT_CHANGE#

     ----------         ------------------

         1            3016606

         2            3016606

         3            3016606

         4            3016606

         5            3016606

         6            3016606

         8            3016606

        12            3016606


8 rows selected.



比较这两个SCN号,

(1)若控制文件中的SCN号小于数据文件中的SCN号,那么控制文件是旧的,要重建一个新的控制文件。


(2)若控制文件中的SCN号大于数据文件中的SCN号,那么说明数据文件要恢复。


(3)若控制文件的SCN号和数据文件的SCN号相同,那么数据库可以正常打开。






二.恢复控制文件 20130804005147468.jpg


由于控制文件是多路复用的,所以控制文件损坏有两种情况,



1.控制文件没有全部损坏,则可以把控制文件直接复制到原来的位置或者把spfile中的控制文件位置修改一下。



(1)打开数据库,删除一个控制文件,模拟某个控制文件损坏,


[oracle@oracle11g wilson]$ rm -f control01.ctl



正常关闭数据库时会出现错误,


SQL> shutdown immediate

Database closed.

ORA-00210: cannot open the specified control file

ORA-00202: control file: '/u01/oradata/wilson/control01.ctl'

ORA-27041: unable to open file

Linux Error: 2: No such file or directory

Additional information: 3



现在无法正常打开数据库了,查看警报日志文件alert.wilson_log文件,可以看到控制文件丢失的信息,



(2)还原数据文件,命令如下,


在/u01/oradata/wilson

[oracle@oracle11g wilson]$ cp  control02.ctl  control01.ctl


然后即可打开数据库。



2.如果所有的控制文件都丢失了,怎么进行恢复。



(1)在/u01目录下新建个目录backupcf,然后备份控制文件,



怎么备份控制文件,请参照:Oracle—用户管理的备份(一)



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


这里备份的是一个创建控制文件的脚本。




(2)在数据库打开状态,删除所有控制文件,


[oracle@oracle11g wilson]$ rm  -f   control0*



然后关闭数据库,不能正常关闭,使用如下命令,


SQL> shutdown abort;

ORACLE instance shut down.



(3)使用备份的脚本来恢复控制文件,



在脚本中有两组恢复方法:a.在联机重做日志正常的情况下,

                                           b.在联机重做日志不正常的情况下,


在这个例子中选择a。



将c.trc复制另一个副本,命令如下,



[oracle@oracle11g backupcf]$ cp  c.trc   c1.sql



修改c1.sql脚本,还有b方法全部删除,只留下方法a,在方法a中把一些注释删除了,特别是这个注释- STANDBY LOGFILE  它在中间会影响到脚本的执行,还有一点就是下面这段代码中行与行之间不能有空格,不然不能执行。



STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE "WILSON" NORESETLOGS  ARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

LOGFILE

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

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

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

DATAFILE

  '/u01/oradata/wilson/system01.dbf',

  '/u01/oradata/wilson/sysaux01.dbf',

  '/u01/oradata/wilson/undotbs01.dbf',

  '/u01/oradata/wilson/users01.dbf',

  '/u01/oradata/wilson/example01.dbf',

  '/u01/oradata/wilson/app2_01.dbf',

  '/u01/oradata/wilson/smallundo1.dbf',

  '/u01/oradata/wilson/app1_01.dbf'

CHARACTER SET AL32UTF8

;

..................................




(4)执行脚本来恢复,所有控制文件既可以全部还原了。




SQL> @/u01/backupcf/c1.sql


ORACLE instance started.


Total System Global Area  146472960 bytes

Fixed Size                  1335080 bytes

Variable Size              92274904 bytes

Database Buffers           50331648 bytes

Redo Buffers                2531328 bytes


Control file created.

PL/SQL procedure successfully completed.

PL/SQL procedure successfully completed.

Media recovery complete.

System altered.

Database altered.

Tablespace altered.

Tablespace altered.





三.实验


来操作一个复杂点的例子,先备份控制文件,然后增加表空间(这样数据库的结构就会发生变化,同样的控制文件也会发生变化),再删除现在所有的控制文件,最后用备份的控制文件进行恢复。




1.备份控制文件,这里不是上面的备份控制文件的脚本,而是备份二进制控制文件。


SQL> alter database backup controlfile to '/tmp/w1.bin';


Database altered.




2.创建表空间和数据文件,


SQL> create  tablespace app3 datafile '/u01/oradata/wilson/app3_01.dbf' size 100m;


Tablespace created.



在Dave用户下,

SQL> create table t4 (id int,name char(10))  tablespace app3;


Table created.



SQL> insert into t4 values (0,'jack');


1 row created.



3.现在把控制文件都删除了,模拟控制文件损坏,然后关闭数据库。


[oracle@oracle11g wilson]$ rm   -f    control0*



关闭数据库,

SQL> shutdown abort;

ORACLE instance shut down.




4.还原控制文件,然后打开数据库进入mount状态,这时还不能打开数据库,


[racle@oracle11g wilson]$ cp   /tmp/w1.bin   /u01/oradata/wilson/control01.ctl


[oracle@oracle11g wilson]$ cp   /tmp/w1.bin   /u01/oradata/wilson/control02.ctl


[oracle@oracle11g wilson]$ cp   /tmp/w1.bin   /u01/oradata/wilson/control03.ctl




进入mount 状态,

SQL> startup  mount;



5.恢复控制文件,命令如下,



(1)开始输入恢复命令,会发现出现问题,


SQL> recover database using backup controlfile;


ORA-00279: change 3105228 generated at 09/01/2013 01:22:03 needed for thread 1

ORA-00289: suggestion : /u01/oradata/wilson/arch/sun_1_0000000014_824777760.arc

ORA-00280: change 3105228 for thread 1 is in sequence #14

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}



可以看到它需要归档文件sun_1_0000000014_824777760.arc,通过查看归档文件发现最大的是13,


[oracle@oracle11g arch]$ ll

total 228556

-rw-r----- 1 oracle oinstall  6060544 Sep  1 01:21 sun_1_0000000011_824777760.arc

-rw-r----- 1 oracle oinstall   522240 Sep  1 01:21 sun_1_0000000012_824777760.arc

-rw-r----- 1 oracle oinstall    65536 Sep  1 01:21 sun_1_0000000013_824777760.arc



那么14号归档文件即在联机重做日志文件中,那么是哪个重做日志文件,可以通过查看视图v$log,或者把每个重做日志都试一次即可。



SQL> select group#,status,members from v$log;


    GROUP#   STATUS       MEMBERS

       ---------- ---------------- ----------

         1 INACTIVE             1

         3 INACTIVE             1

         2 CURRENT             1


所以把redo02.log输入进去,


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

/u01/oradata/wilson/redo02.log

ORA-00283: recovery session canceled due to errors

ORA-01244: unnamed datafile(s) added to control file by media recovery

ORA-01110: data file 7: '/u01/oradata/wilson/app3_01.dbf'




可以看到有一个数据文件没有办法识别,因为这个控制文件是旧的。




(2)查看视图来找到要修改的数据文件,查看视图v$recover_file和v$datafile,



SQL> select * from v$recover_file;


     FILE# ONLINE  ONLINE_ ERROR                 CHANGE# TIME

---------- ------- ------- ------------------ ---------- ---------

         7 ONLINE  ONLINE  FILE MISSING                0





SQL> select file#,name from v$datafile;


     FILE# NAME

---------- -----------------------------------

         1 /u01/oradata/wilson/system01.dbf

         2 /u01/oradata/wilson/sysaux01.dbf

         3 /u01/oradata/wilson/undotbs01.dbf

         4 /u01/oradata/wilson/users01.dbf

         5 /u01/oradata/wilson/example01.dbf

         6 /u01/oradata/wilson/app2_01.dbf

         7 /u01/oracle/dbs/UNNAMED00007

         8 /u01/oradata/wilson/smallundo1.dbf

        12 /u01/oradata/wilson/app1_01.dbf


9 rows selected.




可以看到7号文件名称发生了变化,修改这个文件的名称并加入控制文件中,



SQL> alter database rename file '/u01/oracle/dbs/UNNAMED00007' to '/u01/oradata/wilson/app3_01.dbf';


Database altered.


怎么辨别它正好对应着这个文件,可以去查看警报日志。



(3)再进行恢复,命令如下,


SQL> recover database using backup controlfile;


ORA-00279: change 3106444 generated at 09/01/2013 01:41:19 needed for thread 1

ORA-00289: suggestion : /u01/oradata/wilson/arch/sun_1_0000000014_824777760.arc

ORA-00280: change 3106444 for thread 1 is in sequence #14


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}


/u01/oradata/wilson/redo02.log

Log applied.

Media recovery complete.



现在打开数据库,检查一下数据,



SQL> alter database open resetlogs;


Database altered.



SQL> select * from  Dave.t4;


        ID NAME

---------- -----------------------------------

         0 jack



可以看到数据还在,恢复成功。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-8037-1-1.html 上篇帖子: Oracle—用户管理的完全恢复(二) 下篇帖子: Oracle Locks之DML锁 Oracle 用户

尚未签到

发表于 2013-8-11 23:08:10 | 显示全部楼层
爱护环境,人人有病。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-8-21 12:09:42 | 显示全部楼层
怀揣两块,胸怀500万!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-9-1 17:10:09 | 显示全部楼层
走,MM,咱们化蝶去……

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-10-4 11:17:40 | 显示全部楼层
为中华而努力读书!一包中华好多钱啊~~~

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-11-15 06:51:26 | 显示全部楼层
解释就系掩饰,掩饰等于无出色,无出色不如回家休息!!!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-12-21 00:19:51 | 显示全部楼层
很多事情我们都没有选择的权利,抱怨只是徒增伤悲

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表