oracle过程不见了,Oracle DB备份恢复篇之丢失控制文件

Oracle DB备份恢复篇之丢失控制文件

一、实验目的

本篇主要模拟控制文件丢失后,如何根据实际情况恢复数据库,才能使数据库尽可能不丢失数据。

二、实验环境

1)Linux系统环境

[oracle@DG1 ~]$ lsb_release -a

LSB

Version:

:core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch

Distributor ID: RedHatEnterpriseServer

Description:

Red Hat Enterprise Linux Server release 5.4 (Tikanga)

Release:

5.4

Codename:

Tikanga

2)Oracle数据库版本信息

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 Linux: Version 10.2.0.1.0 - Production

NLSRTL Version 10.2.0.1.0 – Production

3)查看数据库是否归档

[oracle@DG1 ~]$sqlplus / as sysdba

SQL> archive logfile list;

SP2-0734: unknown command beginning "archive lo..." - rest

of line ignored.

SQL> archive list;

SP2-0734: unknown command beginning "archive li..." - rest

of line ignored.

SQL> archive log list

Database log mode

Archive Mode

Automatic archival

Enabled

Archive destination

USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence

1

Next

log sequence to archive

1

Current log sequence

1

三、实验模拟种类及解决方案

1)丢失部分控制文件,其余控制文件还在

解决方案:一致性关库后,通过copy剩下的控制文件恢复

2)在无备份的情况下丢失了所有的控制文件,但对控制文做了追踪备份

解决方案:通过相应的trace文件,生成脚本,重新创建controlfile

3)在归档模式下,对数据库有完备,丢失全部控制文件

解决方案:通过备份集中的控制文件进行恢复

四、实验过程

1)丢失部分控制文件,其余控制文件还在

查看数据库中控制文件

SQL> select '!rm '||name from

v$controlfile;

'!RM

'||NAME

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

!rm

/u01/app/oracle/oradata/lzcdb/control01.ctl

!rm

/u01/app/oracle/oradata/lzcdb/control02.ctl

!rm

/u01/app/oracle/oradata/lzcdb/control03.ctl

SQL> !rm

/u01/app/oracle/oradata/lzcdb/control02.ctl

!rm

/u01/app/oracle/oradata/lzcdb/control03.ctl

查看控制文件

SQL> !ls

/u01/app/oracle/oradata/DG1/

control01.ctlredo01.log

redo02.log

redo03.log system01.dbf

undotbs01.dbf

redo01_a.log redo02_a.log

redo03_a.log sysaux01.dbf temp01.dbf

users01.dbf

关闭数据库再重新启动数据库(关闭时要执行一致性关闭)

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

重新启动数据库

SQL> startup

ORACLE instance started.

Total System Global Area 285212672

bytes

Fixed Size

1218992 bytes

Variable Size

88082000 bytes

Database Buffers

192937984 bytes

Redo

Buffers

2973696 bytes

ORA-00205: error in identifying control file, check alert

log for more info

警告日志信息如下

Wed

Jun 13 23:38:18 2012

ALTER DATABASE

MOUNT

Wed

Jun 13 23:38:18 2012

ORA-00202: control file:

'/u01/app/oracle/oradata/DG1/control02.ctl'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

Wed

Jun 13 23:38:18 2012

ORA-205 signalled during: ALTER DATABASE

MOUNT在由nomount启动到mount时错误

解决方案:将数据库一致性关闭之后把control01.ctl复制两份,然后改名成删除的控制文件

SQL> shutdownimmediate;

ORA-01507: databasenot mounted

ORACLE instance shutdown.

SQL>

!cp/u01/app/oracle/oradata/lzcdb/control01.ctl/u01/app/oracle/oradata/lzcdb/control02.ctl

SQL>

!cp/u01/app/oracle/oradata/lzcdb/control01.ctl/u01/app/oracle/oradata/lzcdb/control03.ctl

再次重新启动数据库

SQL> startup

ORACLE instancestarted.

Total System GlobalArea 285212672

bytes

Fixed Size

1218992 bytes

Variable Size

83887696 bytes

DatabaseBuffers

197132288 bytes

Redo

Buffers

2973696 bytes

Database mounted.

Database opened.

