1.如果控制文件全部丢失,且没有控制文件的备份,则只能通过CREATE CONTROLFILE命令来重建控制文件。利用这种CREATE CONTROLFILE的方式重建控制文件不需要使用RESETLOGS方式打开数据库。
2.如果在最后一次数据库结构修改后使用了ALTER DATABASE BACKUP CONTROLFILE TO TRACE NORESETLOGS命令备份了创建控制文件的脚本,则可以直接用TRACE文件中的脚本进行控制文件的重建。
3.如果使用ALTER DATABASE BACKUP CONTROLFILE TO TRACE NORESETLOGS命令之后又进行了数据库结构的修改,则需要手工编辑TRACE文件中的脚本,来反映出数据库最后的修改。
4.如果是使用的ALTER DATABASE BACKUP CONTROLFILE TO FILENAME方式进行的备份(这种情况其实应该算作有备份的情况,不过如果利用备份进行恢复需要使用RESETLOGS方式打开数据库),则可以利用备份的控制文件首先将数据库STARTUP MOUNT,然后再利用ALTER DATABASE BACKUP CONTROLFILE TO TRACE NORESETLOGS命令备份建立控制文件的脚本,最后将备份控制文件后所有数据库结构的修改,反映到控制文件的脚本上。
5.如果控制文件没有任何方式的备份,那么只能通过手工方式编写CREATE CONTROLFILE语句,这时候需要了解所有数据文件和联机重做日志文件的位置和大小。(这就是丢失前,什么准备都没有的情况)
三种备份控制文件的方法:
控制文件的备份和恢复在数据库的备份恢复过程中十分关键。
备份控制文件的原则是:在数据库物理结构发生变化后备份控制文件。
备份控制文件包括三种方法:
通过操作系统命令在数据库关闭时对控制文件进行COPY;
利用ALTER DATABASE BACKUP CONTROLFILE TO命令将控制文件备份到二进制文件;
利用ALTER DATABASE BACKUP CONTROLFILE TO TRACE命令将重建控制文件备份的脚本备份到后台trace文件中。
Oracle推荐使用第二种方式来备份控制文件。第一种方式备份的控制文件,一般用于全库一致性恢复。而第三种方式备份控制文件会丢失归档日志历史等许多信息。在重建控制文件时,只读表空间和脱机的数据文件的处理相对比较复杂。
现在主要说说的是2.3两种:
第二种:
16:33:39 sys@LEE2>alter database backup controlfile to 'e:\lee2_controlfile.bak';
数据库已更改。
第三种:
16:33:50 sys@LEE2>select tablespace_name,status
16:35:27 2 from dba_tablespaces;
TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
UNDOTBS1 ONLINE
SYSAUX ONLINE
TEMP ONLINE
USERS ONLINE
LEE ONLINE
已选择6行。
//让其中的一个数据文件 offline
16:35:34 sys@LEE2>select file_id,file_name
16:37:39 2 from dba_data_files;
FILE_ID
----------
FILE_NAME
----------------------------------------------------------------------------------------------------
--------------------------------------------------
6
E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\LEE02.DBF
10
E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\USERS02.DBF
9
E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\SYSTEM02.DBF
8
E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\SYSAUX02.DBF
5
E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\LEE01.DBF
4
E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\USERS01.DBF
3
E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\SYSAUX01.DBF
2
E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\UNDOTBS01.DBF
1
E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\SYSTEM01.DBF
已选择9行。
已用时间: 00: 00: 00.03
16:37:44 sys@LEE2>alter database datafile 6 offline;
数据库已更改。
16:38:38 sys@LEE2>select name,status from v$datafile;
NAME
---------------------------------------------------------------
--------------------------------------------------
STATUS
-------
E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\SYSTEM01.DBF
SYSTEM
E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\UNDOTBS01.DBF
ONLINE
E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\SYSAUX01.DBF
ONLINE
E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\USERS01.DBF
ONLINE
E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\LEE01.DBF
ONLINE
E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\LEE02.DBF
RECOVER
E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\SYSAUX02.DBF
ONLINE
E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\SYSTEM02.DBF
SYSTEM
E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\USERS02.DBF
ONLINE
已选择9行。
已用时间: 00: 00: 00.03
// backup controlfile
16:39:36 sys@LEE2>alter database backup controlfile to trace;
数据库已更改。
// 查看trace
-- Set #1. NORESETLOGS case
--
-- The following commands will create a new control file and use it
-- to open the database.
-- Data used by Recovery Manager will be lost.
-- Additional logs may be required for media recovery of offline
-- Use this only if the current versions of all online logs are
-- available.
-- After mounting the created controlfile, the following SQL
-- statement will place the database in the appropriate
-- protection mode:
-- ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "LEE2" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\REDO01.LOG' SIZE 50M,
GROUP 2 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\REDO02.LOG' SIZE 50M,
GROUP 3 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\REDO03.LOG' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\SYSTEM01.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\UNDOTBS01.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\SYSAUX01.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\USERS01.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\LEE01.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\LEE02.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\SYSAUX02.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\SYSTEM02.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\USERS02.DBF'
CHARACTER SET ZHS16GBK
;
-- Take files offline to match current control file.
ALTER DATABASE DATAFILE 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\LEE02.DBF' OFFLINE;
-- Commands to re-create incarnation table
-- Below log names MUST be changed to existing filenames on
-- disk. Any one log file from each branch can be used to
-- re-create incarnation records.
-- ALTER DATABASE REGISTER LOGFILE 'E:\ARCHIVE2\LEE2\ARC00001_0657977050.001';
-- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE
-- All logs need archiving and a log switch is needed.
ALTER SYSTEM ARCHIVE LOG ALL;
-- Database can now be opened normally.
ALTER DATABASE OPEN;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\TEMP01.DBF'
SIZE 91226112 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
-- End of tempfile additions.
--
-- Set #2. RESETLOGS case
--
-- The following commands will create a new control file and use it
-- to open the database.
-- Data used by Recovery Manager will be lost.
-- The contents of online logs will be lost and all backups will
-- be invalidated. Use this only if online logs are damaged.
-- After mounting the created controlfile, the following SQL
-- statement will place the database in the appropriate
-- protection mode:
-- ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "LEE2" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\REDO01.LOG' SIZE 50M,
GROUP 2 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\REDO02.LOG' SIZE 50M,
GROUP 3 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\REDO03.LOG' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\SYSTEM01.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\UNDOTBS01.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\SYSAUX01.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\USERS01.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\LEE01.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\LEE02.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\SYSAUX02.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\SYSTEM02.DBF',
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\USERS02.DBF'
CHARACTER SET ZHS16GBK
;
-- Commands to re-create incarnation table
-- Below log names MUST be changed to existing filenames on
-- disk. Any one log file from each branch can be used to
-- re-create incarnation records.
-- ALTER DATABASE REGISTER LOGFILE 'E:\ARCHIVE2\LEE2\ARC00001_0657977050.001';
-- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE USING BACKUP CONTROLFILE
-- Database can now be opened zeroing the online logs.
ALTER DATABASE OPEN RESETLOGS;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\LEE2\TEMP01.DBF'
SIZE 91226112 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
-- End of tempfile additions.
--
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11134734/viewspace-368919/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/11134734/viewspace-368919/