Able to make dirty read using Oracle 9i and JDBC thin driver v 9.2.0

I've searched this forum and did not see anything to directly answer my question.
I checked the Oracle JDBC Frequently Asked Questions...
ditto (perhaps due to the fact that it was last updated: 22 June 2001).
So here is my question, and thank you in advance for any insight (apologies if I have missed finding an already answered question):
Section 19-15 of:
"JDBC Developer’s Guide and Reference"
(which is for Oracle 9i database)
downloadable from:
http://download-east.oracle.com/docs/cd/B10501_01/java.920/a96654.pdf
is entitled:
"Transaction Isolation Levels and Access Modes"
The section seems to indicate that
if JDBC connection A is setup with:
setAutoCommit(false)
setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED)
and then used to perform an update on a row (no commit(), rollback(), or close() yet) ...
then JDBC connection B (setup in the same way) will be prevented from
making a dirty read of that same row.
While this behavior (row-level locking) occurs correctly when using MS SQL Server 2000,
it is not occuring correctly with Oracle 9i and the Oracle Thin JDBC driver version 9.2.0.
The test case I have shows that with Oracle, connection B is able to make a dirty read
successfully in this case.
Am I doing something wrong here ?
Again, MS SQL Server correctly blocks connection B from making the Read until Connection A
has been either committed, rolled back, or closed, at which time connection B is able to
complete the read because the row is now unlocked.
Is there a switch I must throw here ?
Again, any help is greatly appreciated.

Thanks for the response.
I understand what you are saying...
that readers don't block writers in Oracle (the same is true in SQL Server 2000).
However, I don't see how my test case is working correctly with Oracle (the exact same code acting as I'm thinking it should with SQL Server, but I still think it is acting incorrectly with Oracle).
I have transaction A do this:
update <table> set <column2>=<value> where <column1>='1'
then I use Thread.sleep() to make that program hang around for a few minutes.
Meanwhile I sneak off and start another program which begins transaction B. I have transaction B do this:
select * from <table> where <column1>='1'
and the read works immediately (no blocking... just as you have said) however, transaction A is still sleeping, it has not called commit() or rollback() yet.
So what if transaction A were to call rollback(), the value read by transaction B would be incorrect wouldn't it ?
Both A and B use setAutoCommit(false) to start their transactions, and then call setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED).
Isn't that supposed to guarantee that a reader can only read what is committed ?
And if a row is in "flux"... in the process of having one or more values changed, then the database cannot say what the value will be ?
I can almost see what you are saying.
In letting the reader have what it wants without making it wait, I suppose it could be said that Oracle is holding true to the "only let committed data be read"
So if that's it, then what if I want the blocking ?
I want an entire row to be locked until whoever it in the middle of updating, adding, or removing it has finished.
Do you know if that can be done with Oracle ? And how ?
Thanks again for helping me.

