• 博客访问: 597255
  • 博文数量: 215
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-26 12:07
个人简介

逃离北京,现在深圳~~

文章分类
文章存档

2017年(1)

2014年(4)

2013年(7)

2012年(6)

2011年(111)

2010年(85)

2009年(1)

我的朋友

分类: Linux操作系统

2010-10-20 10:20:41


数据库恢复

====================

rman备份信息可以使用catalog库存放,如果不配置catalog库则只能使用控制文件进行替代,所以控制文件在数据库备份中的重要性比较高。

避免控制文件丢失可以设置控制文件自动备份,也可以在脚本中单独备份控制文件,另外全库备份中叶包含控制文件,版本较高的rdbms还能在回复区中找到控制文件的镜像,以上方式都找不到控制文件则只能手动创建控制文件

一旦手动重新创建,控制文件中的备份信息也就丢失,这是就需要是用dbms_backup_restore包进行恢复

通过包dbms_backup_restore,在不是用catalog库或者控制文件的情况下仍然可以从备份集中读取数据库文件,做到数据恢复

如下测试及为数据文件、控制文件,在线日志文件,归档日志文件都丢失,只有rman备份的情况下数据库的恢复


SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production


备份集

D:\oracle\product\10.2.0\flash_recovery_area\AN10\BACKUPSET\2008_04_10\O1_MF_NNNDF_TAG20080410T100316_3ZTXC5PY_.BKP


SQL> startup nomount;
ORACLE instance started.

Total System Global Area  209715200 bytes
Fixed Size                  1248116 bytes
Variable Size              71304332 bytes
Database Buffers          130023424 bytes
Redo Buffers                7139328 bytes


通过脚本恢复数据文件

SQL> declare
  2  devtype varchar2(256);
  3  done boolean;
  4  begin
  5  devtype:=sys.dbms_backup_restore.deviceAllocate (type=>'',ident=>'t1');
  6  sys.dbms_backup_restore.restoreSetDatafile;
  7  sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>01,
  8  toname=>'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\SYSTEM01.DBF');
  9  sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>02,
 10  toname=>'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\UNDOTBS01.DBF');
 11  sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>03,
 12  toname=>'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\SYSAUX01.DBF');
 13  sys.dbms_backup_restore.restoreDatafileTo(dfnumber=>04,
 14  toname=>'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\USERS01.DBF');
 15  sys.dbms_backup_restore.restoreBackupPiece(done=>done,
 16  handle=>'D:\oracle\product\10.2.0\flash_recovery_area\AN10\BACKUPSET\2008_0
4_10\O1_MF_NNNDF_TAG20080410T100316_3ZTXC5PY_.BKP',params=>null);
 17  sys.dbms_backup_restore.deviceDeallocate;
 18  end;
 19  /

PL/SQL procedure successfully completed.

SQL>
SQL>
SQL>
SQL>
SQL>
SQL> CREATE CONTROLFILE REUSE DATABASE "AN10" NORESETLOGS  ARCHIVELOG
  2      MAXLOGFILES 16
  3      MAXLOGMEMBERS 3
  4      MAXDATAFILES 100
  5      MAXINSTANCES 8
  6      MAXLOGHISTORY 292
  7  LOGFILE
  8    GROUP 1 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\REDO01.LOG'  SIZE 5M,
  9    GROUP 2 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\REDO02.LOG'  SIZE 5M,
 10    GROUP 3 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\REDO03.LOG'  SIZE 5M
 11  -- STANDBY LOGFILE
 12  DATAFILE
 13    'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\SYSTEM01.DBF',
 14    'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\UNDOTBS01.DBF',
 15    'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\SYSAUX01.DBF',
 16    'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\USERS01.DBF'
 17  --  'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\AN.DBF'
 18  CHARACTER SET ZHS16GBK
 19  ;
CREATE CONTROLFILE REUSE DATABASE "AN10" NORESETLOGS  ARCHIVELOG
*
ERROR at line 1:
ORA-01503: CREATE CONTROLFILE failed
ORA-01565: error in identifying file
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\REDO01.LOG'
ORA-27041: unable to open file
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????


找不到redo日志,这时手动建立适合大小的redo,并再次创建控制文件

SQL> /

Control file created.

由于临时表空间不进行备份,所以恢复的时候需要重新建立临时表空间
但必须是在数据库打开的情况下

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\T
EMP01.DBF'
  2       SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\TEMP01
.DBF'
*
ERROR at line 1:
ORA-01109: database not open


SQL> recover database using backup controlfile until cancle;
ORA-00277: illegal option to the UNTIL recovery flag CANCLE


SQL> recover database using backup controlfile until cancel;
ORA-00279: change 292666 generated at 04/10/2008 10:03:17 needed for thread 1
ORA-00289: suggestion :
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AN10\ARCHIVELOG\2008_04_10\O1_MF_1_

221_%U_.ARC
ORA-00280: change 292666 for thread 1 is in sequence #221


Specify log: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: cannot open archived log
'D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AN10\ARCHIVELOG\2008_04_10\O1_MF_1

_221_%U_.ARC'
ORA-27041: unable to open file
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????


ORA-00308: cannot open archived log
'D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\AN10\ARCHIVELOG\2008_04_10\O1_MF_1

_221_%U_.ARC'
ORA-27041: unable to open file
OSD-04002: ????????????
O/S-Error: (OS 2) ??????????????????????


SQL>
SQL>
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open


SQL> alter database open resetlogs;

Database altered.

SQL>
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AN10\TEMP01.DBF' SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

Tablespace altered.

这样就把数据库恢复。

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

阅读(3480) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

coohoo2014-04-14 17:37:25

请教一下手工创建redo log是如何做的?

评论热议
请登录后评论。

登录 注册