ORACLE数据库数据文件位置迁移

一.移动数据文件

移动数据文件使用的有2种办法

方法一、以数据文件为单位移动
SQL> select name from v$datafile;
------
------
2.关闭数据库

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

3.MOUNT到数据库

SQL> startup mount

ORACLE instance started.

Total System Global Area  135338868 bytes

Fixed Size                   453492 bytes

Variable Size             109051904 bytes

Database Buffers           25165824 bytes

Redo Buffers                 667648 bytes

Database mounted.
4.把要移动的数据文件剪切到目标目录,
SQL>SELECT 'host mv ' || d.FILE_NAME ||  ' /home/lc_orauser/mount/tablespace1/'||substr(d.FILE_NAME,34)||';' FROM Dba_Data_Files d;

host mv /home/lc_orauser/oradata/niutest/users01.dbf /home/lc_orauser/mount/tablespace1/users01.dbf;
host mv /home/lc_orauser/oradata/niutest/sysaux01.dbf /home/lc_orauser/mount/tablespace1/sysaux01.dbf;
.........

5.alter database方法移动数据文件
SQL>SELECT 'alter database  rename file  '''|| d.file_name ||''' to ''/home/lc_orauser/mount/tablespace1/' ||
substr(d.FILE_NAME,34)||'''' FROM dba_tablespaces t,Dba_Data_Files d WHERE t.tablespace_name=d.TABLESPACE_NAME;

alter database  rename file  '/home/lc_orauser/mount/tablespace1/users01.dbf' to
'/home/lc_orauser/mount/tablespace1/1/users01.dbf'
..............

6.移动其他数据文件同上.但是我们要注意的是TEMP数据文件.在我们上边列出数据文件的命令里没有包含这个文件.而且移动这个文件会报如下错:
*

ERROR at line 1:

ORA-01511: error in renaming log/data files

ORA-01516: nonexistent log file, datafile, or tempfile

"E:\ORACLE\ORADATA\SLUMGA\temp01.DBF"
那如何移动呢?我们需要创建一个TEMP文件,如下:
SQL> create temporary tablespace temp2 tempfile 'e:\oracle\tem2.dbf' size 20M reuse
autoextend on next 50m maxsize unlimited;
SQL> alter database default temporary tablespace temp2;
打开数据库,成功。
方法二、以表空间为单位进行移动
1.把相应表空间offline
SQL> SELECT 'alter tablespace '|| t.tablespace_name ||'  offline ;'  FROM dba_tablespaces t;
alter tablespace SYSTEM  offline ;
............................
2.操作系统级把数据文件移动到目标目录,用上面的方法就可以,这里不再多说了。
3.在ORACLE数据库中把该表空间的所有数据文件改名
SQL> SELECT 'alter tablespace '|| t.tablespace_name ||' rename datafile '''|| d.file_name ||''' to ''/home/lc_orauser/mount/tablespace1/' ||
substr(d.FILE_NAME,34)||'''' FROM dba_tablespaces t,Dba_Data_Files d WHERE t.tablespace_name=d.TABLESPACE_NAME;
!这里要注意,语法和方法一里面的不一样!
4.把表空间ONLINE
SQL>SELECT 'alter tablespace '|| t.tablespace_name ||'  online ;'  FROM dba_tablespaces t;
5.注意!
此方法对系统表空间system、undo表空间和temp表空间无法使用。
最后将数据库重启。测试一下是否成功!
二、移动控制文件
1.用SPFILE启动的数据库
SQL> alter system set control_files='E:\oracle\oradata\slumgabak\CONTROL01.CTL',
'E:\oracle\oradata\slumgabak\CONTROL02.CTL','E:\oracle\oradata\slumgabak\CONTROL03.CTL' scope=spfile;
System altered.
重启数据库。
SQL> create pfile from spfile;
File created.
2.用pfile启动的数据库
修改E:\oracle\ora92\database\init<SID>.ora 文件,修改参数CONTROL_FILES的值。重新启动数据库。如果有SPFIL重建SPFILE
SQL> create spfile from pfile;
三、移动联机重作日志文件。
1.停止数据库
2.把日志文件移动到新的目标目录
3.mount到数据库,修改日志文件的名字
SQL> alter database rename file 'E:\oracle\oradata\slumga\REDO01.LOG' to 'E:\ora
cle\oradata\slumgabak\REDO01.LOG';
Database altered.
SQL> alter database rename file 'E:\oracle\oradata\slumga\REDO02.LOG' to 'E:\ora
cle\oradata\slumgabak\REDO02.LOG';
Database altered.

SQL> alter database rename file 'E:\oracle\oradata\slumga\REDO03.LOG' to 'E:\ora
cle\oradata\slumgabak\REDO03.LOG';
Database altered.
4.OPEN数据库
SQL> alter database open;
修改完成!

猜你喜欢

转载自andyniu.iteye.com/blog/1758312