oracle控制文件没有更新,Oracle11g控制文件丢了怎么办?

本文测试控制文件丢失后的恢复方法。文中没有提及使用实时(准实时)备份恢复,因为如果拥有实时(准实时)备份,处理方法的本质和前二种情况类似。

前期准备

首先连上数据库,查看控制文件所在路径

[oracle@ora11g ~]$sqlplus / as sysdba

SQL*Plus:Release 11.2.0.4.0 Production on Wed Aug 16 18:14:10 2017

Copyright(c)1982,2013,Oracle.All rights reserved.

Connected to an idle instance.

SYS@cams>startup;

ORACLE instance started.

Total System Global Area 776646656 bytes

FixedSize2257272 bytes

VariableSize478154376 bytes

Database Buffers     289406976 bytes

Redo Buffers         6828032 bytes

Database mounted.

Database opened.

SYS@cams>show parameter control_files;

NAMETYPEVALUE

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

control_files             string     /u01/app/oracle/oradata/cams/c

ontrol01.ctl,/u01/app/oracle/

fast_recovery_area/cams/contro

l02.ctl

然后查看两个控制文件的详细信息

[oracle@ora11g ~]$ll /u01/app/oracle/oradata/cams/control01.ctl

-rw-r-----.1 oracle oinstall 9945088 Aug 18 18:17 /u01/app/oracle/oradata/cams/control01.ctl

[oracle@ora11g ~]$ll /u01/app/oracle/fast_recovery_area/cams/control02.ctl

-rw-r-----.1 oracle oinstall 9945088 Aug 18 18:18 /u01/app/oracle/fast_recovery_area/cams/control02.ctl

可以看到,两个数据库控制文件的详细信息一致,包括大小,用户组,读写权限等。

第一种情况:数据库处于启动状态,控制文件有多路复用,部分控制文件丢失

修改其中一个控制文件的名字,模拟控制文件丢失

[oracle@ora11g ~]$cd /u01/app/oracle/oradata/cams

[oracle@ora11g cams]$ls|grep control

control01.ctl

[oracle@ora11g cams]$mv control01.ctl control01.ctl.bak

[oracle@ora11g cams]$ls|grep control

control01.ctl.bak

这里发现一个有意思的现象,在控制文件破坏之前已经建立的连接在操作时不受影响,即使是从控制文件查询数据库信息:

SYS@cams>select open_mode from v$database;

OPEN_MODE

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

READ WRITE

但是,用sqlplus重新建立的连接,操作就直接报错了:

[oracle@ora11g ~]$sqlplus / as sysdba

SQL*Plus:Release 11.2.0.4.0 Production on Fri Aug 18 21:06:54 2017

Copyright(c)1982,2013,Oracle.All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0-64bit Production

With the Partitioning,OLAP,Data MiningandReal Application Testing options

SYS@cams>select open_mode from v$database;

select open_mode from v$database

*

ERROR at line 1:

ORA-00210:cannot open the specified control file

ORA-00202:control file: '/u01/app/oracle/oradata/cams/control01.ctl'

ORA-27041:unable to open file

Linux-x86_64 Error:2:No such fileordirectory

Additional information:3

当然,数据库还在提供服务,做一些和控制文件无关的操作都是可以支持的:

SYS@cams>select count(*)from dba_tablespaces;

COUNT(*)

----------

8

但是查看alert日志,也是可以看到已经有报错信息输出了

[oracle@ora11g ~]$tail-f /u01/app/oracle/diag/rdbms/cams/cams/trace/alert_cams.log

Starting background process SMCO

Fri Aug 18 20:29:46 2017

SMCO started with pid=25,OS id=2586

Fri Aug 18 20:35:37 2017

Errorsinfile /u01/app/oracle/diag/rdbms/cams/cams/trace/cams_m001_2653.trc:

ORA-00210:cannot open the specified control file

ORA-00202:control file: '/u01/app/oracle/oradata/cams/control01.ctl'

ORA-27041:unable to open file

Linux-x86_64 Error:2:No such fileordirectory

Additional information:3

Fri Aug 18 20:39:36 2017

Errorsinfile /u01/app/oracle/diag/rdbms/cams/cams/trace/cams_m000_2699.trc:

ORA-00210:cannot open the specified control file

ORA-00202:control file: '/u01/app/oracle/oradata/cams/control01.ctl'

ORA-27041:unable to open file

