2016-08-30 137 views
2

如果这太含糊,我很抱歉,但这是随许多类型语句出现的随机问题。谷歌和堆栈溢出搜索失败了我。这是我所经历的,我希望那里的人看到或至少听说过这种情况,并且可能知道有解决方案。PL/SQL Developer语句有时不会提交或“粘贴”

有时候,没有明显的韵律或原因,我通过PL/SQL Developer对我们的Oracle数据库运行的语句不“粘”。上周我在表A上运行了一个更新,提交了更新语句,然后在表B上截断了一个表,然后在表B上插入了一个表,然后是另一个提交。一切似乎都正常,因为我没有收到任何错误。当然,我可以查询这些变化并查看它们是否成立。但是,在注销并返回时,这些更改尚未提交。即使截断命令也没有“卡住” - 截断不需要执行提交。

一些细节可能有帮助:我通过PL/SQL在共享帐户上登录数据库服务器,我的团队只使用共享帐户访问模式(每个服务器上有多个模式,每个模式有一个共享登录/ PW)。在我的团队中,我是唯一一个遇到这个问题的人。我已要求我们的数据库管理团队调查我的个人资料设置,并被告知我的个人资料看起来与我的队友个人资料相同。我们被迫通过Citrix连接到我们的生产数据库服务器。我只能通过Citrix随时打开一个PL/SQL实例,所以我通常将PL/SQL连接到多个模式,但我从来没有同时在多个模式上运行SQL。我甚至不确定这是否可能,但我想我会提到它。我通常在PL/SQL中打开3-4个窗口,每个窗口连接到不同的模式。

我的经理直接参与了发生类似事件的案例。我运行了四个更新命令,并将其中的每一个都提交给它们;然后他运行一条select语句只是为了发现我的更新没有实际提交。

我希望我的一位同伴Overflowers'已经看到或听说过这个问题,或者至少可以为我提供一个指引,试图揭示这个问题。

+0

分享你的问题的一些例子。 – XING

+0

@MKowalski:为什么不尝试使用命令提示符下的sqlplus,然后才能责怪PL/SQL Developer? –

+0

如果你指责PL/SQL Developer(无论是对还是错)并继续使用它,那么最终你会被指责。前两种Oracle开发环境(imo)是[Toad](https://software.dell.com/products/toad-for-oracle/software-downloads.aspx)和Oracle的[SQL Developer](http:// www .oracle.com/technetwork/developer-tools/sql-developer/overview/index.html)。我会从免费的SQL Developer开始。 – tbone

回答

3

“它已经开始反映在我身上不好,损害了我在公司的声誉。”

什么会真正反映你很糟糕,你会认为Oracle RDBMS是一个神奇的或随机的设备,或者更糟糕的是,感觉和对你的个人仇恨。电脑可能看起来是斗气,但这总是我们投射到他们身上;-)

打磨你的声誉的方式将通过情况的知情调查。数据库不会随机丢失事务。那么发生了什么?

可能的罪魁祸首:

  1. 触发器:不表A有一个UPDATE触发器这抑制了你的一些SQL的?
  2. 同义词:是表AB真的是你认为他们的表吗?
  3. 所有权:是否在启用了行级安全性的其他架构中使用这些表(尽管如果您违反策略,应该通过错误消息)?
  4. PL/SQL Developer配置:是IDE隐藏错误消息还是你没有发现它们?
  5. 对象类型:表AB真的表吗?他们可以用INSTEAD OF触发器来抑制你的一些SQL吗?
  6. 对象类型:或可能AB是物化视图,您的会话有QUERY_REWRITE_INTEGRITY=stale_tolerated

如果最后一个看起来有点类似的深奥的解释,涉及数据闪回,流水线功能和其他malarky。这表明一个同事的一个解释类别正在恶作剧。

如何进行:

  1. 尝试不同的工具。 SQL * Plus(或new SQL Command Line)可能会产生不同的结果。排除PL/SQL Developer。
  2. 写一些测试用例。力争建立可重现的测试用例:给定一定的设置,此SQL语句总是会导致给定的结果(SQL始终保持不变或始终不变)。
  3. 消除用于检查结果的查询中的错误或“漏洞”。
  4. 使用数据字典了解麻烦表的特征和关联对象。您需要了解导致不同结果的原因。 UPDATE持有的行与不行的行有什么区别?
