Oracle数据库如何更改数据文件位置

 更新时间:2023年08月02日 10:58:42   作者:goyeer  
这篇文章主要给大家介绍了关于Oracle数据库如何更改数据文件位置的相关资料,Oracle数据库的数据文件的位置和信息都被记录在控制文件中,需要的朋友可以参考下

一、概述

突然收到zabbix报警提示OA数据库服务器磁盘不足,经常查发现根目录磁盘空间不足,由于无法添加磁盘来扩容,需要将数据库目录从/oradata更改到/home/oracle/oradata。

由于数据库文件和表空间具有不同的性质,将数据文件位置更改分为四个步骤:

  • 控制文件位置更改
  • 数据文件位置更改*(不包括临时数据文件)*
  • 临时数据文件位置更改
  • 日志文件位置更改

二、控制文件位置更改

停止数据库监听,防止有应用连接对数据库进行修改。

lsnrctl stop

数据库open的状态下

alter system set 
control_files='/home/oracle/oradata/oa/control01.ctl','/home/oracle/oradata/oa/control02.ctl','/home/oracle/oradata/oa/control03.ctl' scope=spfile;

然后将数据库shutdown

shutdown immediate;

将控制文件移动到新目录/home/oracle/oradata/oa下

mv /oradata/oa/control* /home/oracle/oradata/oa/

将数据库启动到mount状态,至此,控制文件位置更改结束。

三、数据文件位置更改(不包括临时数据文件)

数据库需要在open状态下

将表空间全部offline,使用一下命令:

SELECT 'alter tablespace ' || DTS.Tablespace_Name || ' offline;'
  FROM Sys.Dba_Tablespaces DTS
 WHERE DTS.Contents <> 'TEMPORARY'
   AND DTS.Tablespace_Name <> 'UNDOTBS1'
   AND DTS.Tablespace_Name <> 'SYSTEM';

生成的SQL语句如下,使用sysdba账户执行

alter tablespace SYSAUX offline;
alter tablespace USERS offline;
...

将这些表空间的数据文件复制到新目录/home/oracle/oradata目录下,数据文件rename的时候,需要两边都有数据文件。

使用以下语句生成rename数据文件的SQL语句

