Require Configuration Details regarding JDBC Sender Adapter Parameters

Hi All,
I have a scenario in which I need to read around 2 million records from an SQL Server table and process.
Since the data content is very huge, I have decided to split the data and execute.
So, in the select statement of my SQL Server Query, I used Select top(2000) from table name with my where condition.
In the update statenment, I used update tablename set my required values from (my select query written above).
QOS -> EOIO
I have given the queuename as my tablename
Poll Interval is "120" seconds.
My idea is to process 2000 records at a time.
When I am executing this interface through RWB, I am getting an error in update statement saying
The JDBC driver returned the following error message: 'com.microsoft.sqlserver.jdbc.SQLServerException: Unable to start a nested transaction for OLE DB provider "SQLNCLI" for linked server (serverdetails). A nested transaction was required because the XACT_ABORT option was set to OFF.'. For details, contact your database server vendor."
I have also tried in advanced tab the name of the variable as XACT_ABORT and its value as "ON", but to no avail.
Please let me know if I have missed anything. Do I need to set any additional parameters in the advanced tab of JDBC sender communication channel?
Any help is highly appreciated.
Regards
Kiran.

HI Kiran
Fist of all suggestion is to increase the polling time. It may not process 2000 records in 120 second and you will poll again.
Paste your query to check if there is a problem
Also do check with SAP Note 831162 to verify if there is something you are doing wrong.
Thanks
Gaurav

