ORA-01562:未能扩展回滚段号

时间:2017-07-18 09:38:53

标签: oracle oracle11g oracle-pro-c

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

该表的MAXEXTENTS已设置为UNLIMITED。 我无法在我的开发环境中重现错误。

如何处理这种情况?我需要采取哪些其他步骤以便将来不会出现此错误?

1 个答案:

答案 0 :(得分:2)

您需要做的是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系统权限。要为数据库创建其他回滚段,请使用Enterprise Manager的Create Rollback Segment属性表或SQL命令CREATE ROLLBACK SEGMENT。包含新回滚段的表空间必须在线。

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

CREATE PUBLIC ROLLBACK SEGMENT users_rs TABLESPACE users;