SELECT 'alter tablespace ' || Ddf.Tablespace_Name || ' rename datafile ''' ||
       Ddf.File_Name || ''' to ''' || '/home/oracle' || Ddf.File_Name ||
       ''';'
  FROM Sys.Dba_Data_Files Ddf
 WHERE Ddf.Tablespace_Name <> 'SYSTEM'
   AND Ddf.Tablespace_Name <> 'UNDOTBS1';

生成的SQL语句如下,使用sysdba账户执行

alter tablespace USERS rename datafile '/oradata/ipcc/users01.dbf' to '/home/oracle/oradata/ipcc/users01.dbf';
alter tablespace SYSAUX rename datafile '/oradata/ipcc/sysaux01.dbf' to '/home/oracle/oradata/ipcc/sysaux01.dbf';
......

执行结束之后,将表空间全部**online,**使用以下语句生成表空间online的SQL语句

SELECT 'alter tablespace ' || Ds.Tablespace_Name || ' online;'
  FROM Sys.Dba_Tablespaces Ds
 WHERE Ds.Contents <> 'TEMPORARY'
   AND Ds.Tablespace_Name <> 'UNDOTBS1'
   AND Ds.Tablespace_Name <> 'SYSTEM';

生成的SQL语句如下,使用sysdba账户执行

alter tablespace SYSAUX online;
alter tablespace USERS online;
......

四、临时数据文件位置更改

临时表空间比较特殊,不能将临时表空间offline,需要将临时表空间的临时数据文件offline。

数据库在open状态下,生成临时数据文件offline的SQL语句如下:

SELECT 'alter database tempfile ''' || File_Name || ''' offline;'
   FROM Dba_Temp_Files
  ORDER BY File_Id;  

生成的SQL语句如下,使用sysdba账户执行

alter database tempfile '/oradata/ipcc/temp01.dbf' offline;
alter database tempfile '/oradata/ricd_temp10' offline;
......

将临时数据文件复制到/home/oracle/oradata目录下

生成rename临时数据文件的SQL语句如下:

SELECT 'alter database rename file ''' || File_Name || ''' to ''' ||
       '/home/oracle' || File_Name || ''';'
  FROM Dba_Temp_Files
 ORDER BY File_Id;

生成的SQL语句如下,使用sysdba账户执行

alter database rename file '/oradata/oa/temp01.dbf' to '/home/oracle/oradata/oa/temp01.dbf';
alter database rename file '/oradata/oa_temp10' to '/home/oracle/oradata/oa_temp10';
......

执行结束之后,将临时数据文件online,生成临时数据文件online的SQL语句如下:

SELECT 'alter database tempfile ''' || File_Name ||
       ''' online;'
  FROM Dba_Temp_Files
 ORDER BY File_Id;

生成的SQL语句如下,使用sysdba账户执行

alter database tempfile '/home/oracle/oradata/oa/temp01.dbf' online;
alter database tempfile '/home/oracle/oradata/oa_temp10' online;
......

至此,临时数据文件位置更改结束

五、临时数据文件位置更改

数据库可以在mount状态或open状态下。

查看日志文件状态

select group#,thread#,sequence#,members,archived,status from v$log;
select member from v$logfile;

当日志文件状态不为current的时候,将日志文件复制到新目录/home/oracle/oradata下,然后可以切换日志文件位置。也可以使用alter system switch logfile,切换日志文件状态

SQL> alter database rename file '/oradata/oa/redo01.log' to '/home/oracle/oradata/oa/redo01.log';
SQL> alter database rename file '/oradata/oa/redo02.log' to '/home/oracle/oradata/oa/redo02.log';

至此,日志文件位置更改结束。当所有文件位置均更改结束时,测试数据库的可用性;如果无问题,可以删除旧数据目录下的文件。

总结

到此这篇关于Oracle数据库如何更改数据文件位置的文章就介绍到这了,更多相关Oracle更改数据文件位置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Oracle 多参数查询语句

    Oracle 多参数查询语句

    这篇文章主要介绍了Oracle 多参数查询语句 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • Window下Oracle Database 11g 发行版2安装教程

    Window下Oracle Database 11g 发行版2安装教程

    这篇文章主要为大家详细介绍了Window下Oracle Database 11g 发行版2安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Win11系统下Oracle11g数据库下载与安装使用详细教程(图解)

    Win11系统下Oracle11g数据库下载与安装使用详细教程(图解)

    Oracle11g是Oracle公司出的一个比较轻量版的数据库,在window系统上安装比较方便,这篇文章主要给大家介绍了关于Win11系统下Oracle11g数据库下载与安装使用的相关资料,需要的朋友可以参考下
    2023-12-12
  • Oracle索引质量介绍和分析脚本分享

    Oracle索引质量介绍和分析脚本分享

    这篇文章主要介绍了Oracle索引质量介绍和分析脚本分享,索引质量的高低对数据库整体性能有着直接的影响,本文给出了演示以及索引创建的基本指导原则,最后给出了索引质量分析脚本,需要的朋友可以参考下
    2014-09-09
  • oracle 创建表空间详细介绍

    oracle 创建表空间详细介绍

    分为四步:详细介绍如何创建表空间
    2012-11-11
  • rman备份脚本和rman增量备份脚本分享

    rman备份脚本和rman增量备份脚本分享

    这篇文章主要介绍了rman备份脚本和rman增量备份脚本,需要的朋友可以参考下
    2014-03-03
  • Oracle查询sql错误信息的控制和定位

    Oracle查询sql错误信息的控制和定位

    今天小编就为大家分享一篇关于Oracle查询sql错误信息的控制和定位,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Oracle 数据库 临时数据的处理方法

    Oracle 数据库 临时数据的处理方法

    在Oracle数据库中进行排序、分组汇总、索引等到作时,会产生很多的临时数据。如有一张员工信息表,数据库中是安装记录建立的时间来保存的。
    2009-06-06
  • Oracle中PL/SQL的块与表达式

    Oracle中PL/SQL的块与表达式

    这篇文章介绍了Oracle中PL/SQL的块与表达式,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • ORA-00392ORA-00312日志正在清除故障

    ORA-00392ORA-00312日志正在清除故障

    这篇文章主要介绍了ORA-00392ORA-00312日志正在清除故障的相关资料,需要的朋友可以参考下
    2016-03-03

最新评论