Oracle 表空间 maxsize "unlimited" 并非真正无限
Oracle Tablespaces maxsize "unlimited" not really unlimited
我最近需要将 .dmp 导入到我创建的新用户中。我还使用以下命令为用户创建了一个新的 tablespace:
create tablespace my_tablespace
datafile 'C:\My\Oracle\Install\DataFile01.dbf' size 10M
autoextend on
next 512K
maxsize unlimited;
虽然导入是 运行,但我收到一个错误:
ORA-01652 Unable to extend my_tablespace segment by in tablespace
当我检查 dba_data_files table 中的数据文件时,我发现最大大小约为 34gb。因为我知道数据库的一般大小,所以在将多个数据文件添加到 table 空间后,我能够毫无问题地导入 .dmp。
为什么我需要将多个数据文件添加到 table 空间,而我添加的第一个数据文件已设置为自动增长到无限大小?为什么最大大小是 34gb 而不是无限的?是否有 34GB 的硬上限?
正如您所发现的,正如 Alex Poole 指出的那样,单个数据文件的大小是有限制的。小文件限制为 128GB,大文件限制为 128TB,具体取决于您的块大小。 (但是您不想仅仅为了增加这些限制而更改您的块大小。)create tablespace
命令中的大小限制仅在您想要进一步限制大小时才存在。
这可能有点令人困惑。您可能不关心管理文件并希望它 "just work"。管理数据库存储总是很烦人,但您可以做一些事情:
- 将您的 tablespace 保持在最低限度。 在一些罕见的情况下它很有用将数据分成许多小的 tablespaces。但是,管理所有这些对象所带来的痛苦通常会抵消这些难得的好处。
- 养成总是添加多个数据文件的习惯。如果您使用的是 ASM(如果这是本地实例,我不推荐这样做),那么添加数据文件时几乎没有理由不去 "crazy"。即使您不使用 ASM,您仍然应该有点疯狂。只要将原始大小设置为低,就不会接近
MAX_FILES
限制,并且不会处理特殊的 tablespace 之一,如 UNDO 和TEMP,添加更多文件没有惩罚。不要太担心分配比硬盘驱动器更多的潜力 space 。这让一些 DBA 抓狂,但您必须权衡 OS space 中 运行 的概率与 space 中 运行 的概率。文件。 (无论哪种情况,您的应用程序都会崩溃。)
- 设置
RESUMABLE_TIMEOUT
参数。则SQL语句将被挂起,可能会产生警报,会在DBA_RESUMABLE
中列出,并将耐心等待更多space。这在数据仓库中非常有用。
为什么叫"UNLIMITED"?
我猜关键字 UNLIMITED
是一个历史错误。自 at least version 7, and perhaps earlier. Oracle 7 was released in 1992, when a 1GB hard drive cost 95 以来,Oracle 就具有相同的文件大小限制。也许当时每个操作系统的文件大小限制都低于这个限制。也许当时将 128GB 视为 "unlimited".
是合理的
无限的maxsize对于这个操作是不够的,而且你的resumable timeout一定要足够,如果你想要无限的话,你可以将值设置为毫秒;
alter system set resumable_timeout=0;
我最近需要将 .dmp 导入到我创建的新用户中。我还使用以下命令为用户创建了一个新的 tablespace:
create tablespace my_tablespace
datafile 'C:\My\Oracle\Install\DataFile01.dbf' size 10M
autoextend on
next 512K
maxsize unlimited;
虽然导入是 运行,但我收到一个错误:
ORA-01652 Unable to extend my_tablespace segment by in tablespace
当我检查 dba_data_files table 中的数据文件时,我发现最大大小约为 34gb。因为我知道数据库的一般大小,所以在将多个数据文件添加到 table 空间后,我能够毫无问题地导入 .dmp。
为什么我需要将多个数据文件添加到 table 空间,而我添加的第一个数据文件已设置为自动增长到无限大小?为什么最大大小是 34gb 而不是无限的?是否有 34GB 的硬上限?
正如您所发现的,正如 Alex Poole 指出的那样,单个数据文件的大小是有限制的。小文件限制为 128GB,大文件限制为 128TB,具体取决于您的块大小。 (但是您不想仅仅为了增加这些限制而更改您的块大小。)create tablespace
命令中的大小限制仅在您想要进一步限制大小时才存在。
这可能有点令人困惑。您可能不关心管理文件并希望它 "just work"。管理数据库存储总是很烦人,但您可以做一些事情:
- 将您的 tablespace 保持在最低限度。 在一些罕见的情况下它很有用将数据分成许多小的 tablespaces。但是,管理所有这些对象所带来的痛苦通常会抵消这些难得的好处。
- 养成总是添加多个数据文件的习惯。如果您使用的是 ASM(如果这是本地实例,我不推荐这样做),那么添加数据文件时几乎没有理由不去 "crazy"。即使您不使用 ASM,您仍然应该有点疯狂。只要将原始大小设置为低,就不会接近
MAX_FILES
限制,并且不会处理特殊的 tablespace 之一,如 UNDO 和TEMP,添加更多文件没有惩罚。不要太担心分配比硬盘驱动器更多的潜力 space 。这让一些 DBA 抓狂,但您必须权衡 OS space 中 运行 的概率与 space 中 运行 的概率。文件。 (无论哪种情况,您的应用程序都会崩溃。) - 设置
RESUMABLE_TIMEOUT
参数。则SQL语句将被挂起,可能会产生警报,会在DBA_RESUMABLE
中列出,并将耐心等待更多space。这在数据仓库中非常有用。
为什么叫"UNLIMITED"?
我猜关键字 UNLIMITED
是一个历史错误。自 at least version 7, and perhaps earlier. Oracle 7 was released in 1992, when a 1GB hard drive cost 95 以来,Oracle 就具有相同的文件大小限制。也许当时每个操作系统的文件大小限制都低于这个限制。也许当时将 128GB 视为 "unlimited".
无限的maxsize对于这个操作是不够的,而且你的resumable timeout一定要足够,如果你想要无限的话,你可以将值设置为毫秒;
alter system set resumable_timeout=0;