【问题标题】:SQL Developer CommitSQL 开发人员提交
【发布时间】:2015-07-10 04:25:55
【问题描述】:

我正在使用 Oracle SQL Developer 工具,版本 3.0.02,但在理解以下内容时遇到了一些问题:如果我提交更新并且时间响应为“0 秒”,那么提交是否正确完成?因为它发生了几次并且数据库没有更新。不知道是不是巧合。当我在它显示“0 秒”后第二次提交(只是为了确定)时,它显示为“0,016 秒”并且更新显示正确。但我不想为了做对而连续提交 4 次。对此你们怎么看?哦,它并没有给我任何错误。

提前谢谢你

【问题讨论】:

  • 澄清只能附带一些代码。
  • UPDATE db SET user='name' where file='name_of_file' and answer='okay'
  • 没关系,我运行更新,然后当我提交时,它看起来就像我说'0秒'
  • 更新脚本中的代码是正确的,因为在大多数情况下它都可以工作,但是当它失败时,我唯一注意到的是响应时间的变化。我的意思是,对我来说,如果它一直显示“0,032”左右,它应该一直给我一些数字,即使它几乎是瞬时的,这似乎是合乎逻辑的。当它出现“0 秒”时,数据库未更新。
  • 如果您使用 COMMIT 按钮,您将在日志面板中看到 COMMIT SUCCESSFUL(或不成功)消息,例如:“Import-export_peeps2-csv-bad.sql*: Thu Apr 30 13:24:05 EDT 2015:提交成功”另外,3.0 版旧,升级到 4.0.3 版以获得更好的整体体验。

标签: sql oracle time oracle-sqldeveloper commit


【解决方案1】:

您可以查看 Oracle 文档以了解为什么 commit 是一个如此快速的操作(rollback 需要 更多 更长的时间,它必须引用撤消段)。
如果其他人提交了他们的数据,则可能会发生“丢失”提交,这似乎与您的“旧”数据相同。

【讨论】:

  • 谢谢 :) 我明白了。问题是没有其他人在我处理的数据上使用提交,但它仍然发生并且令人沮丧
【解决方案2】:

提交所花费的时间与任何故障无关。这项工作由查询完成,提交只是在元数据中某处记录事务已完成。提交几乎可以做任何事情(只是强制在磁盘上保存一些日志文件)。如果出现问题(即提交不起作用),您将收到错误消息。 没有错误表明一切正常,数据库已完成您要求的所有操作。

例如,您的更新可能什么都不做:

UPDATE db SET user='name' where file='name_of_file' and answer='okay' ;

如果没有名为 'name_of_the_file' 且 answer = 'okay' 的文件,数据库将不起作用。而且没有什么可提交的。

为了获得完整的答案,我将从blog 中添加这些要点:

提交事务时,会发生以下情况:

  1. 事务已提交的关联撤消表空间记录的内部事务表,以及 交易对应的唯一系统变更号(SCN)是 分配并记录在表中

  2. 日志写入进程 (LGWR) 将 SGA 的重做日志缓冲区中的重做日志条目写入重做日志文件。它还写了 事务的 SCN 到重做日志文件。这个原子事件构成 事务的提交

  3. Oracle 释放行和表上的锁

  4. Oracle 将事务标记为完成

【讨论】:

  • 谢谢,这很有帮助!我确实所有数据都正确,所有行都已更新,提交没有给我任何错误(我总是提交更改),但我的上级通知我,其中一些人尚未进行更新(他们似乎没有)我很好奇为什么。故障在哪里..
  • “他们看不到”。他们出现在你面前?如果没有,请确保你已经完成了你认为你已经完成的事情。如果是,请确保您已提交事务并要求他们在提交后重新运行查询。在您提交之前开始的查询将看到旧数据。
  • 是的,在我看来,但在他们看来却不是。我什至每次提交后都会检查数据是否正确更新。这就是我所说的奇怪的东西,这就是为什么我最终问了一个愚蠢的问题..最后的手段:)
猜你喜欢
  • 2020-07-21
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
相关资源
最近更新 更多