SQL> create tablespace test datafile '+DATA' size 100m;
Tablespace created.
ASMCMD> ls
SYSAUX.260.993746509
SYSTEM.257.993746509
TEST.268.994093549
UNDOTBS1.258.993746509
UNDOTBS2.265.993746509
USERS.266.993746509
SQL> create user test identified by test default tablespace test;
User created.
SQL> grant dba to test;
Grant succeeded.
模拟添加数据文件到错误位置
SQL> alter tablespace test add datafile ' +DATA' size 100m;
Tablespace altered.
SQL> select file_name,file_id from dba_data_files where tablespace_name='TEST';
FILE_NAME
--------------------------------------------------------------------------------
FILE_ID
----------
+DATA/rac10/datafile/test.268.994093549
6
/u01/app/oracle/product/11.2.0/dbhome_1/dbs/ +DATA
7
插入数据两个数据文件都有数据
SQL> create table test.test as select * from dba_objects;
Table created.
SQL> insert into test.test select * from test.test;
77122 rows created.
SQL> /
insert into test.test select * from test.test
*
ERROR at line 1:
ORA-01653: unable to extend table TEST.TEST by 1024 in tablespace TEST
SQL> commit;
Commit complete.
SQL> select bytes/1024/1024 from dba_segments where segment_name='TEST';
BYTES/1024/1024
---------------
192
将本地文件添加进asm
RMAN> backup as copy datafile 7 format '+DATA';
Starting backup at 05-DEC-18
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00007 name=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/ +DATA
output file name=+DATA/rac10/datafile/test.270.994096049 tag=TAG20181205T174727 RECID=12 STAMP=994096052
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07
Finished backup at 05-DEC-18
ASMCMD> ls
SYSAUX.260.993746509
SYSTEM.257.993746509
TEST.268.994093549
TEST.270.994096049
UNDOTBS1.258.993746509
UNDOTBS2.265.993746509
USERS.266.993746509
插入数据
SQL> select count(*) from test.test;
COUNT(*)
----------
1234051
SQL> insert into test.test select * from dba_objects where rownum<100;
99 rows created.
SQL> commit;
Commit complete.
SQL> select count(*) from test.test;
COUNT(*)
----------
1234150
将数据文件7 offline
SQL> alter database datafile 7 offline;
Database altered.
将数据文件rename为TEST.270.994096049
SQL> alter database rename file '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/ +DATA' to '+data/rac10/datafile/TEST.270.994096049';
Database altered.
将数据文件recover 将数据文件online
SQL> recover datafile 7;
Media recovery complete.
SQL> alter database datafile 7 online;
Database altered.
验证
SQL> select file_name,file_id from dba_data_files where tablespace_name='TEST';
FILE_NAME
--------------------------------------------------------------------------------
FILE_ID
----------
+DATA/rac10/datafile/test.268.994093549
6
+DATA/rac10/datafile/test.270.994096049
7
SQL> select count(*) from test.test;
COUNT(*)
----------
1234150