成功启动!这种恢复控制文件,一定要在控制文件丢失后一致性关闭数据库,这样才能保证恢复出的控制文件课数据文件的SCN一致,打开数据库是不会出错(但如果是在归档模式子,即便不一致性关库,通过此方式也应该能恢复数据库吧!但我还没做实验验证!)。

2)在没有备份的情况下丢失了所有的控制文件,但是对控制文件做了追踪备份

在这里罗嗦一点,注意一定要先将控制文件做追踪备份到trace文件中,才能删除全部控制,否则你删除全部控制文件,数据库必然挂掉了,你怎么可能再去将控制文件做追踪备份到trace文件中呢?千万不要犯这样的低级错误。

将控制文件备份到跟踪文件

SQL> alter database backup controlfile to

trace;

Database altered.

查看跟踪文件的位置

SQL> SQL> show parameter

user;

NAME

TYPE

VALUE

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

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

license_max_users

integer

0

parallel_adaptive_multi_user

boolean

TRUE

user_dump_dest

string

/u01/app/oracle/admin/DG1/udump

找到刚刚生成的trace文件,将trace文件中创建控制文件的sql语句读取出来

[oracle@DG1 ~]$ cd /u01/app/oracle/admin/

dataguard1/ DG1/

[oracle@DG1 ~]$ cd

/u01/app/oracle/admin/DG1/udump/

[oracle@DG1 udump]$ ls -lrt|tail -1

-rw-r----- 1 oracle oinstall

8397 Jun 13 23:04 dg1_ora_30712.trc

查看生成的读取的trace内容

[oracle@DG1 udump]$ cat dg1_ora_30712.trc

/u01/app/oracle/admin/DG1/udump/dg1_ora_30712.trc

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 -

Production

With

the Partitioning, OLAP and Data Mining options

ORACLE_HOME =

/u01/app/oracle/product/10.2.0.1/db_1

System name:

Linux

Node

name:

DG1

Release:

2.6.18-164.el5

Version:

#1 SMP Tue Aug 18 15:51:54 EDT 2009

Machine:

i686

Instance name: DG1

Redo

thread mounted by this instance: 1

Oracle process number: 15

Unix

process pid: 30712, image: oracle@DG1 (TNS V1-V3)

***

SERVICE NAME:(SYS$USERS) 2012-06-13 23:04:23.363

***

SESSION ID:(159.3) 2012-06-13 23:04:23.363

***

2012-06-13 23:04:23.363

--

The following are current System-scope REDO Log Archival

related

--

parameters and can be included in the database initialization

file.

--

--

LOG_ARCHIVE_DEST=''

--

LOG_ARCHIVE_DUPLEX_DEST=''

--

--

LOG_ARCHIVE_FORMAT=%t_%s_%r.dbf

--

--

DB_UNIQUE_NAME="DG1"

--

--

LOG_ARCHIVE_CONFIG='SEND, RECEIVE, NODG_CONFIG'

--

LOG_ARCHIVE_MAX_PROCESSES=2

--

STANDBY_FILE_MANAGEMENT=MANUAL

--

STANDBY_ARCHIVE_DEST=?/dbs/arch

--

FAL_CLIENT=''

--

FAL_SERVER=''

--

--

LOG_ARCHIVE_DEST_10='LOCATION=USE_DB_RECOVERY_FILE_DEST'

--

LOG_ARCHIVE_DEST_10='OPTIONAL REOPEN=300 NODELAY'

--

LOG_ARCHIVE_DEST_10='ARCH NOAFFIRM NOEXPEDITE NOVERIFY

SYNC'

--

LOG_ARCHIVE_DEST_10='REGISTER NOALTERNATE NODEPENDENCY'

--

LOG_ARCHIVE_DEST_10='NOMAX_FAILURE NOQUOTA_SIZE NOQUOTA_USED

NODB_UNIQUE_NAME'

--

LOG_ARCHIVE_DEST_10='VALID_FOR=(PRIMARY_ROLE,ONLINE_LOGFILES)'

--

LOG_ARCHIVE_DEST_STATE_10=ENABLE

--

--

Below are two sets of SQL statements, each of which creates a

new

--

control file and uses it to open the database. The first set

opens

--

the database with the NORESETLOGS option and should be used only

if

--

the current versions of all online logs are available. The

second

--

set opens the database with the RESETLOGS option and should be

used

--

if online logs are unavailable.

--

