问题标签 [ora-01555]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
9718 浏览

oracle - Oracle - 事务、回滚段和 undo_retention 参数如何工作?

我不是 DBA,我很难理解 Oracle 的事务管理流程。

根据我通过阅读互联网上一些看起来可靠的页面(最值得注意的是这个AskTom 注释——但不要理会评论)所了解的情况,提交事务时,尚未在实际数据块上报告新数据,但保持记录在回滚段上。当有人对数据发出 SELECT,或者当 UNDO_RETENTION 秒过去时——无论这两个事件中的哪一个先发生——,然后(并且仅在那时)将新数据写入数据块。

但是我们公司的某个人,据说是知道的,最近告诉我相反:据他说,当一个事务提交时,新数据立即写入数据块,回滚段/撤消表空间保留旧数据以备不时之需。 UNDO_RETENTION 秒的持续时间。在此期间,这些旧数据保持可用,供交易前在 SCN 上启动的查询访问。

那么,Oracle 内部到底发生了什么,您能否提供参考来支持您的回复?

我们使用的是 Oracle 9.2.0.8。

提前致谢。

0 投票
2 回答
1262 浏览

oracle - 我可以用保存点代替在 Oracle 中启动新事务吗?

现在我们用于插入记录集的过程是这样的:

(请注意,“记录集”是指一个人的记录以及他们的地址、电话号码或任何其他连接表)。

  1. 开始交易。
  2. 插入一组相关的记录。
  3. 如果一切都成功,则提交,否则回滚。
  4. 返回到步骤 1 获取下一组记录。

我们应该做更多这样的事情吗?

  1. 在脚本开头启动事务
  2. 为每组记录启动一个保存点。
  3. 插入一组相关记录。
  4. 如果有错误则回滚到保存点,如果一切成功则继续。
  5. 在脚本开头提交事务。

在遇到 ORA-01555 的一些问题并阅读了一些 Ask Tom 文章(如这篇文章)之后,我正在考虑尝试第二个过程。当然,正如 Tom 所指出的,开始一项新事务应该由业务需求来定义。第二个过程值得尝试,还是一个坏主意?

0 投票
2 回答
6879 浏览

materialized-views - Oracle 物化视图刷新失败并出现 ORA-01555

我有一个物化视图设置为按需刷新:

当我运行刷新程序时,它每两天失败一次。

刷新命令:

错误:

1 - 合并错误:ORA-12008:物化视图刷新路径中的错误 ORA-01555:快照太旧:回滚段编号 406,名称为“_SYSSMU406_3487494604$”太小 ORA-02063:IJSFASIEBEL 的前一行

我已经读过使用 select * 创建物化视图可能会导致此错误,但我已经删除了视图并重新创建了很多次,刷新在一天运行良好并在第二天出错。未对基表进行任何更改。

谁能告诉我错误消息的含义或可能导致问题的原因?

0 投票
2 回答
8649 浏览

sql - 每 1000 行提交一次

我希望每 1000 行提交一次,直到所有记录都被删除,我们有超过一百万条记录要删除。

起初:

我正在考虑做这样的事情:

但是,有没有更好的方法来做到这一点?这是因为我们收到了 ORA-01555 错误:

ORA-01555: 快照太旧: 名称为 "%segname" 的回滚段号 %n 太小。

0 投票
1 回答
79 浏览

sql - SQL----- 尝试将查询结果导出为 CSV 时出错

我正在运行一个大型查询(600 万条记录),它与其他表有很多 INNER JOINS,但是当我尝试在 CSV 上导出查询结果时,我得到以下结果。我用谷歌搜索了一段时间,但没有得到任何结果。