Linux-x86_64 Error:2:No such fileordirectory

Additional information:3

Fri Aug 18 20:39:37 2017

Errorsinfile /u01/app/oracle/diag/rdbms/cams/cams/trace/cams_m001_2701.trc:

ORA-00210:cannot open the specified control file

ORA-00202:control file: '/u01/app/oracle/oradata/cams/control01.ctl'

ORA-27041:unable to open file

Linux-x86_64 Error:2:No such fileordirectory

Additional information:3

这种控制文件丢失的情况并不是很严重,按照下面操作步骤就能完美恢复控制文件:

1.关闭数据库实例

SYS@cams>shutdown immediate;

ORA-00210:cannot open the specified control file

ORA-00202:control file: '/u01/app/oracle/oradata/cams/control01.ctl'

ORA-27041:unable to open file

Linux-x86_64 Error:2:No such fileordirectory

Additional information:3

SYS@cams>shutdown abort;

ORACLE instance shut down.

2.将正常的控制文件拷贝至丢失的控制文件所在位置

[oracle@ora11g ~]$cp /u01/app/oracle/fast_recovery_area/cams/control02.ctl /u01/app/oracle/oradata/cams/control01.ctl

[oracle@ora11g ~]$ll /u01/app/oracle/oradata/cams/control01.ctl

-rw-r-----.1 oracle oinstall 9945088 Aug 18 21:26 /u01/app/oracle/oradata/cams/control01.ctl

3.启动数据库实例

SYS@cams>startup;

ORACLE instance started.

Total System Global Area 776646656 bytes

FixedSize2257272 bytes

VariableSize478154376 bytes

Database Buffers     289406976 bytes

Redo Buffers         6828032 bytes

Database mounted.

Database opened.

4.执行语句检查数据库是否恢复正常

SYS@cams>select open_mode from v$database;

OPEN_MODE

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

READ WRITE

至此,数据库恢复正常。如果数据库做了控制文件多路复用,然后出现其中部分控制文件丢失的情况,都可以用该方法进行恢复。简单的总结,就是在数据库关闭的情况下,用正常的控制文件去替换丢失的控制文件,然后启动即可。

第二种情况:数据库处于关闭状态,控制文件有多路复用,部分控制文件丢失

首先关闭数据库

SYS@cams>shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

然后将其中一个控制文件重命名,模拟控制文件丢失

[oracle@ora11g cams]$ls|grep control

control01.ctl

control01.ctl.bak

[oracle@ora11g cams]$mv control01.ctl control01.ctl.bak1

[oracle@ora11g cams]$ls|grep control

control01.ctl.bak

control01.ctl.bak1

启动数据库,发现报错

SYS@cams>startup;

ORACLE instance started.

Total System Global Area 776646656 bytes

FixedSize2257272 bytes

VariableSize478154376 bytes

Database Buffers     289406976 bytes

Redo Buffers         6828032 bytes

ORA-00205:errorinidentifying control file,check alert logformore info

查看trace日志文件

[oracle@ora11g ~]$tail-n 20 /u01/app/oracle/diag/rdbms/cams/cams/trace/alert_cams.log

SMON started with pid=13,OS id=3162

Fri Aug 18 21:31:41 2017

RECO started with pid=14,OS id=3164

Fri Aug 18 21:31:41 2017

MMON started with pid=15,OS id=3166

starting up 1 dispatcher(s) fornetwork address'(ADDRESS=(PARTIAL=YES)(PROTOCOL=TCP))'...

Fri Aug 18 21:31:41 2017

MMNL started with pid=16,OS id=3168

starting up 1 shared server(s) ...

ORACLE_BASE from environment=/u01/app/oracle

Fri Aug 18 21:31:41 2017

ALTER DATABASE MOUNT

ORA-00210:cannot open the specified control file

ORA-00202:control file: '/u01/app/oracle/oradata/cams/control01.ctl'

ORA-27037:unable to obtain file status

Linux-x86_64 Error:2:No such fileordirectory

Additional information:3

ORA-205 signalled during:ALTER DATABASE MOUNT...

Fri Aug 18 21:31:41 2017

Checker run found 1 new persistent data failures

然后可以打开trace日志文件,找到数据库启动时候的参数信息:

Using parameter settingsinserver-side spfile /u01/app/oracle/product/11.2.0/db_1/dbs/spfilecams.ora

System parameters with non-default values:

