oracle 在通信通道上收到错误 ORA-03111 中断
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/29960380/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Error ORA-03111 break received on communication channel
提问by Hayu Rahiza
I've got error ORA-03111 Break received on communication channel after change from oracle 11g to oracle 10g R1 at different server.
在不同服务器上从 oracle 11g 更改为 oracle 10g R1 后,我在通信信道上收到错误 ORA-03111 Break。
I use DotNet framework 4.5.
我使用 DotNet 框架 4.5。
I have google around but didnt find any solution.
我有谷歌,但没有找到任何解决方案。
采纳答案by Coxy
In my case (getting the exception on connection.Open()
) the problem turned out to be that the Oracle server was too old a version to use the Managed Provider.
在我的情况下(获得异常connection.Open()
),问题原来是 Oracle 服务器的版本太旧,无法使用托管提供程序。
According to: https://community.oracle.com/thread/2528641
根据:https: //community.oracle.com/thread/2528641
ODP.NET, Managed Driver supports connecting to Oracle DB server 10.2 or higher. It does not support DB 10.1.
ODP.NET, Managed Driver 支持连接到 Oracle DB 服务器 10.2 或更高版本。它不支持 DB 10.1。
回答by Martin ?rding-Thomsen
In my case the reason was that input to the NVL function returned more than one row - the blabla subquery in the following:
在我的例子中,原因是 NVL 函数的输入返回了不止一行——blabla 子查询如下:
PROCEDURE my_procedure(c_my_cursor OUT SYS_REFCURSOR) IS
p_my_cursor SYS_REFCURSOR;
BEGIN
OPEN p_my_cursor FOR
select nvl((select blabla), 0) my_column from my_table;
c_my_cursor := p_my_cursor;
END smiley_alle_jurenheder;
Interestingly enough, when running the query directly in SQL Developer, the correct error code is returned - "ORA-01427: single-row subquery returns more than one row".
有趣的是,当直接在 SQL Developer 中运行查询时,会返回正确的错误代码——“ORA-01427:单行子查询返回多于一行”。
回答by André Sobreiro
My problem was a missing column on the database. It was created in another environment. It was hard to find the real problem cause this error dont tell us nothing.
我的问题是数据库中缺少一列。它是在另一个环境中创建的。很难找到真正的问题,因为这个错误并没有告诉我们什么。
While debugging in other computer, the real problem appeared.
在其他电脑上调试时,真正的问题出现了。
Hope this help someone.
希望这有助于某人。
回答by Theo
Since this is the first Google hit when searching for this error, guess I'll add my solution as well. This error seems to crop up for all sorts of reasons which makes it really hard to troubleshoot.
由于这是搜索此错误时的第一个 Google 命中,因此我想我也会添加我的解决方案。由于各种原因,此错误似乎突然出现,这使得故障排除非常困难。
I ran into it while building an application which runs on both MSSQL and Oracle. Upon startup it creates a simple table. To prevent errors, any existing table is dropped. This multi-line, multi-command script runs fine on MSSQL but its Oracle equivalent kept returning this error.
我在构建一个在 MSSQL 和 Oracle 上运行的应用程序时遇到了它。启动时,它会创建一个简单的表。为防止错误,删除任何现有表。这个多行、多命令的脚本在 MSSQL 上运行良好,但它的 Oracle 等价物不断返回此错误。
I finally solved it when I ran the commands (drop, create table, create sequence) one by one. Also, look out for the semicolon (;) as leaving that in a DDL statement also gave the ORA-03111 error.
当我一一运行命令(drop、create table、create sequence)时,我终于解决了。此外,请注意分号 (;),因为将其留在 DDL 语句中也会出现 ORA-03111 错误。
In retrospect, I knew that running multiple commands in one go was troublesome in Oracle, but this error is just plain useless to those not initated in Oracle's arcane ways.
回想起来,我知道一次运行多个命令在 Oracle 中很麻烦,但是这个错误对于那些不是以 Oracle 的神秘方式启动的人来说毫无用处。