ORA-02046:distributed transaction already begun

Hi!
I have a serious problem in my j2ee application. The description of the situation :
1)There is a PL/SQL procedure in the local database which calls a remote procedure (which is in a different database). The remote procedure then updates certain tables in that remote database.
2)In most cases it all works just fine. But after some time i keep getting ORA-02046 errors in the logfile.
Is it somehow related to the fact that Oracle uses two phase committing?

Are you using connection pooling?
if you do, what happens if you disable connection pooling?

Similar Messages

  • Problem with ORA-02046: distributed transaction already begun

    I can use db link from the source machine but not the vice versa, throws ORA-02046. I restarted Oracle, rebooted the
    machine, yet ORA-02046 persists. No entries in dba_2pc_pending in any (target, db-linking) machines. Can anybody suggest how
    can I resolve this issue? It is eating out our production time.
    Thanks in advance,

    I had already checked the link, Thanks.
    I bounced Oracle in the suspicious (one that was doubted to have started the distributed transaction) machine, then it resolved the issue.
    Thanks

  • Distributed transaction already begun

    Hi,
    i'm working in 8.1.7. I needed to build a query over a view with hierarchical query and as i cannot do this in my base, i build the view in a remote 9.1 database.
    then i retrieve info in the 8i. In sql*plus i can execute the view as many times as i need and no problem but i'm using the 8i as the base for an web application (with asp and iis 5 as server) and all my users are getting ORA-02046 randomly but with high frequency everytime they use the view. The webmaster told me he's connecting to send a query and once it executed, he closes the connection so i cannot see which transaction is blocking the view.
    Any help will be much appreciated.
    Regards.-

    it seems like a little bug:
    ORA-02046 distributed transaction already begun
    Cause: This is an internal error not normally encountered. A server session received a BEGIN_TRAN remote procedure call before finishing with a previous distributed transaction.
    Action: Contact Oracle Support Services.
    Joel P�rez

  • ORA-02046 Transaction Already Begun, NET

    I am developing a .NET Web application using C# with ODP.NET.
    The web application accesses a package created in Oracle 8i. The stored procedures that it contains access data through a dblink to a Oracle 9i database. The first time the web application acceses any of the stored procedures, the searches return data, but the second time I try, I get ORA-02046 (transaction already begun). Each procedure are constructed like the following example:
    Procedure sp_SUB_ReciboporPoliza(policynum IN varchar2,sptonum in varchar2,
    io_cursor IN OUT t_cursor) as
    begin
    OPEN io_cursor FOR
    select * from SYN_SUB_RECIBOPOLIZA
    where
    num_poliza = policynum
    and num_spto in(sptonum);
    commit;
    end sp_SUB_ReciboporPoliza;
    where io_cursor is a REF_CURSOR in the package and SYN_SUB_RECIBOPOLIZA is a synonim for a query in Oracle 9i. I have search a solution for this and all that I have found is that any query made through a dblink automatically starts a distributed transaction. In the connection string I have added the parameter Enlist=false so it does not start any distributed transactions but it does not work.
    I added a COMMIT to the end of each query so it could close the transaction (didn't work either).
    I verified that the .NET classes I created for the project, they memory references where released ...but still the problem remains.
    If any of you have been in the very same situation or have any suggestions, I will greatly appreciate your help.
    Efrain

    I have run into almost the exact same problem when trying to build reports with SQL Server Reporting Services (SSRS) in VS2005. I get that ora-02046 error when running the report through VS or from the reporting web server. The report calls a proc which I can run again and again in Toad with no problem.
    My workaround:
    It appears that the problem is related to using a table that is linked over two servers in the proc. I have been able to mostly avoid the problem by changing the proc to isolate that table in a separate query that inserts rows into a temp table. Then join to the temp table in the main query.

  • Works in sql not in apex: ORA-02049 distributed transaction waiting lock

    Hi,
    I get this error
    failed to parse SQL query:
    ORA-02049: timeout: distributed transaction waiting for lockwhen trying to run this query from it's page. But it works fine if I run it in the SQL console...
    failed to parse SQL query:
    ORA-select distinct n.notif_no,
           n.maint_work_centre,
           n.maint_work_centre_text,
           n.raised_by,
           n.notif_text,
           (select  (SAP_LONG_TEXT.NOTIFICATION_TEXT_1||SAP_LONG_TEXT.NOTIFICATION_TEXT_2||SAP_LONG_TEXT.NOTIFICATION_TEXT_3||SAP_LONG_TEXT.NOTIFICATION_TEXT_4||SAP_LONG_TEXT.NOTIFICATION_TEXT_5||SAP_LONG_TEXT.NOTIFICATION_TEXT_6||SAP_LONG_TEXT.NOTIFICATION_TEXT_7||SAP_LONG_TEXT.NOTIFICATION_TEXT_8||SAP_LONG_TEXT.NOTIFICATION_TEXT_9||SAP_LONG_TEXT.NOTIFICATION_TEXT_10||SAP_LONG_TEXT.NOTIFICATION_TEXT_11||SAP_LONG_TEXT.NOTIFICATION_TEXT_12||SAP_LONG_TEXT.NOTIFICATION_TEXT_13||SAP_LONG_TEXT.NOTIFICATION_TEXT_14||SAP_LONG_TEXT.NOTIFICATION_TEXT_15||SAP_LONG_TEXT.NOTIFICATION_TEXT_16||SAP_LONG_TEXT.NOTIFICATION_TEXT_17||SAP_LONG_TEXT.NOTIFICATION_TEXT_18||SAP_LONG_TEXT.NOTIFICATION_TEXT_19||SAP_LONG_TEXT.NOTIFICATION_TEXT_20||SAP_LONG_TEXT.NOTIFICATION_TEXT_21||SAP_LONG_TEXT.NOTIFICATION_TEXT_22||SAP_LONG_TEXT.NOTIFICATION_TEXT_23||SAP_LONG_TEXT.NOTIFICATION_TEXT_24||SAP_LONG_TEXT.NOTIFICATION_TEXT_25||SAP_LONG_TEXT.NOTIFICATION_TEXT_26||SAP_LONG_TEXT.NOTIFICATION_TEXT_27||SAP_LONG_TEXT.NOTIFICATION_TEXT_28||SAP_LONG_TEXT.NOTIFICATION_TEXT_29||SAP_LONG_TEXT.NOTIFICATION_TEXT_30||SAP_LONG_TEXT.NOTIFICATION_TEXT_31||SAP_LONG_TEXT.NOTIFICATION_TEXT_32||SAP_LONG_TEXT.NOTIFICATION_TEXT_33||SAP_LONG_TEXT.NOTIFICATION_TEXT_34||SAP_LONG_TEXT.NOTIFICATION_TEXT_35||SAP_LONG_TEXT.NOTIFICATION_TEXT_36||SAP_LONG_TEXT.NOTIFICATION_TEXT_37||SAP_LONG_TEXT.NOTIFICATION_TEXT_38||SAP_LONG_TEXT.NOTIFICATION_TEXT_39||SAP_LONG_TEXT.NOTIFICATION_TEXT_40||SAP_LONG_TEXT.NOTIFICATION_TEXT_41||SAP_LONG_TEXT.NOTIFICATION_TEXT_42||SAP_LONG_TEXT.NOTIFICATION_TEXT_43||SAP_LONG_TEXT.NOTIFICATION_TEXT_44||SAP_LONG_TEXT.NOTIFICATION_TEXT_45||SAP_LONG_TEXT.NOTIFICATION_TEXT_46||SAP_LONG_TEXT.NOTIFICATION_TEXT_47||SAP_LONG_TEXT.NOTIFICATION_TEXT_48||SAP_LONG_TEXT.NOTIFICATION_TEXT_49||SAP_LONG_TEXT.NOTIFICATION_TEXT_50) from sap_long_text@genadm where sap_long_text.notification = n.notif_no) "long",
           n.notif_date,
           n.funct_loc,
           n.order_no,
           n.notif_status,
           n.room,
           n.notif_type
    from   notifications@amt n, SAP_LONG_TEXT@genadm
    where  instr(':'||:P9_NOTIFTYPE||':',':'||n.NOTIF_TYPE||':')>0 and
           instr (':'||:P9_SITE||':',':'||n.site||':') > 0 and
           n.notif_date BETWEEN :P9_DATEFROM and :P9_DATETO and
           n.notif_status not like '%NOCO%'I've had this error before but I don't remember why/what happened. The page has been working fine, the error just randomly cropped up today.
    And a secondary question, is there a better way to write the query (it's a copy/paste from an older query). That select within the select is ugly...

    Hello,
    Take a look at the following thread -
    help ORA-02049
    Is it really necessary that you always query across the DBLink? Is using local materialized views not an option for you?
    John.
    http://jes.blogs.shellprompt.net
    http://apex-evangelists.com

  • ORA-02046

    Hi all,
    My SAP application is running a transaction on 10.2.0.4 and tries to perform some operation on a remote database 9.2.0.6 and returns the error message. Previously, application was running fine and just started giving this error message.
    ORA-02046 distributed transaction already begun.
    Same application if runs on a 9.2.0.6 database and performs same operation on remote 9.2.0.6 database, it runs fine.
    Any clue?
    Thanks
    Salman

    check dba_2pc_pending, there may be entries in there.
    It will be rather advisable to get in touch with Oracle support for this.

  • ORA-00164 Autonomous and Distributed Transactions in Oracle 8i - Forms6i

    Hi, in Forms6i I'm using Autonomous transactions (insert and update), and I want to use also a database link to make a query in a remote database (Distributed transaction). Even when this request are done in different PL/SQL within Forms6i, I get the error message ORA-00164 Distributed transactions disallowed within autonomous transactions. Is there a way to avoid this error message?
    Thanx

    Hello,
    I had a similar Problem, when I tried to log errormessages while selecting by db-link.
    I use pipes now to send the errormessages. The pipe is read at regular intervals and then I can Insert without using autonomous transactions.
    I hope, this will help you
    Marcus

  • ORA-01591: lock held by in-doubt distributed transaction 2.53.300807

    SQL> select count(*) from TBCD_CCODMSG;
    select count(*) from TBCD_CCODMSG
    ERROR at line 1:
    ORA-01591: lock held by in-doubt distributed transaction 2.53.300807
    SQL> select * from TBCD_CCODMSG where rownum =10;
    select * from TBCD_CCODMSG where rownum =10
    ERROR at line 1:
    ORA-01591: lock held by in-doubt distributed transaction 2.53.300807
    SQL> alter session set events '1591 trace name errorstack level 10';
    Session altered.
    SQL> select * from TBCD_CCODMSG where rownum =10;
    select * from TBCD_CCODMSG where rownum =10
    ERROR at line 1:
    ORA-01591: lock held by in-doubt distributed transaction 2.53.300807
    SQL> select object_name, object_type from user_objects where object_name = 'TBCD_CCODMSG';
    OBJECT_NAME
    OBJECT_TYPE
    TBCD_CCODMSG
    TABLE
    SQL> select * from DBA_2PC_PENDING;
    no rows selected
    SQL> select * from DBA_2PC_NEIGHBORS where local_tran_id = '2.53.300807';
    LOCAL_TRAN_ID IN_
    DATABASE
    DBUSER_OWNER I DBID SESS#
    BRANCH
    2.53.300807 in
    EFT.WORLD
    CD1 N 15f1353d 1
    0B000B00011902000128

    보통은 오라클 Background 프로세스인 RECO 프로세스가
    해당 문제를 자동으로 복구해줍니다.
    하지만, 가끔씩 제대로 처리를 못해주는 경우는 DBA 가 아래 절차를 확인하여
    수동으로 처리를 해줘야 하는 경우도 있습니다.
    아래 내용을 참고하세요...
    No. 12163
    DISTRIBUTED TRANSACTION TROUBLESHOOTING (ORA-1591해결 방법)
    ==========================================================
    다른 database를 이용하지 않는 local transaction이, 비정상 종료시 자동으로
    rollback되는 것과는 달리, 분산 트랜잭션의 경우 2 phase commit수행 단계중에
    fail이 발생하게 되면 관여된 일부 database에서는 rollback 혹은 commit이 되고,
    일부는 distributed lock이 걸린 상태로 계속 지속될 수 있다.
    이렇게 pending된 transaction에 대해서는 기본적으로 Oracle의 background
    process인 RECO process가 자동으로 정리하여 주나, 경우에 따라 자동으로 정리가
    되지 못하는 상황이 발생할 수 있다.
    이렇게 정리가 되지 않아, distributed lock이 걸린 경우에는, 이후 관계된
    table을 조회나 변경시 ora-1591 오류가 발생할 수 있으므로, distributed
    transaction이 실패한 경우 db admin이 관여하여 pending된 transaction을
    정리하여 줄 필요가 있다.
    distributed transaction이 오류가 발생하거나, 혹은 이후에 ora-1591이 발생하는
    경우, 조치 방법을 9단계의 STEP으로 정리하였다.
    *** distributed transaction의 2 phase commit에 대한 개념 및 자세한 절차는
    <korean bulletin:12185>를 참조한다.
    [참고 1] 문서의 이해를 위해서 분산 환경에 포함된 node를 V817LOC와 V817REM으로
    예를 들고, V817LOC node에서 transaction을 수행하였다고 가정한다.
    [참고 2] 아래에 언급되는 dbms_transaction package는 기본적으로 catproc.sql
    script에 의해 생성되나 만약 존재하지 않는다면,
    cd $ORACLE_HOME/rdbms/admin directory의 dbmsutil.sql, prvtutil.plb
    script를 sys user에서 수행하도록 한다.
    (svrmgrl에서 connect internal에서 수행하는것이 일반적)
    그리고 이 package는 항상 transaction의 맨 처음에 수행되어야 한다.
    즉, 새로 session을 연결하여 수행하거나, 혹은 앞에 dml에 있었다면,
    commit이나 rollback을 수행 후 이 package를 수행하여야 한다.
    아래의 STEP중 STEP 1 ~ 3까지는 문제 해결을 위해 필수적인 단계는 아니므로 바로
    문제를 시급히 해결해야 하는 경우 4번부터 확인하도록 한다.
    STEP 1: alert.log file을 check한다.
    bdump directory의 alert.log에는 분산 트랜잭션 fail시 관계된 오류 메시지등
    log가 항상 남게 된다. 예를 들면 다음과 같은 형태인데, rollback/commit되었
    는지, in-doubt 상태인지와 그 외에 transaction id등 정보를 확인할 수 있다.
    Tue Dec 12 16:23:25 2000
    ORA-02054: transaction 1.8.238 in-doubt
    ORA-02063: preceding line from V817REM
    Tue Dec 12 16:23:25 2000
    DISTRIB TRAN V817LOC.WORLD.89f6eafb.1.8.238
    is local tran 1.8.238 (hex=01.08.ee)
    insert pending prepared tran, scn=194671 (hex=0.0002f86f)
    STEP 2: network 환경을 확인한다.
    listener가 떠 있는지, database link가 모두 정상적인지 확인해 본다.
    STEP 3: RECO process가 떠 있는지 확인한다.
    os상에서 RECO process가 떠 있는지 확인하려면 다음과 같이 한다.
    os> ps -ef | grep reco
    RECO process는 db가 startup되면서 자동으로 구동되는 background process로
    distributed recovery를 disable시키면 사라지게 된다. distributed recovery를
    enable/disable시키는 방법은 아래와 같다.
    SQL>alter system enable distributed recovery;
    SQL>alter system disable distributed recovery;
    아래의 조치사항 중에서 STEP 9번을 제외하고는 기본적으로 RECO process가
    자동으로 처리하는 작업과 동일하다. 그러나 여러가지 문제로 인해 RECO가
    자동으로 정리하지 못한 경우 이 문서의 방법대로 manual하게 정리하여 주어야
    한다.
    STEP 4: DBA_2PC_PENDING을 조회해 본다.
    sqlplus system/manager
    SQL>select local_tran_id, global_tran_id, state, mixed, host, commit#
    from dba_2pc_pending;
    다음과 같은 결과가 return된다.
    LOCAL_TRAN_ID|GLOBAL_TRAN_ID |STATE |MIX|HOST |COMMIT#
    -------------|----------------------|--------|---|----------|--------
    1.8.238 |V817LOC.WORLD.89f6eafb|prepared|no |SUP_SERVER|194671
    |.1.8.238 | | |\eykim |
    이 조회로 인해 여러개의 row가 나오는 경우 ora-1591이나 distributed fail에
    관련된 오류시 나타나는 local transaction id값과 return된 LOCAL_TRAN_ID값을
    비교하여 일치하는 row를 확인하면 된다. 이때 LOCAL_TRAN_ID 값과
    GLOBAL_TRAN_ID의 뒷부분의 숫자가 동일하다면 이것은 이 node가 global
    coordinator임을 의미한다.
    STEP 5: DBA_2PC_NEIGHBORS view를 조회해 본다.
    sqlplus system/manager
    SQL>select local_id, in_out, database, dbuser_owner, interface
    from dba_2pc_neighbors;
    LOCAL_TRAN_ID|IN_OUT|DATABASE |DBUSER_OWNER |INT
    -------------|------|-------------------------|---------------|---
    1.8.238 |in | |SCOTT |N
    1.8.238 |out |V817REM.WORLD |SCOTT |C
    여기에 나타난 row들이 해당 분산 트랜잭션에 관여한 database 정보이다. 이때
    DATABASE column 부분이 null로 나타나는 것은 현재 조회하고 있는 local
    database를 의미하며, IN_OUT이 OUT으로 나타나는 경우 참조하는 node정보인데,
    DATABASE 컬럼의 값이 해당 database를 가리키는 database link name이 된다.
    이 database link name을 이용하여 다음과 같이 remote db의 DBA_2PC_PENDING을
    다시 조사하여 관계된 node들의 상태를 확인할 수 있다.
    SQL>select local_tran_id, global_tran_id, state, mixed, host, commit#
    from dba_2pc_pending@v817rem;
    각 node의 DBA_2PC_PENDING의 return된 row들이 같은 분산 트랜잭션에 포함된
    정보인지는 GLOBAL_TRAN_ID 값을 이용하여 확인할 수 있다.
    STEP 6: commit point site를 확인한다.
    commit point site에 대해서는 <korean bulletin:12185>을 참조한다.
    이 예의 경우 COMMIT_POINT_STRENGTH를 지정하지 않았기 때문에 default로
    global coordinator가 아닌 V817REM이 commit point site가 된다. 일반적으로
    commit point site는 global coordinator의 DBA_2PC_NEIGHBORS의 IN_OUT
    field가 OUT으로 나타나고 INTERFACE 부분이 C로 나타나게 된다.
    commit point site가 중요한 이유는 이 node의 local transaction부분은
    prepared상태를 거치지 않아 in-doubt 상태가 되는 일이 없고, 그러므로
    distributed lock에 의해 조회나 DML시 오류가 발생하는 없게 된다.
    이러한 이유로 제일 중요한 data를 포함하는 중심이 되는 node를 commit point
    site로 지정하는 것이 바람직하다.
    STEP 7: DBA_2PC_PENDING의 MIXED column을 확인한다.
    - MIXED값이 NO인 경우 : STEP 8 수행
    - MIXED값이 YES인 경우: STEP 9 수행
    DBA_2PC_PENDING에서 MIXED column을 YES나 NO의 값으로 지정하는 것은 RECO
    process가 결정하여 변경하게 된다. MIXED가 YES가 되는 대표적인 경우는,
    commit point site가 이미 commit을 수행한 상태에서 분산 트랜잭션이 fail된
    경우, non-commit point site에서 prepared 상태의 transaction을 rollback
    force시켜 분산 트랜잭션의 consistency가 깨진 상태이다.
    (STATE column의 경우 commit point site는 COMMITTED로 non-commit point
    site는 FORCED ROLLBACK으로 나타난다)
    [참고] commit point site가 아직 commit을 수행하기 전에 분산 트랜잭션이
    fail되어 commit point site가 rollback된 경우, non-commit point
    site에서 prepared 상태의 transaction을 commit force 하면 이것도
    논리적으로는 consistency가 지켜지지 않은 것은 동일하나 이때는
    MIXED column이 no인 상태가 된다. 그 이유는 commit point site가
    rollback되어 DBA_2PC_PENDING view에 entry가 남지 않기 때문에
    RECO가 명시적으로 mixed 상태로 인식하는 것이 불가능하기 때문으로
    파악된다.
    STEP 8: DBA_2PC_PENDING의 STATE column의 값을 확인한다.
    CASE 8-1: STATE field값이 COMMITTED인 경우
    만약 STATE가 COMMITTED인 경우는 이 local database(V817LOC)에서는
    transaction이 성공적으로 commit 되었음을 나타내므로, 이 node에서는 어떠한
    작업도 수행할 필요가 없다. 이 entry는 RECO process에 의해 자동으로 지워질
    것이며, 만약 RECO가 어떠한 이유로 이 row를 지우지 못했다면 다음과 같이
    db admin이 직접 지워도 된다. 괄호 안의 값은 local_tran_id값이다.
    sqlplus sys/manager (반드시 sys로 접속한다)
    SQL>exec dbms_transaction.purge_lost_db_entry('1.8.238');
    이렇게 V817LOC의 STATE부분이 COMMITTED인 경우는, 이미 commit point site인
    V817REM은 commit된 후임을 나타낸다. 그러므로 V817REM은 STATE가 COMMITTED로
    나타나거나 아니면 commit후 이미 정보가 지워져 DBA_2PC_PENDING에 정보가
    나타나지 않을 수 있다. 그러므로 V817REM에 대해서는 필요한 경우 V817LOC의
    앞의 조치 방법과 동일하게 DBA_2PC_PENDING의 내용만 정리하여 주면 된다.
    만약 V817REM이 아닌 별도의 다른 node가 분산 트랜잭션에 관여했다고 가정하고
    V817LOC가 COMMITTED인 상태에서 그 node의 STATE가 PREPARED로 나타난다면
    그 node에 대해서는 아래의 CASE 8-2를 참조하여 해결하도록 한다.
    CASE 8-2: STATE field값이 PREPARED인 경우
    STATE값이 PREPARED인 경우는 이 node(V817LOC)에서 변경된 data가 속한 block
    에 distributed lock이 걸린 상태이며, 이런 경우 변경된 data가 있는 block에
    대한 모든 read/write가 ora-1591을 발생시키므로 trouble shooting에서 제일
    중요한 부분이라 할 수 있다.
    먼저 STEP 4와 STEP 5를 참조하여 관계된 모든 node들의 DBA_2PC_PENDING view
    를 조회하여 본다. 이때 다른 node(V817REM)의 DBA_2PC_PENDING에 정보가 없다
    면 V817REM이 commit point site이고 이미 data는 rollback되었음을 나타낸다.
    이때는 V817LOC의 prepared 상태의 transaction을 다음과 rollback force 시켜
    준다.
    즉, V817LOC에서,
    SQL>rollback force '1.8.238';
    만약 V817REM node에 해당 정보가 있고 상태가 COMMITTED라면 V817LOC도
    다음과 같이 commit을 해 주어야 한다.
    SQL>commit force '1.8.238';
    이때 local_tran_id 뒤에 SCN을 지정할 수 있는데 이것은 관여된 node 중 제일
    큰 SCN을 지정하도록 한다. 이 SCN 값은 DBA_2PC_PENDING의 COMMIT# field에서
    값을 확인할 수 있으며 이렇게 하는 이유는 이후 분산 database중 한 database
    에서 incomplete recovery가 필요한 경우, 다른 database 들도 일관성을
    맞추기 위해 incomplete recovery를 이용할 수 있게 하기 위한 것이다.
    SQL>commit force '1.8.238', '194671'
    CASE 8-3: STATE field값이 COLLECTING인 경우
    STATE field가 collecting인 경우는 아직 distributed lock을 걸기 전단계에서
    transaction이 비정상 종료됨을 나타내며, 이 단계에서는 distributed lock이
    걸리기 전이어서 변경된 data는 이미 rollback된 상태이다. 이 경우는
    DBA_2PC_PENDING에서 해당 entry를 지워 주면 된다.
    sqlplus sys/manager (반드시 sys로 접속한다)
    SQL>exec dbms_transaction.purge_lost_db_entry('1.8.238');
    CASE 8-4: STATE field값이 FORCED ROLLBACK/FORCED COMMIT 인 경우
    이미 RECO나 db admin이 rollback force나 commit force 명령을 시도하여
    STATE가 FORCED ROLLBACK이나 FORCED COMMIT으로 변경된 경우는 추가적으로
    수행할 작업은 없으며, RECO가 자동으로 이 entry를 지워 줄 것이다. 그러나
    RECO가 작업하기를 기다리지 않고 다음과 같이 직접 삭제할 수 있다.
    sqlplus sys/manager (반드시 sys로 접속한다)
    SQL>exec dbms_transaction.purge_lost_db_entry('1.8.238');
    STEP 9: 불일치 사항을 파악하고 DBA_2PC_PENDING을 정리한다.
    어떠한 경우에 DBA_2PC_PENDING의 MIXED column이 YES가 되는지는 이미 STEP 7
    에서 설명하였다. 이렇게 잘못된 조치에 의해 STEP 7에서 설명한 것과 같은
    분산 데이타베이스간의 불일치가 발생한 경우는 간단한 operation을 통해
    일치성을 맞추는 것은 불가능하다.
    분산 트랜잭션의 consistency가 무엇보다 중요한 경우라면 관계된 node의
    database를 모두 문제의 분산 트랜잭션이 수행되기 이전 상태로, incomplete
    recovery를 수행하거나 할 수 있다. 분산 데이타베이스간의 일관성을 위한
    incomplete recovery에 대해서는 여기에서는 다루지 않는다. 한가지 언급한
    말한 것은 앞에서 설명한 분산 트랜잭션의 commit시 이용하는 commit SCN을
    관계된 모든 node들의 최대 SCN으로 이용하는 것이 바로 이러한 recovery를
    위한 것이다. 이렇게 일부 database에서 SCN값이 이전 SCN에서 1씩 증가하는
    것이 아니라 큰 값으로 건너뛰어 다른 database와 같은 SCN을 유지하게
    함으로써, 이후에 incomplete recovery시에 관계된 node들이 서로 동일한
    SCN으로 recovery를 수행하면, 모두 분산 트랜잭션 적용 이전이 되거나 혹은
    모두 이후가 되어 일관성을 유지할 수 있도록 해준다.
    MIXED가 YES인 상태에서, inconsistency를 받아들이고 DBA_2PC_PENDING view를
    정리하려면 다음과 같이 수행한다.
    sqlplus sys/manager (반드시 sys user로 수행한다)
    SQL>exec dbms_transaction.purge_mixed('1.8.238');

  • ORA-02048: attempt to begin distributed transaction without logging on

    Hello,
    I've got the error:
    ORA-02048: attempt to begin distributed transaction without logging on
    When calling OCITransStart
    (The XID of the transaction to start is:
    formatID = 11101, gtrid = 123, bqual = 1
    I've already run several queries before trying to call
    OCITransStart and the queries are successfull.
    Could anyone help please ?
    I'm running Oracle 10g on Linux.
    Thanks a lot
    Laurent Marzullo

    I believe this is the error you see if the client database name is not set prior to calling OCISessionBegin. To set the client database name, use OCIAttrSet on the server handle with the OCI_ATTR_EXTERNAL_NAME and OCI_ATTR_INTERNAL_NAME attributes.
    These attributes are discussed in chapter 8 of the OCI Programmer's Guide in the section "OCI Support for Transactions".

  • ORA-02074: cannot ROLLBACK in a distributed transaction

    I have a stored procedure that successfully creates a portal user when I run it with SQLPLUS.
    However when I call the same procedure through ODP.Net, I get the following error.
    "ORA-20001: ORA-02074: cannot ROLLBACK in a distributed transaction\nORA-06512: at \"PORTAL30.WWSEC_API\", line 1915\nORA-02074: cannot SET SAVEPOINT in a distributed transaction\nORA-06512: at \"PORTAL30.PRO_CREATE_WEB_USER\", line 28\nORA-06512: at line 1"
    The portal version is 3.0.9.8.2 The stored proc is in the portal30 schema and I am connecting as portal30 user.
    Any help is greatly appreciated...
    Thanks.
    The following is the code for the stored procedure:-
    CREATE OR REPLACE PROCEDURE PORTAL30.PRO_CREATE_WEB_USER (
    puser IN varchar2,
    puser_last_name IN varchar2,
    puser_first_name IN varchar2,
    puser_group IN varchar2,
    password IN varchar2
    ) AS
    l_group_id number;
    l_id number;
    e_code number;
    begin
    l_id := wwsec_api.add_portal_user(p_User_Name => puser,p_Last_Name => puser_last_name,p_First_Name => puser_first_name,p_Portal_User => 'Y');
    wwsec_api.activate_portal_user(puser);
    portal30_sso.WWSSO_API_USER_ADMIN.CREATE_USER(P_USERNAME=> puser,P_PASSWORD=>password,p_error_code=> e_code);
    wwsec_api.add_user_to_list(p_person_id => l_id,p_to_group_id => wwsec_api.group_id (p_name => puser_group),p_is_owner => wwsec_api.NOT_OWNER);
    wwsec_api.set_defaultgroup(p_groupid => wwsec_api.group_id (p_name => puser_group),p_username => puser);
    commit;
    exception
    when others then
    raise_application_error(-20001,substr(sqlerrm,1,200));
    end;
    The foll is the code I am using to call the stored proc.
    private void createUser()
    string retval ;
    OracleConnection oraconn = new OracleConnection(Data Source=testdb;User ID=portal30;Password=portal30" );
    OracleCommand cmd = new OracleCommand("PRO_CREATE_WEB_USER", oraconn);
    cmd.CommandType = CommandType.StoredProcedure;
    OracleParameter a_uid = new OracleParameter("puser" ,OracleDbType.Varchar2,20);
    a_uid.Direction = ParameterDirection.Input ;
    a_uid.Value = (txtUserId.Text).Trim() ;
    cmd.Parameters.Add(a_uid);
    OracleParameter a_last_name = new OracleParameter("puser_last_name" ,OracleDbType.Varchar2,20);
    a_last_name.Direction = ParameterDirection.Input ;
    if (( txtLName.Text).Trim() != "" )
    a_last_name.Value = (txtLName.Text).Trim() ;
    else
    a_last_name.Value = " ";
    cmd.Parameters.Add(a_last_name);
    OracleParameter a_first_name = new OracleParameter("puser_first_name" ,OracleDbType.Varchar2,20);
    a_first_name.Direction = ParameterDirection.Input ;
    if ((txtFName.Text).Trim() != "")
    a_first_name.Value = (txtFName.Text).Trim() ;
    else
    a_first_name.Value = " ";
    cmd.Parameters.Add(a_first_name);
    OracleParameter a_type = new OracleParameter("puser_group" ,OracleDbType.Varchar2,20);
    a_type.Direction = ParameterDirection.Input ;
    a_type.Value = (lstUserType.SelectedValue).Trim() ;
    cmd.Parameters.Add(a_type);
    OracleParameter a_passwd = new OracleParameter("password" ,OracleDbType.Varchar2,20);
    a_passwd.Direction = ParameterDirection.Input ;
    a_passwd.Value = (txtPassword.Text).Trim() ;
    cmd.Parameters.Add(a_passwd);
    try
    oraconn.Open();
    cmd.ExecuteNonQuery();
    lblMsg.ForeColor = System.Drawing.Color.FromName("blue");
    lblMsg.Text = "User Created.";
    catch(OracleException e)
    { retval = e.Message ;
    lblMsg.ForeColor = System.Drawing.Color.FromName("red");
    lblMsg.Text = "Error Creating user" ;
    finally
    oraconn.Close();

    Also note that remote procedure/function calls (e.g. from ODP.NET), do not support distributed transactions (i.e. a SAVEPOINT/ROLLBACK block within the PL/SQL procedure/function) before database version Oracle 9i.
    So if you are using say Oracle 817 you must use the "OracleTransaction" object in ODP.NET instead.
    See:
    http://www.dotnet247.com/247reference/msgs/39/197274.aspx

  • Need help on  ORA-02074: cannot SET NLS in a distributed transaction

    Hi All,
    I am Writing a plsql Code like this
    DECLARE
    op_job_id NUMBER;
    op_object_version_number NUMBER;
    x_job_definition_id NUMBER;
    op_name VARCHAR2(1000);
    L_VERIFY_FLAG VARCHAR2(1);
    l_error_message VARCHAR2(2000);
    BG_ID NUMBER;
    lv_job_group_id APPS.per_job_groups.job_group_id@SYSTEM_LINK_VISMA%TYPE;
    CURSOR C1 IS SELECT * FROM EBS_PER_JOBS_STG;
    BEGIN
    FOR H1 IN C1
    LOOP
    BEGIN
    IF H1.BUSINESS_GROUP_NAME IS NOT NULL THEN
    SELECT BUSINESS_GROUP_ID,job_group_id INTO BG_ID,lv_job_group_id
    FROM APPS.PER_JOB_GROUPS@SYSTEM_LINK_VISMA
    WHERE DISPLAYED_NAME=H1.JOB_GROUP_NAME;
    END IF;
    EXCEPTION
    WHEN OTHERS THEN
    L_VERIFY_FLAG := 'E';
    l_error_message := 'Entered Job Group Name is Wrong';
    END;
    -->> JOB GROUP ID <<--
    APPS.hr_job_api.CREATE_JOB@SYSTEM_LINK_VISMA
    (p_business_group_id => BG_ID
    ,p_date_from => H1.DATE_FROM
    ,p_approval_authority => H1.APPROVAL_AUTHORITY
    ,p_emp_rights_flag => H1.EMP_RIGHTS_FLAG
    ,p_benchmark_job_flag => H1.BENCHMARK_JOB_FLAG
    ,p_job_group_id => lv_job_group_id
    ,p_job_information1 => H1.JOB_INFORMATION1
    ,p_job_information2 => H1.JOB_INFORMATION2
    ,p_job_information3 => H1.JOB_INFORMATION3
    ,p_job_information4 => H1.JOB_INFORMATION4
    ,p_job_information5 => H1.JOB_INFORMATION5
    ,p_job_information6 => H1.JOB_INFORMATION6
    ,p_job_information7 => H1.JOB_INFORMATION7
    ,p_segment3 => H1.JOB_CODE --JOB_CODE
    ,p_segment6 => H1.JOB_NAME --JOB_NAME
    ,p_job_id => op_job_id
    ,p_object_version_number => op_object_version_number
    ,p_job_definition_id => x_job_definition_id
    ,p_name => op_name);
    dbms_output.PUT_LINE('OUTPUT JOB NAME CREATED : '||op_name);
    END LOOP;
    EXCEPTION
    WHEN OTHERS THEN
    dbms_output.PUT_LINE('Error Message Is: '||SQLERRM);
    END;
    i am running it in Another database Using database link connecting to Apps.
    when i am running it am getting the following Error:
    Error Message Is: ORA-02074: cannot SET NLS in a distributed transaction
    ORA-06512: at "APPS.HR_KFLEX_UTILITY", line 2423
    ORA-06512: at "APPS.HR_KFLEX_UTILITY", line 2380
    ORA-06512: at "APPS.PER_JBT_UPD", line 468
    ORA-02074: cannot SET NLS in a distributed transaction
    ORA-06512: at "APPS.HR_JOB_API", line 878
    Please help me on this, this is quite urgent to me.
    thanks
    sri

    Please see these docs.
    ORA-02074: Cannot SET NLS in a Distributed Transaction [ID 556391.1]
    Portal Used To Call PO_CHANGE_API1_S: ORA-20001: ORA-02074: Cannot SET NLS In A Distributed Transaction [ID 561246.1]Why are Concurrent Programs Calling FND_GLOBAL.APPS_INITIALIZE Using DBLinks Failing? [ID 466800.1]
    ORA-02074 when Executing set_nls over a DB Link [ID 132679.1]
    Thanks,
    Hussein

  • ORA-02049: timeout: distributed transaction waiting for lock

    Hi,
    My name is Guneet and I'm working on an application running on BEA Weblogic Server 9.2 running on a Red Hat Linux box using Oracle 10g as the database. My problem is that recently our code started getting the following exception while updating a database table.
    java.sql.SQLException: [BEA][Oracle JDBC Driver][Oracle]ORA-02049: timeout: distributed transaction waiting for lock
    Application Details
    * Using Stateless Session EJB
    * Only one Business method in this EJB with transaction attribute set to "required"
    * This method executes two select queries & one update query
    * We are using JDBC to access the database.
    * We have configured a Data Source & are using it to get a database connection.
    * Weblogic's Oracle Driver is being used.
    More details
    * The application has been running well since a month.
    * Two days ago,the update query failed with the above error.
    * At that time, a single client was accessing the system.
    * Once this problem occurs, it starts appearing frequently.
    * Eventually a request to get a connection from the Data Source times out & the exception copied at the end is thrown
    * At this stage the application gets stuck and all requests trying to get a connection end up with this exception.
    * Fortunately, Restarting the Weblogic Server gets us out of this problem and transactions resume normally.
    Now my questions are
    # Why is this error happening & what does it mean?
    # It looks like the second exception (unable to get a connection from ds) is an after effect of the first problem (ORA-02049) once it appears for a couple of times. Can somebody validate this?
    # Though I don't understand JTA well but I don't think this application needs distributed transactions so, I'm thinking of modifying the driver type to non-XA oracle driver. Any advise/pointers/comments on this front is welcome !!!!!!!!
    Thanks
    Guneet Sahai
    Exception Trace
    Dec 27, 2006 4:47:50 PM | com.gisil.themis.db | SEVERE | Unable to load merchant DEL = 911168900164. Reason - java.sql.SQLException: Unexpected exception while enlisting XAConnection java.sql.SQLException: XA error: XAResource.XAER_RMERR start() failed on resource 'themis-ds': XAER_RMERR : A resource manager error has occured in the transaction branch
    javax.transaction.xa.XAException: Unexpected error during start for XAResource 'themis-ds': Transaction timed out after 29 seconds
    BEA1-252DE51AC930078CA638
    at weblogic.jdbc.wrapper.XA.createException(XA.java:103)
    at weblogic.jdbc.jta.DataSource.start(DataSource.java:753)
    at weblogic.transaction.internal.XAServerResourceInfo.start(XAServerResourceInfo.java:1182)
    at weblogic.transaction.internal.XAServerResourceInfo.xaStart(XAServerResourceInfo.java:1115)
    at weblogic.transaction.internal.XAServerResourceInfo.enlist(XAServerResourceInfo.java:274)
    at weblogic.transaction.internal.ServerTransactionImpl.enlistResource(ServerTransactionImpl.java:497)
    at weblogic.transaction.internal.ServerTransactionImpl.enlistResource(ServerTransactionImpl.java:429)
    at weblogic.jdbc.jta.DataSource.enlist(DataSource.java:1408)
    at weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist(DataSource.java:1332)
    at weblogic.jdbc.jta.DataSource.getConnection(DataSource.java:440)
    at weblogic.jdbc.jta.DataSource.connect(DataSource.java:396)
    at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:359)
    at com.gisil.themis.db.impl1.DbManagerImpl.isPinValid(DbManagerImpl.java:872)
    at com.gisil.themis.ejb.ThemisBean.isPinValid(ThemisBean.java:185)
    at com.gisil.themis.ejb.Themis_aqqc4k_EOImpl.isPinValid(Themis_aqqc4k_EOImpl.java:207)
    at com.gisil.themis.ejb.Themis_aqqc4k_EOImpl_WLSkel.invoke(Unknown Source)
    at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:517)
    at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:224)
    at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:407)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147)
    at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:403)
    at weblogic.rmi.internal.BasicServerRef.access$300(BasicServerRef.java:56)
    at weblogic.rmi.internal.BasicServerRef$BasicExecuteRequest.run(BasicServerRef.java:934)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
    at weblogic.jdbc.jta.DataSource.enlist(DataSource.java:1413)
    at weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist(DataSource.java:1332)
    at weblogic.jdbc.jta.DataSource.getConnection(DataSource.java:440)
    at weblogic.jdbc.jta.DataSource.connect(DataSource.java:396)
    at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:359)
    at com.gisil.themis.db.impl1.DbManagerImpl.isPinValid(DbManagerImpl.java:872)
    at com.gisil.themis.ejb.ThemisBean.isPinValid(ThemisBean.java:185)
    at com.gisil.themis.ejb.Themis_aqqc4k_EOImpl.isPinValid(Themis_aqqc4k_EOImpl.java:207)
    at com.gisil.themis.ejb.Themis_aqqc4k_EOImpl_WLSkel.invoke(Unknown Source)
    at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:517)
    at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:224)
    at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:407)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147)
    at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:403)
    at weblogic.rmi.internal.BasicServerRef.access$300(BasicServerRef.java:56)
    at weblogic.rmi.internal.BasicServerRef$BasicExecuteRequest.run(BasicServerRef.java:934)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)

    guneet sahai wrote:
    Hi,
    My name is Guneet and I'm working on an application running on BEA Weblogic Server 9.2 running on a Red Hat Linux box using Oracle 10g as the database. My problem is that recently our code started getting the following exception while updating a database table.
    java.sql.SQLException: [BEA][Oracle JDBC Driver][Oracle]ORA-02049: timeout: distributed transaction waiting for lock
    Application Details
    * Using Stateless Session EJB
    * Only one Business method in this EJB with transaction attribute set to "required"
    * This method executes two select queries & one update query
    * We are using JDBC to access the database.
    * We have configured a Data Source & are using it to get a database connection.
    * Weblogic's Oracle Driver is being used.
    More details
    * The application has been running well since a month.
    * Two days ago,the update query failed with the above error.
    * At that time, a single client was accessing the system.
    * Once this problem occurs, it starts appearing frequently.
    * Eventually a request to get a connection from the Data Source times out & the exception copied at the end is thrown
    * At this stage the application gets stuck and all requests trying to get a connection end up with this exception.
    * Fortunately, Restarting the Weblogic Server gets us out of this problem and transactions resume normally.
    Now my questions are
    # Why is this error happening & what does it mean?
    # It looks like the second exception (unable to get a connection from ds) is an after effect of the first problem (ORA-02049) once it appears for a couple of times. Can somebody validate this?
    # Though I don't understand JTA well but I don't think this application needs distributed transactions so, I'm thinking of modifying the driver type to non-XA oracle driver. Any advise/pointers/comments on this front is welcome !!!!!!!!
    Thanks
    Guneet SahaiHi Guneet. If you want to debug the JTA issue, I suggest opening an official
    support case. They will lead you through producing the JTA debug information.
    However, I believe you are correct that the transaction you describe is
    completely doable with a simple local transaction, so if you were to alter
    your pool to use the non-XA driver, it would probably be faster, simpler,
    and just work.
    Let me know...
    Joe
    >
    Exception Trace
    Dec 27, 2006 4:47:50 PM | com.gisil.themis.db | SEVERE | Unable to load merchant DEL = 911168900164. Reason - java.sql.SQLException: Unexpected exception while enlisting XAConnection java.sql.SQLException: XA error: XAResource.XAER_RMERR start() failed on resource 'themis-ds': XAER_RMERR : A resource manager error has occured in the transaction branch
    javax.transaction.xa.XAException: Unexpected error during start for XAResource 'themis-ds': Transaction timed out after 29 seconds
    BEA1-252DE51AC930078CA638
    at weblogic.jdbc.wrapper.XA.createException(XA.java:103)
    at weblogic.jdbc.jta.DataSource.start(DataSource.java:753)
    at weblogic.transaction.internal.XAServerResourceInfo.start(XAServerResourceInfo.java:1182)
    at weblogic.transaction.internal.XAServerResourceInfo.xaStart(XAServerResourceInfo.java:1115)
    at weblogic.transaction.internal.XAServerResourceInfo.enlist(XAServerResourceInfo.java:274)
    at weblogic.transaction.internal.ServerTransactionImpl.enlistResource(ServerTransactionImpl.java:497)
    at weblogic.transaction.internal.ServerTransactionImpl.enlistResource(ServerTransactionImpl.java:429)
    at weblogic.jdbc.jta.DataSource.enlist(DataSource.java:1408)
    at weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist(DataSource.java:1332)
    at weblogic.jdbc.jta.DataSource.getConnection(DataSource.java:440)
    at weblogic.jdbc.jta.DataSource.connect(DataSource.java:396)
    at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:359)
    at com.gisil.themis.db.impl1.DbManagerImpl.isPinValid(DbManagerImpl.java:872)
    at com.gisil.themis.ejb.ThemisBean.isPinValid(ThemisBean.java:185)
    at com.gisil.themis.ejb.Themis_aqqc4k_EOImpl.isPinValid(Themis_aqqc4k_EOImpl.java:207)
    at com.gisil.themis.ejb.Themis_aqqc4k_EOImpl_WLSkel.invoke(Unknown Source)
    at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:517)
    at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:224)
    at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:407)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147)
    at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:403)
    at weblogic.rmi.internal.BasicServerRef.access$300(BasicServerRef.java:56)
    at weblogic.rmi.internal.BasicServerRef$BasicExecuteRequest.run(BasicServerRef.java:934)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
    at weblogic.jdbc.jta.DataSource.enlist(DataSource.java:1413)
    at weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist(DataSource.java:1332)
    at weblogic.jdbc.jta.DataSource.getConnection(DataSource.java:440)
    at weblogic.jdbc.jta.DataSource.connect(DataSource.java:396)
    at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:359)
    at com.gisil.themis.db.impl1.DbManagerImpl.isPinValid(DbManagerImpl.java:872)
    at com.gisil.themis.ejb.ThemisBean.isPinValid(ThemisBean.java:185)
    at com.gisil.themis.ejb.Themis_aqqc4k_EOImpl.isPinValid(Themis_aqqc4k_EOImpl.java:207)
    at com.gisil.themis.ejb.Themis_aqqc4k_EOImpl_WLSkel.invoke(Unknown Source)
    at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:517)
    at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:224)
    at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:407)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147)
    at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:403)
    at weblogic.rmi.internal.BasicServerRef.access$300(BasicServerRef.java:56)
    at weblogic.rmi.internal.BasicServerRef$BasicExecuteRequest.run(BasicServerRef.java:934)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)

  • ORA-01591: lock held by in-doubt distributed transaction

    I am using oracle wcf adapter to connect to oracle to insert.
    I am getting the ORA-01591: lock held by in-doubt distributed transaction.
    Any ideas as to what could be the resolution. I have followed the below mentioned steps. but that's not a permanent solution.
    Please advice.
    The resolution described below is not acceptable and never should have been used.  Although it does avoid the error, it's not okay to turn off AmbientTransaction when performing inserts
    and/or updates.  A different solution needs to be found.<o:p></o:p>
    http://msdn.microsoft.com/en-US/library/dd788352(v=BTS.10).aspx <o:p></o:p>
    "Not performing operations in a transactional context is advisable only for operations that do not make changes to the database. For operations that update data in the database, we recommend
    setting the binding property to true otherwise you might either experience message loss or duplicate messages depending on whether you are performing inbound or outbound operations."<o:p></o:p>
    ********************************************<o:p></o:p>
    This can be resolved by adjusting the configuration settings on the Oracle adapter, accessible via the Send Port properties.  The properties and the values that should be used are shown below:<o:p></o:p>
    ** Binding tab:
    incrPoolSize:  1
    maxPoolSize:  10
    useAmbientTransaction:  False<o:p></o:p>
    ** Messages tab:
    Isolation Level:  ReadCommitted<o:p></o:p>
    Also, you'll need to get a DBA to rollback the hanging "in-doubt" transactions, which will be viewable via the sql below.  Otherwise, if you try processing the same data again, you'll
    still get the same error.<o:p></o:p>
    SELECT LOCAL_TRAN_ID, GLOBAL_TRAN_ID, STATE, MIXED, HOST, COMMIT# FROM DBA_2PC_PENDING;<o:p></o:p>
    The transactions can be rolled back with sql, using this syntax:<o:p></o:p>
    ROLLBACK FORCE '<LOCAL_TRAN_ID>';
    <o:p></o:p>
    Thank you and have great day! Vivek Kulkarni MCAD.net

    Hi Vivek,
    This error is encountered by many DBA's and cause problem by locking the distributed transaction process, and not letting the query go through, because the Two - Phase Commit Mechanism got an error somewhere.
    he DBA should query the pending_trans$ and related tables, and attempt to repair network connection(s) to coordinator and commit point.
    Here are some codes to help you through the process:
    This one brings in-doubt transactions:
    select * from DBA_2PC_PENDING where state='prepared'
    This one prepares the rollback script for the transactions:
    select 'rollback force '''||local_tran_id||''';' from DBA_2PC_PENDING where state='prepared'
    All this is well described in below link
    ORA-01591: lock held by in-doubt distributed transaction
    ORA-01591: lock held by in-doubt distributed transaction string tips
    On BizTalk Side you need to make ambient transaction to false as Oracle does not go ahead with DTC Transaction with  Biz Talk
    Thanks
    Abhishek

  • ORA-02047: cannot join the distributed transaction in progress

    Hi All,
    My requirement is to do COMMIT Transactions in BULK like 100 rows. I am doing update in Oracle and SQL Server both. Following statement update the SQL Server side:
    v_sqlstr :=
    'update JDETAIL set interfacedate = getdate() where company ='
    || v_company
    || ' and Recordnumber= '
    || TO_NUMBER (v_recordNumber)
    || ' COMMIT TRANSACTION';
    num_rows :=
    DBMS_HS_PASSTHROUGH.execute_immediate@ex_test (v_sqlstr);
    After this I am calling Oracle Update Procedure . In Oracle UPDATE Procedure when I write AUTONOMOUS TRANSACTIONS AND Commit then it works fine BUT when I don't COMMIT which I don't want because I want to COMMIT in BATCHES then following error is thrown
    ORA-02047: cannot join the distributed transaction in progress
    Thanks

    you can't put the commit transaction into a pasthrough statement.
    Oracle Gateway starts the transaction, so you need to write the code in a way that allows the gateway to perform the commit. When doing a commit in a passhrough statement the gateway has no control over the committed data. Thus you get the error unless you start an autonomous transaction.
    Why do you need to call the update in a pasthrough statement? Why not in a PL/SQl code block with a counter that commits after 100 rows?

  • ORA-02042: too many distributed transactions

    1. I have been working on a portal application for several weeks.
    2. Portal is installed in 1 instance and my data is in another instance.
    3. I've had no ora-02042 problems in the devt environment set up that way.
    4. I've recently migrated the application/pages to a test environment set up that way.
    5. I've been working in the test environment for several days with no problems.
    6. For some portlets on some pages I'm now getting:
    <BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>
    Failed to parse query
    Error:ORA-02042: too many distributed transactions
    Error:ORA-02042: too many distributed transactions
    ORA-02063: preceding line from
    LINK_TO_TEST (WWV-11230) Failed to parse as PACID_SCHEMA -
    select user_action.userid, action.name,
    user_action.created_date,
    user_action.created_by, action.action_id,
    'del' del_link from user_action , action
    where user_action.action_id =
    action.action_id and user_action.userid
    LIKE UPPER(:userid) order by USERID
    ASC, NAME ASC, CREATED_DATE
    ASC (WWV-08300)
    <HR></BLOCKQUOTE>
    7. I cannot find anything about this error in the db log files for either instance.
    8. I've increased distributed transactions to 200 in the portal db and bounced
    it. Still get the error.
    9. No records in dba_2pc_pending or dba_2pc_neighbors in the portal instance.
    10. I get the error in various reports and form LOVs at different times. Pages with a lot of portlets seem to be more prone to the error.
    Here is a typical LOV error:
    <BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>
    COMBOBOX LOV ERROR:
    LOV: "ASIMM_1022.TITLE_LOV"
    Parse Message: Parse as pre-set global: "PACID_SCHEMA".
    Find Message: LOV is of type DYNAMIC (LOV based on SQL query).
    Query: "select code display_column, code return_column from codes where table_id = 'OFFICER_TITLE' order by code"
    wwv_parse.parse_as_user: ORA-02042: too many distributed transactions ORA-02063: preceding line from LINK_TO_TEST wwv_parse.parse_as_user: Failed to parse as PACID_SCHEMA - select code display_column, code return_column from codes where table_id = 'OFFICER_TITLE' order by code wwv_security.check_comp_privilege: Insufficient privileges. wwpre_utl.get_path_id: The preference path does not exist: ORACLE.WEBVIEW.PARAMETERS.217_USER_INPUT_ASIMM_5423428
    <HR></BLOCKQUOTE>
    Why are these select statements being interpreted as distributed transactions? Note:1032658.6 suggests I "USE SET TRANSACTION READ ONLY". Is this necessary? If so how?
    What puzzles me is that this set up has been working fine for several days. I don't know of any changes to my environment apart from me increasing distributed transactions.
    null

    Hi,
    this is information from metalink:
    The ORA-2042 indicates that you should increase the parameter
    distributed_transactions.
    The ORA-2063 indicates that this must be done at the remote
    database.
    Explanation
    If the distributed transaction table is full on either side of
    the database link you get the error ORA-2042:
    ORA-02042: "too many distributed transactions"
    Cause: the distributed transaction table is full,
    because too many distributed transactions are active.
    Action: increase the INIT.ORA "distributed_transactions" or
    run fewer transactions.
    If you are sure you don't have too many concurrent
    distributed transactions, this indicates an internal
    error and support should be notified.
    Instance shutdown/restart would be a workaround.
    When the error is generated at the remote database it is
    accompanied with an ORA-2063. In this case the parameter
    distributed_transactions must be increased at the remote
    database.
    If there is no ORA-2063 the parameter distributed_transactions
    must be increased at the local database.

Maybe you are looking for

  • HT5071 After submission, how long does it take for a new book to appear in the iBook store?

    How long does it take for a new book to appear in the iBook store after you have submitted it successfully? I submitted a free book last night. No sign of it 6 hours later ... If the delay is because process are being followed, what ate they? Any ide

  • Differece b/w LIS,LIS/IS&LO'S

    Hi Pls help mre out in distinguishing between LIS,LIS/IS&LO'S

  • Date format in the RPD

    Hi gurus, In the rpd, I have a condition where If (received_date- current_date) < X then .... the received date in the database is numeric. Ex : 20040810 How do I change the date format to match the default current date in the expression builder. Tha

  • HT1491 iTunes Store issues

    I bought a season pass for a tv show and have had no problems until yesterday when I tried to watch an episode it gives me an error that I don't have authority to access?  Any ideas pn what might be wrong?

  • TS1424 I can not remember my Redeem Code?

    When I redeemed my I-tunes Gift-cards, I do not remember being given, a Redeem Code?