当前位置:网站首页>Oracle数据库表空间整理回收与释放操作
Oracle数据库表空间整理回收与释放操作
2022-08-03 09:18:00 【m0_67394230】
文章目录
前言
在使用Oracle进行录入测试时,我们会制造许多测试数据,而使用删除后表空间的高水位依旧无法自动下调,导致出现表空间出现空白数据,影响表空间性能的同时也占用了过多的存储空间。
一、降低表空间高水位
1.查看表空间和对应物理文件名
代码如下:
select
b.file_id 物理文件号,
b.file_name 物理文件名,
b.tablespace_name 表空间,
b.bytes/1024/1024 大小M,
(b.bytes-sum(nvl(a.bytes,0)))/1024/1024 已使用M,
substr((b.bytes-sum(nvl(a.bytes,0)))/(b.bytes)*100,1,5) 利用率
from dba_free_space a,dba_data_files b
where a.file_id=b.file_id
group by b.tablespace_name,b.file_id,b.file_name,b.bytes
order by b.tablespace_name
根据利用率可以直观的判断有那些表空间可以进行释放。
2.清空回收站
代码如下:
-- 清除用户回收站
purge recyclebin;
-- 清除全库回收站
purge dba_recyclebin;
清除删除过程中遗留的数据。
3.整理表空间
代码如下:
alter tablespace tablespace_name coalesce;
整合表空间的碎片增加表空间的连续性
4.生成RESIZE代码
代码如下:
select a.file#,a.name,a.bytes/1024/1024 CurrentMB,
ceil(HWM * a.block_size)/1024/1024 ResizeTo,
(a.bytes - HWM * a.block_size)/1024/1024 ReleaseMB,
'alter database datafile '''||a.name||''' resize '||
ceil(HWM * a.block_size/1024/1024) || 'M;' ResizeCMD
from v$datafile a,
(select file_id,max(block_id+blocks-1) HWM
from dba_extents where file_id in
(select b.file# From v$tablespace a ,v$datafile b
where a.ts#=b.ts# and a.name='tablespace_name')
group by file_id) b
where a.file# = b.file_id(+)
and (a.bytes - HWM *block_size)>0
order by 5
上述代码执行后,可以生成一个对应表空间RESIZE的SQL代码,此时运行对应的SQL代码即可。
二、在删除时进行释放
1.清空表数据并释放表空间
代码如下:
-- 清空表数据
truncate table table_name;
-- 释放表空间
alter table table_name deallocate UNUSED KEEP 0;
先清空表数据,此时表依旧存在,Truncate不支持回滚,并且不能truncate一个带有外键的表,如果要删除首先要取消外键,然后再删除;
注意如果不加KEEP 0的话,表空间是不会释放的。
2.迁移表数据
在出现以下错误时,我们不仅可以通过整理表空间或者清楚回收站进行解决,还可以通过将待释放表空间的表数据全部迁移到其他表空间,将空间释放后再迁移回原表空间。
--需移动的表数据
select DISTINCT 'alter table '|| owner||'.'||segment_name || ' move tablespace user_test;' from dba_extents where segment_type='TABLE' and file_id=4;
--需移动的索引数据
select DISTINCT 'alter index '|| owner||'.'|| segment_name || ' rebuild tablespace user_test;' from dba_extents where segment_type='INDEX' and file_id=4;
--需移动的分区表数据
select DISTINCT 'alter table '|| owner||'.'|| segment_name || ' move partition '|| partition_name || ' tablespace user_test;' from dba_extents where segment_type='TABLE PARTITION' and file_id=4;
--需移动的分区表索引数据
select DISTINCT 'alter index '|| owner||'.'|| segment_name || ' rebuild partition '|| partition_name || ' tablespace user_test;' from dba_extents where segment_type='INDEX PARTITION' and file_id=4;
上述代码中file_id可以通过查看表空间进行比对更改,上述代码执行后可以获得对应的自动生成的SQL代码,此时运行对应的SQL代码即可迁移表数据
参考文档
Oracle 在删除表、表空间、用户时 如何释放磁盘空间
【Oracle】ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据
ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据
Oracle查看表空间数据文件SQL
Oracle 删除数据后释放数据文件所占磁盘空间(表空间降高水位)
oracle 如何查看当前用户的表空间名称
Resize Datafile时ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢

"Easy to use" websites that others don't know, make you more efficient

Scala parallel collections, parallel concurrency, thread safety issues, ThreadLocal

手把手教你如何自制目标检测框架(从理论到实现)

Machine learning (formula derivation and code implementation)--sklearn machine learning library

面试突击71:GET 和 POST 有什么区别?

【论文笔记】基于动作空间划分的MAXQ自动分层方法

dflow入门2——Slices

Batch PNG format can be converted to JPG format

flutter 应用 抓包

Qt 下拉复选框(MultiSelectComboBox)(一) 实现下拉框多选,搜索下拉框内容
随机推荐
MySQL——几种常见的嵌套查询
面试突击71:GET 和 POST 有什么区别?
慢 SQL 分析与优化
【LeetCode】622. Design Circular Queue
播放量暴涨2000w+,单日狂揽24w粉,内卷的搞笑赛道还有机会
【LeetCode】622.设计循环队列
Validate floating point input
Batch PNG format can be converted to JPG format
milvus
多线程下的单例模式
线程介绍与使用
Let‘s Encrypt 使用
Exception: Dataset not found.解决办法
英文语法-状语从句
PostgreSQL的架构
多媒体数据处理实验4:LSH索引
ClickHouse删除数据之delete问题详解
兔起鹘落全端涵盖,Go lang1.18入门精炼教程,由白丁入鸿儒,全平台(Sublime 4)Go lang开发环境搭建EP00
MySQL-DDL数据定义语言-约束
Machine learning (formula derivation and code implementation)--sklearn machine learning library