【Oracle系列】- Oracle数据库更改数据文件位置

简介: 【Oracle系列】- Oracle数据库更改数据文件位置

一、概述

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

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

  1. 控制文件位置更改
  2. 数据文件位置更改*(不包括临时数据文件)*
  3. 临时数据文件位置更改
  4. 日志文件位置更改

二、控制文件位置更改

  1. 停止数据库监听,防止有应用连接对数据库进行修改。
lsnrctl sto
  1. 数据库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;
  1. 然后将数据库shutdown
shutdown immediate;
  1. 将控制文件移动到新目录/home/oracle/oradata/oa
mv /oradata/oa/control* /home/oracle/oradata/oa/

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

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

数据库需要在open状态下

  1. 将表空间全部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';
  1. 生成的SQL语句如下,使用sysdba账户执行
alter tablespace SYSAUX offline;
alter tablespace USERS offline;
...
  1. 将这些表空间的数据文件复制到新目录/home/oracle/oradata目录下,数据文件rename的时候,需要两边都有数据文件。
  2. 使用以下语句生成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';
  1. 生成的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';
......
  1. 执行结束之后,将表空间全部**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';
  1. 生成的SQL语句如下,使用sysdba账户执行
alter tablespace SYSAUX online;
alter tablespace USERS online;
......

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

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

  1. 数据库在open状态下,生成临时数据文件offline的SQL语句如下:
SELECT 'alter database tempfile ''' || File_Name || ''' offline;'
   FROM Dba_Temp_Files
  ORDER BY File_Id;  
  1. 生成的SQL语句如下,使用sysdba账户执行
alter database tempfile '/oradata/ipcc/temp01.dbf' offline;
alter database tempfile '/oradata/ricd_temp10' offline;
......
  1. 将临时数据文件复制到/home/oracle/oradata目录下
  2. 生成rename临时数据文件的SQL语句如下:
SELECT 'alter database rename file ''' || File_Name || ''' to ''' ||
       '/home/oracle' || File_Name || ''';'
  FROM Dba_Temp_Files
 ORDER BY File_Id;
  1. 生成的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';
......
  1. 执行结束之后,将临时数据文件online,生成临时数据文件online的SQL语句如下:
SELECT 'alter database tempfile ''' || File_Name ||
       ''' online;'
  FROM Dba_Temp_Files
 ORDER BY File_Id;
  1. 生成的SQL语句如下,使用sysdba账户执行
alter database tempfile '/home/oracle/oradata/oa/temp01.dbf' online;
alter database tempfile '/home/oracle/oradata/oa_temp10' online;
......

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

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

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

  1. 查看日志文件状态
select group#,thread#,sequence#,members,archived,status from v$log;
select member from v$logfile;
  1. 当日志文件状态不为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';

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



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
8天前
|
SQL 存储 Oracle
Oracle的PL/SQL定义变量和常量:数据的稳定与灵动
【4月更文挑战第19天】在Oracle PL/SQL中,变量和常量扮演着数据存储的关键角色。变量是可变的“魔术盒”,用于存储程序运行时的动态数据,通过`DECLARE`定义,可在循环和条件判断中体现其灵活性。常量则是不可变的“固定牌”,一旦设定值便保持不变,用`CONSTANT`声明,提供程序稳定性和易维护性。通过 `%TYPE`、`NOT NULL`等特性,可以更高效地管理和控制变量与常量,提升代码质量。善用两者,能优化PL/SQL程序的结构和性能。
|
2天前
|
SQL Oracle 关系型数据库
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
不小心删除表或数据后,如何利用Oracle的闪回进行恢复
|
8天前
|
Oracle 安全 关系型数据库
Oracle数据守卫(DG):数据的“守护者”与“时光机”
【4月更文挑战第19天】Oracle Data Guard保障数据安全,通过实时维护备库实现故障切换,保证业务连续性。它使用日志传输和应用保持数据同步,如同“时光机”,借助闪回技术能恢复误操作数据。此外,它还提供数据压缩、加密和故障转移等功能,提升数据库安全性与性能。作为数据管理员,理解并善用Data Guard是确保企业数据安全的关键。
|
8天前
|
存储 NoSQL Oracle
Oracle 12c的内存列存储:数据的“闪电侠”
【4月更文挑战第19天】Oracle 12c的内存列存储以超高速度革新数据处理,结合列存储与内存技术,实现快速查询与压缩。它支持向量化查询和并行处理,提升效率,但需合理配置以平衡系统资源。作为数据管理员,应善用此功能,适应业务需求和技术发展。
|
8天前
|
存储 Oracle 关系型数据库
Oracle 12c的多重索引:数据的“多维导航仪”
【4月更文挑战第19天】Oracle 12c的多重索引提升数据查询效率,如同多维导航仪。在同一表上创建针对不同列的多个索引,加速检索过程。虽然过多索引会增加存储和维护成本,但合理选择和使用索引策略,结合位图、函数索引等高级特性,能优化查询,应对复杂场景。数据管理员应善用这些工具,根据需求进行索引管理,支持企业数据分析。
|
8天前
|
存储 Oracle 数据管理
Oracle 12c的自动数据优化(ADO)与热图:数据管理的“瘦身”与“透视”艺术
【4月更文挑战第19天】Oracle 12c的ADO和热图技术革新数据管理。ADO智能清理无用数据,优化存储,提升查询速度,实现数据&quot;瘦身&quot;;热图则以直观的视觉表示展示数据分布和状态,助力识别性能瓶颈,犹如数据的&quot;透视&quot;工具。这两项技术结合,强化数据管理,为企业业务发展保驾护航。
|
8天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL游标属性:数据的“导航仪”与“仪表盘”
【4月更文挑战第19天】Oracle PL/SQL游标属性如同车辆的导航仪和仪表盘,提供丰富信息和控制。 `%FOUND`和`%NOTFOUND`指示数据读取状态,`%ROWCOUNT`记录处理行数,`%ISOPEN`显示游标状态。还有`%BULK_ROWCOUNT`和`%BULK_EXCEPTIONS`增强处理灵活性。通过实例展示了如何在数据处理中利用这些属性监控和控制流程,提高效率和准确性。掌握游标属性是提升数据处理能力的关键。
|
8天前
|
SQL Oracle 安全
Oracle的PL/SQL循环语句:数据的“旋转木马”与“无限之旅”
【4月更文挑战第19天】Oracle PL/SQL中的循环语句(LOOP、EXIT WHEN、FOR、WHILE)是处理数据的关键工具,用于批量操作、报表生成和复杂业务逻辑。LOOP提供无限循环,可通过EXIT WHEN设定退出条件;FOR循环适用于固定次数迭代,WHILE循环基于条件判断执行。有效使用循环能提高效率,但需注意避免无限循环和优化大数据处理性能。掌握循环语句,将使数据处理更加高效和便捷。
|
8天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL条件控制:数据的“红绿灯”与“分岔路”
【4月更文挑战第19天】在Oracle PL/SQL中,IF语句与CASE语句扮演着数据流程控制的关键角色。IF语句如红绿灯,依据条件决定程序执行路径;ELSE和ELSIF提供多分支逻辑。CASE语句则是分岔路,按表达式值选择执行路径。这些条件控制语句在数据验证、错误处理和业务逻辑中不可或缺,通过巧妙运用能实现高效程序逻辑,保障数据正确流转,支持企业业务发展。理解并熟练掌握这些语句的使用是成为合格数据管理员的重要一环。
|
8天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL表达式:数据的魔法公式
【4月更文挑战第19天】探索Oracle PL/SQL表达式,体验数据的魔法公式。表达式结合常量、变量、运算符和函数,用于数据运算与转换。算术运算符处理数值计算,比较运算符执行数据比较,内置函数如TO_CHAR、ROUND和SUBSTR提供多样化操作。条件表达式如CASE和NULLIF实现灵活逻辑判断。广泛应用于SQL查询和PL/SQL程序,助你驾驭数据,揭示其背后的规律与秘密,成为数据魔法师。

推荐镜像

更多