processes=150

memory_target=744M

control_files= "/u01/app/oracle/oradata/cams/control01.ctl"

control_files= "/u01/app/oracle/fast_recovery_area/cams/control02.ctl"

db_block_size=8192

compatible= "11.2.0.4.0"

db_recovery_file_dest= "/u01/app/oracle/fast_recovery_area"

db_recovery_file_dest_size=4182M

undo_tablespace= "UNDOTBS1"

remote_login_passwordfile= "EXCLUSIVE"

db_domain= ""

dispatchers= "(PROTOCOL=TCP) (SERVICE=camsXDB)"

job_queue_processes=1000

audit_file_dest= "/u01/app/oracle/admin/cams/adump"

audit_trail= "DB"

db_name= "cams"

open_cursors=300

diagnostic_dest= "/u01/app/oracle"

根据数据库启动时的参数信息,可以进行控制文件恢复。处理故障的方法就和第一种情况类似,先关闭数据库,然后用正常的控制文件去替换丢失的控制文件,然后启动数据库后进行验证即可。

第三种情况:数据库处于启动状态,全部控制文件丢失

将所有控制文件都重命名,模拟全部控制文件丢失

[oracle@ora11g ~]$mv /u01/app/oracle/oradata/cams/control01.ctl /u01/app/oracle/oradata/cams/control01.ctl.bak2

[oracle@ora11g ~]$ll /u01/app/oracle/oradata/cams|grep control

-rw-r-----.1 oracle oinstall 9945088 Aug 18 21:25 control01.ctl.bak

-rw-r-----.1 oracle oinstall 9945088 Aug 18 21:29 control01.ctl.bak1

-rw-r-----.1 oracle oinstall 9945088 Aug 19 10:44 control01.ctl.bak2

[oracle@ora11g ~]$mv /u01/app/oracle/fast_recovery_area/cams/control02.ctl /u01/app/oracle/fast_recovery_area/cams/control02.ctl.bak

[oracle@ora11g ~]$ll /u01/app/oracle/fast_recovery_area/cams

total 9712

-rw-r-----.1 oracle oinstall 9945088 Aug 19 10:44 control02.ctl.bak

用sqlplus打开一个新的连接,从控制文件查看数据库信息,做一些结构化变更,包括:

l添加,删除或重命名数据文件

l添加或删除表空间,或更改表空间的读/写状态

l添加或删除重做日志文件或重做日志组

这里为了操作简单,修改表空间的读/写状态:

[oracle@ora11g ~]$sqlplus / as sysdba

SQL*Plus:Release 11.2.0.4.0 Production on Sat Aug 19 10:46:35 2017

Copyright(c)1982,2013,Oracle.All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0-64bit Production

With the Partitioning,OLAP,Data MiningandReal Application Testing options

SYS@cams>select open_mode from v$database;

select open_mode from v$database

*

ERROR at line 1:

ORA-00210:cannot open the specified control file

ORA-00202:control file: '/u01/app/oracle/oradata/cams/control01.ctl'

ORA-27041:unable to open file

Linux-x86_64 Error:2:No such fileordirectory

Additional information:3

SYS@cams>select tablespace_name,status from dba_tablespaces;

TABLESPACE_NAME      STATUS

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

SYSTEM             ONLINE

SYSAUX             ONLINE

UNDOTBS1         ONLINE

TEMP             ONLINE

USERS             ONLINE

EXAMPLE          ONLINE

FINCHINAFCDD         ONLINE

FINCHINAFCDD_BIGTABLE     ONLINE

8 rows selected.

SYS@cams>alter tablespace example read only;

alter tablespace example read only

*

ERROR at line 1:

ORA-00603:ORACLE server session terminated by fatal error

ORA-00210:cannot open the specified control file

ORA-00202:control file: '/u01/app/oracle/oradata/cams/control01.ctl'

ORA-27041:unable to open file

Linux-x86_64 Error:2:No such fileordirectory

Additional information:3

ORA-00210:cannot open the specified control file

ORA-00202:control file: '/u01/app/oracle/oradata/cams/control01.ctl'

ORA-27041:unable to open file

Linux-x86_64 Error:2:No such fileordirectory

Additional information:3

Process ID:2705

Session ID:11 Serial number:7

SYS@cams>select tablespace_name,status from dba_tablespaces;

ERROR:

ORA-03114: notconnected to ORACLE

