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占用内存过高的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • windows下oracle 11g r2 安装过程与卸载详细图解

    windows下oracle 11g r2 安装过程与卸载详细图解

    这篇文章主要介绍了windows下oracle 11g r2 安装过程与卸载详细图解,需要的朋友可以参考下
    2016-04-04
  • oracle中print_table存储过程实例介绍

    oracle中print_table存储过程实例介绍

    存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。这篇文章主要介绍了oracle中print_table存储过程介绍,需要的朋友可以参考下
    2018-09-09
  • 基于ora2pg迁移Oracle19C到postgreSQL14的全过程

    基于ora2pg迁移Oracle19C到postgreSQL14的全过程

    ora2pg是一个开源工具,可将Oracle数据库模式转换为PostgreSQL格式,支持导出数据库绝大多数对象类型,本文就给大家介绍了基于ora2pg迁移Oracle19C到postgreSQL14的全过程,文中有详细的代码示例,需要的朋友可以参考下
    2023-11-11
  • Oracle数据库如何使用exp和imp方式导数据

    Oracle数据库如何使用exp和imp方式导数据

    在平时的工作中,我们难免会遇到要备份数据,当然用pl/sql可以实现通过导出数据来备份数据,下面这篇文章主要给大家介绍了关于Oracle数据库如何使用exp和imp方式导数据的相关资料,需要的朋友可以参考下
    2022-06-06
  • 基于Oracle的面向对象技术入门基础简析开发者网络Oracle

    基于Oracle的面向对象技术入门基础简析开发者网络Oracle

    基于Oracle的面向对象技术入门基础简析开发者网络Oracle...
    2007-03-03
  • Oracle终极彻底卸载的完整步骤

    Oracle终极彻底卸载的完整步骤

    这篇文章主要给大家介绍了关于Oracle终极彻底卸载的完整步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • inner join和left join之间的区别详解

    inner join和left join之间的区别详解

    这篇文章主要给大家介绍了关于inner join和left join之间区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • ORACLE 10G修改字符编码没有超字符集的限制

    ORACLE 10G修改字符编码没有超字符集的限制

    ORACLE 10G修改字符编码没有超字符集的限制,可以直接修改成自己想要字符串,之前已经存在数据就需要重新再导入
    2014-08-08
  • 在命令行下进行Oracle用户解锁的语句

    在命令行下进行Oracle用户解锁的语句

    Oracle用户解锁操作并没您想象的那么复杂,这里通过在命令行下的操作轻松帮您完成Oracle用户解锁
    2013-06-06

最新评论