ARCHIVELOG模式下用户管理恢复控制文件—使用二进制控制文件恢复

在生产数据库中,控制文件一般多路复用的。每个控制文件的内容是一模一样的,只要其中有一个没有丢失,那么就可以复制一下,改一下名字就可以用了。

 

首先在数据库中备份执行一个二进制的控制文件,也可以使用操作系统的命令直接复制控制文件来备份。

  1. SQL> startup  
  2. ORACLE 例程已经启动。  
  3.   
  4. Total System Global Area  167772160 bytes  
  5. Fixed Size                  1266392 bytes  
  6. Variable Size              62917928 bytes  
  7. Database Buffers          100663296 bytes  
  8. Redo Buffers                2924544 bytes  
  9. 数据库装载完毕。  
  10. 数据库已经打开。  
  11.   
  12. SQL> create tablespace tb1 datafile '/u01/app/oracle/oradata/orcl/tb1.dbf' size 10m;   
  13.   
  14. 表空间已创建。  
  15.   
  16. SQL> create user u1 identified by u1 default tablespace tb1;  
  17.   
  18. 用户已创建。  
  19.   
  20. SQL> grant connect,resource to u1;  
  21.   
  22. 授权成功。  
  23.   
  24. SQL> conn u1/u1  
  25. 已连接。  
  26.   
  27. SQL> create table t (id int,value varchar2(10));  
  28.   
  29. 表已创建。  
  30.   
  31. SQL> insert into t values(1,'a');  
  32.   
  33. 已创建 1 行。  
  34.   
  35. SQL> commit;  
  36.   
  37. 提交完成。  
  38.   
  39. SQL> select * from t;  
  40.   
  41.         ID VALUE  
  42. ---------- ----------  
  43.          1 a  
  44.   
  45. SQL> conn /as sysdba  
  46. 已连接。  
  47. SQL> alter system checkpoint;  
  48.   
  49. 系统已更改。  
  50.   
  51. SQL> alter system archive log current;  
  52.   
  53. 系统已更改。  
  54.   
  55. SQL> alter system switch logfile;  
  56.   
  57. 系统已更改。  
  58.   
  59. SQL> /  
  60.   
  61. 系统已更改。  
  62.   
  63. SQL> /  
  64.   
  65. 系统已更改。  
  66.   
  67. SQL> /  
  68.   
  69. 系统已更改。  
  70. SQL> alter database backup controlfile to '/u01/app/oracle/controlfile/control.ctl';  
  71.   
  72. 数据库已更改。  
  73.   
  74. SQL> shutdown immediate  
  75. 数据库已经关闭。  
  76. 已经卸载数据库。  
  77. ORACLE 例程已经关闭。  
SQL> startup
ORACLE 例程已经启动。

Total System Global Area  167772160 bytes
Fixed Size                  1266392 bytes
Variable Size              62917928 bytes
Database Buffers          100663296 bytes
Redo Buffers                2924544 bytes
数据库装载完毕。
数据库已经打开。

SQL> create tablespace tb1 datafile '/u01/app/oracle/oradata/orcl/tb1.dbf' size 10m; 

表空间已创建。

SQL> create user u1 identified by u1 default tablespace tb1;

用户已创建。

SQL> grant connect,resource to u1;

授权成功。

SQL> conn u1/u1
已连接。

SQL> create table t (id int,value varchar2(10));

表已创建。

SQL> insert into t values(1,'a');

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from t;

        ID VALUE
---------- ----------
         1 a

SQL> conn /as sysdba
已连接。
SQL> alter system checkpoint;

系统已更改。

SQL> alter system archive log current;

系统已更改。

SQL> alter system switch logfile;

系统已更改。

SQL> /

系统已更改。

SQL> /

系统已更改。

SQL> /

系统已更改。
SQL> alter database backup controlfile to '/u01/app/oracle/controlfile/control.ctl';

数据库已更改。

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。


现在关闭数据库后,所有的控制文件丢失了,然后把备份的控制文件复制过去,该一下名字。

  1. [oracle@linux orcl]$ rm -rf control0*  
  2. [oracle@linux orcl]$ cp /u01/app/oracle/controlfile/control.ctl .  
  3. [oracle@linux orcl]$ mv control.ctl control01.ctl   
  4. [oracle@linux orcl]$ cp control01.ctl control02.ctl   
  5. [oracle@linux orcl]$ cp control01.ctl control03.ctl   
[oracle@linux orcl]$ rm -rf control0*
[oracle@linux orcl]$ cp /u01/app/oracle/controlfile/control.ctl .
[oracle@linux orcl]$ mv control.ctl control01.ctl 
[oracle@linux orcl]$ cp control01.ctl control02.ctl 
[oracle@linux orcl]$ cp control01.ctl control03.ctl 


下面记录恢复操作

  1. SQL> startup   
  2. ORACLE 例程已经启动。  
  3.   
  4. Total System Global Area  167772160 bytes  
  5. Fixed Size                  1266392 bytes  
  6. Variable Size              62917928 bytes  
  7. Database Buffers          100663296 bytes  
  8. Redo Buffers                2924544 bytes  
  9. 数据库装载完毕。  
  10. ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项  
  11.   
  12. SQL> select status from v$instance;  
  13.   
  14. STATUS  
  15. ------------  
  16. MOUNTED  
  17.   
  18. SQL> select * from v$log;  
  19.   
  20.     GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME  
  21. ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------  
  22.          1          1         13   52428800          1 YES INACTIVE                474583 10-10月-11  
  23.          3          1         12   52428800          1 YES INACTIVE                474581 10-10月-11  
  24.          2          1         14   52428800          1 NO  CURRENT                 474585 10-10月-11  
  25.   
  26. SQL> select member from v$logfile;  
  27.   
  28. MEMBER  
  29. --------------------------------------------------------------------------------  
  30. /u01/app/oracle/oradata/orcl/redo03.log  
  31. /u01/app/oracle/oradata/orcl/redo02.log  
  32. /u01/app/oracle/oradata/orcl/redo01.log  
  33.   
  34. SQL> recover database using backup controlfile;  
  35. ORA-00279: 更改 474585 (在 10/10/2011 01:15:57 生成) 对于线程 1 是必需的  
  36. ORA-00289: 建议: /u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_10_10/o1_mf_1_14_%u_.arc  
  37. ORA-00280: 更改 474585 (用于线程 1) 在序列 #14 中  
  38.   
  39.   
  40. 指定日志: {<RET>=suggested | filename | AUTO | CANCEL}  
  41. /u01/app/oracle/oradata/orcl/redo02.log  
  42. 已应用的日志。  
  43. 完成介质恢复。  
  44.   
  45. SQL> alter database open resetlogs;  
  46.   
  47. 数据库已更改。  
  48.   
  49. SQL> select status from v$instance;  
  50.   
  51. STATUS  
  52. ------------  
  53. OPEN  
  54.   
  55. SQL> conn u1/u1  
  56. 已连接。  
  57. SQL> select * from t;  
  58.   
  59.         ID VALUE  
  60. ---------- ----------  
  61.          1 a  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值