当前位置:文档之家› Oracle数据库文件及恢复方法

Oracle数据库文件及恢复方法

1 参数文件
对于参数文件,启动根据如下顺序查找参数文件,先查找spfile<ORACLE_SID>.ora,然后查找init<ORALCE_SID>.ora,若两者均查找不到,则无法创建和启动instance。

确认当前使用的是spfile/pfile可通过sql语句查询(show parameter spfile)
一般情况下pfile保存在$ORACLE_HOME/dbs下,其中内容制定SPFILE位置,SPFILE保存在裸设备上,主被机共享。

参数文件中保存数据库启动的初始参数,如控制文件位置等。

1.1 参数文件恢复:
如果损坏或丢失,从其他机器拷贝一个initora01.ora到$ORACLE_HOME/dbs
%sqlplus / as sysdba
SQL>startup pfile=’?/dbs/initora01.ora’;
2 控制文件
数据库启动到nomount状态后,可以查询v$parameter视图,获得控制文件信息,这部分信息来自启动的参数文件,oracle从参数文件spfile/pfile中获得控制文件的位置信息,找到控制文件,启动到MOUNT状态下,可以查询v$controlfile视图获得关于控制文件的信息,可以通过sql语句(select * from v$controlfile;),数据库读取控制文件controlfile中的内容,并按照控制文件中指定的参数找到相应的数据文件,并启动数据库的归档或非归档状态。

控制文件中包含的内容
数据库的名字、ID、创建的时间戳
表空间的名字
精选文档联机日志文件、数据文件的位置、个数、名字
联机日志的Sequence号码
检查点的信息
撤销段的开始或结束
归档信息
备份信息
2.1 控制文件恢复:
损坏或丢失部分控制文件:
SQL>shutdown immediate;
SQL>startup nomount;
修改数据库控制文件,将坏的那个排除在外:
SQL>alter system set control_files='+DG_ORA/ora11g/control02.ctl','+DG_ORA/o ra11g/control03.ctl' scope=spfile";
SQL>alter database open;
损坏或丢失全部控制文件:
(获取恢复脚本SQL>alter database backup controlfile to trace;)
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORA11G" NORESETLOGS FORCE LOGGING ARCHIVELOG
MAXLOGFILES 200
MAXLOGMEMBERS 3
MAXDATAFILES 1024
MAXINSTANCES 8
MAXLOGHISTORY 2920
LOGFILE
GROUP 1 '+DG_ORA/ora11g/ora_redo01_1' SIZE 1000M BLOCKSIZE 512,
GROUP 2 '+DG_ORA/ora11g/ora_redo02_2' SIZE 1000M BLOCKSIZE 512,
GROUP 3 '+DG_ORA/ora11g/ora_redo03_3' SIZE 1000M BLOCKSIZE 512,
GROUP 4 '+DG_ORA/ora11g/ora_redo04_4' SIZE 1000M BLOCKSIZE 512,
GROUP 5 '+DG_ORA/ora11g/ora_redo05_5' SIZE 1000M BLOCKSIZE 512,
精选文档GROUP 6 '+DG_ORA/ora11g/ora_redo06_6' SIZE 1000M BLOCKSIZE 512
DATAFILE
'+DG_ORA/ora11g/ora_system',
'+DG_ORA/ora11g/ora_sysaux01',
'+DG_ORA/ora11g/ora_rbs01',
'+DG_ORA/ora11g/ora_user',
'+DG_DATA/drora11g/datafile/scudatatbs.267.843549685',
'+DG_DATA/drora11g/datafile/scudatatbs_add1',
'+DG_DATA/drora11g/datafile/scudatatbs_add2',
'+DG_DATA/drora11g/datafile/scudatatbs_add3',
'+DG_DATA/drora11g/datafile/scudatatbs_add4',
'+DG_DATA/drora11g/datafile/scudatatbs_add5',
'+DG_DATA/drora11g/datafile/scudatatbs_add6',
'+DG_DATA/drora11g/datafile/scudatatbs_add7',
'+DG_DATA/drora11g/datafile/scudatatbs_add8',
'+DG_DATA/drora11g/datafile/scudatatbs_add9'
CHARACTER SET AL32UTF8;
RECOVER DATABASE
ALTER SYSTEM ARCHIVE LOG ALL;
ALTER DATABASE OPEN;
ALTER TABLESPACE TEMP ADD TEMPFILE '+DG_ORA/ora11g/ora_temp01' SIZE 10240M REUSE AUTOEXTEND OFF;
3 数据文件
3.1 数据文件恢复:
SQL> select * from v$recover_file;
7 OFFLINE OFFLINE 3147198902 3/7/2014 2:31:33 AM
8 OFFLINE OFFLINE 3147198902 3/7/2014 2:31:33 AM
精选文档rman target / nocatalog
RMAN> restore datafile 7;
RMAN> recover datafile 7;
RMAN> sql 'alter database datafile 7 online';
rman target / nocatalog
RMAN> restore datafile 8;
RMAN> recover datafile 8;
RMAN> sql 'alter database datafile 8 online';
4 重做日志文件
redo主要由三部分组成, redo log buffer, LGWR进程,以及redo log file三部分组成。

1, redo log buffer 是一块可重用的区域,大小可以设定,
2, logfile 是由一个不能少于2 个group组成,每个group 不少于1个member成员,当一个group中的member成员同时写满后,就会自动切换到下一个group,也可以用手工强行切换
3, 当在归档模式时,logfile 就会自行写入archive logfile, 当如果运行在非归档模式时,logfile 就会被循环覆盖掉.也就是以前的logfile 会丢弃掉.
4.1 重做日志文件恢复:
非当前redolog恢复:
selectgroup#,thread#,sequence#, archived,status from v$log;
GROUP# THREAD# SEQUENCE# ARC STATUS
---------- -------------------- --- ----------------
1 1 449
2 NO INACTIVE
2 1 449
3 NO INACTIVE
3 1 449
4 NO INACTIVE
4 1 449
5 NO INACTIVE
5 1 449
6 NO INACTIVE
精选文档
6 1 449
7 NO INACTIVE
7 1 4498 NO CURRENT
8 1 4487 NO INACTIVE
发现误删的redo文件不是当前redo日志,使用如下方法恢复:
alter database clearunarchived logfile group 1;
alter database clearunarchived logfile group 2;
alter database clearunarchived logfile group 3;
alter database clearunarchived logfile group 8;
当前redolog恢复:
Current_Redo_log
损坏后恢复数据库.doc。

相关主题