在进行结构化变更操作之后,数据库连接被自行断开了,不过如果再建立一个连接,还是可以进行数据库的增删改查操作的:

[oracle@ora11g ~]$sqlplus / as sysdba

SQL*Plus:Release 11.2.0.4.0 Production on Sat Aug 19 10:57:55 2017

Copyright(c)1982,2013,Oracle.All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0-64bit Production

With the Partitioning,OLAP,Data MiningandReal Application Testing options

SYS@cams>alter user sh identified by sh account unlock;

User altered.

SYS@cams>conn sh/sh

Connected.

SH@cams>create tabletest (id number,namevarchar2(20));

Table created.

SH@cams>insertinto testvalues(1,'joe');

1 row created.

SH@cams>insertinto testvalues(2,'jeff');

1 row created.

SH@cams>updatetestsetname='jack'where id=2;

1 row updated.

SH@cams>select*fromtestwhere id=2;

IDNAME

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

2 jack

SH@cams>delete fromtestwhere id=2;

1 row deleted.

SH@cams>select count(*)fromtest;

COUNT(*)

----------

1

SH@cams>

不只是增删改查操作,只要不要涉及到控制文件的读写,还可以进行其他操作,比如drop table之后从recyclebin恢复删除的表:

SH@cams>drop tabletest;

Table dropped.

SH@cams>select count(*)fromtest;

select count(*)fromtest

*

ERROR at line 1:

ORA-00942:tableorview doesnotexist

SH@cams>show recycle

ORIGINALNAMERECYCLEBINNAMEOBJECTTYPEDROP TIME

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

TESTBIN$VxOFH0JXCxjgU4IKqMCSFw==$0 TABLE     2017-08-19:11:05:37

SH@cams>flashback table"BIN$VxOFH0JXCxjgU4IKqMCSFw==$0"to before drop rename to test1;

Flashback complete.

SH@cams>select*from test1;

IDNAME

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

1 joe

Oracle数据库在控制文件全部丢失的情况下,还能提供那么多服务,已经很了不起了。现在,我们最重要的事情就是恢复控制文件,保证数据库所有功能都可以正常运行,操作步骤如下:

1.列出数据库的所有数据文件和重做日志文件。

首先尝试用数据库视图查看:

SYS@cams>SELECT MEMBER FROM V$LOGFILE;

SELECT MEMBER FROM V$LOGFILE

*

ERROR at line 1:

ORA-00210:cannot open the specified control file

ORA-00202:control file: '/u01/app/oracle/oradata/cams/control01.ctl'

ORA-27041:unable to open file

Linux-x86_64 Error:2:No such fileordirectory

Additional information:3

SYS@cams>SELECTNAMEFROM V$DATAFILE;

SELECTNAMEFROM V$DATAFILE

*

ERROR at line 1:

ORA-00210:cannot open the specified control file

ORA-00202:control file: '/u01/app/oracle/oradata/cams/control01.ctl'

ORA-27041:unable to open file

Linux-x86_64 Error:2:No such fileordirectory

Additional information:3

SYS@cams>SELECT VALUE FROM V$PARAMETER WHERENAME = 'control_files';

VALUE

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

/u01/app/oracle/oradata/cams/control01.ctl,/u01/app/oracle/fast_recovery_area/c

ams/control02.ctl

用不了V$LOGFILE和V$DATAFILE视图,这里选择去服务器上查找数据库的所有数据文件和重做日志文件,如果没有调整过的话,数据文件和控制文件在路径$ORACLE_BASE/oradata/$ORACLE_SID下面:

[oracle@ora11g cams]$cd $ORACLE_BASE/oradata/$ORACLE_SID

[oracle@ora11g cams]$pwd

/u01/app/oracle/oradata/cams

[oracle@ora11g cams]$ll

total 73973336

-rw-r-----.1 oracle oinstall 9945088 Aug 18 21:25 control01.ctl.bak

-rw-r-----.1 oracle oinstall 9945088 Aug 18 21:29 control01.ctl.bak1

-rw-r-----.1 oracle oinstall 9945088 Aug 19 11:36 control01.ctl.bak2

-rw-r-----.1 oracle oinstall 346038272 Aug 19 10:41 example01.dbf

-rw-r-----.1 oracle oinstall 9042927616 Aug 19 10:41 finchina01.dbf

-rw-r-----.1 oracle oinstall 8413782016 Aug 19 10:41 finchina02.dbf

