我们如何从分配的命名空间中释放磁盘空间?/ ORA-03297

dom*_*enk 3 oracle windows oracle-10g disk-space

我们的磁盘空间不足。

该服务器有一个 420 GB 的 HDD,并运行一个 Microsoft SQL Server 和一个 Oracle Server(10g)。

Oracle 服务器最多使用 315 GB 空间。我们刚刚加载了一个 100GB 的 Microsoft SQL Server 数据库。现在我们有大约 5GB 可用空间,需要备份 SQL Server 数据库。

首先,我们尝试将备份移动到另一个驱动器,但这不起作用。

然后我们尝试调整我们的 Oracle Server 的分配空间的大小,它由 6 个文件组成,每个文件 20GB,每个文件使用大约 4GB。当我们尝试将此文件大小调整为 10GB 时,我们收到 Oracle 错误 ORA-03297,但显示已使用 4GB。经过多次尝试,我们可以将一些文件缩短到 16/17/18GB,但我们仍然需要更多空间。

是否有解决方案如何将 Oracle 文件的大小调整为每个 10GB?

我们尝试过 Coalesce 并释放未使用的空间,但这也不起作用。

Phi*_*lᵀᴹ 6

您收到 Oracle ORA-03297 错误,因为表的 HWM(高水位线)超出了您尝试将数据文件缩小到的大小。

首先尝试为每个受影响的表“缩小空间”:

alter table fragmentedtable enable row movement;

alter table fragmentedtable shrink space;
Run Code Online (Sandbox Code Playgroud)

接下来,检查可以在不移动当前数据库对象的情况下从每个现有表空间文件中释放多少空间。

以下(取自Ask Tom并假设块大小为 8k)告诉您当前可以从每个数据文件中释放多少空间,以兆字节为单位:

select file_name,
       ceil( (nvl(hwm,1)*8192)/1024/1024 ) SHRINK_TO,
       ceil( blocks*8192/1024/1024) CURRENT_SIZE,
       ceil( blocks*8192/1024/1024) -
       ceil( (nvl(hwm,1)*8192)/1024/1024 ) SAVINGS
from dba_data_files a,
     ( select file_id, max(block_id+blocks-1) hwm
         from dba_extents
        group by file_id ) b
where a.file_id = b.file_id(+)
Run Code Online (Sandbox Code Playgroud)

例如:

FILE_NAME                                           SHRINK_TO CURRENT_SIZE    SAVINGS
-------------------------------------------------- ---------- ------------ ----------
/u01/app/oracle/oradata/PHIL112/system01.dbf              696          700          4
/u01/app/oracle/oradata/PHIL112/sysaux01.dbf              579          610         31
/u01/app/oracle/oradata/PHIL112/users01.dbf                85           93          8
/u01/app/oracle/oradata/PHIL112/undotbs01.dbf              65          120         55

SQL>
Run Code Online (Sandbox Code Playgroud)

要调整大小,请使用:

alter database datafile '/path/to/data/file.dbf' resize 100m; 
Run Code Online (Sandbox Code Playgroud)

您的下一个选择是创建一个新表空间(和关联的数据文件)并将当前数据库对象移动到新表空间。您可以使用 datapump 或手动执行此操作。Tim Hall 有一篇关于如何在此处执行此操作的出色文章。