The appropriate set of statements can be copied from the trace

into

-- a

script file, edited as necessary, and executed when there is

a

--

need to re-create the control file.

--

--

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 "DG1"

NORESETLOGS ARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 (

'/u01/app/oracle/oradata/DG1/redo01.log',

'/u01/app/oracle/oradata/DG1/redo01_a.log'

)

SIZE 50M,

GROUP 2 (

'/u01/app/oracle/oradata/DG1/redo02.log',

'/u01/app/oracle/oradata/DG1/redo02_a.log'

)

SIZE 50M,

GROUP 3 (

'/u01/app/oracle/oradata/DG1/redo03.log',

'/u01/app/oracle/oradata/DG1/redo03_a.log'

)

SIZE 50M

-- STANDBY LOGFILE

DATAFILE

'/u01/app/oracle/oradata/DG1/system01.dbf',

'/u01/app/oracle/oradata/DG1/undotbs01.dbf',

'/u01/app/oracle/oradata/DG1/sysaux01.dbf',

'/u01/app/oracle/oradata/DG1/users01.dbf',

'/u01/app/oracle/product/10.2.0.1/db_1/dbs/soe.dbf'

CHARACTER SET US7ASCII

;

-- Configure RMAN configuration record 1

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=

SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CHANNEL','DEVICE TYPE DISK

FORMAT

''/home/oracle/DiskBackupLocation/%U''');

-- Configure RMAN configuration record 2

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=

SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE

AUTOBACKUP','ON');

-- Configure RMAN configuration record 3

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=

SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP FORMAT

FOR DEVICE TYPE','DISK TO

''/home/oracle/DiskBackupLocation/%F''');

-- Configure RMAN configuration record 4

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=

SYS.DBMS_BACKUP_RESTORE.SETCONFIG('RETENTION POLICY','TO

NONE');

-- 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

'/home/oracle/FlashRecovery/DG1/archivelog/2012_06_13/o1_mf_1_1_%u_.arc';

-- ALTER DATABASE REGISTER LOGFILE

'/home/oracle/FlashRecovery/DG1/archivelog/2012_06_13/o1_mf_1_1_%u_.arc';

-- ALTER DATABASE REGISTER LOGFILE

'/home/oracle/FlashRecovery/DG1/archivelog/2012_06_13/o1_mf_1_1_%u_.arc';

-- 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

'/u01/app/oracle/oradata/DG1/temp01.dbf'

SIZE 419430400 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 "DG1"

RESETLOGS

ARCHIVELOG

MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 1 (

'/u01/app/oracle/oradata/DG1/redo01.log',

'/u01/app/oracle/oradata/DG1/redo01_a.log'

)

SIZE 50M,

GROUP 2 (

'/u01/app/oracle/oradata/DG1/redo02.log',

'/u01/app/oracle/oradata/DG1/redo02_a.log'

)

SIZE 50M,

GROUP 3 (

'/u01/app/oracle/oradata/DG1/redo03.log',

'/u01/app/oracle/oradata/DG1/redo03_a.log'

)

SIZE 50M

-- STANDBY LOGFILE

DATAFILE

'/u01/app/oracle/oradata/DG1/system01.dbf',

'/u01/app/oracle/oradata/DG1/undotbs01.dbf',

'/u01/app/oracle/oradata/DG1/sysaux01.dbf',

'/u01/app/oracle/oradata/DG1/users01.dbf',

'/u01/app/oracle/product/10.2.0.1/db_1/dbs/soe.dbf'

CHARACTER SET US7ASCII

;

-- Configure RMAN configuration record 1

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=

SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CHANNEL','DEVICE TYPE DISK

FORMAT

''/home/oracle/DiskBackupLocation/%U''');

-- Configure RMAN configuration record 2

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=

SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE

AUTOBACKUP','ON');

-- Configure RMAN configuration record 3

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=

SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP FORMAT

FOR DEVICE TYPE','DISK TO

''/home/oracle/DiskBackupLocation/%F''');

-- Configure RMAN configuration record 4

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=