-rw-r-----.1 oracle oinstall 8623497216 Aug 19 10:41 finchina03.dbf

-rw-r-----.1 oracle oinstall 1073750016 Aug 19 10:41 finchina101.dbf

-rw-r-----.1 oracle oinstall 10737426432 Aug 19 10:41 finchina1.dbf

-rw-r-----.1 oracle oinstall 34359730176 Aug 19 10:41 finchina.dbf

-rw-r-----.1 oracle oinstall 52429312 Aug 19 10:41 redo01.log

-rw-r-----.1 oracle oinstall 52429312 Aug 19 11:36 redo02.log

-rw-r-----.1 oracle oinstall 52429312 Aug 19 10:41 redo03.log

-rw-r-----.1 oracle oinstall 765468672 Aug 19 11:36 sysaux01.dbf

-rw-r-----.1 oracle oinstall 870326272 Aug 19 11:36 system01.dbf

-rw-r-----.1 oracle oinstall 893394944 Aug 19 10:42 temp01.dbf

-rw-r-----.1 oracle oinstall 429924352 Aug 19 11:35 undotbs01.dbf

-rw-r-----.1 oracle oinstall 5251072 Aug 19 11:16 users01.dbf

[oracle@ora11g cams]$du-sm*

10    control01.ctl.bak

10    control01.ctl.bak1

10    control01.ctl.bak2

331    example01.dbf

8625    finchina01.dbf

8025    finchina02.dbf

8225    finchina03.dbf

1025    finchina101.dbf

10241    finchina1.dbf

32768    finchina.dbf

51    redo01.log

51    redo02.log

51    redo03.log

731    sysaux01.dbf

831    system01.dbf

853    temp01.dbf

411    undotbs01.dbf

6    users01.dbf

对于表空间,为了防止落下,先查看有哪些表空间:

SYS@cams>select tablespace_name,status from dba_tablespaces;

TABLESPACE_NAME      STATUS

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

SYSTEM             ONLINE

SYSAUX             ONLINE

UNDOTBS1         ONLINE

TEMP             ONLINE

USERS             ONLINE

EXAMPLE          ONLINE

FINCHINAFCDD         ONLINE

FINCHINAFCDD_BIGTABLE     ONLINE

8 rows selected.

将获取到的数据文件和重做日志文件整理成列表:

编号

重做日志文件

大小(M)

1

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

51

2

/u01/app/oracle/oradata/cams/redo02.log

51

3

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

51

编号

表空间文件

大小(M)

1

/u01/app/oracle/oradata/cams/example01.dbf

331

2

/u01/app/oracle/oradata/cams/finchina01.dbf

8625

3

/u01/app/oracle/oradata/cams/finchina02.dbf

8025

4

/u01/app/oracle/oradata/cams/finchina03.dbf

8225

5

/u01/app/oracle/oradata/cams/finchina101.dbf

1025

6

/u01/app/oracle/oradata/cams/finchina1.dbf

10241

7

/u01/app/oracle/oradata/cams/finchina.dbf

32768

8

/u01/app/oracle/oradata/cams/sysaux01.dbf

731

9

/u01/app/oracle/oradata/cams/system01.dbf

831

10

/u01/app/oracle/oradata/cams/temp01.dbf

853

11

/u01/app/oracle/oradata/cams/undotbs01.dbf

411

12

/u01/app/oracle/oradata/cams/users01.dbf

6

2.关闭数据库。

SYS@cams>shutdown immediate;

ORA-00210:cannot open the specified control file

ORA-00202:control file: '/u01/app/oracle/oradata/cams/control01.ctl'

ORA-27041:unable to open file

Linux-x86_64 Error:2:No such fileordirectory

Additional information:3

SYS@cams>shutdown abort;

ORACLE instance shut down.

3.备份数据库的所有数据文件和重做日志文件。

[oracle@ora11g cams]$tar zcvf cams_backup.tar.gz*

control01.ctl.bak

control01.ctl.bak1

control01.ctl.bak2

example01.dbf

finchina01.dbf

finchina02.dbf

finchina03.dbf

finchina101.dbf

finchina1.dbf

finchina.dbf

redo01.log

redo02.log

redo03.log

sysaux01.dbf

system01.dbf

temp01.dbf

undotbs01.dbf

users01.dbf

[oracle@ora11g cams]$ll

total 88069332