Similar Messages

  • Oracle server side jdbc thin driver throws ORA-01017

    We upgraded our database to 11.2.0.1 from 9.2.0.6.
    When we try to connect to an external database from Oracle JVM using server side jdbc thin driver, it throws invalid user id/password error.
    The below test code simulates the issue and is not working on the upgraded instance. The same code is working in fine in other 11.2.0.1 instances. It worked fine before upgrade. In all cases, we are connecting to the same target database instance which is also in 11.2.0.1. It fails only on this database.
    SEC_CASE_SENSITIVE_LOGON is set to false.
    Any inputs will be highly appreciated.
    Code:_
    create or replace and compile java source named TestConn as
    import java.sql.SQLException;
    import oracle.jdbc.OracleDriver;
    import oracle.jdbc.OracleConnection;
    import java.sql.DriverManager;
    public class TestConn {
         public  static String runTest() {
          String msg = "Start";
          OracleConnection tempOC = null;
          try {
          String pUrl = "jdbc:oracle:thin:@dev:1521:dev";
          String pUser = "tst_user";
          String pPwd = "dummy";
          DriverManager.registerDriver (new oracle.jdbc.OracleDriver());
          tempOC = (OracleConnection)DriverManager.getConnection(pUrl, pUser, pPwd);
    msg = "Success";
    } catch (SQLException sqle) {
          System.out.println(sqle.toString());
          sqle.printStackTrace();
          msg = "Failure";
            return msg;
    CREATE OR REPLACE FUNCTION test_conn RETURN VARCHAR2
    AS LANGUAGE JAVA
    NAME 'TestConn.runTest() return java.lang.String';
    set serverout on
    declare
    c varchar2(4000);
    begin
    dbms_java.set_output(5000);
    c:=test_conn();
    dbms_output.put_line(c);
    end;
    / Error Message_
    java.sql.SQLException: ORA-01017: invalid username/password; logon denied
    java.sql.SQLException: ORA-01017: invalid username/password; logon denied
           at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439)
           at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:388)
           at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:381)
           at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:564)
           at oracle.jdbc.driver.T4CTTIoauthenticate.processError(T4CTTIoauthenticate.java:431)
           at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436)
           at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
           at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:366)
           at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java)
           at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:359)
           at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java)
           at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
           at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
           at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java)
           at java.sql.DriverManager.getConnection(DriverManager.java)
           at java.sql.DriverManager.getConnection(DriverManager.java)
           at TestConn.runTest(TESTCONN:22) Edited by: sskumar on Mar 6, 2011 1:12 PM

    At the time our issue was resolved, the bug was not published. And, I was told, there was no information in metalink about the isue. I am not sure whether they published some thing in the last few weeks.
    This is what resolved our issue.
    Step 1: alter system set java_jit_enabled=FALSE;
    Step 2: Try your test case. If it is the same issue as ours, your test case will be successful. If it succeeds, Go to step 3. If it does not succeed, it is a different issue.
    Step 3: alter system set java_jit_enabled=TRUE;
    Step 4: Run your test case. If it is the same issue, it is expected to fail. Go to Step 5 in case of failure.
    Step 5: Delete all rows from table java$mc$
    Step 6: Restart the database
    Step 7: Run your test case. It is expected to be successful.

  • Sql_trace does not work for Java app using Oracle JDBC thin driver

    Hi,
    I'm using Oracle 8.1.7. I enabled sql trace at instance level by setting sql_trace and timed_statistics to true in init.ora. I restarted the db instance. I wrote a stand-alone java application which used Oracle JDBC thin driver(classes12.zip) to make a connection to my db instance, do some select statements, and close the connection. There were no trace files generated in the folder specified by udump_dest variable. However, if I used sqlplus or dba studio, I saw trace files generated. Has anyone got Oracle sql trace work for JDBC calls from java apps.
    Thanks in advance!

    Hi,
    I'm using Oracle 8.1.7. I enabled sql trace at instance level by setting sql_trace and timed_statistics to true in init.ora. I restarted the db instance. I wrote a stand-alone java application which used Oracle JDBC thin driver(classes12.zip) to make a connection to my db instance, do some select statements, and close the connection. There were no trace files generated in the folder specified by udump_dest variable. However, if I used sqlplus or dba studio, I saw trace files generated. Has anyone got Oracle sql trace work for JDBC calls from java apps.
    Thanks in advance!

  • Problem using JDBC Thin driver with Oracle 8i Personal Edition

    Hi all, I have an issue I have been unable to figure out. In order to make my code as portable as possible I am using the JDBC thin driver to access my database. I have been able to connect to an instance of Oracle 8i on a Sun box by hardcoding the following string into getConnection() call:
    conn = DriverManager.getConnection("jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(COMMUNITY=tcp.world)(PROTOCOL=TCP)(Host=<myhostname>)(Port=1521))(ADDRESS=(COMMUNITY=tcp.w orld)(PROTOCOL=TCP)(Host = <myhostname>)(Port = 1526)))(CONNECT_DATA = (SID = <mysidname>)))", <myuser>, <mypassword>);
    My problem is that I cannot figure out what string to use to connect to my local instance of Oracle 8i Personal. I used the following string (the sid I got from the looking at the init.ora file):
    conn = DriverManager.getConnection("jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(COMMUNITY=tcp.world)(PROTOCOL=TCP)(Host=localhost)(Port=1521))(ADDRESS=(COMMUNITY=tcp.world)(PRO TOCOL=TCP)(Host = localhost)(Port = 1526)))(CONNECT_DATA = (SID = orcl)))", "scott", "tiger");
    That didn't work, so I took the only entry found in my tnsnames.ora file in as:
    conn = DriverManager.getConnection("jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)))(CONNECT_DATA = (SID = PLSExtProc)(PRESENTATION = RO)))", "scott", "tiger");
    I am not knowing what is wrong, but that didn't work neither. Any suggestions would be highly appreciated.
    Thanks....
    null

    try this:
    conn = DriverManager.getConnection("jdbc:oracle:thin:scott/tiger:@hostname:1521:sid");
    or use system/manager as username/passward
    null

  • I am new to iMovies.  When I make a video using the mic and camera in my Macbook Pro, the audio and video are not in synch.  Very annoying.  How can I fix this?

    I am new to iMovies.  When I make a video using the mic and camera in my Macbook Pro, the audio and video are not in synch.  Very annoying.  How can I fix this?

    DVD drives read the bottom of the disk, not the top. Smooth out the paper & try again.

  • Change expired password using oracle jdbc thin driver

    Hello,
    I have a java program that uses the oracle jdbc thin driver (ojdbc6 - version 11.2.0.3) for database connection. My question is if I have any possibility to change an expired password (java.sql.SQLException: ORA-28001: the password has expired) using the thin driver - NOT OCI?

    No - the thin driver doesn't have any password management features.

  • Want to export database not user. i am using oracle 8i and developer 6i.

    i am using oracle 8i and developer 6i. i have created a button(when_button_pressed) on d2k with this command mentioned below. it is working only for user objects but i need to export database. how can i do this?
    declare
         com varchar2(100);
    begin
    host('exp tAJCO/tAJCO@tajco file=D:\dump\tajco.dmp');
    if
         not form_success then
         message('Export failed.');
    else
         message('Export successful');
    end if;
    end;
    please help me.....
    thanks
    mostafiz

    mostafiz,
    To Export entirel database, use the statement
         Host('EXP tAJCO/tAJCO@tajco FILE=D:\dump\tajco.dmp FULL=YES DIRECT=Y',NO_SCREEN);
    Regards,
    Manu.

  • Using Oracle JDBC Thin Driver

    We are trying to use the Oracle supplied JDBC thin driver directly from within a jar file we add for our application.
    The classes in the jar file directly connect to an oracle database via the thin driver.
    The problem we've encountered is that if the JDBC Connection object is held in memory, after some time, the connection times out for no reason.
    Is there some restriction with weblogic in connecting directly to database from a class file and then caching the connection reference? It almost seems as if weblogic is severing the connections.
    thank you,
    BJ

    Stefan,
    You are right, although I would recommend just having the
    TestConnectionOnReserve= true and the testTableName set. Refresh Minutes
    becomes kind of redundent when you set these values.
    TestConnsOnReserve allows the server to verify if a connection that the
    client/application has requested is good , otherwise it recreates this
    connection and gives it to the client/application.
    hth
    sree
    "Stefan" <[email protected]> wrote in message
    news:[email protected]...
    Hi Sree,
    If instead a WL connection pool would be used this issue could be solved
    using
    "Refresh Period" and TestTableName right? In this case the connection would
    be
    alive as long as WL server is up. As a bonus we would have an automatic
    reconnection
    after an Oracle server reboot?
    thanks, stefan
    "Sree Bodapati" <[email protected]> wrote:
    Hi BJ,
    When you get connection directly using the Oracle thin driver, this is
    for
    sure your database timing out the connection when no activity is detected
    for sometime. You should consult with your DBA to ensure this timeout
    is set
    to a higher value at the server or ensure you dont hold on to theconnection
    for long durations or ensure you handle this situation by triggering
    a
    generic oracle process so that you periodically keep the connection busy
    to
    ensure that the database does not close it.
    This shouldnt be anything to do with WebLogic as you dont seem to be
    using
    WebLogic connection pool.
    hth
    sree
    "BJ Choi" <bongjin.choi@neoforma> wrote in message
    news:[email protected]...
    We are trying to use the Oracle supplied JDBC thin driver directly from
    within a jar file we add for our application.
    The classes in the jar file directly connect to an oracle database via
    the
    thin driver.
    The problem we've encountered is that if the JDBC Connection object is
    held
    in memory, after some time, the connection times out for no reason.
    Is there some restriction with weblogic in connecting directly to database
    from a class file and then caching the connection reference? It almost
    seems
    as if weblogic is severing the connections.
    thank you,
    BJ

  • Move all data from one database to other using oracle expdp and impdp tool

    I need to move all of the data from one database to another. For that I am using oracle expdp and impdp tool.
    I have the full database export dump file. I moved that dump file to my other database.
    Now when I try to use impdp tools it gives lots of error regarding path mismatch,user not exists, role not exists.
    As my datafile path of source database does not match with the target database path , also the users are not there in target database. I dont want to create all the tablespaces that in my source database as there are 82 tablespaces.Is there any way by which I can move my all data without using remap option for tablespaces or users and grants.

    The FULL parameter indicates that a complete database export is required. The following is an example of the full database export and import syntax.
    The user must have the privielge of EXP_FULL_DATABASE
    expdp system/password@db10g full=Y directory=TEST_DIR dumpfile=DB10G.dmp logfile=expdpDB10G.log
    impdp system/password@db10g full=Y directory=TEST_DIR dumpfile=DB10G.dmp logfile=impdpDB10G.logGO through below linkfor more details...
    http://www.oracle-base.com/articles/10g/OracleDataPump10g.php
    Regards
    Umi
    Edited by: Umi on Feb 4, 2011 2:27 AM

  • Is JDBC  thin driver 10.1.0.3 compatible with ORACLE-10.2.0.2.0 ?

    Hi Everyone,
    Please let me know whether the JDBC thin driver 10.1.0.3 Driver compatible with the oracle server 10G version 10.2.0.2.0? We are facing some issues with the compatibility.
    The Errors we are getting is : StaleConnectionException while we are using the driver from the Websphere.
    Please let us know..Very Urgent.
    Thanks in Advance,
    Samuel.
    Message was edited by:
    user637857

    Hi Legatti,
    Thanks for taking time out and replying me.
    We dont know the reason why that error is being caused. Because the error is caused on the production we are not able to make any trail and errors. If we are sure that the driver compatibility is causing the error then we can go ahead and download the latest driver. If the latest driver will solve the problem we have to convince the client that the error is caused due to the incompatible driver. So if you have any documents/information supporting that please help.
    Thanks
    Samuel.

  • Oracle JDBC Thin Driver and Firewall Problem

    Hi!
    We have Oracle 8.1.5 and Websphere App Server. There is a
    firewall between the two. A servlet creates a connection pool
    (not that of Wesphere's). The frontend is JSP/HTML (no applets).
    The servlet uses the Oracle JDBC Thin Driver for DB Connections.
    The problem is - Once the connection is freed, the connection
    pool is not being able to retrieve it and hence it created
    another one, thus reaching the max. # of connections and the
    system hangs. Restarting the DB service flushes the connection
    and the application starts running again...
    There was a similar problem discussed in this forums long ago. I
    have not yet tried mentioning the firwall port and IP in the
    connection string. But apart from that, is there any other
    setting I need to do (on firewall or for the connectionstring)
    to deal with this problem?
    Someone had suggested to punch a hole in the firewall for the DB
    port - but we can not really do that in the current scenario...
    I would appreciate if anyone could share their experience
    regarding how they resolved this issue.
    Thanks in advance,
    Vijaya.

    One more question -
    Can we use Oracle JDBC OCI driver? We do not have any appletes...
    Does it have firewall issues too? Is there any other driver that
    we can use?
    Thanks,
    Vijaya.

  • How does Oracle JDBC thin driver handle numbers via getString?

    Hi,
    I have a query regarding how numbers are handled by the oracle jdbc thin driver. The issue I am facing is with regards to the decimal separator (. is en_US and , in pt_BR)
    e.g. Consider the below code,
    Connection conn = DriverManager.getConnection(...);
    Statement stmt = conn.createStatement();
    ResultSet rset = stmt.executeQuery("select value from test_table1");
    while (rset.next())
    System.out.println (rset.getString(1));
    test_table1 has a single column of sql type 'number' with a single row having value "123.45"
    NLS_NUMERIC_CHARACTERS = ".,"
    Database version = 10.2.0.2.0
    There is a (generic) method to which a ResultSet is passed and it returns a dictionary of key value pairs. All column values from the ResultSet are retrieved using getString method of ResultSet.
    My question is whether the jdbc driver formats numbers (based on the locale) before returning it as a string as part of the getString method?
    e.g.
    java -Duser.language=pt -Duser.region=BR TestJDBC
    prints "123.45" and not "124,45"
    Is there a reason why getString always retrieves a number column value with '.' as the decimal separator?
    To help make things a bit more clear, all the column values retrieved are then converted into an XML (and hence the conversion to string)
    At present, the only way I see out of this is to handle numbers differently.
    i.e. something similar to,
    if (resultsetmetadata.getcolumntype .. = double OR float OR int OR long.. )
    NumberFormat.getInstance().format(rset.getDouble(1));
    Is there a better way to resolve this issue?
    Thanks,
    Binoy

    user565580,
    As has been already stated, Oracle does not have data-types INTEGER or SMALLINT, only NUMBER.
    So even though Oracle lets you write INTEGER, it really creates a NUMBER.
    (As Joe mentioned.)
    Other databases don't have a NUMBER data-type, they have INTEGER, SMALLINT, etc.
    Originally, Oracle database only had three data-types:
    CHAR
    DATE
    NUMBER
    If you're going to be working with Oracle database, then you need to adapt yourself to its limitations.
    So you'll probably need to define NUMBER data-types using scale and precision.
    (As Kuassi mentioned.)
    Good Luck,
    Avi.

  • OS Authentication using JDBC Thin driver

    Hi
    I have a problem while connecting to Oracle database using JDBC Thin Driver, Basically I am trying to connect using OS Authentication. The following explains clearly what I am trying to do.
    String connectionURL = "jdbc:oracle:thin:@localhost:1521:XYZ";
    String userName = "/";
    String password = "";
    java.util.Properties info = new java.util.Properties();
    info.setProperty("user",userName);
    info.setProperty("password",password);
    conn = DriverManager.getConnection(connectionURL,info);
    When executing the code I am getting an exception as follows.
    java.sql.SQLException: Null user or password not supported in THIN driver
    When i searched in the Oracle site i got the below information
    Note:
    By default, the JDBC driver retrieves the OS username from the user.name system property, which is set by the JVM. If the JDBC driver is unable to retrieve this system property or if you want to override the value of this system property, then you can use the OracleConnection.CONNECTION_PROPERTY_THIN_VSESSION_OSUSER connection property. For more information, see Oracle Javadoc.
    I want to know how to set the OracleConnection.CONNECTION_PROPERTY_THIN_VSESSION_OSUSER connection property.
    Advance Thanks

    Based on your code, when you try to connect your username is null and the password is "/". You are not going to be able to get the OS password using Java.

  • Jdbc oracle jdbc-thin driver subname

    I am working on Windows 2000 environment, using oracle8i 8.1.7 JDBC-Thin driver for use with JDK 1.2.x. The oralce8i 8.1.7 database is on another linux box. I can access the linux box through its ip address, but not by its hostname since it's not accessiable by the dns server. In my code, in the JDBCUrl, I used ip address instead of the hostname, e.g. "jdbc:oracle:thin:@10.0.113.108:1521:ora1". But I got the error like: "java.sql.SQLException: Io exception: The Network Adapter could not establish the connection". If I add a entry in my working machine's hosts file to map the hostname, I can fix the problem. But I don't know if this is the solution, or there is other better solutions.
    Thanks
    null

    Using a hosts file entry is a common solution for problem where the dns lookup does not contain an entry for a RDBMS server platform.
    The real solution is to resolve this issue :
    "where the dns lookup does not contain an entry for a RDBMS server platform."

  • Oracle JDBC Thin Driver for oracle 9.2.0.4

    Hi,
    It would be nice if someone please guide me to the download of Oracle JDBC Thin Driver for oracle 9.2.0.4.
    Thanks in anticipation

    user566773,
    As far as I know, all Oracle JDBC drivers are meant to be backward compatible.
    According to the table on the following Web page, the latest Oracle JDBC driver can be used with Oracle 9.2.0.x DBMS.
    http://www.oracle.com/technology/tech/java/sqlj_jdbc/index.html
    Good Luck,
    Avi.

Maybe you are looking for

  • Hp laserjet m 1005 mfp legal paper printing prblum

    hp laserjet m 1005 mfp legal paper printing prblum

  • CRM Table for Condition Type value

    Hi All, Can you please let me know the table name from where I can get the value of the pricing condition EK02 in CRM. I have a document number from which i can manage to get the item guid. From this I need to get the value of the EK02 condition type

  • Drag and drop to Collection doesn't work

    I have successfully created a Collection but cannot add to it by dragging files from the grid view as suggested in Help. There does not seem to be a menu command to do it either so I am a bit stuck. I am using 1.3.1 on a PC running XP. I have tried i

  • Auto Create Outbound Delivery and Shipment from IDoc

    Hi Ppl, Currently, we have a transport company which handles all our transportation of goods to our customer. We develop a project, phase 1 which we automatically sends sales order in form of IDocs to our transport company and they in turn we send us

  • GUI not working anymore after installing of ABAP preview

    Hi, I have sapgui 6.40 installed on my computer. Now after installing the Netweaver Preview ABAP stack (the installation worked fine) I cannot start my sapgui anymore. I get a messagebox with the following message: "The procedure entry point RfcReset