1. alter database rename file ··· to ···
2. alter tablespace ··· rename datafile ··· to ···
这两种方法都可以迁移数据文件,但是操作上有些不同,主要体现在以下方面: (1)方法1:数据库必须处于
mount
状态,该方法适用于所有的数据文件,包括 system 数据文件;(2)方法2:与方法1不同,此时数据库必须处于
open
状态,且该方法只适用于非 system 表空间的数据文件。
接下来以迁移TS01表空间的数据为例,分别使用两种不同的方法进行操作:
SQL> select FILE_NAME,TABLESPACE_NAME from dba_data_files;
FILE_NAME TABLESPACE
-------------------------------------------------- ----------
/u01/app/oracle/oradata/orcl/system01.dbf SYSTEM
/u01/app/oracle/oradata/orcl/sysaux01.dbf SYSAUX
/u01/app/oracle/oradata/orcl/undotbs01.dbf UNDOTBS1
/u01/app/oracle/oradata/orcl/users01.dbf USERS
/u01/app/oracle/oradata/orcl/ts01.dbf TS01
SQL>
[root@orcldb ~]# /u02/app/oracle/oradata/orcl
[root@orcldb ~]# chown -R oracle:oinstall /u02
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL> host cp /u01/app/oracle/oradata/orcl/ts01.dbf /u02/app/oracle/oradata/orcl/
SQL> startup mount
ORACLE instance started.
Total System Global Area 2147483648 bytes
Fixed Size 8622776 bytes
Variable Size 1325403464 bytes
Database Buffers 805306368 bytes
Redo Buffers 8151040 bytes
Database mounted.
SQL>
SQL> alter database rename file '/u01/app/oracle/oradata/orcl/ts01.dbf' to '/u02/app/oracle/oradata/orcl/ts01.dbf';
Database altered.
TS01
的数据文件已经在新的路径下了SQL> alter database open;
Database altered.
SQL>
SQL> select file_name,tablespace_name,status from dba_data_files;
FILE_NAME TABLESPACE STATUS
-------------------------------------------- ---------- ---------
/u01/app/oracle/oradata/orcl/system01.dbf SYSTEM AVAILABLE
/u01/app/oracle/oradata/orcl/sysaux01.dbf SYSAUX AVAILABLE
/u01/app/oracle/oradata/orcl/undotbs01.dbf UNDOTBS1 AVAILABLE
/u01/app/oracle/oradata/orcl/users01.dbf USERS AVAILABLE
/u02/app/oracle/oradata/orcl/ts01.dbf TS01 AVAILABLE
SQL> select owner,table_name,tablespace_name from dba_tables where tablespace_name='TS01';
OWNER TABLE_NAME TABLESPACE
------ ---------- ----------
HARRY EMP TS01
SQL>
SQL> SELECT * FROM HARRY.EMP;
ID USERNAME AGE
---------- ------------------ ----------
1 张三 22
结果显示数据完好没有丢失,接下来可以在系统中删掉原来的文件从而释放存储空间
[root@orcldb ~]# rm -rf /u01/app/oracle/oradata/orcl/ts01.dbf
还是以TS01
表空的数据为例,再把数据迁移回原来的路径
SQL> insert into EMP values (2,'李四',20);
1 row created.
SQL> select * from EMP;
ID USERNAME AGE
---------- -------------------------------- ----------
1 张三 22
2 李四 20
TS01
表空间offlineSQL> alter tablespace TS01 offline normal;
Tablespace altered.
SQL>
SQL> host cp /u02/app/oracle/oradata/orcl/ts01.dbf /u01/app/oracle/oradata/orcl/;
alter tablespace
命令rename datafile
到目标位置SQL> alter tablespace TS01 rename datafile '/u02/app/oracle/oradata/orcl/ts01.dbf' to '/u01/app/oracle/oradata/orcl/ts01.dbf';
Tablespace altered.
SQL> alter tablespace TS01 online;
Tablespace altered.
SQL> select FILE_NAME,TABLESPACE_NAME from dba_data_files;
FILE_NAME TABLESPACE
--------------------------------------------- ----------
/u01/app/oracle/oradata/orcl/system01.dbf SYSTEM
/u01/app/oracle/oradata/orcl/sysaux01.dbf SYSAUX
/u01/app/oracle/oradata/orcl/undotbs01.dbf UNDOTBS1
/u01/app/oracle/oradata/orcl/users01.dbf USERS
/u01/app/oracle/oradata/orcl/ts01.dbf TS01
SQL> select * from EMP;
ID USERNAME AGE
---------- -------------------------------- ----------
1 张三 22
2 李四 20
[root@orcldb ~]# rm -rf /u02/app/oracle/oradata/orcl/ts01.dbf
来自公众号:IT人家
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!