1、故障描述
在双节点,使用asm盘,一般情况下,我们在添加asm盘的时候,我们通常采用的方法是:
SQL> ALTER TABLESPACE TESTDATA ADD DATAFILE '+DATADG01' size 10240M;
但是,有一天,一个客户的管理员在进行添加磁盘的时候,漏掉了重要符号加号“+”,直接导致另一个节点的报错,无法访问文件!
他的添加方法是这样的:
SQL> ALTER TABLESPACE TESTDATA ADD DATAFILE 'DATADG01' size 10240M;
这样,导致数据库的一个节点报这样的错误:
/u01/app/oracle/product/11.2.0.3/dbs/DATADG01无法找到,连接到该节点的会话不断报相关的错误。
ERROR at line 1:
ORA-01157: cannot identify/lock data file 9 - see DBWR trace file
ORA-01110: data file 7: '/u01/app/oracle/product/11.2.0.3/dbs/DATADG01'
2、问题分析
我们收到这种情况后,到了客户现场,对问题进行了分析:
SQL> select file_name from dba_data_files where TABLESPACE_NAME = 'USERS';
FILE_NAME
--------------------------------------------------------------------------------
+DATADG01/mytest/datafile/users.268.764071447
/u01/app/oracle/product/11.2.0.3/dbs/DATADG01
+DATADG01/mytest/datafile/users.2372.789133165
可以看到,在第一个节点,看到了有一个文件系统,所以另一个节点无法访问,导致故障发生
3、解决问题
问题的解决,肯定会引起业务的中断,也就是在访问的过程中会报错,但这种情况,随着问题的解决,会马上恢复
3.1采用rman的方法,把文件系统进行迁移
RMAN > backup as copy datafile '/u01/app/oracle/product/11.2.0.3/dbs/DATADG01' format '+DATADG01';
tarting backup at 2013-03-20 13:18:00
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=40 instance=mytest device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00007 name=/u01/app/oracle/product/11.2.0.3/dbs/DATADG01
output file name=+DATADG01/mytest/datafile/users.2374.789139083 tag=TAG20120720T131802 RECID=4 STAMP=789139124
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:45
Finished backup at 2013-03-20 13:18:47
备份的时候,把该文件形成了asm格式,并且通过备份,已经生成了一个asm的文件格式,这方便了我们的迁移
3.1对文件进行离线重命名
[mytest1:oracle]sqlplus "/as sysdba"
SQL*Plus: Release 11.2.0.3.0 Production on Fri Jul 20 13:23:09 2012
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
--离线操作
SQL> alter database datafile '/u01/app/oracle/product/11.2.0.3/dbs/DATADG01' offline;
Database altered.
--重命名
SQL> alter database rename file '/u01/app/oracle/product/11.2.0.3/dbs/DATADG01' to '+DATADG01/mytest/datafile/users.2374.789139083' ;
Database altered.
把这个直接重命名为刚才备份输出的asm文件名,就可以了!注意,这一步操作是在sqlplus命令行中进行的,我们在这一步折腾了下,在rman命令行下操作,老报错,还以为自己搞错了!遇事不要慌很重要,慌也解决不了问题。
3.3恢复数据库文件
--进行恢复
SQL> recover datafile '+DATADG01/mytest/datafile/users.2374.789139083' ;
Media recovery complete.
--将文件online
SQL> alter database datafile '+DATADG01/mytest/datafile/users.2374.789139083' online;
Database altered.
3.4进行验证
SQL> select file_name from dba_data_files where TABLESPACE_NAME = 'USERS';
FILE_NAME
--------------------------------------------------------------------------------
+DATADG01/mytest/datafile/users.268.764071447
+DATADG01/mytest/datafile/users.2374.789139083
+DATADG01/mytest/datafile/users.2372.789133165
可以看到,已经成功了,问题到此解决,前台应用已经不再报错!
4、综述
加asm文件时,一定要小心加号。如果实在遇到了,那也没办法,在离线期间,可能会使两个节点的业务都受到影响,这没有办法,对业务必须有影响。但此种方法比较理想