为什么 Oracle XE 上的自动扩展不起作用

Why autoextend on Oracle XE not worked

我们的产品环境有问题。突然开始出现异常

ORA-01654: unable to extend index EMA.TRANSFERI2 by 128 in tablespace SYSTEM

作为问题的解决方案,我的同事添加了新的数据文件。但问题是,为什么自动扩展机制不起作用?我不是 DBA,但我检查了配置,对我来说似乎没问题。它只发生在产品环境中,所以我宁愿避免试验。

我们在系统 table 空间中有 table,我已经知道,应该移至用户 table 空间。但无论如何,autoextend 也应该在系统 tablepsace 上工作。这是我的 table、数据文件和 tablespace

配置
TABLESPACE_NAME | PCT_FREE | PCT_USED | INITIAL_EXTENT | NEXT_EXTENT | MIN_EXTENTS | MAX_EXTENTS | PCT_INCREASE
SYSTEM          | 10       | 40       | 65536          | 1048576     | 1           | 2147483645  | null 
FILE_NAME                              | FILE_ID | TABLESPACE_NAME | BYTES      | BLOCKS | STATUS    | RELATIVE_FNO | AUTOEXTENSIBLE | MAXBYTES   | MAXBLOCKS   | INCREMENT_BY | USER_BYTES | USER_BLOCKS | ONLINE_STATUS
/u01/app/oracle/oradata/XE/system.dbf  | 1       | SYSTEM          | 629145600  | 76800  | AVAILABLE | 1            | YES            | 629145600  | 76800       | 1280         | 628097024  | 76672       | SYSTEM
/u01/app/oracle/oradata/XE/system2.dbf | 5       | SYSTEM          | 1048576000 | 128000 | AVAILABLE | 5            | YES            | 2147483648 | 262144      | 25600        | 1047527424 | 127872      | SYSTEM
TABLESPACE_NAME | BLOCK_SIZE | INITIAL_EXTENT | NEXT_EXTENT | MIN_EXTENTS | MAX_EXTENTS | MAX_SIZE   | PCT_INCREASE | MIN_EXTLEN | STATUS    | CONTENTS | ALLOCATION_TYPE | SEGMENT_SPACE_MANAGEMENT | BIGFILE
SYSTEM          | 8192       | 65536          | null        | 1           | 2147483645  | 2147483645 | 65536        | ONLINE     | PERMANENT | LOCAL    | SYSTEM          | MANUAL                   | NO

您的 system.dbf 文件的 MAXBYTES 值设置为 629145600,因此当您的文件大小达到该限制时,无法进一步扩展。它已经自动扩展到那个点,但不会超出为文件指定的软限制。这是在创建 tablespace 时设置的,使用 the autoextend MAXSIZE clause.

限制可能是由于底层文件系统的大小而设置的,在 runaway/unexpected 增长的情况下导致错误,无意中,或者由于现在只有设置数据库的人知道的一些其他原因向上。

作为添加第二个数据文件的替代方法,您的 DBA 可以使用 alter database 增加现有文件的软限制。但是两者都不应该掉以轻心。应该理解最初限制的原因(特别是如果文件系统由于增加而可能 运行 超出 space)并且也应该检查增长的原因。