SYS.DBMS_BACKUP_RESTORE.SETCONFIG('RETENTION POLICY','TO

NONE');

-- 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

'/home/oracle/FlashRecovery/DG1/archivelog/2012_06_13/o1_mf_1_1_%u_.arc';

-- ALTER DATABASE REGISTER LOGFILE

'/home/oracle/FlashRecovery/DG1/archivelog/2012_06_13/o1_mf_1_1_%u_.arc';

-- ALTER DATABASE REGISTER LOGFILE

'/home/oracle/FlashRecovery/DG1/archivelog/2012_06_13/o1_mf_1_1_%u_.arc';

-- 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

'/u01/app/oracle/oradata/DG1/temp01.dbf'

SIZE 419430400 REUSE AUTOEXTEND ON

NEXT 655360 MAXSIZE

32767M;

-- End of tempfile additions.

--

创建用于恢复控制文件的sql脚本

[oracle@DG1 udump]$ vi dg1_ora_30712.trc

:set nu

53,125 w! /home/oracle/controlfile_trace1_1.sql

查看用于恢复控制文件的sql脚本

[oracle@DG1 ~]$ ls

10201_database_linux32.zip database

DiskBackupLocation

controlfile_trace1_1.sqlDesktop

FlashRecovery

删除所有控制文件

SQL> select '!rm '||name from

v$controlfile;

'!RM'||NAME

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

!rm/u01/app/oracle/oradata/lzcdb/control01.ctl

!rm/u01/app/oracle/oradata/lzcdb/control02.ctl

!rm/u01/app/oracle/oradata/lzcdb/control03.ctl

SQL> !rm

/u01/app/oracle/oradata/DG1/control01.ctl

!rm

/u01/app/oracle/oradata/DG1/control02.ctl

!rm

/u01/app/oracle/oradata/DG1/control03.ctl

查看控制文件是否被删除

SQL> !ls

/u01/app/oracle/oradata/DG1/

redo01_a.log redo02_a.log redo03_a.log

sysaux01.dbf

temp01.dbf

users01.dbf

redo01.log redo02.log

redo03.log

system01.dbf

undotbs01.dbf

关闭数据库

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

重新启动

SQL> startup

ORACLE instance started.

Total System Global Area 285212672

bytes

Fixed Size

1218992 bytes

Variable Size

83887696 bytes

Database Buffers

197132288 bytes

Redo

Buffers

2973696 bytes

ORA-00205: error in identifying control file, check alert

log for more info

警告日志出现如下错误

Wed

Jun 13 23:20:37 2012

ALTER DATABASE

MOUNT

Wed

Jun 13 23:20:37 2012

ORA-00202: control file:

'/u01/app/oracle/oradata/DG1/control01.ctl'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

Wed

Jun 13 23:20:40 2012

ORA-205 signalled during: ALTER DATABASE

MOUNT...

现在解决问题

将实例关闭,执行上面创建的恢复控制文件的脚本controlfile_trace1_1.sql

SQL> @controlfile_trace1_1.sql

ORACLE instance started.

Total System Global Area 285212672

bytes

Fixed Size

1218992 bytes

Variable Size

83887696 bytes

Database Buffers

197132288 bytes

Redo

Buffers

2973696 bytes

Control file created.

PL/SQL procedure successfully completed.

PL/SQL procedure successfully completed.

PL/SQL procedure successfully completed.

PL/SQL procedure successfully completed.

ORA-00283: recovery session canceled due to

errors

ORA-00264: no recovery required

ALTER SYSTEM ARCHIVE LOG ALL

*

ERROR at line 1:

ORA-00271: there are no logs that need archiving

Database altered.

Tablespace altered.恢复成功

查看数据库当前状态

SQL> selectstatus from v$instance

STATUS

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

OPEN

恢复成功!为了确保数据不丢失,我们应该定期将控制文件做追踪备份到trace文件,生成恢复控制文件的sql脚本,以防控制文件全部丢失之后,在没有归档模式下的全备份,我们可以通过这种方法恢复数据库。

3)在归档模式下,对数据库有完备,丢失全部控制文件

注意这里一定要清楚自己备份集中控制文件备份存放的位置,否则当你干掉全部控制文件后,进入RMAN模式是在NOMOUNT状态,此时你无法查用RMAN来看备份集中控制文件的备份位置,更何谈用备份集中的控制文件来恢复干掉的所有控制文件然后再恢复数据库。

先进入RMAN模式查看备份集中控制文件存放的位置

[oracle@DG1 ~]$ rman target sys/oracle@DG1

