一、 概述
目前在各个行业业务中存在大量的Oracle RAC环境,尤其对于中小型企业及一些管理不规范的环境中,对数据库的操作也就显得杂乱无章了,它不是核心系统,但有问题也够运维人员喝一壶的。下面说一个常见的问题,就是在RAC环境中,往往会遇到本地数据文件,也就是只能在一个节点访问,出现这样的状况,主要有两个原因,命名不规范,造成Oracle自动创建到DBS目录下,再个对RAC系统不了解,按照之前方式创建。那么在出现这个问题时怎么解决呢,下面我们简单学习一下。
二、操作过程
本次操作对象为非系统表空间,环境rhel6.3_x64+Oracle RAC11g
1、 RAC为归档模式,不停库,通过Oracle11g asmcmd 中cp命令,操作。
首先模拟环境:
SQL> create tablespace firsoul datafile 'firsoul01.dbf' size 10m;
Tablespace created.
SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
+DATA/racdb/datafile/system.293.859438573
………………………………
/oracle/app/oracle/product/11.2.0/dbs/firsoul01.dbf
节点1,查看数据文件状态、信息
SQL> set lines 150
SQL> col file_name for a55
SQL> select file_name,file_id,ONLINE_STATUS,tablespace_name from dba_data_files;
FILE_NAME FILE_ID ONLINE_ TABLESPACE_NAME
-------------------------------------------------------------- ------- ----------------
+DATA/racdb/datafile/system.293.859438573 1 SYSTEM SYSTEM
+DATA/racdb/datafile/sysaux.288.859438589 2 ONLINE SYSAUX
+DATA/racdb/datafile/undotbs1.287.859438601 3 ONLINE UNDOTBS1
+DATA/racdb/datafile/undotbs2.285.859438615 4 ONLINE UNDOTBS2
+DATA/racdb/datafile/users.278.859438619 5 ONLINE USERS
+DATA/racdb/datafile/test1.261.859451689 6 ONLINE TEST1
/oracle/app/oracle/product/11.2.0/dbs/firsoul01.dbf 11 ONLINE FIRSOUL
节点2,查看数据文件状态,信息
SQL> set lines 200
SQL> col file_name for a50
SQL> col tablespace_name for a10
SQL> select file_name,file_id,ONLINE_STATUS,tablespace_name from dba_data_files;
ERROR:
ORA-01157: cannot identify/lock data file 11 - see DBWR trace file
ORA-01110: data file 11: '/oracle/app/oracle/product/11.2.0/dbs/firsoul01.dbf '
将本地数据文件OFFLINE,或可以将整个表空间OFFLINE
SQL> alter database datafile 11 offline;
Database altered.
通过ASMCMD CP命令拷贝数据文件
ASMCMD> cp /oracle/app/oracle/product/11.2.0/dbs/firsoul01.dbf .
copying /oracle/app/oracle/product/11.2.0/dbs/firsoul01.dbf -> +data/racdb/datafile/firsoul01.dbf
ASMCMD> ls -lrt
WARNING:option 'r' is deprecated for 'ls'
please use 'reverse'
Type Redund Striped Time Sys Name
N firsoul01.dbf => +DATA/ASM/DATAFILE/firsoul01.dbf.260.882071123
DATAFILE UNPROT COARSE JUN 11 09:00:00 Y SYSAUX.288.859438589
DATAFILE UNPROT COARSE JUN 11 09:00:00 Y SYSTEM.293.859438573
DATAFILE UNPROT COARSE JUN 11 09:00:00 Y TEST1.261.859451689
DATAFILE UNPROT COARSE JUN 11 09:00:00 Y UNDOTBS1.287.859438601
DATAFILE UNPROT COARSE JUN 11 09:00:00 Y UNDOTBS2.285.859438615
DATAFILE UNPROT COARSE JUN 11 09:00:00 Y USERS.278.859438619
rename数据文件,并查看信息
SQL> alter database rename file '/oracle/app/oracle/product/11.2.0/dbs/firsoul01.dbf' to '+data/racdb/datafile/firsoul01.dbf';
Database altered.
SQL> select file_name,file_id,ONLINE_STATUS,tablespace_name from dba_data_files
2 ;
FILE_NAME FILE_ID ONLINE_ TABLESPACE_NAME
------------------------------------------------------- ---------- ------- ------------------------------
+DATA/racdb/datafile/system.293.859438573 1 SYSTEM SYSTEM
+DATA/racdb/datafile/sysaux.288.859438589 2 ONLINE SYSAUX
……………………
+DATA/racdb/datafile/firsoul01.dbf 11 RECOVER FIRSOUL
我们可以看到,数据文件已移植到ASM中,但需要recover。
SQL> alter database datafile 11 online;
alter database datafile 11 online
*
ERROR at line 1:
ORA-01113: file 11 needs media recovery
ORA-01110: data file 11: '+DATA/racdb/datafile/firsoul01.dbf'
recover数据文件,再次将数据文件online
SQL> recover datafile 11;
Media recovery complete.
SQL> alter database datafile 11 online;
Database altered.
SQL> set lines 150
SQL> col file_name for a55
SQL> select file_name,file_id,ONLINE_STATUS,tablespace_name from dba_data_files;
FILE_NAME FILE_ID ONLINE_ TABLESPACE_NAME
------------------------------------------------------- ---------- ------- ------------------------------
+DATA/racdb/datafile/system.293.859438573 1 SYSTEM SYSTEM
+DATA/racdb/datafile/sysaux.288.859438589 2 ONLINE SYSAUX
…………
+DATA/racdb/datafile/firsoul01.dbf 11 ONLINE FIRSOUL
两个节点查看,都正常。
三、 总结
在Oracle RAC操作过程中,我们更需要严谨,对于非系统表空间可以不用启停数据库,不过需要查看数据库系统是是否归档模式,数据库版本,选择更合理的迁移方式。
如何将ASM中的数据文件复制到操作系统中
Oracle 11g RAC ASM磁盘全部丢失后的恢复
Oracle 11g从入门到精通 PDF+光盘源代码
RHEL6 ASM方式安装Oracle 11g R2
Oracle 10g 手工创建ASM数据库
Oracle 10g R2创建ASM实例Step By Step
: