Главная страница | назад





Article #19507: Oracle database link, cursor, ORA-03106: fatal two-task communication protocol error

 Question and Answer Database

     FAQ: FAQ4507B - Oracle database link, cursor, ORA-03106: fatal two-task communication protocol error
Category: Database (Oracle)
Platform: All-32Bit
 Product: All-CBuilder,   BC++5.x,   C++Builder1.0,   C++Builder3.x,   C++Builder4.x,   Delphi2.x,   Delphi3.x,   Delphi4.x,   VdBase7.x,   

Question:

Why am I receiving the Oracle error ORA-03106: "fatal two-task 
communication protocol error" when using an Oracle database link
and Oracle cursors?



Answer:

SQL> print rc1
ERROR:
ORA-03106: fatal two-task communication protocol error
ORA-02063: preceding line from MARSLNK

As indicated in the SQL Plus output above this problem can be 
reproduced without using the BDE and/or BDE clients (Delphi, 
BCB, etc.).

The example SQL Plus output shows examples show the creation 
of an Oracle database link, synonym, stored procedure, package, 
package body, along with the execution and "printing" of the 
Oracle cursor data.


===========================

create public database link MARSLNK using 'srvr_tcp.borland.world'


===========================
EXECUTE PROCEDURE AND FETCH DATA FROM CURSORS VIA SQL*PLUS:

variable rctl refcursor;
execute cursortest_4(:rctl);

print rctl



variable rc1 refcursor;
execute cursortest_2(:rc1);

print rc1


===========================

create or replace procedure cursortest_4 (rc1 in out DMOD.rctl) AS

begin

open rc1 for

SELECT CUSTOMER_N, NAME

FROM IDXCUSTM

ORDER BY UPPER(NAME);

end;

===========================
create or replace procedure cursortest_2

(rc1 in out cursorpack.rctl) AS

begin

open rc1 for

SELECT *

FROM IDXCUSTM;

end;

===========================

create or replace package cursorpack IS

type rctl is ref cursor return IDXCUSTM%rowtype;

end;

===========================

create or replace PACKAGE DMOD

IS

type rctl is ref cursor;

end;

===========================

Log in to the Oracle server as the administrator to create the 
public database link:


SQL*Plus: Release 3.3.4.0.0 - Production on Thu Oct 22 16:36:15 1998

Copyright (c) Oracle Corporation 1979, 1996.  All rights reserved.


Connected to:
Oracle7 Server Release 7.3.4.0.0 - Production
With the distributed, replication and parallel query options
PL/SQL Release 2.3.4.0.0 - Production

SQL> CREATE PUBLIC DATABASE LINK MARSLNK USING 'srvr_tcp.borland.world';

Database link created.


===========================
Log into the Oracle server as user to create the synonym, packages 
and  procedures followed by execution of the procedures and 
printing/fetching the cursor rows:


SQL*Plus: Release 3.3.4.0.0 - Production on Thu Oct 22 16:40:35 1998

Copyright (c) Oracle Corporation 1979, 1996.  All rights reserved.


Connected to:
Oracle7 Server Release 7.3.4.0.0 - Production
With the distributed, replication and parallel query options
PL/SQL Release 2.3.4.0.0 - Production

SQL> CREATE SYNONYM IDXCUSTM FOR IDXCUST@MARSLNK;

Synonym created.

SQL> create or replace PACKAGE DMOD
  2  
  2  IS
  3  
  3  type rctl is ref cursor;
  4  
  4  end;
  5  /

Package created.

SQL> create or replace package cursorpack IS
  2  
  2  type rctl is ref cursor return IDXCUSTM%rowtype;
  3  
  3  end;
  4  /

Package created.

SQL> create or replace procedure cursortest_2
  2  
  2  (rc1 in out cursorpack.rctl) AS
  3  
  3  begin
  4  
  4  open rc1 for
  5  
  5  SELECT *
  6  
  6  FROM IDXCUSTM;
  7  
  7  end;
  8  /

Procedure created.

SQL> create or replace procedure cursortest_4 (rc1 in out DMOD.rctl) AS
  2  
  2  begin
  3  
  3  open rc1 for
  4  
  4  SELECT CUSTOMER_N, NAME
  5  
  5  FROM IDXCUSTM
  6  
  6  ORDER BY UPPER(NAME);
  7  
  7  end;
  8  /

Procedure created.

SQL> variable rctl refcursor;
SQL> execute cursortest_4(:rctl);

PL/SQL procedure successfully completed.

SQL> print rctl
ERROR:
ORA-03106: fatal two-task communication protocol error
ORA-02063: preceding line from MARSLNK



no rows selected

SQL> variable rc1 refcursor;
SQL> execute cursortest_2(:rc1);

PL/SQL procedure successfully completed.

SQL> print rc1
ERROR:
ORA-03106: fatal two-task communication protocol error
ORA-02063: preceding line from MARSLNK



no rows selected

SQL> 

7/13/99 10:49:35 AM
 

Last Modified: 01-SEP-99