Oracle 更改数据文件位置的几种常用方式

Oracle 更改数据文件位置的几种常用方式 

A.归档模式下
1、offline 表空间:alter tablespace tablespace_name offline;
2、复制数据文件到新的目录;
3、rename 修改表空间,并修改控制文件;
4、online 表空间; 

注意:系统表空间只有 SYSAUX 可以采用该方式修改存储位置。 

1、offline 表空间 TBS_NAME
SQL> select name from vdatafile; 
SQL> alter tablespace TBS_NAME offline; 

2、复制数据文件到新的目录 

3、rename修改表空间数据文件为新的位置,并修改控制文件 
SQL> alter tablespace TBS_NAME rename datafile '/XXX.dbf' to '/XXX.dbf'; 

4、online表空间 
SQL> alter tablespace TBS_NAME online; 
SQL> select name from vdatafile;
SQL> select file_name,tablespace_name from dba_data_files where tablespace_name='TBS_NAME';

修改系统表空间 SYSTEM 与 UNDO 表空间位置: 
shutdown immediate
startup mount
移动系统表空间(SYSTEM表空间)的数据文件到新的位置,然后修改表空间 SYSTEM、UNDO 数据文件路径
alter database rename file 'C:\APP\DB_DATA\ORCL\SYSTEM01.DBF' to 'C:\APP\DB_DATA\UTBS\SYSTEM01.DBF';
alter database rename file 'C:\APP\DB_DATA\ORCL\UNDOTBS01.DBF' to 'C:\APP\DB_DATA\UTBS\UNDOTBS01.DBF';
alter database open; 

B.非归档模式
1、关闭数据库;
2、复制数据文件到新的位置;
3、启动数据库到mount状态;
4、通过SQL修改数据文件位置;
5、打开数据库;

1、关闭数据库
SQL> select name from vdatafile;  
SQL> shutdown immediate;

2、复制数据文件到新的位置; 

3、启动数据库到mount状态; 
SQL> startup mount

4、通过SQL修改数据文件位置; 
SQL> alter database rename file '/XXX.dbf' to '/XXX.dbf'; 

5、打开数据库; 
SQL> alter database open;
SQL> select name from vdatafile;
SQL> select file_name,tablespace_name from dba_data_files where tablespace_name='TBS_NAME';

C.归档模式下通过RMAN的backup as copy来更改,首选方式 
1.offline datafile
2.backup as copy数据文件到指定路径
3.switch datafile to copy切换控制文件中数据文件路径
4.由于offline datafile不会做检查点,所以在online之前需要recover datafile
5.online datafile 

C1、利用rman copy改变数据文件的路径 
SQL> col file_name for a70 
SQL> select file_name,tablespace_name,autoextensible,bytes/1024/1024 mb from dba_data_files;
本实验目的是将 /u01/test01.dbf文件的修改为 /u01/app/oracle/oradata/orcl/test01.dbf
关闭数据库,再启动到mount状态
SQL> shutdown immediate
SQL> startup mount; 

$ rman target /
RMAN> copy datafile '/u01/test.dbf'  to '/u01/app/oracle/oradata/orcl/test01.dbf';
RMAN> switch datafile '/u01/test.dbf' to copy;

再打开数据库,查看路径,已经该变
SQL> alter database open;
SQL> col file_name for a70
SQL> select file_name,tablespace_name,autoextensible,bytes/1024/1024 mb from dba_data_files;

C2、使用rman copy进行数据文件copy(不需要停机) 
建议此步骤在业务空闲期间做,这样在copy期间产生的归档日志较少,最后切换数据文件的时候需要应用的日志较少,停机时间较短
使用rman进行copy,可以根据实际情况开多个通道加快copy速度.
run{
 allocate channel ch1 device type disk;
 allocate channel ch2 device type disk;
 allocate channel ch3 device type disk;
 allocate channel ch4 device type disk;
 backup as copy database format '/u01/app/oradata/%b';
}

