云主机_rust云服务器_便宜的

安全 虚拟云 浏览

小编:每个人都喜欢光标。每个人都使用光标。并不是每个人都有足够的好奇心来不时检查光标世界在ASE中的新情况。这可能会导致有趣的事情在ASE开发人员的专业世界中流传。 有一天,我

云主机_rust云服务器_便宜的

每个人都喜欢光标。每个人都使用光标。并不是每个人都有足够的好奇心来不时检查光标世界在ASE中的新情况。这可能会导致有趣的事情在ASE开发人员的专业世界中流传。

有一天,数据云分析,我遇到了来自开发人员世界的不愉快信息:

Msg 582,级别16,状态3:

服务器{Server NAME},第1行:

游标{Cursor NAME}隐式关闭,因为当前游标位置由于更新或删除而被删除。

无法恢复游标扫描位置。这种情况发生在引用多个表的游标上。

这不是一条令人愉快的消息。服务器已经关闭了你的游标,因为它发现它的结果集被篡改了。

这个消息出现在ASE16/15.7中,品牌云服务器,实际上这种情况并不是什么新情况。如果我的记忆没有失败,早期的版本对这种情况更加"宽容"。他们只是继续执行代码,跳过行,做上帝知道的事情。只有当你有幸能够捕捉到这种情况时,你可能已经感觉到你的代码流有问题。否则你只是在不知不觉中不断产生坏数据。

所以,首先,感谢SAP工程师关闭我的游标。这是一条好消息,不是一条坏消息。这条消息意味着我写的代码很糟糕。有一点。不过,更有趣的是,在这种情况下,开发人员(或DBA)通常会去google或KBAing,如果他们幸运的话,他们找到了一些解决方法。

正如这条消息所发生的,好奇的人有一个"幸运"的数字——SAP Note 2017460(我是否应该说"人人都爱SAP notes"来补充我的"人人都爱光标"…只是沉思一下)。KBA对这种情况进行了简短的复制,并得出了一个整洁的解决方法。我将跳过复制(您可以在这里找到:https://websmp230.sap-ag.de/sap(bD1lbiZjPTAwMQ==)/bc/bsp/sno/ui\u条目/entry.htm?param=69765F6D6F64653D3030312669765F7361…),中国云数据库,跳转到幸运的解决方法:

分辨率

在光标中使用"order by"或"distinct"宣布。他们使ASE优化器使用工作桌子。那个是的,光标位置放在工作台上,避免了错误582.

等一下…工作吗?订货人?与众不同?嗯。那可能管用。但这是处理这种情况的正确方法吗?我们说的是哪个版本?

是的。我不知道谁负责这个KBA,但这是一个非常奇怪的方式与光标接触。

自从ASE15.0新类型的光标被引入:可滚动光标。虽然光标的可滚动性质在这种情况下是没有帮助的(可滚动实际上并不意味着你可以在屏幕上走来走去)但您可以获取多行(包括使用绝对定位)。不幸的是,当这个新功能进入ASE时,另一个已经添加的功能并没有得到同样的焦点——这只是顺便提到的。可滚动光标可能是"不敏感"或"半敏感"的,或者正如NFG当时所说:

"不敏感"或"半敏感"是指从光标外部的数据变化对光标可见的程度。光标可以是半敏感的,但不能滚动

对我来说,人们的注意力肯定是颠倒过来了。很少有人使用滚动光标功能。有些人肯定会这样做——否则它就没有被作为NF引入。但所有人都被光标的怪异错误行为所困扰,这些行为有时根本不做他们应该做的。至少在新版本中,这种恶劣的情况被服务器本身和游标已关闭,发布错误。

返回KBA。对于那些使用ASE15.0和更高版本的用户来说,处理582错误的方法不是人为地调整优化器的访问计划和排序数据,以便服务器创建一个工作表并将光标数据放入其中。正确的处理方法是简单地将光标声明为"不敏感"。我是非常惊讶的是,这还没有被放入KBA中(KBA在发布之前不应该被人检查吗?)。

现在,KBA中提出的解决方案似乎有一个警告。不敏感的游标是…。只读的。让我们检查这个:

声明cru-INS不敏感的游标为select name,suid from master..syslogins for update of name

Msg 7301,Level 15,State 1:

for update被错误地指定为只读游标

Hm。不好。好吧,好吧。我明白了。傻了。让我们回到KBA解决方法:

声明cru-INS游标选择名称,租用云服务器,suid从主..syslogins order by suid更新名称

Msg 7301,级别15,状态1:

for update被错误地指定为只读游标

我的观点到此为止。order by并不是简单地欺骗优化器。它改变了一堆其他的东西。

在所说的KBA中有两个东西被省略了我想强调:

1.如果你面对味精。582情况请重新声明你的游标是不敏感的。我想说选择这个选项作为一个"最佳实践"-未来更少的重构。不要实现KBA建议。它不知道ASE中游标的演变。我真的很想看到它在将来被删除。糟糕的编码实践。负面的性能影响。不应该在上KBA.

2.请记住,不敏感的游标是只读的(不管它们是定义为不敏感的,还是通过某些调整变为不敏感的–文档中有一个关于如何将游标变为只读的列表–order by在该列表中)。

当前网址:http://vmchk.cooou.com/theory/101223.html

 
你可能喜欢的: