删除一个月前数据,释放表空间
来源:互联网 发布:开根号的算法 编辑:程序博客网 时间:2024/06/08 04:02
背景需求:
最近一个表存储数据太多了,一天2万条,每条数据很大,2个月已经占了100G 。
想只保留一个月的数据,删掉前一个月的数据。释放表空间。
网上的做法是:
imp 导出最近一个月的数据到临时表
(delete 和 truncate 都无法真正释放表空间)
drop 原始表 这样来达到释放表空间的效果
新建表
临时表再导入 原始表
问题:该表还在运行中,oracle 无法停下来操作。上述方案失效。只能重新找方案。
首先网上找到一个关于查询对象工具
参考:http://blog.csdn.net/indexman/article/details/47207987
tom大神写了一个用于查看Oracle数据库对象空间使用情况。
下面演示一下如何使用:
–工具源码
CREATE OR REPLACE PROCEDURE show_space(p_segname IN VARCHAR2, p_owner IN VARCHAR2 DEFAULT USER, p_type IN VARCHAR2 DEFAULT 'TABLE', p_partition IN VARCHAR2 DEFAULT NULL) AS l_free_blks NUMBER; l_total_blocks NUMBER; l_total_bytes NUMBER; l_unused_blocks NUMBER; l_unused_bytes NUMBER; l_lastusedextfileid NUMBER; l_lastusedextblockid NUMBER; l_last_used_block NUMBER; l_segment_space_mgmt VARCHAR2(255); l_unformatted_blocks NUMBER; l_unformatted_bytes NUMBER; l_fs1_blocks NUMBER; l_fs1_bytes NUMBER; l_fs2_blocks NUMBER; l_fs2_bytes NUMBER; l_fs3_blocks NUMBER; l_fs3_bytes NUMBER; l_fs4_blocks NUMBER; l_fs4_bytes NUMBER; l_full_blocks NUMBER; l_full_bytes NUMBER; PROCEDURE p(p_label IN VARCHAR2, p_num IN NUMBER) IS BEGIN dbms_output.put_line(rpad(p_label, 40, '.') || to_char(p_num, '999,999,999,999')); END;BEGIN EXECUTE IMMEDIATE 'select ts.segment_space_management from dba_segments seg,dba_tablespaces ts where seg.segment_name = :p_segname and (:p_partition is null or seg.partition_name = :p_partition) and seg.owner = :p_owner and seg.tablespace_name=ts.tablespace_name' INTO l_segment_space_mgmt USING p_segname, p_partition, p_partition, p_owner; -- exception -- when too_many_rows -- then -- dbms_output.put_line('This must be a partitioned table,use p_partition => '); -- return; -- end; IF l_segment_space_mgmt = 'AUTO' THEN dbms_space.space_usage(p_owner, p_segname, p_type, l_unformatted_blocks, l_unformatted_bytes, l_fs1_blocks, l_fs1_bytes, l_fs2_blocks, l_fs2_bytes, l_fs3_blocks, l_fs3_bytes, l_fs4_blocks, l_fs4_bytes, l_full_blocks, l_full_bytes, p_partition); p('Unformatted Blocks ', l_unformatted_blocks); p('FS1 Blocks (0-25) ', l_fs1_blocks); p('FS2 Blocks (25-50) ', l_fs2_blocks); p('FS3 Blocks (50-75) ', l_fs3_blocks); p('FS4 Blocks (75-100) ', l_fs4_blocks); p('Full Blocks ', l_full_blocks); ELSE dbms_space.free_blocks(segment_owner => p_owner, segment_name => p_segname, segment_type => p_type, freelist_group_id => 0, free_blks => l_free_blks); END IF; dbms_space.unused_space(segment_owner => p_owner, segment_name => p_segname, segment_type => p_type, partition_name => p_partition, total_blocks => l_total_blocks, total_bytes => l_total_bytes, unused_blocks => l_unused_blocks, unused_bytes => l_unused_bytes, last_used_extent_file_id => l_lastusedextfileid, last_used_extent_block_id => l_lastusedextblockid, last_used_block => l_last_used_block); p('Total Blocks ', l_total_blocks); p('Total Bytes ', l_total_bytes); p('Total MBytes ', trunc(l_total_bytes / 1024 / 1024)); p('Unused Blocks', l_unused_blocks); p('Unused Bytes ', l_unused_bytes); p('Last Used Ext FileId', l_lastusedextfileid); p('Last Used Ext BlockId', l_lastusedextblockid); p('Last Used Block', l_last_used_block);END;
可以正常执行 为一个procedure
–用法演示
SYS@orcl> exec show_space('TEST_SPACE');
(这里会报错) 没有该表 (该表是刚建的)
后续吧。。。。。
0 0
- 删除一个月前数据,释放表空间
- hbase 删除数据 释放空间
- sql删除一个月前的所有数据
- mongodb删除数据后无法释放空间
- oracle定时删除表空间的数据并释放表空间
- oracle定时删除表空间的数据并释放表空间
- 删除一个月前生成的文件
- linux 删除一个月前的文件
- 删除用户并释放表空间
- 删除Oracle表空间,释放硬盘空间
- oracle删除(释放)数据文件/表空间流程
- 【Oracle】删除(释放)数据文件/表空间流程
- sql语句,查询前一个月数据。
- 关于mysql 删除数据后物理空间未释放
- MySQL删除数据什么情况下会释放空间
- 关于mysql 删除数据后物理空间未释放
- 关于mysql 删除数据后物理空间未释放(转载)
- 关于mysql 删除数据后物理空间未释放
- 导入项目到Android Studio遇到的问题 解决
- Smarty学习1——安装和配置
- AndroidStudio UnsupportedMethodException Unsupported method: InstantRun.getRestartDexFile().
- kafka storm logback slf4j jar包冲突
- Java线程之由生产者/消费者问题看线程同步与通信
- 删除一个月前数据,释放表空间
- 剑指offer(10)-调整数组顺序使奇数位于偶数前面
- final关键字的应用
- Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】
- NSJSONReadingOptions参数说明
- centos6 安装 php7
- 计算机中丢失opencv_core2410d.dll
- JavaScript:正则表达式
- Unity中协程的运行