移动数据文件分几种情况:
1.本地到本地
2.本地到ASM 与 ASM到本地
3.AMS到ASM
本文通过实验:《rac环境将误建立在本地目录的文件转移到ASM存储中》,
来实现数据文件的位置移动。
OS:RHEL 6.5
DB:Oracle Rac 11.2.0.4
存储:ASM共享存储
step1:rac1故意将数据文件建立到本地OS目录。
create tablespace test1 datafile '/home/oracle/test1.dbf' size 10m;
查看表空间:
set linesize 300;
col FILE_NAME for a50;
select file_name,file_id,ONLINE_STATUS,tablespace_name from dba_data_files;
因为表空间TEST1建立简历在rac1的本地目录,所以如果在rac1可以在TEST1建立Table,而rac2无法建立Table。
所以才需要移动数据文件到ASM共享存储
下面进行测试:
create table test1 (id int) tablespace test1;
可以看出rac1创建table成功。
下面在rac2进行测试:
select * from test1;
create table test2 (id int) tablespace test1;
rac2报错:无法找到 datafile6并给出了datafile6的信息。
rac2无法读取test1表,并且无法创建表。
----------------------------------------------华丽分割线------------------------------------------------------------------------------------------华丽分割线--------------------------------------------
以下是解决方法:
step2:在rac1使测试表空间处于offline状态:
alter tablespace test1 offline;
Tablespace altered.
Step3:将本地数据文件用asmcmd复制到ASM卷组中去
[root@rac1 ~]# su - grid
[grid@rac1 ~]$ asmcmd
ASMCMD> cp /home/oracle/test1.dbf +DATA/orcl/datafile/test1.dbf
copying /home/oracle/test1.dbf -> +DATA/orcl/datafile/test1.dbf
Step4:重命名数据库中的数据文件为新的名字(更改存储路径)
SQL> alter database rename file '/home/oracle/test1.dbf' to '+DATA/orcl/datafile/test1.dbf';
Database altered.
查看一下状态查询:1.表空间是否Offline 2.对应数据文件名称是否更换为:'+DATA/orcl/datafile/test1.dbf'
SQL> select file_name,file_id,ONLINE_STATUS,tablespace_name from dba_data_files;//图太大,不贴结果了。
Step5: 换rac2:
SQL> alter tablespace test1 online; //更改表空间的状态
Tablespace altered.
在rac2查询表空间以及对应的数据文件:
SQL> select file_name,file_id,ONLINE_STATUS,tablespace_name from dba_data_files;//发现可以识别到。 备注:不贴结果了,图片太大。
在rac2查询test1表空间:
SQL> select * from test1;
no rows selected
SQL> insert into test1 values(123);
1 row created.
SQL> select * from test1;
ID
----------
123
测试完毕,一切正常
此时数据文件已经从rac1本地正确移动到ASM共享存储。
但
本地文件仍然存在:
[oracle@rac1 ~]$ cd /home/oracle/
[oracle@rac1 ~]$ ls
Desktop Documents Downloads Music Pictures Public Templates test1.dbf Videos
你可以自行删除。
关于如何更改文件路径网上的另一种做法:
http://www.lxway.com/4052064891.htm
20:56:25 sys@XXX> alter tablespace test1 offline;Tablespace altered.
20:56:59 sys@XXX>exec dbms_file_transfer.copy_file('TEST1','test1.dbf','TEST2','test1.dbf');PL/SQL procedure successfully completed.20:57:09 sys@XXX> alter database rename file '/home/oracle/test1.dbf' to '+XXX_DATA/XXX/datafile/test1.dbf';Database altered.20:57:39 sys@XXX> alter tablespace test1 online;Tablespace altered.
备注:
以上迁移数据文件时是采用 dbms_file_transfer.copy_file迁移数据文件的方法,也可以使用RMAN来做:
SQL>select tablespace_name,file_name,status,online_status from
dba_data_files;
需要对表空间进行OFFLINE
登录RMAN,
RMAN> sql "alter tablespace test1 offline";
RMAN> copy datafile '/home/oracle/test1.dbf' to
'+DG/rac10g/datafile/test1.dbf';
SQL> alter database rename file '/home/oracle/test1.dbf' to
'+DG/rac10g/datafile/test1.dbf';
SQL> alter tablespace test1 online;
附:删除数据文件的别名:
[grid@qs-oradb1 ~]$ asmcmd
ASMCMD> ls -l
State Type Rebal Name
MOUNTED EXTERN N ARCH/
MOUNTED EXTERN N DG_GRID/
MOUNTED EXTERN N FBFJ_DATA/
MOUNTED EXTERN N KDEDI_DATA/
切到对应的目录下:
ASMCMD> cd +KDEDI_DATA/kdedi/datafile
ASMCMD> rm test1.dbf
李宁宁是傻×!!!