当前位置: 首页 > news >正文

Oracle之表空间迁移

问题背景:一个数据表随着时间的累积,导致所在表空间占用很高,里面历史数据可以清除,保留近2个月数据即可

首先通过delete删除了2个月以前的数据。

按网上的教程进行空间压缩,以下sql在表所在用户执行:

-- 允许表重新分配未使用的空间
ALTER TABLE your_table_name DEALLOCATE UNUSED;-- 允许行移动,以便压缩表
ALTER TABLE your_table_name ENABLE ROW MOVEMENT;-- 压缩表的空间
ALTER TABLE your_table_name SHRINK SPACE;
-- 或者(这个会报错,不知道什么原因)
ALTER TABLE your_table_name SHRINK STORAGE;

执行后依然不能降低表空间大小:

SELECT a.tablespace_name "表空间名",(total - free) "表占用空间大小",ROUND((total - free) / total * 100, 2) || '%' "已使用空间百分比"FROM (SELECT tablespace_name, SUM(bytes) / 1024 / 1024 totalFROM dba_data_filesGROUP BY tablespace_name) a,(SELECT tablespace_name, SUM(bytes) / 1024 / 1024 freeFROM dba_free_spaceGROUP BY tablespace_name) bWHERE a.tablespace_name = b.tablespace_nameORDER BY (total - free) DESC;

(1)创建新的表空间(sys用户下)

CREATE TABLESPACE new_tablespace DATAFILE 'path_to_datafile.dbf' SIZE 4096M AUTOEXTEND ON NEXT 500M MAXSIZE UNLIMITED;

new_tablespace:是新的表空间名称

path_to_datafile.dbf:表空间文件存储路径(绝对路径)

4096M:表空间初始空间大小

AUTOEXTEND ON NEXT 500M:表示空间不够时自动扩充,扩充空间位500M

MAXSIZE UNLIMITED:表示最大空间大小不设限制

(2)将表迁移到新的表空间(表所在用户)

alter table TABLE_NAME move tablespace new_tablespace;

TABLE_NAME:迁移的表名称

new_tablespace:迁移的新表空间

如果有索引的话,还需重建索引:

alter index index_name rebuild tablespace new_tablespace;

index_name:索引名

如果表中有lob字段,上面sql并不能把lob字段一起迁移到新表,因为clob字段会另外单独存储。应该使用:

ALTER TABLE my_table MOVE TABLESPACE new_tablespace INCLUDE LOB;

上面这个sql没试过,因为我先执行了上一条sql语句(不带lob字段)的迁移,结果删除表空间的时候提示还有字段在表空间,才发现clob没有迁移。

SELECT SEGMENT_NAME, SEGMENT_TYPE,TABLESPACE_NAME
FROM DBA_SEGMENTS
WHERE OWNER = 'SCOTT' AND (SEGMENT_TYPE like 'LOB%');

可以使用这个sql,查看lob字段所在的表空间。

如果你也先执行了第一条sql迁移表空间数据,那么可以使用下面这条sql,额外把lob字段迁移到新表空间

ALTER TABLE table_name MOVE TABLESPACE new_tablespace LOB(clob_column) STORE AS (TABLESPACE new_tablespace);

table_name:是表名,

new_tablespace:新表空间

clob_column:CLOB字段名(不需要单引号括起来直接写字段名)

(3)删除旧表空间(sys用户下)

DROP TABLESPACE CLOBS INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;

此sql可能会比较耗时,请耐心等待。另外这只是在oracle中把表空间删除了,但物理文件还在,需要手动把物理文件删除
 

http://www.lryc.cn/news/501066.html

相关文章:

  • 域渗透入门靶机之HTB-Cicada
  • ue5 motion matching
  • 【从零开始的LeetCode-算法】383. 赎金信
  • 记录模板学习(持续更新)
  • Android hid 数据传输(device 端 )
  • MaxEnt模型在物种分布模拟中如何应用?R语言+MaxEnt模型融合物种分布模拟、参数优化方法、结果分析制图与论文写作
  • 第3章:文本样式 --[CSS零基础入门]
  • mysql 架构详解
  • 无代码探索AI大模型:腾讯云函数计算的卓越实践
  • 解决Ubuntu在VMware关机时,老是一个光标在那里闪动几分钟,才能关机的问题
  • word poi-tl 图表功能增强,插入图表折线图、柱状图、饼状图
  • 常见网络钓鱼类型
  • 数字图像处理考研考点(持续更新)
  • Spring Cloud Alibaba:一站式微服务解决方案
  • ubuntu16.04部署dify教程
  • JavaWeb文件上传
  • 软件工程——期末复习(3)
  • apache的BeanUtils的Converter被相互污染覆盖问题
  • TCP的“可靠性”(上)
  • 超标量处理器设计笔记(5)虚拟存储器、地址转换、page fault
  • SparkSQL 读写数据攻略:从基础到实战
  • react 使用状态管理调用列表接口渲染列表(包含条件查询,统一使用查询按钮,重置功能),避免重复多次调用接口的方法
  • Stable Audio Open模型部署教程:用AI打造独家节拍,让声音焕发新活力!
  • 加油站-(贪心算法)
  • k8s-持久化存储PV与PVC(1)
  • Linux Red Hat Enterprise
  • 《中型 Vue 项目:挑战与成长》
  • 配置 DNS over HTTPS阻止DNS污染
  • Facebook广告文案流量秘诀
  • 22. 五子棋小游戏