我正在逐行读取文件,并在每一行后将数据提交到DB。输入文件包含100K
行。 偶尔我会收到ORA-01562: failed to extend rollback segment number
错误,它不是针对特定行,也不是针对特定文件。错误是随机的。这发生在生产系统上。
并且该表的MAXEXTENTS
已设置为UNLIMITED
. 我无法在我的开发环境中重现该错误。
如何处理这种情况?我还需要采取哪些其他步骤才能在将来收到此错误?
您需要做的是shrink
回滚段或add
另一个回滚段。
在您的情况下,您似乎只有one
回滚段,即默认的系统回滚段。
您必须至少再添加一个回滚段。
以下是可以帮助您的命令
以系统用户身份登录时发出这些语句。
手动收缩回滚段:
要使用 收缩回滚段,您必须具有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
系统权限。若要为数据库创建其他回滚段,请使用企业管理器的"创建回滚段"属性表或 SQL 命令"创建回滚段"。包含新回滚段的表空间必须处于联机状态。
以下语句使用 USERS 表空间的默认存储参数在USERS
表空间中创建名为USERS_RS
的公共回滚段:
CREATE PUBLIC ROLLBACK SEGMENT users_rs TABLESPACE users;