Recovery Manager: Release 10.2.0.1.0 - Production on Wed

Jun 13 22:09:16 2012

Copyright (c) 1982, 2005, Oracle. All rights

reserved.

connected to target database: DG1

(DBID=1762320829)

RMAN> list backup;

List

of Backup Sets

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

BS

Key Type

LV Size

Device Type Elapsed Time Completion Time

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

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

2

Incr 0

3.39G

DISK

00:08:22

13-JUN-12

BP Key: 2

Status: AVAILABLE Compressed:

NO Tag:

BACKUP_DG1_000001_061312022053

Piece Name: /home/oracle/DiskBackupLocation/02ndeh2i_1_1

List of Datafiles in backup set 2

File LV Type Ckp SCN

Ckp Time

Name

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

1

0 Incr

675126

13-JUN-12 /u01/app/oracle/oradata/DG1/system01.dbf

2

0 Incr

675126

13-JUN-12 /u01/app/oracle/oradata/DG1/undotbs01.dbf

3

0 Incr

675126

13-JUN-12 /u01/app/oracle/oradata/DG1/sysaux01.dbf

4

0 Incr

675126

13-JUN-12 /u01/app/oracle/oradata/DG1/users01.dbf

5

0 Incr

675126

13-JUN-12

/u01/app/oracle/product/10.2.0.1/db_1/dbs/soe.dbf

BS

Key Type

LV Size

Device Type Elapsed Time Completion Time

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

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

3

Full

7.08M

DISK

00:00:05

13-JUN-12

BP Key: 3

Status: AVAILABLE Compressed:

NO Tag:

TAG20120613T142932

Piece Name:

/home/oracle/DiskBackupLocation/c-1762320829-20120613-00

Control File Included: Ckp SCN: 677193

Ckp time: 13-JUN-12

SPFILE Included: Modification time: 13-JUN-12

BS

Key

Size

Device Type Elapsed Time Completion Time

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

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

4

1.14G

DISK

00:03:47

13-JUN-12

BP Key: 4

Status: AVAILABLE Compressed:

NO Tag:

BACKUP_DG1_000001_061312022053

Piece Name: /home/oracle/DiskBackupLocation/04ndehir_1_1

List of Archived Logs in backup set 4

Thrd Seq

Low

SCN

Low Time

Next SCN

Next Time

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

1

6

524597

20-MAY-12 528875

13-JUN-12

1

7

528875

13-JUN-12 528877

13-JUN-12

1

8

528877

13-JUN-12 528880

13-JUN-12

1

9

528880

13-JUN-12 529115

13-JUN-12

1

10

529115

13-JUN-12 529117

13-JUN-12

1

11

529117

13-JUN-12 529120

13-JUN-12

1

12

529120

13-JUN-12 529129

13-JUN-12

1

13

529129

13-JUN-12 529131

13-JUN-12

1

14

529131

13-JUN-12 529134

13-JUN-12

1

15

529134

13-JUN-12 529136

13-JUN-12

1

16

529136

13-JUN-12 529138

13-JUN-12

1

17

529138

13-JUN-12 529140

13-JUN-12

1

18

529140

13-JUN-12 529142

13-JUN-12

1

19

529142

13-JUN-12 529144

13-JUN-12

1

20

529144

13-JUN-12 529154

13-JUN-12

1

21

529154

13-JUN-12 529156

13-JUN-12

1

22

529156

13-JUN-12 529158

13-JUN-12

1

23

529158

13-JUN-12 529160

13-JUN-12

1

24

529160

13-JUN-12 529162

13-JUN-12

1

25

529162

13-JUN-12 529164

13-JUN-12

1

26

529164

13-JUN-12 529431

13-JUN-12

1

27

529431

13-JUN-12 529433

13-JUN-12

1

28

529433

13-JUN-12 529436

13-JUN-12

1

29

529436

13-JUN-12 529438

13-JUN-12

1

30

529438

13-JUN-12 529440

13-JUN-12

1

31

529440

13-JUN-12 529442

13-JUN-12

1

32

529442

13-JUN-12 529444

13-JUN-12

1

33

529444

13-JUN-12 529446

13-JUN-12

1

34

529446

13-JUN-12 529448

13-JUN-12

1

35

529448

13-JUN-12 529450

13-JUN-12

1

36

529450

13-JUN-12 529452