-rw-r--r--.1 oracle oinstall 14434295403 Aug 19 18:00 cams_backup.tar.gz

-rw-r-----.1 oracle oinstall 9945088 Aug 18 21:25 control01.ctl.bak

-rw-r-----.1 oracle oinstall 9945088 Aug 18 21:29 control01.ctl.bak1

-rw-r-----.1 oracle oinstall 9945088 Aug 19 13:43 control01.ctl.bak2

-rw-r-----.1 oracle oinstall 346038272 Aug 19 10:41 example01.dbf

-rw-r-----.1 oracle oinstall 9042927616 Aug 19 10:41 finchina01.dbf

-rw-r-----.1 oracle oinstall 8413782016 Aug 19 10:41 finchina02.dbf

-rw-r-----.1 oracle oinstall 8623497216 Aug 19 10:41 finchina03.dbf

-rw-r-----.1 oracle oinstall 1073750016 Aug 19 10:41 finchina101.dbf

-rw-r-----.1 oracle oinstall 10737426432 Aug 19 10:41 finchina1.dbf

-rw-r-----.1 oracle oinstall 34359730176 Aug 19 10:41 finchina.dbf

-rw-r-----.1 oracle oinstall 52429312 Aug 19 10:41 redo01.log

-rw-r-----.1 oracle oinstall 52429312 Aug 19 13:43 redo02.log

-rw-r-----.1 oracle oinstall 52429312 Aug 19 10:41 redo03.log

-rw-r-----.1 oracle oinstall 765468672 Aug 19 13:40 sysaux01.dbf

-rw-r-----.1 oracle oinstall 870326272 Aug 19 13:40 system01.dbf

-rw-r-----.1 oracle oinstall 893394944 Aug 19 10:42 temp01.dbf

-rw-r-----.1 oracle oinstall 429924352 Aug 19 13:42 undotbs01.dbf

-rw-r-----.1 oracle oinstall 5251072 Aug 19 11:16 users01.dbf

4.启动一个新的实例,但不要挂载或打开数据库:

SYS@cams>startup nomount;

ORACLE instance started.

Total System Global Area 776646656 bytes

FixedSize2257272 bytes

VariableSize478154376 bytes

Database Buffers     289406976 bytes

Redo Buffers         6828032 bytes

5.使用CREATE CONTROLFILE语句为数据库创建一个新的控制文件。

CREATE CONTROLFILE

REUSE DATABASE cams

LOGFILE GROUP 1('/u01/app/oracle/oradata/cams/redo01.log'),

GROUP 2('/u01/app/oracle/oradata/cams/redo02.log'),

GROUP 3('/u01/app/oracle/oradata/cams/redo03.log')

NORESETLOGS

DATAFILE'/u01/app/oracle/oradata/cams/example01.dbf',

'/u01/app/oracle/oradata/cams/finchina01.dbf',

'/u01/app/oracle/oradata/cams/finchina02.dbf',

'/u01/app/oracle/oradata/cams/finchina03.dbf',

'/u01/app/oracle/oradata/cams/finchina101.dbf',

'/u01/app/oracle/oradata/cams/finchina1.dbf',

'/u01/app/oracle/oradata/cams/finchina.dbf',

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

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

'/u01/app/oracle/oradata/cams/temp01.dbf',

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

'/u01/app/oracle/oradata/cams/users01.dbf'

MAXLOGFILES 50

MAXLOGMEMBERS 3

MAXLOGHISTORY 400

MAXDATAFILES 200

MAXINSTANCES 6

NOARCHIVELOG

提示错误:

ERROR at line 1:

ORA-01503:CREATE CONTROLFILE failed

ORA-01160:file isnota data file

ORA-01110:data file: '/u01/app/oracle/oradata/cams/temp01.dbf'

这里去掉CREATE CONTROLFILE语句里面的临时表空间

CREATE CONTROLFILE

REUSE DATABASE cams

LOGFILE GROUP 1('/u01/app/oracle/oradata/cams/redo01.log'),

GROUP 2('/u01/app/oracle/oradata/cams/redo02.log'),

GROUP 3('/u01/app/oracle/oradata/cams/redo03.log')

NORESETLOGS

DATAFILE'/u01/app/oracle/oradata/cams/example01.dbf',

'/u01/app/oracle/oradata/cams/finchina01.dbf',

'/u01/app/oracle/oradata/cams/finchina02.dbf',