Similar Messages

  • JDBC sender adapter, ...Processing parameters, Update SQL statement

    in JDBC sender adapter, ...Processing parameters, there is an Update SQL statement field, can u tell me ...why this is required,,,,,and in one of the example scenario...it was given as <TEST>..

    Sudheep,
    In the sender JDBC adapter you have the select query to select data from the database.
    Let us summer 2 cases,
    1. You have <test> in  the UPDATE . In this case, during every polling interval the JDBC adapter will end up selecting the same data from the Database. This would not be needed in most f the cases. Why would you want to select the same data over an over again?
    2. If you have an update Statement in the Update field you can make sure that the data selected in the selected statement is updated so that the same rows are not selected again.
    Take a look at this blog,
    /people/yining.mao/blog/2006/09/13/tips-and-tutorial-for-sender-jdbc-adapter
    Regards
    Bhavesh

  • JDBC Sender Adapter - Transaction & Parameterized Query?

    Dear Experts,
    I'm curious about the JDBC sender adapter in SAP PI.
    As I see from the document and have been searching in the Internet, The default procedure of the sender JDBC adapter is to first run a SELECT/Store Procedure query then update the records that have been read before.
    Configuring the Sender JDBC Adapter - Advanced Adapter Engine - SAP Library
    What I want to ask is:
    - What is the database transaction used for the SELECT and the UPDATE? I mean what if the SELECT is successful and the records have been sent to the IE, but the UPDATE failed. This way, the next polling run, the same records could be read again. Is it possible? Are the SELECT and UPDATE query atomic (if one fails the other fails too)?
    - Is it possible to have a parameterized query / stored procedure in sender JDBC adapter? Because seeing at the default procedure, there should be at least a field that will be used as a flag (for example the processed field needs to be updated to '1'). Something like:
              - SELECT * FROM table_a WHERE docno > $last_doc_no
                             $last_doc_no is a paramter or variable from PI
              - EXEC sp_do_something ( $param_a, $param_b )
                             $param_a, $param_b are parameters or variable in PI
    Thank you,
    Suwandi C.

    Hi Suwandi,
    all action to database are in one transaction and thats mean if one failed all failed.
    And it is possible to have parameterized storied procedure. You sould send something like
    <?xml version="1.0" encoding="UTF-8"?>
    <ns0:mt_proc xmlns:ns0="http://aaaa">
       <statementname>
          <stProc action="EXECUTE"/>
          <TABLE>PROCEDURE NAME</TABLE>
          <access>
             <param_in isInput="1" type="some_type">input param</param_in>
             <param_out isOutput="1" type="some_type"></param_out>
          </access>
       </statementname>
    </ns0:mt_proc>

  • JDBC Sender Adapter Configuration

    Hi All,
       i want to know if we can configure JDBC sender adapter to run only when we ask it to.
    Normally what happens is tht the JDBC Sender Adapter polls the database at specified intervals, i dont want that. I only want it to poll the database when i get a file from RFC.
    Regards,
    Sumit

    Hi,
    Thank you.I had posted a similar questions a few dayz back and someone said that if we make the jdbc adapter synchronous it would solve our purpose, but it wont.
    Bhavesh i went thru ur blog in the mornin b4 postin d question..btw itz a nice blog
    Domenico : this is not what im looking for.
    Cheers,
    Sumit
    Message was edited by: Sumit Khetawat

  • JDBC Sender Adapter to Oracle Server

    Hi Friends,
    Iam using JDBC Sender Adapter to connect to Oracle Server. I have mentioned all the parameters in the Configuration(sender communication channel) correctly.My Adapter Monitoring in RWB shows a message that "Processing finished successfully"...But I cannot see the data in SXMB_MONI. I mean the data is not getting picked from the Database..I have worked on the similar scenario previously and it was working fine...
    I have specified the datatype structure correctly.
    resultset
    >row
    >>field1
    >>field2
    wat is the problem.
    regards,
    raju...

    Hi,
    Can you check the following,
    1. Check the SELECT query in your Sender JDBC adapter. Does it actually return any rows?
    2. The values enterd for Documentname and DocumentNamespace in your Sender JDBC adapter. You have to enter the name of the Datatype and the namespace in these fields.
    3.Have you enterd these details while doing the  adapter configuration,
    <b>jdbc:oracle:thin:@<IP adress>:<listener port>:<instance name (database name)>
    Driver oracle.jdbc.driver.OracleDriver</b>
    Regards,
    Bhavesh

  • JDBC Sender Adapter

    Hi everybody
    I have the following error in my JDBC to JDBC scenario; I  configured the JDBC sender adapter and receive the following message back. In the Configuration I set “Document Name” to MT_ScanningStatus:
      <?xml version="1.0" encoding="utf-8" ?>
    <MT_ScanningStatus>
    <row>
      <ScannerNb>1</ScannerNb>
      <Status>0</Status>
      </row>
    <row>
      <ScannerNb>2</ScannerNb>
      <Status>2</Status>
      </row>
    <row>
    <ScannerNb>3</ScannerNb>
      <Status>0</Status>
      </row>
    <row>
      <ScannerNb>4</ScannerNb>
      <Status>2</Status>
      </row>
      </MT_ScanningStatus>
    I defined the  corresponding datatype as follow:
    DT_ScanningStatus Complex Type
            row              Element 1...unbounded
              ScannerNb      Element 1
              STatus         Element 1
    In the following Mapping I tried to Map this structure to the Structure used to send an Update SQL Statement to the JDBC Receiver to update the same table.  A normal Test in the Mapping Tool runs fine but when I enter under source the above incoming Message from the JDBC Adapter I got the following error. I think the incoming message cannot be interpreted. Can someone support me? I read the documentation for the JDBC adapter and also a lot of weblogs and discussion threads. Maybe someone knows a weblog describing more detailed the sender adapter and how to handle the incoming Message!!
    Thanks in advance Oliver
    14:58:03 Start of test
    Compilation of MM_JDBC_to_JDBC_test successful
    Fatal Error: com.sap.engine.lib.xml.parser.ParserException: XML Declaration not allowed here.(:main:, row:1, col:8)
    com.sap.aii.utilxi.misc.api.BaseRuntimeException: Fatal Error: com.sap.engine.lib.xml.parser.ParserException: XML Declaration not allowed here.(:main:, row:1, col:8)
    at com.sap.aii.mappingtool.tf3.rt.xparser.MTSaxHandler.run(MTSaxHandler.java:130)
    at com.sap.aii.mappingtool.tf3.rt.xparser.XParser.run(XParser.java:68)
    Root Cause:
    com.sap.engine.lib.xml.parser.NestedSAXParserException: Fatal Error: com.sap.engine.lib.xml.parser.ParserException: XML Declaration not allowed here.(:main:, row:1, col:8)(:main:, row=1, col=8) -> com.sap.engine.lib.xml.parser.ParserException: XML Declaration not allowed here.(:main:, row:1, col:8)
    at com.sap.engine.lib.xml.parser.XMLParser.scanPI(XMLParser.java:2009)
    at com.sap.engine.lib.xml.parser.XMLParser.scanProlog(XMLParser.java:2657)
    at com.sap.engine.lib.xml.parser.XMLParser.scanDocument(XMLParser.java:2713)
    at com.sap.engine.lib.xml.parser.XMLParser.parse0(XMLParser.java:162)
    at com.sap.engine.lib.xml.parser.AbstractXMLParser.parseAndCatchException(AbstractXMLParser.java:132)
    at com.sap.engine.lib.xml.parser.AbstractXMLParser.parse(AbstractXMLParser.java:142)
    at com.sap.engine.lib.xml.parser.AbstractXMLParser.parse(AbstractXMLParser.java:245)
    at com.sap.engine.lib.xml.parser.Parser.parseWithoutSchemaValidationProcessing(Parser.java:276)
    at com.sap.engine.lib.xml.parser.Parser.parse(Parser.java:338)
    at com.sap.engine.lib.xml.parser.SAXParser.parse(SAXParser.java:125)
    at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
    at com.sap.aii.mappingtool.tf3.rt.xparser.MTSaxHandler.run(MTSaxHandler.java:128)
    at com.sap.aii.mappingtool.tf3.rt.xparser.XParser.run(XParser.java:68)
    at com.sap.engine.lib.xml.parser.SAXParser.parse(SAXParser.java:144)
    at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
    at com.sap.aii.mappingtool.tf3.rt.xparser.MTSaxHandler.run(MTSaxHandler.java:128)
    at com.sap.aii.mappingtool.tf3.rt.xparser.XParser.run(XParser.java:68)
    Caused by: com.sap.engine.lib.xml.parser.ParserException: XML Declaration not allowed here.(:main:, row:1, col:8)
    at com.sap.engine.lib.xml.parser.XMLParser.scanPI(XMLParser.java:2009)
    at com.sap.engine.lib.xml.parser.XMLParser.scanProlog(XMLParser.java:2657)
    at com.sap.engine.lib.xml.parser.XMLParser.scanDocument(XMLParser.java:2713)
    at com.sap.engine.lib.xml.parser.XMLParser.parse0(XMLParser.java:162)
    at com.sap.engine.lib.xml.parser.AbstractXMLParser.parseAndCatchException(AbstractXMLParser.java:132)
    at com.sap.engine.lib.xml.parser.AbstractXMLParser.parse(AbstractXMLParser.java:142)
    at com.sap.engine.lib.xml.parser.AbstractXMLParser.parse(AbstractXMLParser.java:245)
    at com.sap.engine.lib.xml.parser.Parser.parseWithoutSchemaValidationProcessing(Parser.java:276)
    at com.sap.engine.lib.xml.parser.Parser.parse(Parser.java:338)
    at com.sap.engine.lib.xml.parser.SAXParser.parse(SAXParser.java:125)
    ... 3 more
    Fatal Error: com.sap.engine.lib.xml.parser.ParserException: XML Declaration not allowed here.(:main:, row:1, col:8)

    Hi Oliver,
    >>>>source the above incoming Message from the JDBC Adapter I got the following error. I think the incoming message cannot be interpreted.
    do this:
    in the test tab try your mapping once more
    (the correct one)
    then save the source xml as file
    next compare this saved file with the one
    you get from the jdbc sender
    >>>>>Declaration not allowed here.(:main:, row:1, col:8)
    and compare the first lines in those two XML files
    are they the same?
    Regards,
    michal
    <a href="/people/michal.krawczyk2/blog/2005/06/28/xipi-faq-frequently-asked-questions"><b>XI / PI FAQ - Frequently Asked Questions</b></a>

  • JDBC Sender Adapter Error

    HI Friends,
    I have configured the JDBC Sender Adapter with parameters as
    Driver : oracle.jdbc.driver.OracleDriver
    Connection : jdbc:oracle:thin:system:netweaver:@172.25.4.221:1521
    But Iam getting an error in Componenet Monitoring:
    <b>History:
    - 2006-05-30 04:55:36 UTC: Error: Stopped unexpectedly - reconfigure and activate to continue processing. Error: java.lang.NullPointerException
    - 2006-05-30 04:55:36 UTC: Processing started</b>
    How to resolve this??
    Regards,
    Raju

    Hi
    Thanks for the reply.
    I tried with <b>jdbc:oracle:thin:@172.25.4.221:1521:netweaver</b> and
    <b>jdbc:oracle:thin:@172.25.4.221:1521:system</b>
    Now Iam getting another error.
    <b>Sender Adapter v2108 for Party '', Service 'TBIT40_XI_LEGACY_BS_04':
    Configured at 2006-05-30 05:12:30 UTC
    History:
    - 2006-05-30 05:13:00 UTC: Retry interval started. Length: 20.000 s
    - 2006-05-30 05:13:00 UTC: Error: Accessing database connection 'jdbc:oracle:thin:@172.25.4.221:1521:system' failed: DriverManagerException: Cannot establish connection to URL 'jdbc:oracle:thin:@172.25.4.221:1521:system': SQLException: Io exception: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=153093376)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))
    - 2006-05-30 05:13:00 UTC: Processing started</b>
    Can U please solve it..
    regards,
    Raju

  • Challenging issue with JDBC sender adapter

    Hello Guys
    I have this requirement
    From Oracle Database I have to read to tables  one for the header and one for the detailes and map the result to one RFC.
    I have only  worked with one table at the time with the JDBC sender adapter but never with 2  tables
    My challenges are
    1 - How I can read the 2 tables at the same select statement , I suppose I have to use a join with 2 identical fields , so far so good ,but how I can handle multiple records
    suppose the result is 10 new different records which each of the recored has to be mapped to the RFC , then we will have 10 RFC calls.
    how can I do the mapping in this case.
    2 - How can I update the 2 tables at the samme time and flag them as processed , as far as I know we can not use 2 update statement in the same JDBC sender
    any help will do
    Thanks in advance.

    Hi
    Thanks for the replayes
    The RFC is used to create and Invoice Idoc , It has to be one record (Header and Item ) to one RFC.
    a JDBC to IDoc can also be used , but we have to update another table in SAP that is why the RFC,
    My doubt is how the Data type for the sender JDBC should look like , as mentioned I have 2 tables to fetch data from
    <Invoice>
    <Header> 1 -- 1
    <f1>
    <f2>
    <f3>
    </Header>
    <Item> 1--n
    <f1>
    <f2>
    <f3>
    </Item>
    </Invoice>
    The sender JDBC returns
    <Invoice>
    <row>
    <f1>
    <f2>
    <f3>
    </row>
    </Invoice>
    How can I replicate the data type to meet the JDBC sender structure.
    and regarding the mapping do I have to change the occurrunce to 0 -- unbounded
    regarding the update Ragu is right in his suggestion
    Table1 can be used as primary table, Table2 can be used as Secondary table.. u will have key field to link both table.
    So Just Updating only Primary Table(Table1) will helps on this.
    Thanks.

  • JDBC Sender Adapter -  NOT FETCHING RECORDS -PROCESSING STARTED

    Hello all,
    I have set up a JDBC sender adapter .With polling interval as 30 Seconds. Polling is done successfully
    but it does not fetch the records .
    Valid Data is present in the tables.In the Communication Channel Monitoring log shows :
    "Processing Started"
    after each poll interval.
    Adding to this , it was working fine  with the same parameters two days back.
    I have enabled the Driver Trace but didnot get any information from Trace.
    How to resolve this issue?Any help
    Regards
    Ganga Prasad

    Hello maheshwari,
    Valid Data is there & many records are there to be fetched.
    One more thing  Normally in the Communication Channel Monitoring
    for an JDBC adapter even if there are no records to fetch we get the Log information in detail that :
    Polling interval started.
    Processing finished successfully
    Processing started
    Polling interval started.
    Processing finished successfully
    Processing started
    But here in my case am getting only : (polling interval : is 60 Seconds)
            2/5/08 8:29:19 AM           Processing started
         2/5/08 8:28:19 AM           Processing started
         2/4/08 3:34:54 PM           Processing started
         2/4/08 3:33:54 PM           Processing started
    One more observation is that my poll interval is 60 seconds but now it is polling after every 120sec
           2/5/08 11:17:31 AM           Processing started
         2/5/08 11:15:31 AM           Processing started
         2/5/08 11:13:31 AM           Processing started
         2/5/08 11:11:31 AM           Processing started
    I have tried refreshing Cache but no change .
    Regards
    Prasad

  • JDBC Sender Adapter - Single Select and Single Delete

    Hi,
    I have the requirement where I have to select the single row (or 1st row) from database through JDBC Sender Adapter and delete that record after selection in single polling.
    Please help me out with proper SQL query or with any other approach.
    Thanks and Regards,
    Vijay

    I think in SQL select statment you have something like Select TOP number....where number is 1,2..
    The detailed syntax for the SELECT clause is as follows:
    SELECT [ALL | DISTINCT] [TOP nExpr [PERCENT]] Select_List_Item [AS Column_Name] [, ...]
    for more details...check out..
    http://msdn2.microsoft.com/en-us/library/95c6ex88(VS.80).aspx
    Document sent on your email id.
    Nilesh

  • Fundamnental question on jdbc sender adapter

    Hi ,
    I have a scneario like
    DB System „³ JDBC Adapter „³ XI  -„³ RFC Adapter „³ SAP R/3 --„³ True „³ response thru same RFC adapter „³ XI BPM will call JDBC Apdapter with Update statement
                                                                                    False „³ response thru same RFC Adapter „³ XI BPM will call File adapter with Append
    now when i use send jdbc adapter , i wld need to have a status flag in my database which would be update when ever data is transmitted sucessfully else the same data would always be picked up .
    i want to know do i need to create a reciever jdbc adapater too for this . because when ever i use sender jdbc adapter and this must be a very common situation . that i have to update the table so that the rows are not picked up again . jdbc senser  has an update statement . writtng an updtae query will it not solve my problem.

    Hi Amit,
    A JDBC sender adapter has 2 essential fields,
    1. SQL Statement
    2. Update Statement
    Your SQL statement will contain your SELECT statement and once your SQL statement is executed, UPDATE statement is executed. This is done so that records that have been selected by the SQL statement should not be selected again as the JDBC sender adapter will poll over the database for every poll interval.
    If you want to SELECT something from your Database, then you will have to go for a JDBC sender adapter.
    But, if you want to insert/update your Database, then you can go for a JDBC receiver adapter.
    Multiple insertions are possible for a JDBC receiver, but multiple Selection queries (different select queries) are not possible for a single JDBC sender adapter.
    Just check these links to understand how JDBC adapters work,
    <a href="http://help.sap.com/saphelp_nw04/helpdata/en/7e/5df96381ec72468a00815dd80f8b63/content.htm">Configuring the Sender JDBC Adapter</a>
    <a href="http://help.sap.com/saphelp_nw04/helpdata/en/64/ce4e886334ec4ea7c2712e11cc567c/content.htm">Configuring the Receiver JDBC Adapter</a>
    A few initial steps required to be followed for your Scenario are:
    1. Then create a sender agreement using jdbc o/b interface.
    In receiver determination specify ur bpm as receiver.
    In interface determination specify the abstract interface tht u created for jdbc.
    (u should copy the jdbc interface and then create abstarct interfce of it)
    No receiver agreement required for BPM.
    2. Create receiver determination, using BPM and the abstract interface for legacy tht u created,
    Receiver as legacy system.
    Create Interface determination and receiver agreements.
    Also see through this blog which talks about <a href="/people/saravanakumar.kuppusamy2/blog/2005/01/19/rdbms-system-integration-using-xi-30-jdbc-senderreceiver-adapter sender and receiver adapters</a>
    Regards,
    Abhy

  • How to use sql variables in jdbc send adapter??

    Hi,
    i wanna use a variable in the sql statement in the jdbc send adapter.
    i know i can key sql statement in the "Query SQL Statement" in the jdbc send adapter.but i dont know how to use variables in the sql statement.
    i mean, for example, the sql statement is "SELECT * FROM t_student WHERE READFLAG = 0", but now i wanna instead of "0"(the value of the READFLAG) using a variable.
    and if i can use a variable to replace the "0"(the value of the READFLAG above sql statement), then how can i send a value to the variable??
    request help in the regard.
    thx in advance.
    Brian

    Hi,
    Use the place holders to pass the data at runtime. Check the below structure for more details.
    Hope this helps.
    Thanks and Regards,
    Kalpesh
    <root>
      <stmt>
        <Student action="SQL_QUERY">
          <access> SELECT * FROM t_student WHERE READFLAG = '$FLAG$ </access>
          <key>
            <FLAG>0</FLAG>
          </key>
        </Student>
      </stmt>
    </root>

  • PI 7.1 JDBC sender adapter huge load from DB select

    Hi,
    We have the problem that the JDBC sender adapter is selecting a huge amount of data from a Oracle DB. The Adapter seems to be able to cope the load but when sending to the integration server it causes problems. We found values to adjust but I dont think increasing them is a good solution.
    My question is:
    Is there any way to send the data in blocks with using the PI standard JDBC adapter ?
    Thank you and regards,
    Andreas

    Hi,
    You can use the below parameter in JDBC sender.
       Specify additional Parameter Names and Parameter Values in the table.
    Due to messages of large size it may cause issue
    Following are the parameters to be set in the table to limit the message size per polling:
    ●      msgLimit :
    ●      maxMsgSize :  SAP note 1253826.
    ●      maxRowSize : SAP note 1253826.
    Additional parameters are published in SAP Note 801367.
    Refer the link.
    Defining Additional Parameters in Advanced mode
    http://help.sap.com/saphelp_nw73/helpdata/en/7e/5df96381ec72468a00815dd80f8b63/content.htm

  • Jdbc Sender Adapter and Acks

    Hi,
    am I right in saying that the JDBC Sender Adapter can't request XI system level acknowledgements. Due to this it is necessary to establish an integrations process fed with the data from the sender adapter, sending it to the target system and receiving an acknowledgement?
    Kind regards,
    Heiko

    Hi heiko,
    a JDBC sender adapter cannot be configured Synchronously and so, what you are stating sounds perfect
    If you want an update back to the database after execution , BPM is one way .
    But, if you are looking to update some info immediately after sender adapter finishes its exectuion, then UPDATE statment can be used.
    Regards,
    Bhavesh

  • JDBC sender Adapter consistency and Transaction level - URGENT

    Hi,
    We are using the JDBC adapter to read data from an Oracle view. The view joins two tables on their keys where flag = 0. The JDBC adapter carries out the select and then updates the selected rows with flag = 1. The transaction level used is the default, which according to XI help is TRANSACTION_SERIALIZABLE.
    Our question is what happens if the oracle application that feeds the underlying tables inserts a new record in the time interval between the select statement and the update statement with flag = 0.
    WILL THE UPDATE STATEMENT UPDATE EVERYTHING, EVEN THE NEWLY INSERTED RECORD??
    As we are in a live environment and we have reason to believe that some records updated to FLAG = 1 are NOT sent to XI we would appreciate the expert's help on this issue!

    Dimitris,
    I was looking at the FAQ :JDBC Driver Snote and found this information which seems to answer ur question.
    Q: If I have the following configured in a JDBC Sender:
    Select Query:
    SELECT column FROM TABLENAME WHERE FLAG = "TRUE"
    Update Query:
    UPDATE TABLENAME SET FLAG = "FALSE" WHERE FLAG = "TRUE"
    How do I know that the JDBC adapter will not update newly added rows (rows that were added between the time that the SELECT and UPDATE queries were executed) that were not read in the initial SELECT query?
    A: The SELECT and the UPDATE are run in the same DB transaction, i.e. both statements have the same view on the database.
    Make sure that both statements use the same WHERE clause. An additional requirement for the correct operation of this scenario is the configuration of an appropriate transaction isolation level on the database (i.e., repeatable_read or serializable). You might also consider using a "SELECT FOR UPDATE" statement instead of a plain SELECT statement to ensure proper locking on the database.

Maybe you are looking for