当前位置: 首页 > news >正文

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; 

http://www.lryc.cn/news/349201.html

相关文章:

  • 【opencv】图像畸变校正
  • Charger之二输入电压动态电源原理(VIN-DPM)
  • 【半夜学习MySQL】表结构的操作(含表的创建、修改、删除操作,及如何查看表结构)
  • 曲线救国:window 安装 docker
  • 番外篇 | 利用PyQt5+YOLOv5来搭建目标检测系统(附可视化界面+功能介绍+源代码)
  • Pascal Content数据集
  • 【Unity】使用Resources.LoadAll读取文件的顺序问题
  • pdf怎么标注红色方框?五种PDF标注红色方框方法
  • C++字符串细节,面试题06
  • AutoModelForCausalLM.from_pretrained 函数调用本地权重报错
  • 【qt】动态属性
  • Git知识点总结
  • 【数据库】数据库指令
  • 设计模式——状态模式(State)
  • 理解打包好的vue项目结构dist包
  • 24深圳杯C题18页高质量论文+可执行代码+图表
  • Midjourney Imagine API 申请及使用
  • 电子邮箱是什么?怎么申请一个电子邮箱?
  • C++ 并发编程指南(11)原子操作 | 11.4、通过内存序实现顺序模型
  • 【数据结构】栈和队列专题
  • 2024年程序员最应该关注的几件事?
  • 【初阶数据结构】单链表基础OJ题讲解
  • 基于Java的俄罗斯方块游戏的设计与实现
  • Hadoop 3.4.0+HBase2.5.8+ZooKeeper3.8.4+Hive+Sqoop 分布式高可用集群部署安装 大数据系列二
  • umi搭建react项目
  • mybatis-plus之数据源切换事务失效问题
  • vue 百度地图点击marker修改marker图片,其他marker图片不变。
  • 【Javaer学习Python】 1、Django安装
  • SSL协议
  • 什么情况下会造成索引失效?