前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >oracle迁移数据文件再也不用求人了

oracle迁移数据文件再也不用求人了

作者头像
用户5921339
发布2025-05-20 17:29:54
发布2025-05-20 17:29:54
10900
代码可运行
举报
运行总次数:0
代码可运行

N 多年前安装的 oracle 数据库,巡检的时候发现磁盘满了,检查发现是数据文件占用了很大的空间,当前存放数据文件的磁盘不能再进行扩容,于是准备把业务数据文件迁移到其他磁盘分区

迁移数据文件主要有两种方法:

1. alter database rename file ··· to ···

2. alter tablespace ··· rename datafile ··· to ···

这两种方法都可以迁移数据文件,但是操作上有些不同,主要体现在以下方面: (1)方法1:数据库必须处于mount状态,该方法适用于所有的数据文件,包括 system 数据文件; (2)方法2:与方法1不同,此时数据库必须处于open状态,且该方法只适用于非 system 表空间的数据文件。

接下来以迁移TS01表空间的数据为例,分别使用两种不同的方法进行操作:

一、使用alter database rename file ··· to ···

  • 首先,查看当前数据文件路径
代码语言:javascript
代码运行次数:0
运行
复制
SQL> select FILE_NAME,TABLESPACE_NAME from dba_data_files;

FILE_NAME        TABLESPACE
-------------------------------------------------- ----------
/u01/app/oracle/oradata/orcl/system01.dbf          SYSTEM
/u01/app/oracle/oradata/orcl/sysaux01.dbf          SYSAUX
/u01/app/oracle/oradata/orcl/undotbs01.dbf         UNDOTBS1
/u01/app/oracle/oradata/orcl/users01.dbf           USERS
/u01/app/oracle/oradata/orcl/ts01.dbf              TS01

SQL> 
  • 在新的磁盘分区上创建新的数据文件存放路径,并授予相应的用户权限
代码语言:javascript
代码运行次数:0
运行
复制
[root@orcldb ~]# /u02/app/oracle/oradata/orcl
[root@orcldb ~]# chown -R oracle:oinstall /u02
  • 关闭数据库,并拷贝文件
代码语言:javascript
代码运行次数:0
运行
复制
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> 
SQL> host cp /u01/app/oracle/oradata/orcl/ts01.dbf /u02/app/oracle/oradata/orcl/
  • 将数据库启动到mount状态,并对数据文件进行重命名操作
代码语言:javascript
代码运行次数:0
运行
复制
SQL> startup mount
ORACLE instance started.

Total System Global Area 2147483648 bytes
Fixed Size      8622776 bytes
Variable Size   1325403464 bytes
Database Buffers   805306368 bytes
Redo Buffers      8151040 bytes
Database mounted.
SQL> 
SQL> alter database rename file '/u01/app/oracle/oradata/orcl/ts01.dbf' to '/u02/app/oracle/oradata/orcl/ts01.dbf';

Database altered.

  • 打开数据库,并查看数据文件的状态,结果显示,表空间TS01的数据文件已经在新的路径下了
代码语言:javascript
代码运行次数:0
运行
复制
SQL> alter database open;

Database altered.

SQL> 
SQL> select file_name,tablespace_name,status from dba_data_files;

FILE_NAME        TABLESPACE STATUS
--------------------------------------------  ---------- ---------
/u01/app/oracle/oradata/orcl/system01.dbf     SYSTEM     AVAILABLE
/u01/app/oracle/oradata/orcl/sysaux01.dbf     SYSAUX     AVAILABLE
/u01/app/oracle/oradata/orcl/undotbs01.dbf    UNDOTBS1   AVAILABLE
/u01/app/oracle/oradata/orcl/users01.dbf      USERS      AVAILABLE
/u02/app/oracle/oradata/orcl/ts01.dbf         TS01       AVAILABLE
  • 查询表空间中表的数据,用于验证数据的完整性
代码语言:javascript
代码运行次数:0
运行
复制
SQL> select owner,table_name,tablespace_name from dba_tables where tablespace_name='TS01';

OWNER  TABLE_NAME TABLESPACE
------ ---------- ----------
HARRY  EMP        TS01

SQL> 
SQL> SELECT * FROM HARRY.EMP;

 ID        USERNAME                  AGE
---------- ------------------ ----------
         1 张三                       22

  • 结果显示数据完好没有丢失,接下来可以在系统中删掉原来的文件从而释放存储空间
代码语言:javascript
代码运行次数:0
运行
复制
[root@orcldb ~]# rm -rf /u01/app/oracle/oradata/orcl/ts01.dbf

二、使用alter tablespace ··· rename datafile ··· to ···

还是以TS01表空的数据为例,再把数据迁移回原来的路径

  • 首先在EMP表中插入一条新的数据
代码语言:javascript
代码运行次数:0
运行
复制
SQL> insert into EMP values (2,'李四',20);

1 row created.

SQL> select * from EMP;

        ID USERNAME                                AGE
---------- -------------------------------- ----------
         1 张三                                     22
         2 李四                                     20
  • TS01表空间offline
代码语言:javascript
代码运行次数:0
运行
复制
SQL> alter tablespace TS01 offline normal;

Tablespace altered.

SQL> 
  • 将表空间的数据文件拷贝回原来的位置(这里省略了目标位置的用户权限设置)
代码语言:javascript
代码运行次数:0
运行
复制
SQL> host cp /u02/app/oracle/oradata/orcl/ts01.dbf /u01/app/oracle/oradata/orcl/;
  • 使用alter tablespace命令rename datafile到目标位置
代码语言:javascript
代码运行次数:0
运行
复制
SQL> alter tablespace TS01 rename datafile '/u02/app/oracle/oradata/orcl/ts01.dbf' to '/u01/app/oracle/oradata/orcl/ts01.dbf';

Tablespace altered.
  • 将目标表空间进行online操作,并检查数据文件路径
代码语言:javascript
代码运行次数:0
运行
复制
SQL>  alter tablespace TS01 online;

Tablespace altered.

SQL> select FILE_NAME,TABLESPACE_NAME from dba_data_files;

FILE_NAME          TABLESPACE
--------------------------------------------- ----------
/u01/app/oracle/oradata/orcl/system01.dbf     SYSTEM
/u01/app/oracle/oradata/orcl/sysaux01.dbf     SYSAUX
/u01/app/oracle/oradata/orcl/undotbs01.dbf    UNDOTBS1
/u01/app/oracle/oradata/orcl/users01.dbf      USERS
/u01/app/oracle/oradata/orcl/ts01.dbf         TS01
  • 验证表空间的数据,查询表数据没有异常
代码语言:javascript
代码运行次数:0
运行
复制
SQL> select * from EMP;

        ID USERNAME                                AGE
---------- -------------------------------- ----------
         1 张三                                     22
         2 李四                                     20
  • 最后在系统中删掉原来的文件从而释放存储空间
代码语言:javascript
代码运行次数:0
运行
复制
[root@orcldb ~]# rm -rf /u02/app/oracle/oradata/orcl/ts01.dbf
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT人家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 迁移数据文件主要有两种方法:
  • 一、使用alter database rename file ··· to ···
  • 二、使用alter tablespace ··· rename datafile ··· to ···
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档