ORA-01562: 无法扩展回滚段号

ORA-01562: failed to extend rollback segment number

我正在逐行读取文件,并在每一行之后将数据提交给数据库。输入文件包含 100K 行。 偶尔我会收到 ORA-01562: failed to extend rollback segment number 错误,它不是针对特定行,也不是针对特定文件。错误是随机的。这发生在生产系统上。

并且 table 的 MAXEXTENTS 已经设置为 UNLIMITED。 我无法在我的开发环境中重现错误。

如何处理这种情况?我还需要采取哪些其他步骤才能避免以后出现此错误?

您需要做的是shrink回滚段或add另一个回滚段。

在您的情况下,您似乎只有 one 回滚段,即默认的 SYSTEM 回滚段。

您必须至少再添加一个回滚段。

以下是对您有帮助的命令

以 SYSTEM 用户身份登录时发出这些语句。

手动收缩回滚段:

要收缩回滚段,您必须具有 ALTER ROLLBACK SEGMENT 系统权限。

您可以使用 SQL 命令 ALTER ROLLBACK SEGMENT 手动减小回滚段的大小。您尝试收缩的回滚段必须在线。

以下语句将回滚段 RBS1 缩小到 100K:

ALTER ROLLBACK SEGMENT rbs1 SHRINK TO 100K;

显示回滚段信息:

DBA_ROLLBACK_SEGS 数据字典视图存储有关数据库回滚段的信息。例如,以下查询列出了数据库中每个回滚段的名称、关联的表空间和状态:

SELECT segment_name, tablespace_name, status
         FROM sys.dba_rollback_segs;

输出

SEGMENT_NAME  TABLESPACE_NAME     STATUS
 ------------- ----------------    ------
SYSTEM        SYSTEM             ONLINE
 PUBLIC_RS     SYSTEM             ONLINE
 USERS_RS      USERS              ONLINE

正在创建回滚段:

要创建回滚段,您必须具有 CREATE ROLLBACK SEGMENT 系统权限。要为数据库创建额外的回滚段,请使用企业管理器的创建回滚段 属性 sheet,或使用 SQL 命令 CREATE ROLLBACK SEGMENT。包含新回滚段的表空间必须在线。

以下语句在 USERS 表空间中创建一个名为 USERS_RS 的 public 回滚段,使用 USERS 表空间的默认存储参数:

CREATE PUBLIC ROLLBACK SEGMENT users_rs TABLESPACE users;