我得到的错误是“此行无法从套接字读取数据”
COALESCE( NonRewrite.SALES_LOG_DATE, SYSDATE) "SoldDate"
奇怪的是,我可以做NonRewrite.SALES_LOG_DATE
并且无论如何都没有空值。如果我单独做SYSDATE它会给我同样的错误。
如果我将SYSDATE
替换为TO_DATE('18-MAR-2016'))
,我就不会收到错误消息。
答案 0 :(得分:2)
"不再需要从套接字读取数据"是一个通用错误,并没有真正告诉你这个问题。这个错误意味着数据库进程崩溃如此之大,甚至没有引发正常的异常,并且连接意外死亡。
当发生这种情况时,Oracle会在警报日志中存储一条错误消息,您可以在此查询的路径中找到该消息:select value from v$parameter where name = 'background_dump_dest';
。查找名为alert * .log。
在该文件中,可能会在异常的同时出现ORA-600或ORA-7445错误。该错误通常有几个参数,例如ORA-00600: internal error code, arguments: [ktfbtgex-7], [1015817], [1024], [1015816], [], [], [], []
。
第一个参数通常是最重要的参数。如果你很幸运,你可以谷歌并找到答案。但通常您需要登录support.oracle.com并搜索该错误。有一个特殊的页面,搜索" ora-600工具"。这将打开一个页面来搜索错误消息的第一个参数。
希望该工具能够提供解释问题的具体文档。可能有补丁或变通方法,或者根本没有信息。通过避免某些特定的功能组合,可能通过稍微重写查询来解决问题通常是最容易的。
发布错误消息,确切的Oracle版本和整个查询,有人可能会提供帮助。如果查询很大,您会想尽可能地缩小它。缩小查询并生成可重现的测试用例可能需要几个小时,但是必须真正理解问题。那些不花时间做这件事的人通常最终会避免重要的功能,并给其他开发者提供不好的建议,例如"避免使用SYSDATE!"。
这些类型的错误可能需要很长时间才能解决。