【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日志并进行多维度分析。
目录
相关文章
|
3天前
|
Oracle Java 关系型数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
14 6
|
3天前
|
SQL Oracle 关系型数据库
零基础入门 Oracle数据库:轻松上手
零基础入门 Oracle数据库:轻松上手
6 0
|
3天前
|
Oracle 关系型数据库 Java
java操作多数据源将oracle数据同步达梦数据库
java操作多数据源将oracle数据同步达梦数据库
|
4天前
|
存储 Oracle 关系型数据库
oracle 数据库 迁移 mysql数据库
将 Oracle 数据库迁移到 MySQL 是一项复杂的任务,因为这两种数据库管理系统具有不同的架构、语法和功能。
15 0
|
Oracle 关系型数据库 Linux
Oracle 数据文件 reuse 属性 说明
有关表空间创建的相关参数,参考: Oracle 表空间 创建参数 说明 http://blog.csdn.net/tianlesoftware/archive/2011/01/27/6166928.aspx 当我们对表空间添加数据文件的时候,有一个reuse 属性。
832 0
|
Oracle 关系型数据库 Linux
Oracle 数据文件 reuse 属性 说明
原文转自:http://blog.csdn.net/tianlesoftware/article/details/6462259 有关表空间创建的相关参数,参考:        Oracle 表空间 创建参数 说明          http://blog.csdn.net/changyanmanman/article/details/7388558          当我们对表空间添加数据文件的时候,有一个reuse 属性。
963 0
|
13天前
|
DataWorks Oracle 关系型数据库
DataWorks操作报错合集之尝试从Oracle数据库同步数据到TDSQL的PG版本,并遇到了与RAW字段相关的语法错误,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
30 0
|
20天前
|
存储 Oracle 网络协议
Oracle 11gR2学习之二(创建数据库及OEM管理篇)
Oracle 11gR2学习之二(创建数据库及OEM管理篇)
|
24天前
|
Oracle 网络协议 关系型数据库
异地使用PLSQL远程连接访问Oracle数据库【内网穿透】
异地使用PLSQL远程连接访问Oracle数据库【内网穿透】