Oracle 表空间 maxsize "unlimited"并不是真正无限

标签 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 in tablespace

当我检查 dba_data_files 表中的数据文件时,我发现最大大小约为 34GB。因为我知道数据库的一般大小,所以在向表空间添加多个数据文件后,我能够毫无问题地导入 .dmp。

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

最佳答案

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

这可能有点令人困惑。您可能不关心管理文件并希望它“正常工作”。管理数据库存储总是很烦人,但您可以执行以下操作:

  1. 将表空间保持在最低限度。在极少数情况下,将数据分区到许多小型表空间会很有帮助。但管理所有这些对象所带来的痛苦通常会抵消这些罕见的好处。
  2. 养成总是添加多个数据文件的习惯。如果您使用 ASM(如果这是本地实例,我不会推荐),那么几乎没有理由添加数据文件时不要“疯狂”。即使您不使用 ASM,您仍然应该有点疯狂。只要您将原始大小设置为较低,并且没有接近 MAX_FILES 限制,并且您没有处理 UNDO 和 TEMP 等特殊表空间之一,就不会受到任何惩罚添加更多文件。不必太担心分配的潜在空间超出硬盘驱动器包含的空间。这让一些 DBA 抓狂,但您必须权衡操作系统空间耗尽的可能性与一百个文件空间耗尽的可能性。 (无论哪种情况,您的应用程序都会崩溃。)
  3. 设置RESUMABLE_TIMEOUT参数。然后SQL语句将暂停,可能会生成警报,将列在DBA_RESUMABLE中,并等待耐心等待更多空间。这在数据仓库中非常有用。
<小时/>

为什么叫“无限”?

我猜关键字UNLIMITED是一个历史错误。自 at least version 7 起,Oracle 就具有相同的文件大小限制。 ,也许更早。 Oracle 7 于 1992 年发布,当时 1GB hard drive cost $1995 。也许当时每个操作系统的文件大小限制都低于这个值。也许当时将 128GB 视为“无限”是合理的。

关于Oracle 表空间 maxsize "unlimited"并不是真正无限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30359569/

相关文章:

sql - 新客户与老客户sql

Oracle 11g 监听器无法启动

docker - 将数据持久保存在 Oracle 数据库的 docker 卷中

postgresql - 在 postgresql 中创建表空间

sql - 如何为特定的 CREATE TABLE [Table] AS 设置表空间

oracle - 在 B 树索引的前沿按范围查询,PostgreSQL

java - Glassfish 3 连接池抛出 java.sql.SQLSyntaxErrorException : ORA-00933

oracle - 为什么spark scala JDBC将oracle中的NUMBER(1)转换为spark数据框中的 bool 值

php - 1 个 ID 可获取更多项目

database - Docker/Oracle数据库/卷持久化/创建表空间