+0

不错的可能性列表,尤其是触发器 – tbone

+0

谢谢你的详细写作。无论我们中的哪一个运行它,我们运行的SQL始终都在相同的表中运行。这个问题只影响到我,而且非常随意。我可以在有一天运行SQL,并且工作正常。第二天,相同的SQL显然会正常运行,但变化不会持续。我再也没有成功复制这个问题。我有我们的开发团队检查我的IDE设置,它和他们的一样。声誉影响与我把事情标记为完整有关,但是命令不会持续。 “他们”认为我故意不做我的工作。 – MKowalski

+0

我们的数据库由我们母公司的数据库管理员进行管理,所以我甚至不知道我可以找出他们是如何建立的。我不是想象中的任何SQL开发人员。我只是运行那些知道如何编写它的代码。这些对象绝对是桌子。弄清楚为什么会发生的最大问题是我永远不知道什么时候会发生。我现在运行的SQL可能无法正常工作,但如果在五分钟后从同一个窗口运行相同的SQL,它将起作用。非常令人沮丧。 – MKowalski

1

我已经使用了PL/SQL Developer十多年了,我从来不知道它在静默中取消了成功的truncate操作。如果可以这样做,AA应该将其添加为菜单项。您似乎更可能运行针对错误的数据库连接的命令。

+0

这里的每个人都在使用PL/SQL多年。从来没有人见过这种情况发生过。我责怪PL/SQL的唯一原因是因为我不知道它可能是什么。我们已经重置了我的SQL配置文件,我们重置了PL/SQL,甚至重置了我的Citrix配置文件,尽管这个问题早于我们的母公司强制Citrix加入我们。我希望它就像登录到错误的数据库一样简单。 – MKowalski

+0

对不起 - 我应该说“我公司的每个人都在使用PL/SQL多年。” – MKowalski

+1

甚至,“我公司的每个人都使用_PL/SQL Developer_多年。“ –

1

我能感觉到你的沮丧,对不起,你正在经历这个。然而,我很惊讶,在一家大公司,你的变更控制过程就是这样。我不为一家大型跨国公司工作,但对生产数据库所做的任何更改首先由管理层批准并由DBA(或您的案例,您的团队)运行。每个运行的脚本都会执行一些操作:

  1. 列出其连接到的数据库实例信息。例如:

    从v $ instance中选择host_name,instance_name,version,startup_time;

  2. 线轴输出到文件(数据库管理员通常使用sqlplus中,但我敢肯定,PL/SQL开发人员可以做同样的)

  3. 显示当前日期和时间(在开始和结束脚本)

  4. 输出文件被保存到变更控制服务器(目录结构可以很容易地为某个给定的实例和/或特定期限)对任何错误

  5. 退出任何改变:

    WHENEVER SQLERROR EXIT SQL。SQLCODE

  6. 需要运行后脚本的任何额外的检查(选择计数等)

  7. 显示正在运行的每个命令(组回波上),包括提交!

所有这一切都将允许您不仅验证脚本是否已成功运行,而且还允许您启用CYOA。也许你可以和你的团队讨论在你自己的环境中使用这些方法。希望有所帮助。

0

我无法知道我的问题是否已解决,但以下是我所做的: 1.我联系了我们公司的思杰团队,要求他们给我的团队提供几个实例PL/SQL打开。这已经完成,因此将消除对具有多个DB连接的一个实例的需要。 2.我联系了DBA,让他们删除我的旧配置文件,然后用新的用户名创建一个新配置文件。

到目前为止,我在这些新条件下运行的所有SQL都很好。但是,我无法重现我遇到的问题,所以我只是继续关注我的业务并希望获得最好的结果。

我应该从几个月后再找到我没有再次遇到这个问题,我会更新这个帖子,以防其他人遇到它。

谢谢大家对操作员错误的指责(截图证明这不是操作员错误,但为什么当我的同事指责我伪造屏幕截图时,您应该相信我)以及道义上的支持。