目前在各个行业业务中存在大量的Oracle RAC环境,尤其对于中小型企业及一些管理不规范的环境中,对数据库的操作也就显得杂乱无章了,它不是核心系统,但有问题也够运维人员喝一壶的。下面说一个常见的问题,就是在RAC环境中,往往会遇到本地数据文件,也就是只能在一个节点访问,出现这样的状况,主要有两个原因,命名不规范,造成Oracle自动创建到DBS目录下,再个对RAC系统不了解,按照之前方式创建。那么在出现这个问题时怎么解决呢,下面我们简单学习一下。
二、操作过程
本次操作对象为非系统表空间,环境rhel6.3_x64+Oracle RAC11g
1、 RAC为非归档模式,裸设备迁移到ASM。不停库,通过RMAN中copy命令,操作。
首先模拟环境,节点2操作:
|
SQL> alter tablespace firsoul add datafile '/dev/raw/raw9' size 40m;
Tablespace altered.
SQL> create table firsoul.test (id int,name varchar2(40));
Table created.
SQL> insert into firsoul.test values(1,'firsoul');
1 row created.
SQL> commit; 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;
FILE_NAME FILE_ID ONLINE_ TABLESPACE -------------------------------------------------- ---------- ------- ---------- +DATA/racdb/datafile/system.293.859438573 1 SYSTEM SYSTEM +DATA/racdb/datafile/sysaux.288.859438589 2 ONLINE SYSAUX …………………… +DATA/racdb/datafile/firsoul.259.882071697 7 ONLINE FIRSOUL /dev/raw/raw9 8 ONLINE FIRSOUL +DATA/racdb/datafile/firsoul01.dbf 11 ONLINE FIRSOUL |
节点1,查看数据文件状态,信息
|
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 8 - see DBWR trace file ORA-01110: data file 8: '/dev/raw/raw9' |
将需要变更数据文件所属表空间OFFLINE,非归档模式下单个数据文件在数据库OPEN状态下无法OFFLINE。
|
SQL> alter database datafile 8 offline; alter database datafile 8 offline * ERROR at line 1:
ORA-01145: offline immediate disallowed unless media recovery
enabled
Tablespace altered. 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;
FILE_NAME FILE_ID ONLINE_ TABLESPACE -------------------------------------------------- ---------- ------- ---------- +DATA/racdb/datafile/system.293.859438573 1 SYSTEM SYSTEM …………………… +DATA/racdb/datafile/firsoul.259.882071697 7 OFFLINE FIRSOUL /dev/raw/raw9 8 OFFLINE FIRSOUL +DATA/racdb/datafile/firsoul01.dbf 11 OFFLINE FIRSOUL |
通过RMAN CP命令拷贝数据文件
|
RMAN> copy datafile '/dev/raw/raw9' to '+DATA';
Starting backup at 2015-06-11 10:02:28 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=45 instance=racdb2 device type=DISK channel ORA_DISK_1: starting datafile copy input datafile file number=00008 name=/dev/raw/raw9 output file name=+DATA/racdb/datafile/firsoul.263.882093749 tag=TAG20150611T100229 RECID=2 STAMP=882093752 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03 Finished backup at 2015-06-11 10:02:32 |
rename数据文件,并查看信息
|
SQL> alter database rename file '/dev/raw/raw9' to '+DATA/racdb/datafile/firsoul.263.882093749';
Database altered.
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;
FILE_NAME FILE_ID ONLINE_ TABLESPACE -------------------------------------------------- ---------- ------- ---------- +DATA/racdb/datafile/system.293.859438573 1 SYSTEM SYSTEM ……………… +DATA/racdb/datafile/firsoul.259.882071697 7 OFFLINE FIRSOUL +DATA/racdb/datafile/firsoul.263.882093749 8 OFFLINE FIRSOUL +DATA/racdb/datafile/firsoul01.dbf 11 OFFLINE FIRSOUL |
我们可以看到,数据文件已移植到ASM中,下面将offline表空间修改为online。
|
SQL> alter tablespace firsoul online;
Tablespace altered.
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;
FILE_NAME FILE_ID ONLINE_ TABLESPACE -------------------------------------------------- ---------- ------- ---------- +DATA/racdb/datafile/system.293.859438573 1 SYSTEM SYSTEM …… +DATA/racdb/datafile/firsoul.259.882071697 7 ONLINE FIRSOUL +DATA/racdb/datafile/firsoul.263.882093749 8 ONLINE FIRSOUL +DATA/racdb/datafile/firsoul01.dbf 11 ONLINE FIRSOUL |
两个节点查看,都正常。
附:SYSTEM数据文件移植步骤(过程说明):
|
1. Stop DB. |
三、 总结
在Oracle RAC操作过程中,我们更需要严谨,对于非系统表空间可以不用启停数据库,不过需要查看数据库系统是是否归档模式,数据库版本,选择更合理的迁移方式。对于系统数据文件则需要数据库为MOUNT状态进行操作,并且其他恢复完成且需要其他节点实例重启。Oracle11g ascmd中有cp命令,相对更简单一点,在Oracle10g RAC方式下,需要通过rman copy命令进行文件复制,总之,我们需要根据现场环境做出更合理的方式进行操作。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29487349/viewspace-1696511/ ,如需转载,请注明出处,否则将追究法律责任。