Oracle JDBC batch size limit

Hi,
Does anyone know of any limitation on the size of the JDBC batch?
We are facing a problem while storing large feeds to DB:
- the feed file contains 77K records in it
- the save to DB action puts all of them in one BATCH statement and tries to save
- unfortunately in the DB only a small amount of records are saved and the JDBC driver goes silent about the rest
- the number of records saved from the total count of 77K varies from machine to machine: on my machine the number was something like 11K, on a testing machine it was something like 9K
- we also know that on some machines even 40K records were saved
The code fix for this is simple: just save in batches of 1K(or whatever small amount) until all records are saved.
But I would rather find out that there is a JVM/JDBC configuration option to increase the number of records one BATCH statement can save at a time.
If not, why the difference between machines? Could it be the amount of RAM available for JVM on the different machines?
So, does anyone have any idea?
Thanks,
Viorel

Hello,
This is a forum for TopLink/JPA, so you might have better luck posting your question in the JDBC forum here:
Java Database Connectivity (JDBC)

Similar Messages

  • JDBC Batch Updates & PreparedStatement problems (Oracle 8i)

    Hi,
    we're running into problems when trying to use JDBC Batch Updates with PreparedStatement in Oracle8i.
    First of all, Oracle throws a SQLException if one of the statements in the batch fails (e.g. because of a unique constraint violation). As far as I understand, a BatchUpdateException should be thrown?
    The next problem is much worse:
    Consider this table:
    SQL> desc oktest
    ID NOT NULL NUMBER(10)
    VALUE NOT NULL VARCHAR2(20)
    primary key is ID
    When inserting in through batch updates with a PreparedStatement, I can pass 'blah' as a value for ID without getting an exception (Oracle silently converts 'blah' to zero). Only when the offending statement is the last statement in the batch, Oracle throws an exception (again, SQLException instead of BatchUpdateException).
    Any comments/suggestions are appreciated.
    E-mail me if you want to see the code...
    Thanks,
    Oliver
    Oracle version info:
    (Enterprise Edition Release 8.1.6.0.0, JServer Release 8.1.6.0.0, Oracle JDBC driver 8.1.6.0.0 and 8.1.7.0.0 (we're using the 'thin' driver)
    CLASSPATH=/opt/oracle/product/8.1.7/jdbc/lib/classes12.zip:...
    null

    Please refer
    http://www.oracle.com/technology/products/oracle9i/daily/jun07.html

  • Any maximum size limit to an Oracle database?

    Is there a maximum size limit to Oracle database?
    What is the maximum columns and rows the database can grow to?
    Is there any documentation stating the max size for the Oracle database?

    The maximum size supported by Oracle in respect of the Oracle RDBMS is 512 Petabytes or
    536,870,912 GigaBytes. This was introduced w/ Oracle Release 8.0.3 and higher. The Oracle Release 7 limit was 4 Terabytes.
    Anatoli Grishin

  • How are JDBC batch updates implemented by Oracle?

    When you're looking to reduce commits you typically think of JDBC batch updates.
    I'm just wondering how are these implemented by Oracle and is there ever gains to be had to reducing commits in an Oracle specific way like say using VARRAYs with procedures?

    Please refer
    http://www.oracle.com/technology/products/oracle9i/daily/jun07.html

  • Oracle KM DB mode what is the size limit

    Hello,
    Our organization is implementing the KM and some questions arise about the size limit of the oracle database supported by the KM if we are using the full DB mode. Maybe somebody has got some benchmarks he wants to share ?
    Many thanks by advance
    Frédéric

    Hello Venkat,
    Thank you for your reply, it gives me valuable information. I have still one concern, indeed if I read this chapter I can imaging that the size of the DB can be theoretically very large. In a practical way have you some examples of very large internal repositories where performances are still OK ?
    Many thanks
    Best regards
    Frédéric

  • Can you limit write-behind batch sizes to a set number in Coherence 3.5?

    I'm currently running Coherence 3.5.3p9 on Windows.
    The cache store is set up to use the write-behind scheme via the read-write-backing-map-scheme tag.
    Batching is enabled with a write-delay of 5s.
    My understanding is that essentially anything that was newly inserted into the cache more than 5 seconds ago becomes eligable for storage.
    Our application goes through a bit of a peak-trough cycle. Sometimes very little data is inserted all at once and sometimes a lot is. This results in quite varying batch sizes and big batch sizes do cause issues on our db from time to time.
    I can decrease the write-delay to 1s in the hope that this will in turn decrease the batch sizes, but is there a way to set a specific number e.g. I only ever want to write 20 in a batch?

    Hi,
    you can just break down that big batch into smaller batches (DB transactions) yourself, and you can also decide that you don't want to write more at the moment.
    If you throw an exception Coherence will retry whatever is in the parameter map passed to storeAll and parameter collection to eraseAll. But it does not have to be the full list, it is expected that you remove those entries/elements which you have successfully persisted.
    This way you can control the rate of writing yourself. Also, since the write-behind thread does not block event processing, therefore you are sort of safe to do longer waits in those methods if you want to somewhat space out resource transactions without returning from storeAll.
    To answer your question:
    You can either
    - do a physical transaction of 20 elements, remove those 20 elements from the map, then optionally wait and then continue with more elements from the map as long as there are any (this gives you the chance of controlling the rate of transactions).
    - send a physical transaction of at most 20 elements to the database, remove those 20 elements from the map and then throw a dummy exception (in which case Coherence requeues the rest... take care, after this they are considered freshly changed entries).
    Best regards,
    Robert

  • FILE and FTP Adapter file size limit

    Hi,
    Oracle SOA Suite ESB related:
    I see that there is a file size limit of 7MB for transferring using File and FTP adapter and that debatching can be used to overcome this issue. Also see that debatching can be done only for strucutred files.
    1) What can be done to transfer unstructured files larger than 7MB from one server to the other using FTP adapter?
    2) For structured files, could someone help me in debatching a file with the following structure.
    000|SEC-US-MF|1234|POPOC|679
    100|PO_226312|1234|7130667
    200|PO_226312|1234|Line_id_1
    300|Line_id_1|1234|Location_ID_1
    400|Location_ID_1|1234|Dist_ID_1
    100|PO_226355|1234|7136890
    200|PO_226355|1234|Line_id_2
    300|Line_id_2|1234|Location_ID_2
    400|Location_ID_2|1234|Dist_ID_2
    100|PO_226355|1234|7136890
    200|PO_226355|1234|Line_id_N
    300|Line_id_N|1234|Location_ID_N
    400|Location_ID_N|1234|Dist_ID_N
    999|SSS|1234|88|158
    I would need a the complete data in a single file at the destination for each file in the source. If there are as many number of files as the number of batches at the destination, I would need the file output file structure be as follows:
    000|SEC-US-MF|1234|POPOC|679
    100|PO_226312|1234|7130667
    200|PO_226312|1234|Line_id_1
    300|Line_id_1|1234|Location_ID_1
    400|Location_ID_1|1234|Dist_ID_1
    999|SSS|1234|88|158
    Thanks in advance,
    RV
    Edited by: user10236075 on May 25, 2009 4:12 PM
    Edited by: user10236075 on May 25, 2009 4:14 PM

    Ok Here are the steps
    1. Create an inbound file adapter as you normally would. The schema is opaque, set the polling as required.
    2. Create an outbound file adapter as you normally would, it doesn't really matter what xsd you use as you will modify the wsdl manually.
    3. Create a xsd that will read your file. This would typically be the xsd you would use for the inbound adapter. I call this address-csv.xsd.
    4. Create a xsd that is the desired output. This would typically be the xsd you would use for the outbound adapter. I have called this address-fixed-length.xsd. So I want to map csv to fixed length format.
    5. Create the xslt that will map between the 2 xsd. Do this in JDev, select the BPEL project, right-click -> New -> General -> XSL Map
    6. Edit the outbound file partner link wsdl, the the jca operations as the doc specifies, this is my example.
    <jca:binding  />
            <operation name="MoveWithXlate">
          <jca:operation
              InteractionSpec="oracle.tip.adapter.file.outbound.FileIoInteractionSpec"
              SourcePhysicalDirectory="foo1"
              SourceFileName="bar1"
              TargetPhysicalDirectory="C:\JDevOOW\jdev\FileIoOperationApps\MoveHugeFileWithXlate\out"
              TargetFileName="purchase_fixed.txt"
              SourceSchema="address-csv.xsd" 
              SourceSchemaRoot ="Root-Element"
              SourceType="native"
              TargetSchema="address-fixedLength.xsd" 
              TargetSchemaRoot ="Root-Element"
              TargetType="native"
              Xsl="addr1Toaddr2.xsl"
              Type="MOVE">
          </jca:operation> 7. Edit the outbound header to look as follows
        <types>
            <schema attributeFormDefault="qualified" elementFormDefault="qualified"
                    targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/file/"
                    xmlns="http://www.w3.org/2001/XMLSchema"
                    xmlns:FILEAPP="http://xmlns.oracle.com/pcbpel/adapter/file/">
                <element name="OutboundFileHeaderType">
                    <complexType>
                        <sequence>
                            <element name="fileName" type="string"/>
                            <element name="sourceDirectory" type="string"/>
                            <element name="sourceFileName" type="string"/>
                            <element name="targetDirectory" type="string"/>
                            <element name="targetFileName" type="string"/>                       
                        </sequence>
                    </complexType>
                </element> 
            </schema>
        </types>   8. the last trick is to have an assign between the inbound header to the outbound header partner link that copies the headers. You only need to copy the sourceDirectory and SourceGileName
        <assign name="Assign_Headers">
          <copy>
            <from variable="inboundHeader" part="inboundHeader"
                  query="/ns2:InboundFileHeaderType/ns2:fileName"/>
            <to variable="outboundHeader" part="outboundHeader"
                query="/ns2:OutboundFileHeaderType/ns2:sourceFileName"/>
          </copy>
          <copy>
            <from variable="inboundHeader" part="inboundHeader"
                  query="/ns2:InboundFileHeaderType/ns2:directory"/>
            <to variable="outboundHeader" part="outboundHeader"
                query="/ns2:OutboundFileHeaderType/ns2:sourceDirectory"/>
          </copy>
        </assign>you should be good to go. If you just want pass through then you don't need the native format set to opaque, with no XSLT
    cheers
    James

  • Oracle Updating Batches

    Hi All,
    I wanted to have Batch execute in my java method.
    There are few requirements of that
    1. The data has to be inserted in 2 tables
    2. The data has to be deleted from 2 tables
    3. I have to use Statement for delete as the query uses in clause.
    I have gone through http://web.umr.edu/~ora9i/java.901/a90211/oraperf.htm for Oracle Updating batches.As per the details given in above link, I have few doubts
    1.Can I use 2 or more different Prepared Statements in same Batch?
    For Example:
    //Creating a prepared statement for first table
    ps = conn.prepareStatement(INSERT_INTO_TABLE1);
    ((OraclePreparedStatement)ps).setExecuteBatch (30);
    ps.setInt(1, 23);
    ps.setString(2, "Sales");
    ps.setString(3, "USA");
    ps.executeUpdate(); //JDBC queues this for later execution
    ps.setInt(1, 24);
    ps.setString(2, "Blue Sky");
    ps.setString(3, "Montana");
    ps.executeUpdate(); //JDBC queues this for later execution
    ps.setInt(1, 25);
    ps.setString(2, "Applications");
    ps.setString(3, "India");
    ps.executeUpdate(); //The queue size equals the batch value of 3
    //JDBC sends the requests to the database
    ps.setInt(1, 26);
    ps.setString(2, "HR");
    ps.setString(3, "Mongolia");
    ps.executeUpdate(); //JDBC queues this for later execution
    //Creating a prepared statement for second table
    ps = conn.prepareStatement(INSERT_INTO_TABLE2);
    ((OraclePreparedStatement)ps).setExecuteBatch (30);
    ps.setInt(1, 23);
    ps.setString(2, "Sales");
    ps.setString(3, "USA");
    ps.setInt(4,1);
    ps.executeUpdate(); //JDBC queues this for later execution
    ps.setInt(1, 24);
    ps.setString(2, "Blue Sky");
    ps.setString(3, "Montana");
    ps.setInt(4,1);
    ps.executeUpdate(); //JDBC queues this for later execution
    ps.setInt(1, 25);
    ps.setString(2, "Applications");
    ps.setString(3, "India");
    ps.setInt(4,1);
    ps.executeUpdate(); //The queue size equals the batch value of 3
    //JDBC sends the requests to the database
    ps.setInt(1, 26);
    ps.setString(2, "HR");
    ps.setString(3, "Mongolia");
    ps.executeUpdate(); //JDBC queues this for later execution
    //Atlast calling send batch
    ((OraclePreparedStatement)ps).sendBatch();
    2.Can I use the Oracle Updating Batches for Normal Statements? Can any one elaborate following points
    •     Do not mix standard update batching syntax with Oracle update batching syntax in the same application. The JDBC driver will throw an exception when you mix these syntaxes
    As per above statement, we can’t have both type of updating in a method or in the whole application. Can any one elaborate this point, how it’s possible as every time we have to open a new connection object?
    If we cant make use of both type of batching, then how to implement the Oracle Updating Batches for simple Statements.
    •     The Oracle implementation of standard update batching does not implement true batching for generic statements and callable statements. Although Oracle JDBC supports the use of standard batching syntax for Statement and CallableStatement objects, you will see performance improvement for only PreparedStatement objects.
    3. If first case is possible & if we can use the Oracle Updating Batches for simple Statements, then can we have all the statements in one Batch?
    the query if run from PL/SQL will be like this and in same sequence
    delete from table1 where country in ('USA','GERMANY')// multiple statement of this type
    delete from table2 where country in ('USA','INDIA'))// multiple statement of this type
    insert into table1 values(1,'SALES','USA'))// multiple statement of this type
    insert into table2 values(1,'SALES,'Australia','1')// multiple statement of this type

    Dear Robert Richardson,
    Unfortunately you can only access the Batch/Serial object by an document object.
    If you want to update a Batch fields, then you need to get the document object first, then get its batch object as
    Documents > Document_Lines > BatchNumbers.
    Another thought is to update the field value by UI API when open the OIBT form if possible.
    Best Regards
    Jane Jing
    SAP Business One Forums team

  • Excel sheet attachment Maximum Size Limit.

    I am trying to create Java.Io.ByteArrayOutputStream bos = "some data". Then adding this to instance variable as an attachment...
    Attachment.create(contents : bos.toByteArray(), name : "MyData.xls",
    description : "System generated file, These are existing items in your Inbox");
    It works for around 200 rows of data..But if I try for more rows(larger Attachment size), it gives following error. is there any limit for size? how can I increase it? Please help.....
    Error while persisting the transaction data: 'An error occurred while accesing the database.
    Detail:SQL statement: 'unknown'
    Details:
    An error occurred while accesing the database.
    Detail:SQL statement: 'unknown'
    Caused by: Unexpected exception while enlisting XAConnection java.sql.SQLException: XA error: XAResource.XAER_NOTA start() failed on resource 'XAENGINEDS': XAER_NOTA : The XID is not valid
    javax.transaction.xa.XAException: [BEA][Oracle JDBC Driver]Oracle XA Error Occurred. Native Error: 24756
         at weblogic.jdbcx.oracle.OracleImplXAResource.checkError(Unknown Source)
         at weblogic.jdbcx.oracle.OracleImplXAResource.start(Unknown Source)
    fuego.transaction.DatabaseException: An error occurred while accesing the database.
    Detail:SQL statement: 'unknown'
         at fuego.server.persistence.jdbc.JdbcProcessInstancePersMgr.executeUpdateInstance(JdbcProcessInstancePersMgr.java:3157)
         at fuego.server.persistence.jdbc.JdbcProcessInstancePersMgr.updateInstance(JdbcProcessInstancePersMgr.java:2384)
         at fuego.server.persistence.Persistence.updateProcessInstance(Persistence.java:1031)
    Caused by: java.sql.SQLException: Unexpected exception while enlisting XAConnection java.sql.SQLException: XA error: XAResource.XAER_NOTA start() failed on resource 'XAENGINEDS': XAER_NOTA : The XID is not valid
    javax.transaction.xa.XAException: [BEA][Oracle JDBC Driver]Oracle XA Error Occurred. Native Error: 24756
         at weblogic.jdbcx.oracle.OracleImplXAResource.checkError(Unknown Source)
         at weblogic.jdbcx.oracle.OracleImplXAResource.start(Unknown Source)
         at weblogic.jdbcx.base.BaseXAResource.start(Unknown Source)

    Hi michelle gonzles,
    Was it working fine in Mozilla Firefox?
    Were you able to checked with a different browser as suggested above?
    Would you send your PDF document to [email protected] as an email attachment? 
    I will check it from my end.Please add the link to this forum post for reference.
    Regards,
    Florence

  • Oracle JDBC not supported by Adobe

    Our Coldfusion application periodically goes down, usually we’ll get an assortment of warnings from server.log like the ones below:
    "Warning","jrpp-15828","03/05/12","04:38:17",,"Thread: jrpp-15828, processing template: /usr1/ webroot/line.cfm, completed in 866 seconds, exceeding the 45 second warning limit"
    Several of these messages will appear and sometimes CF will remain stable and sometimes it won’t.
    I have opened a ticket with Adobe and sent them all of my logs, thread dumps and system configuration. At this point they have indicated that the Oracle JDBC driver that I’m using isn’t supported by Adobe and I should switch back to the Oracle/Coldfusion driver that is supported. It so happens that we had issues using that driver as well. I wanted to know if Adobe would support a native Oracle 11g client for this application. It’s quite to receive answers from Adobe support for Coldfusion.
    Have you ever encountered this situation before? Any information you can provide would be greatly appreciated.

    A non-SQL error occurred while requesting a connection from JDBC_DSN.
    Timed out trying to establish connection
    Error [jrpp-nnnn] - Error Executing Database Query.Timed out trying to establish connection The specific sequence of files included or processed is: \filepath\index.cfm, line: nn
    I have seen errors as above when using JDBC Microsoft SQL database connections (I do not use Oracle). It turned out the CF Java was having heap size or garbage collection problems. Once the CF Java problems were resolved via some JVM tuning the JDBC errors did not re-occur.
    HTH, Carl.

  • Oracle JDBC driver does not handle Java empty strings correctly

    If you store a Java empty string in a VARCHAR column, then try to retrieve it,
    you get back a null.
    Can someone from Oracle JDBC development
    explain why this is not a bug? An empty
    string is not the same as a null.

    Hello!
    Although all together different, but DATE type also behaves same way.
    inserting createdate = NULL in database returns you blank on select query
    inserting createdate= '' returns null on select. Correct me if i am wrong.
    prity
    <BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>Originally posted by Nagaraj Govindaraj ([email protected]):
    If you store a Java empty string in a VARCHAR column, then try to retrieve it,
    you get back a null.
    Can someone from Oracle JDBC development
    explain why this is not a bug? An empty
    string is not the same as a null.<HR></BLOCKQUOTE>
    null

  • Bug in Oracle JDBC Driver: NullPointerException when calling clearParameters

    There is a bug in the latest version of the JDBC driver that throws a NPE when calling PreparedStatement.clearParameters(). I don't need a response to this, since I have a workaround (just catching and ignoring the exception), but it should probably be fixed. I speculate that the problem only occurs when you try to call clearParameters() more than once on the same PS, but I haven't confirmed it.
    It is probably an easy fix. Following is the stack trace:
    java.lang.NullPointerException
    at oracle.jdbc.dbaccess.DBData.clearItem(DBData.java:431)
    at oracle.jdbc.dbaccess.DBDataSetImpl.clearItem(DBDataSetImpl.java:3528)
    at oracle.jdbc.driver.OraclePreparedStatement.clearParameters(OraclePreparedStatement.java:3401)
    at com.solarmetric.datasource.PreparedStatementCache$CachePreparedStatement.close(PreparedStatementCache.java:293)
    at com.solarmetric.kodo.impl.jdbc.SQLExecutionManagerImpl.executePreparedStatementBatch(SQLExecutionManagerImpl.java:666)
    at com.solarmetric.kodo.impl.jdbc.SQLExecutionManagerImpl.executePreparedStatement(SQLExecutionManagerImpl.java:514)
    at com.solarmetric.kodo.impl.jdbc.SQLExecutionManagerImpl.executeInternal(SQLExecutionManagerImpl.java:406)
    at com.solarmetric.kodo.impl.jdbc.SQLExecutionManagerImpl.flush(SQLExecutionManagerImpl.java:273)
    at com.solarmetric.kodo.impl.jdbc.runtime.JDBCStoreManager.flush(JDBCStoreManager.java:421)
    at com.solarmetric.kodo.runtime.PersistenceManagerImpl.flush(PersistenceManagerImpl.java:549)
    at com.solarmetric.kodo.runtime.PersistenceManagerImpl.commit(PersistenceManagerImpl.java:412)
    at com.sun.jdotck.api.persistencemanager.MakePersistentAssignsObjectId.testMakePersistentAssignsObjectId2(Unknown Source)
    at com.sun.jdotck.api.persistencemanager.MakePersistentAssignsObjectId.testMakePersistentAssignsObjectId(Unknown Source)
    at com.sun.jdotck.api.persistencemanager.MakePersistentAssignsObjectId.runTest(Unknown Source)
    at com.sun.jdotck.api.persistencemanager.PersistenceManagerTest.run(Unknown Source)
    at com.solarmetric.kodo.compatibility.JDOCompatabilityTestSuite$1.runTest(JDOCompatabilityTestSuite.java:493)
    at junit.framework.TestCase.runBare(TestCase.java:127)
    at junit.framework.TestResult$1.protect(TestResult.java:106)
    at junit.framework.TestResult.runProtected(TestResult.java:124)
    at junit.framework.TestResult.run(TestResult.java:109)
    at junit.framework.TestCase.run(TestCase.java:118)
    at junit.framework.TestSuite.runTest(TestSuite.java:208)
    at junit.framework.TestSuite.run(TestSuite.java:203)
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:325)
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:524)
    Marc Prud'hommeaux [email protected]
    SolarMetric Inc. http://www.solarmetric.com

    Take a look at the method that is causing the NullPointerException:
    public void clearItem(int i)
    if (!m_dynamic && m_vector == null && i < m_vector.size())
    m_vector.removeElementAt(i);
    if (m_items != null && i >= m_items.length)
    return;
    m_items[i] = null;
    return;
    A NullPointerException will be thrown whenever clearParameters() is called when no parameters have yet been bound.
    The first IF statement should read:
    if (!m_dynamic && m_vector != null && i < m_vector.size())
    A simple workaround would be to make sure that your parameter list is never empty before calling clearParameters(). Is there a patch for this anywhere?

  • Differences between Oracle JDBC Thin and Thick Drivers

    If any body is looking for this information...
    ============================================================
    I have a question concerning the Oracle JDBC thin vs. thick drivers
    and how they might affect operations from an application perspective.
    We're in a Solais 8/Oracle 8.1.7.2 environment. We have several
    applications on several servers connecting to the Oracle database.
    For redundancy, we're looking into setting up TAF (transparent
    application failover). Currently, some of our apps use the Oracle
    <B>JDBC thin</B> drivers to talk to the database, with a connection
    string that like this:
    <B> jdbc:oracle:thin:@host:port:ORACLE_SID </B>
    In a disaster recovery mode, where we would switch the database
    from one server to another, the host name in the above string
    would become invalid. That means we have to shut down our application
    servers and restart them with an updated string.
    Using the Oracle <B>OCI (thick)</B> driver though, allows us to connect
    to a Net8 service instead of a specific server:
    <B> jdbc:oracle:oci8:@NET8_SERVICE_NAME </B>
    Coupled with the FAILOVER=ON option configured in Net8, it is
    then possible to direct a connection from the first server to
    the failover database on another server. This is exactly what
    we would like to do.
    My question is, from an application perspective, how is the Oracle
    thick driver different from the thin driver? If everything
    else is "equal" (i.e. the thick driver is compatible with the
    app servers) would there be something within the the thick/OCI
    driver that could limit functionality vs. the thin driver?
    My understand, which obviously is sketchy, is that the thick
    driver is a superset of the thin driver. If this is the case,
    and for example if all database connections were handled through
    a configuration file with the above OCI connection string, then
    theoretically the thick driver should work.
    ============================================================
    <B>
    In the case with the Oracle, they provide a thin driver that is a 100% Java driver for client-side use without the need of an Oracle installation (maybe that's why we need to input server name and port number of the database server). This is platform indipendent, and has good performance and some features.
    The OCI driver on the other hand is not java, require Oracle installation, platform dependent, performance is faster, and has a complete list of all the features.
    </B>
    ========================================================
    I hope this is what you expect.
    JDBC OCI client-side driver: This is a JDBC Type 2 driver that uses Java native methods to call entrypoints in an underlying C library. That C library, called OCI (Oracle Call Interface), interacts with an Oracle database. <B>The JDBC OCI driver requires an Oracle (7.3.4 or above) client installation (including SQL*Net v2.3 or above) and all other dependent files.</B> The use of native methods makes the JDBC OCI driver platform specific. Oracle supports Solaris, Windows, and many other platforms. This means that the Oracle JDBC OCI driver is not appropriate for Java applets, because it depends on a C library to be preinstalled.
    JDBC Thin client-side driver: This is a JDBC Type 4 driver that uses Java to connect directly to Oracle. It emulates Oracle's SQL*Net Net8 and TTC adapters using its own TCP/IP based Java socket implementation. <B>The JDBC Thin driver does not require Oracle client software to be installed, but does require the server to be configured with a TCP/IP listener. Because it is written entirely in Java, this driver is platform-independent.</B> The JDBC Thin driver can be downloaded into any browser as part of a Java application. (Note that if running in a client browser, that browser must allow the applet to open a Java socket connection back to the server.
    JDBC Thin server-side driver: This is another JDBC Type 4 driver that uses Java to connect directly to Oracle. This driver is used internally by the JServer within the Oracle server. This driver offers the same functionality as the client-side JDBC Thin driver (above), but runs inside an Oracle database and is used to access remote databases. Because it is written entirely in Java, this driver is platform-independent. There is no difference in your code between using the Thin driver from a client application or from inside a server.
    ======================================================
    How does one connect with the JDBC Thin Driver?
    The the JDBC thin driver provides the only way to access Oracle from the Web (applets). It is smaller and faster than the OCI drivers, and doesn't require a pre-installed version of the JDBC drivers.
    import java.sql.*;
    class dbAccess {
    public static void main (String args []) throws SQLException
    DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
    Connection conn = DriverManager.getConnection
    ("jdbc:oracle:thin:@qit-uq-cbiw:1526:orcl", "scott", "tiger");
    // @machineName:port:SID, userid, password
    Statement stmt = conn.createStatement();
    ResultSet rset = stmt.executeQuery("select BANNER from SYS.V_$VERSION");
    while (rset.next())
    System.out.println (rset.getString(1)); // Print col 1
    stmt.close();
    How does one connect with the JDBC OCI Driver?
    One must have Net8 (SQL*Net) installed and working before attempting to use one of the OCI drivers.
    import java.sql.*;
    class dbAccess {
    public static void main (String args []) throws SQLException
    try {
    Class.forName ("oracle.jdbc.driver.OracleDriver");
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    Connection conn = DriverManager.getConnection
    ("jdbc:oracle:oci8:@qit-uq-cbiw_orcl", "scott", "tiger");
    // or oci7 @TNSNames_Entry, userid, password
    Statement stmt = conn.createStatement();
    ResultSet rset = stmt.executeQuery("select BANNER from SYS.V_$VERSION");
    while (rset.next())
    System.out.println (rset.getString(1)); // Print col 1
    stmt.close();
    =================================================================

    Wow, not sure what your question was, but there sure was a lot of information there...
    There really is only one case where failover occurs, and it would not normally be in a disaster recovery situation, where you define disaster recovery as the obliteration of your current server farm, network and concievably the operational support staff. This would require a rebuild of your server, network etc and isn't something done with software.
    Fail over is normally used for high availablity that would take over in case of hardware server failure, or when your support staff wants to do maintenance on the primary server.
    Using the thin and thick driver should have ZERO affect on a failover. Transparent failover will make the secondary server the same IP as the primary, therefore the hostname will still point to the appropriate server. If you are doing this wrong, then you will have to point all your applications to a new IP address. This should be something that you tell your management is UNACCEPTABLE in a fail-over situation, since it is almost sure to fail to fail-over.
    You point out that you are providing the TNSNAME, rather than the HOSTNAME when using the thick driver. That's true within your application, but that name is resolved to either a HOSTNAME, or IP ADDRESS before it is sent to the appropriate Oracle server/instance. It is resolved using either a NAME server (same as DNS server but for Oracle), or by looking at a TNSNAMES file. Since the TNSNAMES files profilerate like rabbits within an organization you don't want a fail over that will make you find and switch all the entries, so you must come up with a fail over that does not require it.
    So, the application should not be concerned with either the hostname, or the IP address changing during fail over. That makes use of the thin or thick client acceptable for fail over.
    Don't know if this will help, but this shows the communication points.
    THIN DRIVER
    client --> dns --> server/port --> SID
    THICK DRIVER
    client --> names server --> dns --> server/port --> SID
    client --> tnsnames     --> dns --> server/port --> SID

  • Oracle jdbc driver spending 40 seconds to make connection to Oracle db 11g

    we are using weblogic 10.3.3 and teh default Oracle11.1.0.7 Driver ojdbc6.jar to talk to Oracle db 11.2.0.1
    After reviewing weblogic logs I see that it takes 50 secodns for each connection to db
    HHere is a snippet (note I put in a 10 sec login dleay as i was experimenting, butt eh problem still occurs with or without login delay)
    <Dec 21, 2010 1:28:19 AM GMT> <Info> <JDBC> <BEA-001516> <Connection Pool "acm_repository" connected to Database: "Oracle", Version: "Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, Automatic Storage Management, OLAP, Data Mining
    and Real Application Testing options".>
    Dec 21, 2010 1:28:19 AM GMT> <Info> <JDBC> <BEA-001517> <Connection Pool "acm_repository" using Driver: "Oracle JDBC driver", Version: "11.1.0.7.0-Production".>
    <Dec 21, 2010 1:28:19 AM GMT> <Info> <JDBC> <BEA-001132> <Initialized statement cache of size "10" for connection in pool "acm_repository".>
    <Dec 21, 2010 1:28:19 AM GMT> <Info> <JDBC> <BEA-001066> <Delaying 10 seconds before making a acm_repository pool connection.>
    <Dec 21, 2010 1:29:09 AM GMT> <Info> <JDBC> <BEA-001068> <Connection for pool "acm_repository" created.>
    There is someting wrong in this environment
    I donwloaded the _g version fo teh exact same driver and had weblogic use it so I could generate verbose logs
    Here is a snippet fo teh oracle drivers verbose log file . If you notice the key parts
    it seems like its spending 40 second to make the connection, goes into a setConnectionDuringExceptionHandling method and creates the connection
    can someone shed light on what causes itto go into an exception state
    This happens for each and every connection but only in one specific environment
    we have other environments which seem towork fine with the exact same product versions except for this environment
    Thank you for any guidance on troubleshooting this further
    -Y
    Dec 21, 2010 1:27:38 AM oracle.jdbc.driver.PhysicalConnection parseConnectionProperty_Object
    TRACE_16: Exit
    Dec 21, 2010 1:27:38 AM oracle.jdbc.driver.PhysicalConnection readOCIConnectionPoolProperties
    TRACE_16: Exit
    Dec 21, 2010 1:27:38 AM oracle.jdbc.driver.PhysicalConnection readConnectionProperties
    TRACE_16: Exit
    Dec 21, 2010 1:27:38 AM oracle.jdbc.driver.PhysicalConnection initialize
    TRACE_16: Enter: null, null, null
    Dec 21, 2010 1:27:38 AM oracle.jdbc.driver.PhysicalConnection initialize
    TRACE_16: Exit
    Dec 21, 2010 1:27:38 AM oracle.jdbc.driver.PhysicalConnection needLine
    TRACE_16: Enter:
    Dec 21, 2010 1:27:38 AM oracle.jdbc.driver.PhysicalConnection needLineUnchecked
    TRACE_16: Enter:
    Dec 21, 2010 1:27:38 AM oracle.jdbc.driver.PhysicalConnection needLineUnchecked
    TRACE_16: Exit
    Dec 21, 2010 1:27:38 AM oracle.jdbc.driver.PhysicalConnection needLine
    TRACE_16: Exit
    Dec 21, 2010 1:27:38 AM oracle.jdbc.driver.T4CConnection logon
    **TRACE_16: Enter:**
    **Dec 21, 2010 1:27:38 AM oracle.jdbc.driver.T4CConnection connect**
    **TRACE_16: Enter: "10.135.3.80:1521:EPFDSQA"**
    **Dec 21, 2010 1:28:18 AM oracle.jdbc.driver.T4CMAREngine setConnectionDuringExceptionHandling**
    **TRACE_16: Enter:**
    **Dec 21, 2010 1:28:18 AM oracle.jdbc.driver.T4CMAREngine setConnectionDuringExceptionHandling**
    TRACE_16: ExitDec 21, 2010 1:28:18 AM oracle.jdbc.driver.DBConversion findDriverCharSet
    TRACE_16: Enter: 178, 8100
    Dec 21, 2010 1:28:18 AM oracle.jdbc.driver.DBConversion findDriverCharSet
    TRACE_16: return: 178
    Dec 21, 2010 1:28:18 AM oracle.jdbc.driver.DBConversion findDriverCharSet
    TRACE_16: Exit
    Dec 21, 2010 1:28:18 AM oracle.jdbc.driver.DBConversion <init>
    TRACE_16: Enter: 178, 178, 2000
    Dec 21, 2010 1:28:18 AM oracle.jdbc.driver.DBConversion init
    TRACE_16: Enter: 178, 178, 2000

    I would file an oracle jdbc bug to begin with, but I am guessing the driver is simply waiting
    for the DBMS to respond, so yo may need a good DBA to see what the DBMS thinks is going
    on at the time. I did hear of a case where the DBMS was doing some auditing, logging
    some info during every login. This info was being written to an OS file which just happened
    to be remote-mounted and would occasionally take 30 seconds, which caused connection
    requests to timeout at the driver end.... WebLogic is just asking the driver for a connection
    using your properties, so it's not involved directly with the problem....

  • Issue encountered when Login as sysdba role using Thin Oracle JDBC Driver

    Hello all,
    we are now considering to use Thin oracle JDBC driver to create database in our project, but we met one issue when we tried to connect to oracle as sysdba role using Thin driver, and it throws java.sql.SQLException: Io Exception: SO Exception was generated, I have found some tips on oracle jdbc website and it says :
    How do I connect as SYSDBA or SYSOPER?
    The only way to do this is to use the Properties object when connecting, rather than specifying the username and password as strings. Put the username into the "user" property, and the password into the "password" property. Then, put the mode into the "internal_logon" property. Something like the following:
    Properties props = new Properties();
    props.put("user", "scott");
    props.put("password", "tiger");
    props.put("internal_logon", "sysoper");
    Connection conn = DriverManager.getConnection (url, props);
    When connecting as SYSDBA or SYSOPER using the Thin driver, the RDBMS must be configured to use a password file. See "Creating and Maintaining a Password File" in the "Oracle Database Administrator's Guide".
    So, i did execute orapwd command to create a password file and also set remote_login_passwordfile=execlusive in my initxxx.ora initial parameter file, however, when i tried to connect, it failed.
    private static void createEmsdbDatabase(){
    String url = "jdbc:oracle:thin:@localhost:1521:";
    StringBuffer sqlStatement = new StringBuffer();
    sqlStatement.append("create database xxx");
    sqlStatement.append("maxdatafiles 254 ");
    sqlStatement.append("maxinstances 8 ");
    sqlStatement.append("maxlogfiles 32 ");
    sqlStatement.append("character set UTF8 ");
    sqlStatement.append("national character set UTF8 ");
    sqlStatement.append("DATAFILE 'c:\\oracle\\xxx\\system01.dbf' SIZE 18M REUSE ");
    sqlStatement.append("logfile 'c:\\oracle\\xxx\\redo01.log' SIZE 2M REUSE, ");
    sqlStatement.append("'c:\\oracle\\xxx\\redo02.log' SIZE 2M REUSE, ");
    sqlStatement.append("'c:\\oracle\\xxx\\redo03.log' SIZE 2M REUSE ");
    try {
    DriverManager.registerDriver(new OracleDriver());
    Properties props = new Properties();
    props.put("user", "sys");
    props.put("password", "password");
    props.put("database","xxx");
    props.put("internal_logon", "sysdba");
    Connection conn = DriverManager.getConnection(url, props);
    Statement statement = conn.createStatement();
    statement.executeUpdate(sqlStatement.toString());
    statement.close();
    conn.close();
    } catch (SQLException e) {
    e.printStackTrace();
    But what made me puzzled a lot is if i use OCI driver, it did work great, why??? guys, anybody knows, please give me some tips, thanks in advance.
    regards,
    Kaixuan @ Shanghai

    clarify my question in detail:
    Step 1 : create password file using orapwd command
    Step 2 : create database instance using oradim command
    Step 3 : login using sys as sysdba to startup database, e.g startup nomount pfile='...\initxxx.ora'
    Step 4 : create database.
    java code showing below:
    private static void createEmsdbDatabase(){
    String url = "jdbc:oracle:thin:@localhost:1521:";
    StringBuffer sqlStatement = new StringBuffer();
    sqlStatement.append("create database xxx ");
    sqlStatement.append("maxdatafiles 254 ");
    sqlStatement.append("maxinstances 8 ");
    sqlStatement.append("maxlogfiles 32 ");
    sqlStatement.append("character set UTF8 ");
    sqlStatement.append("national character set UTF8 ");
    sqlStatement.append("DATAFILE 'c:\\oracle\\xxx\\system01.dbf' SIZE 18M REUSE ");
    sqlStatement.append("logfile 'c:\\oracle\\xxx\\redo01.log' SIZE 2M REUSE, ");
    sqlStatement.append("'c:\\oracle\\xxx\\redo02.log' SIZE 2M REUSE, ");
    sqlStatement.append("'c:\\oracle\\xxx\\redo03.log' SIZE 2M REUSE ");
    try {
    DriverManager.registerDriver(new OracleDriver());
    Properties props = new Properties();
    props.put("user", "sys");
    props.put("password", "password");
    props.put("database","xxx");
    props.put("internal_logon", "sysdba");
    Connection conn = DriverManager.getConnection(url, props);
    Statement statement = conn.createStatement();
    statement.executeUpdate(sqlStatement.toString());
    statement.close();
    conn.close();
    } catch (SQLException e) {
    e.printStackTrace();
    issue was met here, when i tried to login as sysdba using sys, and in my java code, i use Thin driver, it then thrus exception, but when OCI driver is used, it works great, i don't know why.
    that is, when i use "jdbc:oracle:oci8:@" as database URL and then properties.put("database","xxx"), it works great. but, when i use "jdbc:oracle:thin:@localhost:1521:" as database URL and then properties.put("database","xxx"), it failed. hopefully, i have clarified my question clearly. thanks.

Maybe you are looking for

  • Negative amount in sales order

    Dear experts, We are in support project, ours is order related billing, we get a error message in a sales order, when we enter a base value is "zero", and add a discount in the same sales order with absolute amount which is a negative value, this dis

  • Stupid Mac OS bug - Won't delete open folders in list view

    This took some time to figure out and might help someone else... If you want to delete a folder while in list view, you must first close it before it will be deleted.  In the example below, you can select folder "Test 1", Move to Trash and it will be

  • MP3 Files - Browse or Layout Mode - which is better?

    Hi, Recently Roger Wilmut1 gave me the correct process on how to <drag and drop> audio files into my database. As part of the process, he suggested, "Make sure you are in Browse mode." I played the audio file in <Browse> mode. I double clicked the au

  • WIFI NEEDS TO BE RESET EVERY 2 MINUTES

    ON MY WI FI I HAVE TO RESET MY IPHONE 5 WIFI EVERY 2 MINUTES IF LEFT UNUSED. CAN ANYBODY GUIDE PLEASE AS THERE ARE OTHER PHONES IN THE SAME WIFI NETWORK N THEY DONT NEED TO BE RESET LIKE THE WAY I DO ON MY IPHONE 5

  • Qm inspection lot

    we have problem iselect inspection type 03in qm tab in material master  also menton mic in routing  after creating production order inspection lot is created but in inspection lot there is error that inspection specification not yet assign what is so