sql - SQL----- 尝试将查询结果导出为 CSV 时出错
问题描述
我正在运行一个大型查询(600 万条记录),它与其他表有很多 INNER JOINS,但是当我尝试在 CSV 上导出查询结果时,我得到以下结果。我用谷歌搜索了一段时间,但没有得到任何结果。
ORA-01555: snapshot too old: rollback segment number 69 with name
"_SYSSMU69_2356811035$" too small
ORA-0263: "snapshot too old: rollback segment number %s with name \"%s\" too small"
*Cause: rollback records needed by a reader for consistent read are overwritten by other writers
*Action: If in Automatic Undo Management mode, increase undo_retention setting. Otherwise, rollback segments
Vendor code 1555
解决方案
让我解释一下会发生什么。当 Oracle 执行查询时,无论查询花费多少时间,查询的结果都必须与发起查询时该数据的图片一致。
ORA-1555 错误可能发生在查询开始时,查询无法访问足够的撤消来构建数据副本。已提交的块“版本”与这些块的较新的未提交“版本”一起维护,以便查询可以访问查询时数据库中存在的数据。这些被称为“一致读取”块,并使用 Oracle 撤消管理进行维护。
这种一致性由 UNDO 表空间处理。在您的情况下,最可能的情况如下:
- 运行 csv 的查询在某一时刻启动。Oracle 运行查询以获取当时这些表中的 600 万行。
- 在查询执行期间,其他几个进程正在对受影响的记录运行 DML 操作,因此之前的数据被移动到 UNDO 表空间(回滚段是存储在 UNDO 表空间上的段的类型)
- 但是,如果您的 undo 很小或您的 undo_retention 不够,为了保持数据库的完整性,如果该表空间上没有足够的空间,Oracle 将用新的回滚段覆盖这些回滚段。
尝试以下操作:
- 增加撤消表空间
- 增加 undo_retention 参数。
与 ORA-1555 相关的旧 Oracle 版本中存在大量错误,以及当 undo 数据是 lob 段等时的其他可能性。如果您有权访问 Support,您将在此处找到主注释
推荐阅读
- python - 从逗号分隔的字符串创建列表
- javascript - Nodejs 只接受几个请求
- python - TypeError:无法确定关系的真值
- python - 将嵌套列表解压缩到字典中
- javascript - 如何解决 responseJSON: {error: "invalid_request", error_description: "Missing required parameter: code"}
- javascript - 插入多行物料表
- r - 如何在 R 中对稀疏矩阵进行交叉制表?
- java - 将数据库异常信息传输到客户端的最佳实践
- spring-boot - 如何避免 Spring 框架中的 CustomConversions 警告
- kubernetes - 为什么当我查询正在运行的 Pod 时,kubectl 返回具有“Terminating”状态的 Pod?