【问题标题】:shrink permanent tablespace in oracle 11g在 oracle 11g 中收缩永久表空间
【发布时间】:2013-03-11 21:36:29
【问题描述】:

我需要在 oracle 11g 中缩小表空间。它不是临时表空间,我不能丢失该表空间中的数据。我的其他表空间之一空间不足,因此我必须重新分配该表空间的剩余大小。收缩不适用于永久表空间。数据文件的当前大小是 1150MB,我希望它是 256MB

【问题讨论】:

    标签: oracle11g


    【解决方案1】:

    您可以调整文件大小,因此:-

    ALTER DATABASE DATAFILE '/your/path/your_file01.dbf' RESIZE 256M;
    

    当然,如果你已经使用了超过 256M 的空间,那么你会得到一个错误

    ORA-03297: file contains used data beyond requested RESIZE value
    

    然后您可以使用此查询查看可以调整数据文件大小的最小大小:

    SELECT  CEIL((NVL(e.hwm, 1) * 8192)/1024/1024) as "Mb"
    FROM
        dba_data_files f
    LEFT
    JOIN    (SELECT file_id, max(block_id + blocks - 1) hwm FROM dba_extents GROUP BY file_id) e ON f.file_id = e.file_id
    WHERE
        f.file_name = '/your/path/your_file01.dbf'
    /
    

    *如果您的表空间块大小不是 8192,则首先更改该值。另请注意,查询将需要很长时间才能运行 - 这是正常的 - 或者您可以使用许多人喜欢的反复试验技术,并一次调整它的大小,直到它出错。

    【讨论】:

    • 我已经试过这个了。它不起作用。如果我运行查询以了解数据文件中使用了多少空间,则为 3 mb。但数据文件大小为 1150 mb,表空间大小也是如此。表空间已被完全占用。由于已满,无法调整大小。
    • 确定哪些段位于数据文件的末尾并在其他地方重建它们。然后你可以进一步缩小。
    • 有关无法调整大小的情况,另请参阅oracle-base.com/articles/misc/reclaiming-unused-space
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2011-04-17
    • 2011-03-01
    • 2011-01-04
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多