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更改数据文件位置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Windows系统下Oracle 11g完全卸载教程(推荐!)

    Windows系统下Oracle 11g完全卸载教程(推荐!)

    安装软件是首要,虽然不是特别重要,但是错误的安装也是相当费劲和抓狂的,所以这篇文章主要给大家介绍了关于Windows系统下Oracle 11g完全卸载的相关资料,文中通过图文介绍的非常详细,要的朋友可以参考下
    2024-06-06
  • Oracle试用到期如何删除注册表继续试用30天

    Oracle试用到期如何删除注册表继续试用30天

    这篇文章主要介绍了Oracle试用到期如何删除注册表继续试用30天,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • Oracle 手动创建数据库步骤详解

    Oracle 手动创建数据库步骤详解

    本文给大家介绍oracle手动创建数据库步骤,需要的朋友可以参考下
    2015-10-10
  • oracle数据库实现获取时间戳的无参函数

    oracle数据库实现获取时间戳的无参函数

    这篇文章主要介绍了oracle数据库实现获取时间戳的无参函数的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-08-08
  • 如何使用GDAL库的ogr2ogr将GeoJSON数据导入到PostgreSql中

    如何使用GDAL库的ogr2ogr将GeoJSON数据导入到PostgreSql中

    本文主要介绍了PyTorch中的masked_fill函数的基本知识和使用方法,masked_fill函数接受一个输入张量和一个布尔掩码作为主要参数,掩码的形状必须与输入张量相同,掩码操作根据掩码中的布尔值在输出张量中填充指定的值或保留输入张量中的值
    2024-10-10
  • Oracle如何设置表空间数据文件大小

    Oracle如何设置表空间数据文件大小

    这篇文章主要介绍了Oracle如何设置表空间数据文件大小,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • oracle增加表空间大小两种实现方法

    oracle增加表空间大小两种实现方法

    增加表空间大小:一种是为表空间增加数据文件/另一种方法是增加表空间原有数据文件尺寸,感兴趣的朋友可以了解下,或许对你有所帮助
    2013-01-01
  • Oracle 查询语句限制只选择最前面几行和最后面几行的实现方式

    Oracle 查询语句限制只选择最前面几行和最后面几行的实现方式

    在Oracle中,可以使用 ROWNUM 关键字来限制查询结果的行数,这篇文章主要介绍了Oracle 查询语句限制只选择最前面几行和最后面几行的实现方式,需要的朋友可以参考下
    2023-12-12
  • oracle数据库锁表的原因及解决方法

    oracle数据库锁表的原因及解决方法

    出现锁表的情况很多种,但是大部分情况都是更新表,然后并没有提交,导致数据库的表被锁的情况,处理方式也比较简单,本文小编给大家介绍了oracle数据库锁表的原因及解决方法,需要的朋友可以参考下
    2023-11-11
  • Oracle数据库存储过程的调试过程

    Oracle数据库存储过程的调试过程

    oracle如果存储过程比较复杂,我们要定位到错误就比较困难,那么我们就可以用存储过程的调试功能,下面这篇文章主要给大家介绍了关于Oracle数据库存储过程调试的相关资料,需要的朋友可以参考下
    2022-07-07

最新评论