Need help on Linked server Transactions cauasing Optimistic concurrency and to avoid DTS failure

  • 1. My DTS is failing often with the below err:

    OLE DB provider 'MSDAORA' reported an error. [SQLSTATE 42000] (Error 7399) [SQLSTATE 01000] (Error 7312) [SQLSTATE 01000] (Error 7312) OLE DB error trace [OLE/DB Provider 'MSDAORA' IOpenRowset::OpenRowset returned 0x80004005: ]. [SQLSTATE 01000] (Error 7300). The step failed. 20110302 02:30:09 AM [WUPRDDB01A]

    2. Executed as user: MYDB\MYLogon. Agent insert start [SQLSTATE 01000] (Message 0) School insert end [SQLSTATE 01000] (Message 0) School Update end [SQLSTATE 01000] (Message 0) School Status change end [SQLSTATE 01000] (Message 0) Notice order end [SQLSTATE 01000] (Message 0) OLD_STUDENTS deleted [SQLSTATE 01000] (Message 0) OLE DB provider 'MSDAORA' could not UPDATE table '[LNKSVRMY]..[CITY].[STUDENT]'. The rowset was using optimistic concurrency and the value of a column has been changed after the containing row was last fetched or resynchronized. [SQLSTATE 42000] (Error 7343) [SQLSTATE 01000] (Error 7312) OLE DB error trace [OLE/DB Provider 'MSDAORA' IRowsetChange::SetData returned 0x80040e38: The rowset was using optimistic concurrency and the value of a column has been changed after the containing row was last fetched or resynchronized.]. [SQLSTATE 01000] (Error 7300). The step failed.

    20110301 04:48:01 PM [PRODUCTION01A]

    I am using SQL Server 2000 and trying to Modify the data at Oracle 10G server. In production the STUDENT is being updated with multiple sources (apart from Sql 2000, it is being updated by some applications as well). We have kept all updates/inserts for that particular table under transactions.

    I have simulated the scenario by opening two parellel transaction on the same table.

    and found the error.

    Session #1

    SET XACT_ABORT ON

    BEGIN DISTRIBUTED TRANSACTION

    UPDATE LNKSVRMY..CITY.STUDENT

    SET ACTIVE = 0 WHERE STD_ID = '57FH'

    OutPut:

    (1 row(s) affected)

    Session #2

    SET XACT_ABORT ON

    BEGIN DISTRIBUTED TRANSACTION

    UPDATE LNKSVRMY..CITY.STUDENT

    SET ACTIVE = 0 WHERE STD_ID = '57FH'

    OutPut: No result since other transaction is open

    SEssion #1

    Will execute the COMMIT

    Session#2

    i got the below concurrency problem

    Server: Msg 7343, Level 16, State 4, Line 3

    OLE DB provider 'MSDAORA' could not UPDATE table '[LNKSVRMY]..[CITY].[STUDENT]'. The rowset was using optimistic concurrency and the value of a column has been changed after the containing row was last fetched or resynchronized.

    [OLE/DB provider returned message: Row cannot be located for updating. Some values may have been changed since it was last read.]

    OLE DB error trace [OLE/DB Provider 'MSDAORA' IRowsetChange::SetData returned 0x80040e38: The rowset was using optimistic concurrency and the value of a column has been changed after the containing row was last fetched or resynchronized.].

    On the other hand if the Session #1 run for long without transaction been commited i get the err:

    Server: Msg 7399, Level 16, State 1, Line 3

    OLE DB provider 'MSDAORA' reported an error.

    [OLE/DB provider returned message: ORA-02049: timeout: distributed transaction waiting for lock

    ]

    OLE DB error trace [OLE/DB Provider 'MSDAORA' IRowsetChange::SetData returned 0x80004005: ].

    Plese let me know any of you faced/know this error and found the solution.

Viewing 0 posts

You must be logged in to reply to this topic. Login to reply