达到 Oracle XE 数据限制 - 如何减小表空间大小?

标签 oracle oracle11g resize tablespace data-files

我有一个带有多个表空间的 Oracle XE 数据库。其中一个用于存储图像数据,这个表空间已经变得非常庞大。我们决定不再需要这些图像,因此将它们全部删除。

这释放了很多空间,但表空间大小仍然很大。我怎样才能将它减少到实际数据的大小?

最佳答案

这有点棘手,您会发现 DATAFILE RESIZE 是最常见的答案。但是,您需要注意 Jonathan Lewis 提到的几件事在调整数据文件大小时避免 ORA-03297: file contains used data beyond requested RESIZE value

您需要先找到表空间空闲空间,以确定您可以回收的空间。

以下脚本由 Tim Hall很方便:

SET PAGESIZE 140
COLUMN used_pct FORMAT A11

SELECT tablespace_name,
       size_mb,
       free_mb,
       max_size_mb,
       max_free_mb,
       TRUNC((max_free_mb/max_size_mb) * 100) AS free_pct,
       RPAD(' '|| RPAD('X',ROUND((max_size_mb-max_free_mb)/max_size_mb*10,0), 'X'),11,'-') AS used_pct
FROM   (
        SELECT a.tablespace_name,
               b.size_mb,
               a.free_mb,
               b.max_size_mb,
               a.free_mb + (b.max_size_mb - b.size_mb) AS max_free_mb
        FROM   (SELECT tablespace_name,
                       TRUNC(SUM(bytes)/1024/1024) AS free_mb
                FROM   dba_free_space
                GROUP BY tablespace_name) a,
               (SELECT tablespace_name,
                       TRUNC(SUM(bytes)/1024/1024) AS size_mb,
                       TRUNC(SUM(GREATEST(bytes,maxbytes))/1024/1024) AS max_size_mb
                FROM   dba_data_files
                GROUP BY tablespace_name) b
        WHERE  a.tablespace_name = b.tablespace_name
       )
ORDER BY tablespace_name;

现在剩下的就是调整数据文件的大小。

ALTER DATABASE DATAFILE '/directory/datafile.dbf' RESIZE value;

关于达到 Oracle XE 数据限制 - 如何减小表空间大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30778785/

相关文章:

oracle - ORA-01460 未实现或不合理的转换请求 sqldeveloper

database - Postgres 和 Oracle 数据库维护插入顺序吗?

sql - Oracle 中不同计数的总和

c++ - 如何在给定宽度和高度的情况下调整对象的二维 vector 的大小?

css - 调整图像大小,固定位置

oracle - 使用 PL/SQL 如何将文件的内容放入 blob 中?

oracle - 如何创建oracle sql脚本假脱机文件

oracle - 如何获取 PL/SQL 对象填充失败的列名

database - Oracle 临时表 : breaking a large query into steps

ios - 动态调整 View 大小时(拖动 Action )自动布局约束中断