13-JUN-12

1

37

529452

13-JUN-12 529454

13-JUN-12

1

38

529454

13-JUN-12 529456

13-JUN-12

1

39

529456

13-JUN-12 529458

13-JUN-12

1

40

529458

13-JUN-12 529460

13-JUN-12

1

41

529460

13-JUN-12 529462

13-JUN-12

1

42

529462

13-JUN-12 529464

13-JUN-12

1

43

529464

13-JUN-12 529466

13-JUN-12

1

44

529466

13-JUN-12 529468

13-JUN-12

1

45

529468

13-JUN-12 529470

13-JUN-12

1

46

529470

13-JUN-12 534645

13-JUN-12

1

47

534645

13-JUN-12 539056

13-JUN-12

1

48

539056

13-JUN-12 543505

13-JUN-12

1

49

543505

13-JUN-12 547897

13-JUN-12

1

50

547897

13-JUN-12 552310

13-JUN-12

1

51

552310

13-JUN-12 556688

13-JUN-12

1

52

556688

13-JUN-12 561084

13-JUN-12

1

53

561084

13-JUN-12 565473

13-JUN-12

1

54

565473

13-JUN-12 569854

13-JUN-12

1

55

569854

13-JUN-12 574302

13-JUN-12

1

56

574302

13-JUN-12 579860

13-JUN-12

1

57

579860

13-JUN-12 586089

13-JUN-12

1

58

586089

13-JUN-12 592233

13-JUN-12

1

59

592233

13-JUN-12 598391

13-JUN-12

1

60

598391

13-JUN-12 604553

13-JUN-12

1

61

604553

13-JUN-12 610704

13-JUN-12

1

62

610704

13-JUN-12 616840

13-JUN-12

1

63

616840

13-JUN-12 623696

13-JUN-12

1

64

623696

13-JUN-12 631159

13-JUN-12

1

65

631159

13-JUN-12 637993

13-JUN-12

1

66

637993

13-JUN-12 644418

13-JUN-12

1

67

644418

13-JUN-12 650775

13-JUN-12

1

68

650775

13-JUN-12 659810

13-JUN-12

1

69

659810

13-JUN-12 677285

13-JUN-12

BS Key Type LV

Size

Device Type Elapsed Time Completion Time

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

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

5

Full

7.08M

DISK

00:00:03

13-JUN-12

BP Key: 5

Status: AVAILABLE Compressed:

NO Tag:

TAG20120613T143358

Piece Name:

/home/oracle/DiskBackupLocation/c-1762320829-20120613-01

Control File Included: Ckp SCN: 679052

Ckp time: 13-JUN-12

SPFILE Included: Modification time: 13-JUN-12

妹的,全备份这么多次(由于使用了压力测试工具),我的磁盘伤不起啊,做完这个实验立即干掉他们!可以看出上面红色部分BP Key

5是备份集中最新控制文件的存放位置,我们记住这个目录,稍后恢复控制文件时要使用。

查看控制文件

SQL> select '!rm '||name from

v$controlfile;

'!RM

'||NAME

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

!rm

/u01/app/oracle/oradata/DG1/control01.ctl

!rm

/u01/app/oracle/oradata/DG1/control02.ctl

!rm

/u01/app/oracle/oradata/DG1/control03.ctl

将控制文件全部删除

SQL> !rm

/u01/app/oracle/oradata/DG1/control01.ctl

!rm

/u01/app/oracle/oradata/DG1/control02.ctl

!rm

/u01/app/oracle/oradata/DG1/control03.ctl

查看控制文件是否还存在

SQL> !ls

/u01/app/oracle/oradata/DG1

redo01_a.log

redo02.log

sysaux01.dbf

undotbs01.dbf

redo01.log

redo03_a.log

system01.dbf

users01.dbf

redo02_a.log

redo03.log

temp01.dbf

将数据库关闭,然后重新启动

SQL> shutdown immediate;

ORA-00210: cannot open the specified control

file

ORA-00202: control file:

'/u01/app/oracle/oradata/DG1/control01.ctl'

ORA-27041: unable to open file

Linux Error: 2: No such file or directory

Additional information: 3

妹的,竟然正常关闭不了(之前做测试都能正常关闭),直接强制关闭

SQL> shutdown abort;

ORACLE instance shut down.

重新启动数据库

