可以使用 alter database datafile 'file path...' resize xM 的命令来缩小数据文件。

SELECT 'alter database datafile ''' || A.FILE_NAME || ''' resize ' ||
ROUND(A.FILESIZE - (A.FILESIZE - C.HWMSIZE - 100) * 0.8) || 'M;',
A.FILESIZE || 'M' AS "数据文件的总大小", C.HWMSIZE || 'M' AS "数据文件的实用大小"
FROM (SELECT FILE_ID, FILE_NAME, ROUND(BYTES / 1024 / 1024) AS FILESIZE
FROM DBA_DATA_FILES) A,
(SELECT FILE_ID, ROUND(MAX(BLOCK_ID) * 8 / 1024) AS HWMSIZE
FROM DBA_EXTENTS
GROUP BY FILE_ID) C
WHERE A.FILE_ID = C.FILE_ID AND
A.FILESIZE - C.HWMSIZE > 100;

or

SELECT 'alter database ' || A.NAME || ' datafile ''' || B.FILE_NAME || '''' ||
' resize ' ||
GREATEST(TRUNC(BYTES_FULL / .7), (BYTES_TOTAL - BYTES_FREE)) ||
CHR(10) || '--tablespace was ' ||
TRUNC(BYTES_FULL * 100 / BYTES_TOTAL) || '% full now ' ||
TRUNC(BYTES_FULL * 100 /
GREATEST(TRUNC(BYTES_FULL / .7), (BYTES_TOTAL - BYTES_FREE))) || '%'
FROM V$DATABASE A, DBA_DATA_FILES B,
(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES_FULL
FROM DBA_EXTENTS
GROUP BY TABLESPACE_NAME) C,
(SELECT TABLESPACE_NAME, SUM(BYTES) BYTES_TOTAL
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) D,
(SELECT A.TABLESPACE_NAME, A.FILE_ID, B.BYTES BYTES_FREE
FROM (SELECT TABLESPACE_NAME, FILE_ID,
MAX(BLOCK_ID) MAX_DATA_BLOCK_ID
FROM DBA_EXTENTS
GROUP BY TABLESPACE_NAME, FILE_ID) A, DBA_FREE_SPACE B
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME AND
A.FILE_ID = B.FILE_ID AND
B.BLOCK_ID > A.MAX_DATA_BLOCK_ID) E
WHERE B.TABLESPACE_NAME = C.TABLESPACE_NAME AND
B.TABLESPACE_NAME = D.TABLESPACE_NAME AND
BYTES_FULL / BYTES_TOTAL < .7 AND
B.TABLESPACE_NAME = E.TABLESPACE_NAME AND
B.FILE_ID = E.FILE_ID;

  

alter tablespace TABLESPACENAME coalesce

此语句是整合表空间的碎片增加表空间的连续性,但是他不会收缩一个文件的大小的

选择某个表空间中超过N个blocks的segments,通过此语句可以看出那个表占用的空间大  

SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE, BLOCKS
FROM DBA_SEGMENTS
WHERE TABLESPACE_NAME = 'RISK' AND
BLOCKS > 1000
ORDER BY BLOCKS DESC;

  分析表,得知表的一些信息

analyze table TABLENAME estimate statistics;
SELECT INITIAL_EXTENT, NEXT_EXTENT, MIN_EXTENTS, BLOCKS, EMPTY_BLOCKS
FROM DBA_TABLES
WHERE TABLE_NAME = 'xx' AND
OWNER = 'xx';

  用alter table ... deallocate unused 命令回收表的空间

alter table user.tablename deallocate unused keep 1k;

  

Oracle收缩表空间的更多相关文章

  1. ORACLE 收缩表空间的数据文件

    http://blog.itpub.net/29345367/viewspace-1816427/ 方法一: 在实际的应用中经常会遇到TRUNCATE或者DELETE表中的数据后发现表空间并没有将空间 ...

  2. Oracle Temp表空间切换

    来源于:  http://www.2cto.com/database/201507/418564.html 一.TEMP表空间作用 临时表空间主要用途是在数据库进行排序运算.管理索引.访问视图等操作时 ...

  3. oracle暂时表空间 ORA-01652:无法通过16(在表空间XXX中)扩展 temp 字段

    今天在查数据的时候报错  ORA-01652:无法通过16(在表空间temp1中)扩展 temp 字段 查看表空间使用明细 SELECT b.tablespace,        b.segfile# ...

  4. Oracle Temp 表空间切换

    一.TEMP表空间作用 暂时表空间主要用途是在数据库进行排序运算.管理索引.訪问视图等操作时提供暂时的运算空间,当运算完毕之后系统会自己主动清理.当 oracle 里须要用到 sort 的时候. PG ...

  5. oracle数据库表空间追加数据库文件方法

    oracle数据库表空间追加数据库文件方法   针对非大文件方式表空间,允许追加文件进行表空间的扩展,单个文件最大大小是32G  第一种方式:表空间增加数据文件    www.2cto.com   1 ...

  6. Oracle 设置表空间自增长

    Oracle修改表空间大小 使用Oracle10g建立数据库后,向数据库中导入了部分数据,第二天继续向数据库中导入数据表时发生错误: 查了很多资料发现原来是Oracle表空间限制,导致无法继续导入数据 ...

  7. Oracle基础表空间建立,以及练习

    Oracle的表空间创建,可以采用网页的https://127.0.0.1:1158/em来进入oracle的页面进行创建表空间. 利用plsqldev.exe程序在表空间里添加数据: 首先要在use ...

  8. [转载]Oracle修改表空间大小

    Oracle修改表空间大小 使用Oracle10g建立数据库后,向数据库中导入了部分数据,第二天继续向数据库中导入数据表时发生错误: 查了很多资料发现原来是Oracle表空间限制,导致无法继续导入数据 ...

  9. Oracle建立表空间和用户

    Oracle建立表空间和用户 建立表空间和用户的步骤: 用户 建立:create user 用户名 identified by "密码"; 授权:grant create sess ...

随机推荐

  1. Umbraco(3) - CSS & Javascript(翻译文档)

    原文地址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/umbraco3css-javascript/ CSS & Jav ...

  2. HTML5游戏开发,剪刀石头布小游戏案例

    剪刀石头布,非常可爱的小游戏,相信大家都非常的怀念这款小游戏,小时候也玩过很多次,陪伴着我的童年的成长,现在是不是还会玩一下,剪刀石头布游戏的规则我们都知道是:剪刀剪布,石头砸剪刀,布包石头.跟朋友. ...

  3. [CAMCOCO][C#]我的系统架构.服务器端.(四)----Model层 实体的自我验证

    这是Model的第二篇,上一篇点这里 这块完全是扒了@何镇汐大神博客里的教程实现的,在这之前完全没想到数据验证居然可以这样做!!在此表示严重感谢!!! 点击这里可以去了解这个方法的原理,老胡估计自己是 ...

  4. ocx在我indows7无法注册

    公司今天用到一个  要用到ocx ,我调试好久都无法安装..... 后来在网上看到.原来是没有安装 VC Redist Installer(VC20052008201020122013)运行库合集 导 ...

  5. C# DateTime 日期加1天 减一天 加一月 减一月 等方法(转)

    //今天 DateTime.Now.Date.ToShortDateString(); //昨天,就是今天的日期减一 DateTime.Now.AddDays(-).ToShortDateString ...

  6. 苹果在Xcode6中弃用segue的push和model

    苹果在Xcode6中弃用了segue的push和model.被show和present取代. 下面是新版本中每种类型的使用总结和例子.建议自己使用前先在测试项目中自己试一试 Show 根据当前屏幕中的 ...

  7. 【学习笔记】【C语言】scanf函数

    1. 简介 这也是在stdio.h中声明的一个函数,因此使用前必须加入#include <stdio.h>.调用scanf函数时,需要传入变量的地址作为参数,scanf函数会等待标准输入设 ...

  8. 3月3日(4) Binary Tree Inorder Traversal

    原题: Binary Tree Inorder Traversal 和 3月3日(2) Binary Tree Preorder Traversal 类似,只不过变成中序遍历,把前序遍历的代码拿出来, ...

  9. Excel 窗体控件属性

    常规 AutoLoad   (Excel) 打开工作簿时是否加载控件.(如果是 ActiveX   控件,则忽略.) Enabled(表单) 控件是否可以接收焦点并响应用户生成的事件. Locked( ...

  10. Linux5.8下安装PhpMyadmin无法关联php-mcrypt问题

    一.yum安装php-mcrypt   ##发现没办法安装 原来CentOS 官方默认不在对mcrypt模块 进行支持,所以必须另想办法折腾了2个小时总算搞定,这里主要使用了Fedora的扩展库, E ...