'/u01/app/oracle/oradata/cams/finchina03.dbf',

'/u01/app/oracle/oradata/cams/finchina101.dbf',

'/u01/app/oracle/oradata/cams/finchina1.dbf',

'/u01/app/oracle/oradata/cams/finchina.dbf',

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

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

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

'/u01/app/oracle/oradata/cams/users01.dbf'

MAXLOGFILES 50

MAXLOGMEMBERS 3

MAXLOGHISTORY 400

MAXDATAFILES 200

MAXINSTANCES 6

NOARCHIVELOG

看到提示“Control file created.”

查看数据库的状态,可以看到数据库成功切换为mount状态

SYS@cams>select open_mode from v$database;

OPEN_MODE

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

MOUNTED

5.正常打开数据库,必要时进行数据库恢复,然后再打开数据库。

SYS@cams>alter database open;

alter database open

*

ERROR at line 1:

ORA-01113:file 1 needs media recovery

ORA-01110:data file 1: '/u01/app/oracle/oradata/cams/system01.dbf'

SYS@cams>recover database;

Media recovery complete.

SYS@cams>alter database open;

Database altered.

6.进行简单的数据库检查,修复一些未处理的问题。

SYS@cams>selectname,open_mode from v$database;

NAMEOPEN_MODE

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

CAMS     READ WRITE

SYS@cams>select tablespace_name,status from dba_tablespaces;

TABLESPACE_NAME      STATUS

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

SYSTEM             ONLINE

SYSAUX             ONLINE

UNDOTBS1         ONLINE

TEMP             ONLINE

USERS             ONLINE

EXAMPLE          ONLINE

FINCHINAFCDD         ONLINE

FINCHINAFCDD_BIGTABLE     ONLINE

8 rows selected.

检查trace日志文件

Sat Aug 19 20:15:42 2017

Errorsinfile /u01/app/oracle/diag/rdbms/cams/cams/trace/cams_m001_4792.trc:

ORA-25153:Temporary Tablespace is Empty

Sat Aug 19 20:16:39 2017

Errorsinfile /u01/app/oracle/diag/rdbms/cams/cams/trace/cams_j000_4820.trc:

ORA-25153:Temporary Tablespace is Empty

发现ORA-25153错误,查看临时表空间视图:

SYS@cams>select*from dba_temp_files;

no rows selected

SYS@cams>select*from v$tempfile;

no rows selected

为数据库添加临时表空间,文件已经存在,使用reuse语句复用即可:

SYS@cams>alter tablespace tempaddtempfile'/u01/app/oracle/oradata/cams/temp01.dbf' size853m reuse autoextend on;

Tablespace altered.

SYS@cams>select*from dba_temp_files;

FILE_NAME

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

FILE_ID TABLESPACE_NAME         BYTES     BLOCKS STATUS

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

RELATIVE_FNO AUT MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS

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

/u01/app/oracle/oradata/cams/temp01.dbf

1 TEMP              894435328     109184 ONLINE

1 YES 3.4360E+10 4194302         1 893386752     109056

SYS@cams>select*from v$tempfile;

FILE# CREATION_CHANGE# CREATION_     TS# RFILE# STATUS ENABLED

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

BYTES BLOCKS CREATE_BYTES BLOCK_SIZE

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

NAME

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

1     84418072 19-AUG-17     3     1 ONLINE READ WRITE

894435328 109184     894435328     8192

/u01/app/oracle/oradata/cams/temp01.dbf

数据库现已打开并可用。

第四种情况:数据库处于关闭状态,全部控制文件丢失

这种情况下的处理方法和第三种情况基本一致,只是如果控制文件没有恢复好,数据库是不能对外提供服务的。但是第三种情况下,数据库还能提供和控制文件无关的增删改查等服务。

最后总结控制文件的多路复用以及控制文件的备份是很重要的,使用ALTER DATABASE BACKUP CONTROLFILE语句备份你的控制文件。你有两个选择:

l使用下列语句将控制文件备份到二进制文件(现有控制文件的副本):

ALTER DATABASE BACKUP CONTROLFILE TO '/u01/app/oracle/oradata/cams/control.bkp';

l生成可以用于重新创建控制文件的SQL语句:

ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

此命令将SQL脚本写入trace文件,可以对其进行抓取和编辑以重现控制文件。通过查看告警日志可以确定跟踪文件的名称和位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值