问题背景:

在进行asm管理的rac表空间增加时,忘记添加+到对应磁盘组,导致建在了节点的本地,好在技术大哥提供方案,本次对事件进行记录整理。

SQL> alter tablespace XXX_name add datafile 'XXX_DATA' size 30G;


Tablespace altered.


SQL> /

alter tablespace XXX_name add datafile 'XXX_DATA' size 30G

*

ERROR at line 1:

ORA-01537: cannot add file 'XXX_DATA' - file already part of database



--发现报错 文件添加错误


SQL> select file_name,file_id from dba_data_files where tablespace_name='XXX_name';


FILE_NAME

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

+XXX_DATA/XXX/DATAFILE/XXX_name.353.1070795283

+XXX_DATA/XXX/DATAFILE/XXX_name.354.1070795309

+XXX_DATA/XXX/DATAFILE/XXX_name.1418.1084619327

+XXX_DATA/XXX/DATAFILE/XXX_name.2347.1084619379

+XXX_DATA/XXX/DATAFILE/XXX_name.1959.1084619405

+XXX_DATA/XXX/DATAFILE/XXX_name.1257.1084619431

+XXX_DATA/XXX/DATAFILE/XXX_name.3088.1084619455

+XXX_DATA/XXX/DATAFILE/XXX_name.3098.1095361573

+XXX_DATA/XXX/DATAFILE/XXX_name.1275.1095361599

/u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/XXX_DATA



--将本地文件resize到最小 并关闭自动扩展


SQL> alter database  datafile '/u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/XXX_DATA' resize 5M;


Database altered.



SQL> alter database  datafile '/u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/XXX_DATA' autoextend off;


Database altered.


--查询数据文件里面无数据为空

SQL> select t.file_name,t1.owner,t1.segment_name,t1.segment_type,t1.tablespace_name from dba_data_files t,dba_extents t1 where t.file_id=t1.file_id and file_name='/u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/XXX_DATA';


no rows selected


--将问题文件offline

SQL> alter database datafile 920 offline;


Database altered.



--将问题文件拷贝到共享存储重命名

RMAN> copy datafile '/u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/XXX_DATA'  to '+XXX_DATA/XXX/DATAFILE/XXX_name_38.dbf';


Starting backup at 2022-10-25 20:35:28

using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile copy

input datafile file number=00920 name=/u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/XXX_DATA

output file name=+XXX_DATA/XXX/DATAFILE/XXX_name_38.dbf tag=TAG20221025T203530 RECID=1 STAMP=1119040530

channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01

Finished backup at 2022-10-25 20:35:31


Starting Control File and SPFILE Autobackup at 2022-10-25 20:35:31

piece handle=/u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/c-2015207192-20221025-06 comment=NONE

Finished Control File and SPFILE Autobackup at 2022-10-25 20:35:32


--更新控制文件

SQL> alter  tablespace XXX_name rename datafile '/u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/XXX_DATA' to '+XXX_DATA/XXX/DATAFILE/XXX_name_38.dbf';


Tablespace altered.

--恢复下数据文件

SQL> recover datafile 920 ;      
Media recovery complete.

--将数据文件online

SQL> alter database datafile 920 online;




--查询数据文件状态

+XXX_DATA/XXX/DATAFILE/XXX_name_38.dbf               AVAILABLE

+XXX_DATA/XXX/DATAFILE/XXX_name.2363.1119038345      AVAILABLE


FILE_NAME                                                    STATUS

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

+XXX_DATA/XXX/DATAFILE/XXX_name.1767.1119038419      AVAILABLE

+XXX_DATA/XXX/DATAFILE/XXX_name.1844.1119038447      AVAILABLE

+XXX_DATA/XXX/DATAFILE/XXX_name.1968.1119038523      AVAILABLE

+XXX_DATA/XXX/DATAFILE/XXX_name.1280.1119038549      AVAILABLE

+XXX_DATA/XXX/DATAFILE/XXX_name.2544.1119038589      AVAILABLE




--将问题文件resize到30G 同时查看节点2和备库数据文件状态正常

SQL> alter database datafile '+XXX_DATA/XXX/DATAFILE/XXX_name_38.dbf' resize 30G;


Database altered.