【问题标题】:Inserted data is not shown in Oracle db using a direct query使用直接查询在 Oracle db 中未显示插入的数据
【发布时间】:2016-03-23 00:01:09
【问题描述】:

我无法在网上找到这个问题的解决方案,所以我希望我能在这里找到帮助。

我继承了一个 Java Web 应用程序,该应用程序对 Oracle 数据库执行更改并显示其中的数据。该应用程序使用“pamsdb”用户 ID。应用程序在其中一个表 (TTECHNOLOGY) 中插入了一个新行。当应用程序稍后查询数据库时,结果集包括新行(我可以在打印输出和应用程序屏幕中看到它)。 但是,当我直接使用 sqldeveloper 查询数据库时(使用 same user id 'pamsdb'),我在修改后的表中看不到新行。

几点说明:

1) 我读过here 和其他位置,所有 INSERT 操作都应该跟一个 COMMIT,否则其他用户看不到更改。 Java 应用程序执行 COMMIT,我认为这可能是问题的根源,但由于我在 sqldeveloper 中使用相同的用户 ID,我很惊讶我看不到更改在那里。

2) 我尝试从 sqldeveloper 执行 COMMIT WORK,但这并没有改变我的情况。

谁能建议造成差异的原因以及如何解决?

提前致谢!

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您使用的是同一用户,但在不同的会话中。一旦会话看不到另一个会话中未提交的更改,对于任何用户 - 它们是独立的。

    您必须从执行插入的会话中提交 - 即您的 Java 代码必须提交才能使其更改在其他任何地方可见。您不能从其他地方提交 Java 会话的更改,并且从 SQL Developer 提交 - 即使作为同一用户 - 也只会提交在 会话中所做的任何更改。

    你可以阅读更多about connections and sessionstransactionscommit文档总结如下:

    使用 COMMIT 语句来结束您当前的事务,并使在事务中执行的所有更改永久生效。事务是 Oracle 数据库将其视为单个单元的一系列 SQL 语句。该语句还擦除事务中的所有保存点并释放事务锁。

    直到你提交一个事务:

    • 通过查询修改后的表,您可以看到您在事务期间所做的任何更改,但其他用户看不到这些更改。提交事务后,更改对提交后执行的其他用户语句可见。
    • 您可以使用 ROLLBACK 语句回滚(撤消)事务期间所做的任何更改(请参阅 ROLLBACK)。

    “其他用户看不到更改”实际上是指其他用户会话


    如果更改正在被提交并且可以通过您的 Java 代码从新会话中看到(在 Web 应用程序和/或其连接池已重新启动之后),但在 SQL 中仍然不可见开发商;或者直接在 SQL Developer 中进行的更改(并在那里提交)对 Java 会话不可见 - 那么这些更改要么在不同的数据库中进行,要么在同一数据库的不同模式中进行,或者(不太可能)被 VPD 隐藏.这从两个会话使用的连接设置中应该很明显。

    从 cmets 看来,这就是问题所在,Java Web 应用程序和 SQL Developer 访问具有相同表的不同模式。

    【讨论】:

    • 感谢您的回答,@AlexPoole。我假设插入新数据的“会话”已经终止(应用程序运行并完成)。有什么办法可以拦截已经插入的数据并提交吗?
    • 不,该会话必须提交。如果您的 Java 程序在没有提交的情况下退出(并且自动提交已关闭,似乎是这种情况 - 这通常是一件好事),那么它所做的任何更改都已回滚并丢失。如果你继承了这个,那么它没有提交很奇怪;也许您正在一个设置不同的新开发/测试环境中运行?
    • 嗯,有LogMiner,如果您可以使用,但这可能超出了您的问题范围。
    • Alex,对于您的第二条评论,我再次查看了一些运行时参数,这是我所看到的: 1. 连接对象的 autoCommit 默认设置为 true,而不是实例化后由应用程序修改。除非我错过了什么。 2. 应用程序可以反复拉取新数据并显示,所以更改不丢失。 3. 我更新了相同的查询以在每次插入后提交 COMMIT,并在新数据上运行它,但我仍然无法直接在数据库中看到新数据,而应用程序显示它...
    • 所以如果您退出并重新启动应用程序,它仍然可以看到它的数据吗?你确定 SQL Developer 连接到同一个数据库吗?将 JDBC URL 与 SQL Developer 连接设置进行比较。
    猜你喜欢
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    相关资源
    最近更新 更多