SQL> startup

ORACLE instance started.

Total System Global Area 285212672

bytes

Fixed Size

1218992 bytes

Variable Size

88082000 bytes

Database Buffers

192937984 bytes

Redo

Buffers

2973696

bytes

ORA-00205: error in identifying control file, check alert

log for more info

出现报错信息,不能识别控制文件,这是肯定的,由于缺少控制文件,数据库在由nomount状态启动到mount状态时要读取控制文件中的内容,控制文件都木有了,怎么能启动到mount,还别说open了,所以在数据库只能启动到nomount状态。由于我们有归档模式下的RMAN全备,所以我们可以借助RMAN备份集来恢复参数文件。

SQL> select status from

v$instance;

STATUS

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

STARTED

进入RMAN模式

[oracle@DG1 ~]$ rman target sys/oracle@DG1

Recovery Manager: Release 10.2.0.1.0 - Production on Wed

Jun 13 22:01:19 2012

Copyright (c) 1982, 2005, Oracle. All rights

reserved.

connected to target database: DG1 (not mounted)

现在从RMAN完备数据库的备份集中进行控制文件的恢复

RMAN> restore controlfile from

'/home/oracle/DiskBackupLocation/c-1762320829-20120613-01';

Starting restore at 13-JUN-12

using target database control file instead of

recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=155

devtype=DISK

channel ORA_DISK_1: restoring control

file

channel ORA_DISK_1: restore complete, elapsed

time: 00:00:06

output

filename=/u01/app/oracle/oradata/DG1/control01.ctl

output

filename=/u01/app/oracle/oradata/DG1/control02.ctl

output

filename=/u01/app/oracle/oradata/DG1/control03.ctl

Finished restore at 13-JUN-12

可以看到控制文件已经由全备份集中的控制文件成功恢复

恢复控制完毕,查看控制文件

[oracle@DG1 ~]$ ls /u01/app/oracle/oradata/DG1/

control01.ctl

redo01_a.log

redo02.log

sysaux01.dbf

undotbs01.dbf

control02.ctl

redo01.log

redo03_a.log

system01.dbf

users01.dbf

control03.ctl

redo02_a.log

redo03.log

temp01.dbf

将数据库启动到mount状态恢复数据库

RMAN> alter database mount;

database mounted

released channel: ORA_DISK_1成功启动到mount状态

执行RMAN恢复数据库的操作

RMAN> recover database;

Starting recover at 13-JUN-12

Starting implicit crosscheck backup at 13-JUN-12

allocated channel: ORA_DISK_1

channel ORA_DISK_1: sid=155 devtype=DISK

Crosschecked 3 objects

Finished implicit crosscheck backup at 13-JUN-12

Starting implicit crosscheck copy at 13-JUN-12

using channel ORA_DISK_1

Finished implicit crosscheck copy at 13-JUN-12

searching for all files in the recovery area

cataloging files...

no

files cataloged

using channel ORA_DISK_1

starting media recovery

archive log thread 1 sequence 70 is already on disk as file

/u01/app/oracle/oradata/DG1/redo03.log

archive log thread 1 sequence 71 is already on disk as file

/u01/app/oracle/oradata/DG1/redo01.log

archive log filename=/u01/app/oracle/oradata/DG1/redo03.log

thread=1 sequence=70

archive log filename=/u01/app/oracle/oradata/DG1/redo01.log

thread=1 sequence=71

media recovery complete, elapsed time: 00:00:01

Finished recover at 13-JUN-12

数据库恢复成功

打开数据库

RMAN> alter database open

resetlogs;

database opened RMAN>成功恢复

由于数据库一直处于归档模式,所以从归档下的完备份集恢复数据库,可以保证数据不丢失,当由备份集恢复控制文件之后,接着会从数据库的归档日志和undo日志文件中读取SCN信息,将恢复的控制文件更新到最新状态。

五、总结

没有不丢失数据的数据库,所以经常备份数据,是很有必要的,也许某一天数据库就挂掉了,如果有备份,恢复当然容易,如果没有,也许结果就不一样了………无论你的数据库是以何种方式恢复的,一定切记恢复后,做一次归档下的全备,这样就可以尽可能降低恢复数据库后数据库再次挂掉后丢失数据的可能性。

-----Jialin.Lee

2012-06-13

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值