Oracle表空间最大化"无限"并非真正无限制

spo*_*ots 6 oracle oracle11g tablespace

我最近需要将.dmp导入我创建的新用户.我还使用以下命令为用户创建了一个新的表空间:

create tablespace my_tablespace
 datafile 'C:\My\Oracle\Install\DataFile01.dbf' size 10M
 autoextend on
 next 512K
 maxsize unlimited;
Run Code Online (Sandbox Code Playgroud)

导入正在运行时出现错误:

ORA-01652 Unable to extend my_tablespace segment by in tablespace
Run Code Online (Sandbox Code Playgroud)

当我检查dba_data_files表中的数据文件时,我观察到maxsize大约是34gb.因为我知道数据库的一般大小,所以在将多个数据文件添加到表空间后,我能够毫无问题地导入.dmp.

当我添加的第一个数据文件设置为自动增长到无限大小时,为什么我需要向表空间添加多个数据文件?为什么最大尺寸为34gb而不是无限制?是否有34gb的硬帽?

Jon*_*ler 7

正如您所发现的那样,正如Alex Poole指出的那样,单个数据文件大小存在限制.Smallfiles限制为128GB,bigfiles限制为128TB,具体取决于您的块大小.(但您不希望更改块大小只是为了增加这些限制.)create tablespace只有在您希望进一步限制大小时,命令中的大小限制才会出现.

这可能有点令人困惑.您可能不关心管理文件并希望它"正常工作".管理数据库存储总是令人讨厌,但这里有一些你可以做的事情:

  1. 保持您的表空间最小化. 这里一些罕见的情况下,是有帮助的数据分割成许多小的表空间.但是,这些罕见的好处通常会超过您管理所有这些对象所带来的痛苦.
  2. 养成总是添加多个数据文件的习惯. 如果您正在使用ASM(如果这是本地实例,我不建议这样做),那么在添加数据文件时几乎没有理由不去"疯狂".即使你不使用ASM,你仍然应该有点疯狂.只要您将原始大小设置为低,您就不会接近MAX_FILES限制,并且您没有处理像UNDO和TEMP这样的特殊表空间之一,添加更多文件不会受到任何惩罚.不要过于担心分配比硬盘包含的更多潜在空间.这会让一些DBA疯狂,但你必须权衡耗尽OS空间的可能性与一百个文件中空间不足的可能性.(无论哪种情况,您的应用程序都会崩溃.)
  3. 设置RESUMABLE_TIMEOUT参数. 然后SQL语句将被暂停,可能会生成警报,将被列入DBA_RESUMABLE,并将耐心等待更多空间.这在数据仓库中非常有用.

为什么称它为"无限"?

我猜这个关键字UNLIMITED是一个历史错误.至少从版本7开始,Oracle可能具有相同的文件大小限制,也许更早.Oracle 7于1992年发布,当时1GB硬盘价格为1995美元.也许当时每个操作系统的文件大小限制都低于此.也许当时将128GB视为"无限制"是合理的.