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


眼神激情
眼神激情 2023-11-28 15:28:23 49543
分类专栏: 资讯
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 ···

  • 首先,查看当前数据文件路径
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> 
  • 在新的磁盘分区上创建新的数据文件存放路径,并授予相应的用户权限
[root@orcldb ~]# /u02/app/oracle/oradata/orcl
[root@orcldb ~]# chown -R oracle:oinstall /u02
  • 关闭数据库,并拷贝文件
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状态,并对数据文件进行重命名操作
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的数据文件已经在新的路径下了
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
  • 查询表空间中表的数据,用于验证数据的完整性
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

  • 结果显示数据完好没有丢失,接下来可以在系统中删掉原来的文件从而释放存储空间

[root@orcldb ~]# rm -rf /u01/app/oracle/oradata/orcl/ts01.dbf

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

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

  • 首先在EMP表中插入一条新的数据
SQL> insert into EMP values (2,'李四',20);

1 row created.

SQL> select * from EMP;

        ID USERNAME                                AGE
---------- -------------------------------- ----------
         1 张三                                     22
         2 李四                                     20
  • TS01表空间offline
SQL> alter tablespace TS01 offline normal;

Tablespace altered.

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

Tablespace altered.
  • 将目标表空间进行online操作,并检查数据文件路径
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
  • 验证表空间的数据,查询表数据没有异常
SQL> select * from EMP;

        ID USERNAME                                AGE
---------- -------------------------------- ----------
         1 张三                                     22
         2 李四                                     20
  • 最后在系统中删掉原来的文件从而释放存储空间
[root@orcldb ~]# rm -rf /u02/app/oracle/oradata/orcl/ts01.dbf

来自公众号:IT人家

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=29077
赞同 0
评论 0 条
眼神激情L0
粉丝 0 发表 9 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2969
【软件正版化】软件正版化工作要点  2888
统信UOS试玩黑神话:悟空  2860
信刻光盘安全隔离与信息交换系统  2746
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1280
grub引导程序无法找到指定设备和分区  1249
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  169
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  169
点击报名 | 京东2025校招进校行程预告  165
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  161
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!