用户创建表空间时误将数据文件放到了本地盘,重启数据库时一个实例启动不了,只能offline该表空间后启动数据库。现用户想知道怎样能把这个表空间数据文件中的数据恢复出来。
建错的表空间ZJZWDATA数据文件在节点2,所以只能从节点2上打开。可在节点2上将表空间offline之后使用dbms_file_transfer将数据文件移到ASM共享存储(如使用的是集群文件系统,直接拷贝 数据文件即可)。
1)为两个数据文件路径创建目录
节点2:创建两个directory,一个指向本地盘该数据文件目录;一个指向ASM数据文件目录。
SQL> create directory test1 as ‘/home/oracle/’;
Directory created.
SQL> create directory test2 as ‘+DG_DATA01/oradata/xacsidb’;
Directory created.
2)offline表空间
节点2:offline表空间ZJZWDATA
SQL> alter tablespace ZJZWDATA offline;
Tablespace altered.
3)拷贝数据文件到ASM
节点2:使用dbms_file_transfer拷贝该数据文件到ASM
SQL> exec
dbms_file_transfer.copy_file(‘TEST1’,‘d:oracle1zjzwdata.dbf’,‘TEST2’,‘d:oracle1zjzwdata.dbf’);
PL/SQL procedure successfully completed.
4)修改控制文件中的数据文件路径
节点2:
SQL> alter database rename file ‘/u01/app/oracle/product/10.2.0/db_1/dbs/d:oracle1zjzwdata.dbf’ to
‘+DG_DATA01/oradata/xacsidb/test1.dbf’
SQL> /
Database altered.
5)online表空间ZJZWDATA
节点2:online表空间ZJZWDATA
SQL> alter tablespace ZJZWDATA online;
Tablespace altered.




