数据库恢复一例(2)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

最近通过做实验总结出一种数据库恢复方法,对今后的工作很有帮助:

数据库为非归档状态,只有一周前的数据文件的备份,无redolog,归档日志和controlfile的备份,此种情况一但数据库出故障只能做不完全恢复,会丢失一周前做备份时到出故障那一时候的所有数据,具体恢复方法如下:

操作系统为solaris8,内存2G,2颗CPU.

实验步骤:

$sqlplus /nolog

SQLconnect / as sysdba

SQL archive log list

Database log mode No Archive Mode

Automatic archival Enabled

Archive destination /opt/oracle/arch/ORCL

Oldest online log sequence 895

Current log sequence 897

SQL select * from v$logfile;

GROUP# STATUS

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

MEMBER

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

3

/opt/oracle/db04/oradata/ORCL/redo03.log

2

/opt/oracle/db03/oradata/ORCL/redo02.log

1

/opt/oracle/db02/oradata/ORCL/redo01.log

SQL select * from v$controlfile;

STATUS

-------

NAME

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

/opt/oracle/db02/oradata/ORCL/control01.ctl

/opt/oracle/db03/oradata/ORCL/control02.ctl

/opt/oracle/db04/oradata/ORCL/control03.ctl

SQLalter database backup controlfile to trace;

(备份控制文件,此时会在$ORACLE_BASE/admin/ORCL/udump目录里生成trace文件)

SQL shutdown immediate (关闭当前数据库)

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL quit

Disconnected

模拟数据丢失:

删除当前所有的数据文件,控制文件和redolog文件:

$rm -rf ?/opt/oracle/db02/oradata/ORCL/*

$rm /opt/oracle/db03/oradata/ORCL/redo02.log

$rm /opt/oracle/db03/oradata/ORCL/control02.ctl

$rm /opt/oracle/db04/oradata/ORCL/redo03.log

$rm /opt/oracle/db04/oradata/ORCL/control03.ctl

把一周前备份的数据文件copy回来,目录结构和以前一样,但这时因为没有redolog和controlfile文件,数据库只能启动到nomount状态:

编辑udump目录下生成的orcl_ora_7140.trc文件,把里面的创建controlfile的那部分内容粘贴下来放在SQL里执行:

(这里要注意一定要用resetlogs方式重建控制文件,resetlogs之后会生成新的redolog,并且把当前redofile的sequence置为1,否则创建控制文件会失败):

SQLSTARTUP NOMOUNT

SQL CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS NOARCHIVELOG

2 MAXLOGFILES 32

3 MAXLOGMEMBERS 2

4 MAXDATAFILES 254

5 MAXINSTANCES 8

6 MAXLOGHISTORY 907

7 LOGFILE

8 GROUP 1 '/opt/oracle/db02/oradata/ORCL/redo01.log' SIZE 50000K,

9 GROUP 2 '/opt/oracle/db03/oradata/ORCL/redo02.log' SIZE 50000K,

10 GROUP 3 '/opt/oracle/db04/oradata/ORCL/redo03.log' SIZE 50000K

11 DATAFILE

12 '/opt/oracle/db02/oradata/ORCL/system01.dbf',

13 '/opt/oracle/db02/oradata/ORCL/tools01.dbf',

14 '/opt/oracle/db02/oradata/ORCL/rbs01.dbf',

15 '/opt/oracle/db02/oradata/ORCL/temp01.dbf',

16 '/opt/oracle/db02/oradata/ORCL/users01.dbf',

17 '/opt/oracle/db02/oradata/ORCL/indx01.dbf',

18 '/opt/oracle/db02/oradata/ORCL/drsys01.dbf',

19 '/opt/oracle/db02/oradata/ORCL/wacos.dbf',

20 '/opt/oracle/db02/oradata/ORCL/wacos01.dbf',

21 '/opt/oracle/db02/oradata/ORCL/wacos02.dbf',

22 '/opt/oracle/db02/oradata/ORCL/wacos03.dbf',

23 '/opt/oracle/db02/oradata/ORCL/wacos04.dbf',

24 '/opt/oracle/db02/oradata/ORCL/wacos05.dbf',

25 '/opt/oracle/db02/oradata/ORCL/wacos06.dbf',

26 '/opt/oracle/db02/oradata/ORCL/nms.dbf',

27 '/opt/oracle/db02/oradata/ORCL/test.dbf'

28 CHARACTER SET WE8ISO8859P1;

Control file created.

SQL alter database open resetlogs;(以resetlogs方式打开数据库)

Database altered.

SQL select status from v$instance; (检查数据库的状态)

STATUS

-------

OPEN

SQL select * from v$logfile; (检查logfile的状态)

GROUP# STATUS

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

MEMBER

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

3

/opt/oracle/db04/oradata/ORCL/redo03.log

2

/opt/oracle/db03/oradata/ORCL/redo02.log

1

/opt/oracle/db02/oradata/ORCL/redo01.log

SQL select * from v$controlfile; (检查控制文件的状态)

STATUS

-------

NAME

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

/opt/oracle/db02/oradata/ORCL/control01.ctl

/opt/oracle/db03/oradata/ORCL/control02.ctl

/opt/oracle/db04/oradata/ORCL/control03.ctl

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航