Oracle表空间maxsize“;无限制“;不是无限的

Oracle表空间maxsize“;无限制“;不是无限的,oracle,oracle11g,tablespace,Oracle,Oracle11g,Tablespace,我最近需要将.dmp导入到我创建的新用户中。我还使用以下命令为用户创建了一个新表空间: 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 i

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

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表中的数据文件时,我发现最大大小大约为34gb。因为我知道数据库的一般大小,所以在将多个数据文件添加到表空间后,我能够导入.dmp而没有任何问题


当我添加的第一个数据文件被设置为自动增长到无限大时,为什么我需要向表空间添加多个数据文件?为什么最大容量是34gb而不是无限的?是否存在34gb的硬上限?

正如您所发现的,正如Alex Poole所指出的,单个数据文件的大小是有限制的。根据块大小,小文件限制为128GB,大文件限制为128TB。(但您不想仅仅为了增加这些限制而更改块大小。)
create tablespace
命令中的大小限制只有在您想进一步限制大小时才存在

这可能有点混乱。您可能不关心管理文件,希望它“正常工作”。管理数据库存储总是很烦人,但您可以做以下几件事:

  • 尽量减少表空间。在一些罕见的情况下,将数据划分为许多小表空间是有帮助的。但是,管理所有这些对象所经历的痛苦往往超过了这些罕见的好处
  • 养成总是添加多个数据文件的习惯。如果您使用ASM(如果这是本地实例,我不建议使用ASM),那么添加数据文件时几乎没有理由不“疯狂”。即使你没有使用ASM,你也应该有点疯狂。只要将原始大小设置为较低,就不会接近
    MAX_FILES
    限制,也不会处理诸如UNDO和TEMP之类的特殊表空间,添加更多文件不会受到惩罚。不要太担心分配比硬盘容量更多的潜在空间。这会让一些DBA发疯,但您必须权衡操作系统空间不足的可能性与一百个文件空间不足的可能性。(无论哪种情况,您的应用程序都将崩溃。)
  • 设置
    resubable\u TIMEOUT
    参数。
    然后SQL语句将被挂起,可能会生成警报,将在
    DBA\u resubable
    中列出,并耐心等待更多空间。这在数据仓库中非常有用

  • 为什么称之为“无限”?


    我猜关键字
    UNLIMITED
    是一个历史错误。甲骨文也有同样的文件大小限制,从那时起,也许更早。甲骨文7于1992年发布,当时有一个。也许当时每个操作系统的文件大小限制都比这个小。也许当时认为128GB是“无限制的”是合理的。

    无限制的maxsize对于此操作是不够的,而且您的可恢复超时必须足够,如果您想要无限制,您可以将该值设置为毫秒

    alter system set resumable_timeout=0;
    

    你的数据库块大小是多少?A(smallfile表空间),所以我猜8kb块达到了这个极限?我相信我达到了这个极限。我(显然是错误地)假设指定的“无限”将扩展,直到操作系统实际耗尽HD空间。为了澄清,你所说的是有一个硬上限?是的;但它因块大小而不同-块的数量是有限的,它不是对大小的直接限制。指定的大小是软限制。正如Jon提到的,您可以指定多个数据文件,其软限制总量超过可用磁盘空间。记住Oracle喜欢将逻辑和物理分开-相同的逻辑DDL在两个具有不同块大小的系统上有不同的物理限制。但是我仍然有点困惑…如果“unlimited”是一个软限制,那么当它不是真正的无限时,将maxsize指定为“unlimited”又有什么意义呢?我希望指定maxsize为unlimited,直到操作系统的空间用完为止。在我的情况下,这不是一个问题,因为我有很多额外的空间和监视器,可以在空间用完时提醒我们。似乎获得无限空间的唯一真正方法是添加多个数据文件,并定期检查所消耗的空间,看看是否需要添加更多。我的期望是“无限”真的意味着无限哈哈。它从来都不是完全无限的,即使有多个数据文件(数量是有限制的;对于smallfile是1022),正如Jon所提到的。“无限制”表示您作为数据库设计者/管理员没有施加限制。有更好的术语吗?或者,您是否希望始终根据当前的物理条件设置一个数字限制,例如,您可能必须返回并在以后添加更多空间时增加该限制?如果以后的Oracle版本增加了这些硬限制,您是希望自动获得新的更改,还是必须返回并手动增加限制?在我的情况下,我不需要担心导入后空间不足,因为此数据库是只读的。我仍然困惑的是,为什么maxsize接受“无限”,而实际上它并不是无限的。例如,如果我在一个“无限”表空间中创建一个最初很小的数据库(在我的示例中使用createtablespacecmd),那么一旦数据库增长到34GB,我最终会得到一个ORA-01652吗?根据你的建议,我应该为额外的空间创建一个额外的数据文件。高清空间对我来说并不是一个真正的问题,我想防止的是意外的ORA-01652s。@spots-我想Jon说的是,当你达到或接近32GB的限制时,你不是创建一个额外的数据文件,而是在你第一次创建表空间时创建10个(或100个,或其他什么)数据文件;他们都会呻吟