停止数据库,修改参数文件,拷贝控制文件,恢复数据库(需要停机)
1.修改参数文件
SQL> alter system set control_files='/u01/app/oradata/control01.ctl','/u01/app/oradata/control02.ctl' scope=spfile;
        
2.停止数据库,拷贝控制文件
注意这里拷贝的文件名需要和上面参数文件中指定的一致
SQL> shutdown immediate
$ cp /u01/app/oracle/oradata/ORCL/control01.ctl /u01/app/oradata/control01.ctl
$ cp /u01/app/oracle/oradata/ORCL/control02.ctl /u01/app/oradata/control02.ctl

3.使用rman恢复数据库
$ rman target /
RMAN>startup mount;
RMAN>switch database to copy;
RMAN>recover database;
RMAN>alter database open;

到此,数据库迁移完成,检查所有的文件目录
SQL> select file_name from dba_data_files;
SQL> select file_name from dba_temp_files;
SQL> select member from v$logfile;
SQL> show parameter control

到这一步会发现临时文件和redo日志文件还存放在之前的目录里面:
首先需要切换临时表空间数据文件目录,步骤如下:
先给临时表空间添加临时文件,再删除原来的临时文件:
alter tablespace TEMP add tempfile '/u01/app/oradata/temp01.dbf' size 100m autoextend on;
alter database tempfile '/u01/app/oracle/oradata/ORCL/temp01.dbf' drop;
检查临时文件是否到了新的目录中:
SQL> select file_name from dba_temp_files;

修改redo日志文件路径位置:
创建过渡 redo 组并存放至新的位置
select group#,bytes/1024/1024,status from v$log;
alter database add logfile group 4 '/u01/app/oradata/redo04.log' size 200M;
alter database add logfile group 5 '/u01/app/oradata/redo05.log' size 200M;
alter database add logfile group 6 '/u01/app/oradata/redo06.log' size 200M; 

切换到过渡redo
alter system switch logfile;
alter system archive log current;
alter system checkpoint;

查看是否切换到过渡的redo
select group#,bytes/1024/1024,status from v$log;

删除之前位置的日志组
alter database drop logfile group 1;
alter database drop logfile group 2;
alter database drop logfile group 3;

通过操作系统删除老的redo01.log、redo02.log、redo03.log
rm -rf redo01.log、redo02.log、redo03.log
到此所有数据文件、临时文件、日志组文件全部更换至新位置,更新位置完成后验证数据库是否正常即可。

附上截取数据文件目录、数据文件名称的SQL语句,如下
select substr(file_name, 1, instr(file_name, '\', -1)) from dba_data_files;
SELECT SUBSTR(file_name, INSTR(file_name, '\', -1) + 1) FROM dba_data_files; 

相关推荐

  1. Oracle 更改数据文件位置方式

    2024-05-09 14:04:04       12 阅读
  2. Linux端口转发方法

    2024-05-09 14:04:04       37 阅读
  3. vue6数据加密方式使用

    2024-05-09 14:04:04       15 阅读
  4. SpringBoot中实现跨域方式

    2024-05-09 14:04:04       31 阅读
  5. Oracle备份和还原方式

    2024-05-09 14:04:04       13 阅读
  6. 数据大屏--->前端实时更新数据方式

    2024-05-09 14:04:04       21 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-09 14:04:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-09 14:04:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-09 14:04:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-09 14:04:04       18 阅读

热门阅读

  1. 跨域问题解决方案

    2024-05-09 14:04:04       7 阅读
  2. wifi执法记录仪移植出现的问题

    2024-05-09 14:04:04       11 阅读
  3. 邮件服务器有什么作用?

    2024-05-09 14:04:04       9 阅读
  4. Tengine安装及负载均衡(带check实现)

    2024-05-09 14:04:04       12 阅读
  5. QT作业3

    QT作业3

    2024-05-09 14:04:04      10 阅读
  6. DAY 3

    DAY 3

    2024-05-09 14:04:04      9 阅读
  7. Spring 框架中用到的设计模式

    2024-05-09 14:04:04       11 阅读