Non-blocking execution with Pro*C/C++

Hi readers,
Is there any mechanism available through which Non-blocking execution with Pro*C/C++?
I observe that Pro*C queries are hanged when the DB server (hardware) is down.
I understand that OCI provides non-blocking mechanisms. Pro*C doesn't use this OCI functionality?
Regards,
RajaGopal Maddi

You can use TAF to handle your db down scenario.
http://www.oracle.com/technetwork/database/app-failover-oracle-database-11g-173323.pdf

Similar Messages

  • Non-blocking JDBC with Oracle OCI

    I have been monitoring performance for a batch type application in a production environment over the last couple of weeks and all indications are that the blocking JDBC actions are the cause of performance issues in the application. The data access layer is built on Hibernate. And while HIbernate is a fine ORM, and does a great job of creating lightweight, fast individual pieces of SQL, I fear it is the sum of these parts that is causing our problems. I consistently see the Hibernate BatcherImpl getResultSet as consuming the most exclusive time in processing. Of course this is related to the structure of the target database as a lot of this time is being spent in execution.
    What appears to be happening is that the executing threads are blocking until they get a response from the database. We are currently using Thin connections, on 10.2.x drivers. On last reading our processor queue length was as high as 70!! This is a clear indication of a CPU bottleneck.
    I was wondering if it is possible to configure non-blocking JDBC using the OCI type connections instead of Thin connections....
    Any advice someone could give on this topic would be much appreciated.
    Thanks much in advance,
    Jay

    Hi Thomas,
    Thank you for the reply. I am aware that only one statement can be executed on a connection at any given time, and we have connection pooling configured, so that's not a problem.
    More specifically what I am looking for here is that when a thread executes a sql statement using a connection, it seems to block on the processor, it does not switch out, thus not allowing other work to be done while the database satisfies the sql statement. I was wondering if OCI connections were used would the thread switch out until a response was recieved from the database.

  • Non Blocking Call with OCCI

    Hi Everyone
    I have searched through the whole OCCI documentation and could not find a way to make an asynchronous call to the database. you see the issue we have is that we need to cancel a call to the database if it does not return within the timeout value set. However, OCI does have the cancelling mechanism, but we have doned some testing and the Binding and Defining parameters call take to much of memory and and CPU. Once in a while it runs out of memory.
    Has any body come across this problem, and what solutions do you have i mind

    andyman35uk wrote:
    This doesn't seem to work under 10g. Both getOCIServer and getOCIServiceContext seem to return invalid handles.
    See Oracle Bug 3616743 - Oci Svcctx Handle Derived From Occi Connection Class Is Invalid
    The invalid handle was most likely the error handle, not the service context nor server handles as kmohan indicated above. The error handle needs to be allocated first.
    For reference:
    OCIError *errhp;
    OCIHandleAlloc((dvoid *)e, (dvoid **)&errhp, (ub4)OCI_HTYPE_ERROR, (size_t)0, (dvoid **)0);
    OCISvcCtx s = ((Connection )c)->getOCIServiceContext();
    sword r = OCIBreak(s, errhp);
    // check r and errhp for errors before reusing them
    r = OCIReset(s, errhp);
    // check r and errhp for errors
    OCIHandleFree((dvoid *)errhp, (ub4)OCI_HTYPE_ERROR);

  • Non-blocking J2EE calls

    We wish to connect fat clients (in our case Powerbuilder) to a J2EE environment (Weblogic). We also need to make some of the calls from the fat client non-blocking (asynchronous). With many clients, JMS was rejected as a mechanism.
    Our first solution, which works as a prototype, was to package a Java bean as an OLE object and deploy it to the client. This bean could make the calls non-blocking. However there are registry issues (the packaging implies a pre-defined directory structure), we need a JRE on every client and 15Mb of weblogic jars (aaargh), so it only really works as a prototype.
    The next (current) solution is a C dll that can be called from Powerbuilder and uses a socket to talk to a Java J2EE Gateway on the server. This Gateway makes the system non-blocking and calls the EJBs. This is clearly easier in terms of configuring the client.
    Ideally we would like to drop the Gateway by finding a non-blocking way to get into J2EE from the C dll but the only methods we have thought of:
    - simulating an HTTP servlet call
    - SOAP
    are synchronous (or appear to be, my knowledge of SOAP is limited).
    Has anyone come across other ways of getting non-blocking communications with J2EE?

    CORBA, this is what it was designed to do, but it is not not a light weight solution.

  • Using OCIBindDynamic with non-blocking connections

    I need to use an OCI array interface for execute statements more than once per one request to server.
    When I have called stored procedure or function in the non-blocking connection context using OCIBindDynamic for parameter binding, application have been crashed at random time.
    I don't have any problems using default (blocking) mode.
    Environment:
    Oracle 8.1.7 release 3 for Windows
    MS Visual C++ 6.0 compiler
    Could anybody help me ?

    It's always possible in any read that the number of bytes read is less than the number of bytes requested. You need to keep reading until you have got everything you expected, and cope with every possible error condition on each iteration.
    EJP

  • NIO: Strange problem when using ByteBuffer with non-blocking SocketChannel

    Hi,
    I have a server that uses multiplexed, non-blocking I/O with java.nio. When a client connects, the server waits for the message: <system cmd="knock"/>, returns a message and disconnects the client. The clients are shortly serviced in less than a second.
    But the server newer receive anything from about 20% of the clients - even though it is sent. Or with other words: it is received and the data is contained in the ByteBuffer - SocketChannel.read(ByteBuffer) - but a call to ByteBuffer.remaing() returns 0 !!
    ByteBuffer receiveBuf = ByteBuffer.allocate(65536);
    receiveBuf.clear(); // the code is elsewhere used for longer living clients
    int readBytes = channel.read(receiveBuf);
    receiveBuf.flip();
    StringBuffer sb = new StringBuffer();
    System.out.println(" * Remaining: "+receiveBuf.remaining()); // writes: ' * Remaining: 0'
    System.out.println(" * Received: "+new String(receiveBuf.array())); // writes: ' * Received: <system cmd="knock"/>'
    while(receiveBuf.remaining() >= 2) {
      byte b = receiveBuf.get();
      sb.append((char)b);
    System.out.println(" * sb content: "+sb.toString()); // writes: ' * sb content: 'The ByteBuffer clearly receives the correct data, but the ByteBuffer.remaining() returns 0 and therefore the StringBuffer will never have any content.
    The problem seems to occur randomly and for about 20% of the clients (simulated from the same computer and therefore has the same bandwidth and so on).
    Anyone knows what is going on, and how to solve the problem !?

    It's always possible in any read that the number of bytes read is less than the number of bytes requested. You need to keep reading until you have got everything you expected, and cope with every possible error condition on each iteration.
    EJP

  • Can Iuse non Apple display with a new MacBook Pro?

    Can I use a non Apple display with a new MacBook Pro?
    Special connections?

    Only thing you need is a minidisplayport-to-? adapter ... plugs into Thunderbolt port.  ? is replaced by VGA or HDMI or DVI.
    I have used high-quality brand names (LG, Samsung) that were picked because I liked the display and have had no issues.
    I will add that some threads speak of issues with some Dell monitors that work spottily if at all.  But only from reading other threads.

  • Broken Pipe with Non-blocking Socket

    Hello,
    I write a Unix Agent who connect on a Windows Server with socket...
    Working well on Linux but on Solaris my problem is:
    -When my agent is running before server at connection all seems OK: Connect, Select and Getsockopt but when I try to send data I have always EPIPE Signal but I can receive datas from server !
    - When my agent is strarting after the server all it's Ok
    I don't unserstand this appears on Solaris SPARC 8 and Solaris 9 Intel ...
    Please Help is there something special with non-blocking sockets on Solaris ?
    Thanks

    Can't help you much but what I would recommend is that you
    insure that your pipes are opened for both read/write, even
    though you are only going to read or write from it. This insures
    that the pipe does not close down when you hit EOF.

  • I am using Mac book pro non retina display with Yosemite and it is taking time to on the Mac . Please suggest me

    hi,
    i am using Mac book pro with non retina display with latest software yosemitte. When I on the Mac it is taking much time to on the mac / to get main screen. Please suggest us if any option to make it fast

    There are several things that could make the computer run slower than expected
    or slower than previously experienced from time to time; if a new system was
    installed into a computer with slowness and other issues, that may compound the
    problem since an upgrade to an OS X is not necessarily a remedy for old trouble.
    If the issue may be a performance concern, there are cause and effect reasons
    behind computer functionality. And if the computer was super quick, then after
    an upgrade to a newer OS X, super slow, there could be several things going on.
    The software previously working in the computer may not be correct for a newest
    operating system; or the computer hard disk drive may be getting too full of content
    that has no relation to the function of the device. Not enough unused storage space
    or capacity can contribute to an overall slowness. And this also would relate to the
    computer's use of resources. More installed chip RAM can help a computer run
    better, and if you have extensive saved content in the computer you made, get an
    externally enclosed hard drive and see about how to go & move that accumulation
    off the computer's limited space so it could run better.
    •Mac Performance Guide - thesafemac:
    http://www.thesafemac.com/mpg/
    •Tech Guides - in addition to the above - from thesafemac:
    http://www.thesafemac.com/tech-guides/
    There may also be adware or other kinds of malware inadvertently installed in your
    computer; so that is something else to consider, find & remove. Note info in guides.
    You could use the Activity Monitor in the Utilities folder (see Go in Finder menu) to
    see if there are applications or processes running extensively that could point to
    some waste of system resources. If there is something actually using anything at all
    out of the ordinary. These kinds of things are hard to judge - if you aren't familiar.
    So, anyway, hopefully you can get some ideas from the above site pages to help.
    Good luck & happy computing!

  • What is wrong with my non-blocking client?

    I have two classes here, my abstract base class SingleSocketHandler, and its concrete subclass SingleSocketHandlerImpl. The subclass implements the protocol and parsing of my server.
    For some reason, my server is not receiving the packet my client sends to it, and my client is getitng nothing in return (which makes sense, the server is supposed to respond to the logon packet). I make it non-blocking AFTER logon, so I knwo that this is not a problem. Can you see why my server is not receiving the packet my client writes to it? Did I not configure some setting with the SocketChannel that enables it to write? I am sort of unfamiliar with the java.nio.channels package, so the problem may be related to a setting in the SocketChannel or whatnot that I haven't configured.
    NOTE: My chat server works fine with my blocking, multi-threaded test clients. Just not for my non-blocking client. The original problem for my blocking clients was that once the server stopped sending them data, they'd get caught in the in.read() loop and never get out of it. That's why I turned to non-blocking.
    Just to remind you, my question is: why isn't my client sending the logon packet AND/OR my server receiving+responding to it?
    public abstract class SingleSocketHandler extends Thread
         /* Subclasses must implement these methods
            /* Even though they're not a (public) interface */
         /** <------------------------------- */
              abstract void parse(int num);
              abstract void parseNext();
              abstract void doLogon();
         /** -------------------------------> */
         private SocketChannel sock;
         /* Queues for in and out buffers */
         private LinkedList <ByteBuffer> qIn;
         private LinkedList <ByteBuffer> qOut;
         /* Server info */
         private String hostname;
         private int port;
         /* Flags */
         protected int flags;
              protected final int LOGGED_ON = 0x01;
          * Default Constructor
         protected SingleSocketHandler()
              initQs();
          * Constructor that sets socket info
          * @param hostname
          * @param port
          * @param connect
         protected SingleSocketHandler(String hostname, int port, boolean connect)
              initQs();
              if (connect)
                   connect(hostname, port);
              else
                   setSocket(hostname, port);
          * Switches off between reading and writing
         protected void handleIO()
              try
                   sock.configureBlocking(false);
              } catch (IOException e)
                   // TODO
              readInBuffers(1);
              writeOutBuffers(1);
          * Read in specified number of buffers into in queue
          * Call for parsing
          * @param num
         protected void readInBuffers(int num)
              Reporter.println("READING BUFFER");
              for (int i = 0; i < num; i++)
                   ByteBuffer header = ByteBuffer.allocate(ProtocolCheck.HEADER_LEN);
                   try
                        Reporter.println("Reading header...");
                        sock.read(header);
                        Reporter.println("Read header.");
                   } catch (IOException e)
                        // TODO
                   /* Only add packet to in queue if it has a valid header */
                   if (ProtocolCheck.validHeader(header.array()))
                        Reporter.println("valid header");
                        ByteBuffer packet = ByteBuffer.allocate(ProtocolCheck.findPacketLen(header.array()));
                        packet.put(header);
                        try
                             Reporter.println("Reading rest of packet...");
                             sock.read(packet);
                             Reporter.println("Read packet.");
                        } catch (IOException e)
                             // TODO
                        addInBuffer(packet);
          * Write out specified number of buffers from out queue
          * And remove from out queue
          * @param num
         protected void writeOutBuffers(int num)
              Reporter.println("WRITING BUFFER");
              int i = 0;
              while (qOut.size() > 0 && i < num)
                   try
                        sock.write(nextOutBuffer());
                        Reporter.println("Wrote buffer.");
                   } catch (IOException e)
                        // TODO
                   i++;
          * Returns and removes next buffer from in queue
          * @return ByteBuffer
         protected ByteBuffer nextInBuffer()
              return qIn.remove();
          * Returns and removes next buffer from out queue
          * @return ByteBuffer
         protected ByteBuffer nextOutBuffer()
              return qOut.remove();
          * Sees if there is anohter in buffer
          * @return boolean
         protected boolean hasNextInBuffer()
              return qIn.size() > 0;
          * Sees if there is another out buffer
          * @return ByteBuffer
         protected boolean hasNextOutBuffer()
              return qOut.size() > 0;
          * Add a buffer to in queue
          * @param b
         public void addInBuffer(ByteBuffer b)
              qIn.add(b);
          * Add a buffer to in queue
          * @param b
         public void addInBuffer(Bufferable b)
              qIn.add(b.getByteBuffer());
          * Add a buffer to out queue
          * @param b
         public void addOutBuffer(ByteBuffer b)
              qOut.add(b);
          * Add a buffer to out queue
          * @param b
         public void addOutBuffer(Bufferable b)
              qOut.add(b.getByteBuffer());
          * Instantiate queues
         protected void initQs()
              qIn = new LinkedList <ByteBuffer> ();
              qOut = new LinkedList <ByteBuffer> ();
          * Set socket info then call connect()
          * @param hostname
          * @param port
         public void connect(String hostname, int port)
              setSocket(hostname, port);
              connect();
          * Connect to server
         public void connect()
              try
                   sock = SocketChannel.open();
                   sock.configureBlocking(true);
                   sock.connect(new InetSocketAddress(hostname, port));
                   while (!sock.finishConnect())
              } catch (IOException e)
                   // TODO
          * Disconnect from server
         public void disconnect()
              try
                   sock.close();
              } catch (IOException e)
                   // TODO
          * Set socket info without connecting
          * @param hostname
          * @param port
         public void setSocket(String hostname, int port)
              this.hostname = hostname;
              this.port = port;
          * @return state of connection
         public boolean isConnected()
              return (sock != null && sock.isConnected());
          * @return state of being logged on
         public boolean isLoggedOn()
              return (sock != null && (flags & LOGGED_ON) == LOGGED_ON);
    public final class SingleSocketHandlerImpl extends SingleSocketHandler
         private UserDatabase <User> users;
          * Constructor that does not set socket info
         public SingleSocketHandlerImpl(UserDatabase <User> users)
              super();
              this.users = users;
          * Constructor that does set socket info
          * @param hostname
          * @param port
          * @param connect
         public SingleSocketHandlerImpl(String hostname, int port, boolean connect, UserDatabase <User> users)
              super(hostname, port, connect);
              this.users = users;
          * Thread's run method (base class extends Thread)
         public void run()
              doLogon();
              while (isConnected() && isLoggedOn())
                   handleIO();
          * Parses specified number of buffers from in queue
          * @param num
         /* (non-Javadoc)
          * @see client.SingleSocketHandler#parseNext()
         @Override
         protected void parse(int num)
              Reporter.println("Parse(int num) called.");
              int i = 0;
              while (hasNextInBuffer() && i < num)
                   parseNext();
                   i++;
         /* (non-Javadoc)
          * @see client.SingleSocketHandler#parseNext()
         @Override
         protected void parseNext()
              Reporter.println("Parsing!");
              if (!hasNextInBuffer())
                   Reporter.println("NO IN BUFFER.");
                   return;
              /* Get buffer to work with */
              ByteBuffer inBuffer = nextInBuffer();
              byte[] data = inBuffer.array();
              /* Decide what to do based on message ID */
              byte msgid = data[1];
              switch (msgid) {
              case 0x01:
                   Reporter.println("0x01 packet.");
                   /* Determine success of login */
                   byte success = data[3];
                   if (success == (byte) 1)
                        flags |= LOGGED_ON;
                        Reporter.println("Logged on!");
                   else
                        flags &= ~LOGGED_ON;
                        Reporter.println(" <eChat> Unable to logon. Check the hostname and port settings.");
                   break;
              case 0x02:
                   /* Parse out text message */
                   byte[] txtmsgbytes = new byte[data.length - 3];
                   System.arraycopy(data, 3, txtmsgbytes,  0, txtmsgbytes.length);
                   String txtmsg = new String(txtmsgbytes);
                   Reporter.println(txtmsg);
                   break;
              case 0x03:
                   System.out.println("Packet ID not yet handled.");
                   break;
              case 0x04:
                   System.out.println("Packet ID not yet handled.");
                   break;
              default:
                   System.out.println("validID() method is buggy.");
             * I make it non-blocking after logon sequences
         /* (non-Javadoc)
          * @see client.SingleSocketHandler#doLogon()
         @Override
         protected void doLogon()
              Reporter.println("DOING LOGON!");
              User myUser = users.getCurr();
              addOutBuffer(new ScpLogon(myUser.getUsername(), myUser.getPassword()));
              writeOutBuffers(1);
              readInBuffers(1);
              parseNext();
    }

    Oh, if this helps, this is what gets output to my GUI. I did a lot of outputs for debugging purposes.
    [3:29:27 PM]: Connecting...
    [3:29:27 PM]: Connected!
    [3:29:27 PM]: Logging on...
    [3:29:27 PM]: DOING LOGON!
    [3:29:27 PM]: WRITING BUFFER
    [3:29:27 PM]: Wrote buffer.
    [3:29:27 PM]: READING BUFFER
    [3:29:27 PM]: Reading header...

  • Troubles with timeout using java.nio.channels and non-blocking sockets

    Hello.
    I have a server application that employs java.nio.channels with non-blocking sockets.
    The server waits for connections. The client should connect and be first in sending data.
    Timeouts are significant! If client exceeds the allowed time to send data, the server should break the connection.
    The huge trouble I've discovered that I cannot control the timeout when client connects but remains silent.
    My code looks as follows:
    <pre>
    Selector oSel;
    SocketChannel oSockChan;
    Socket oSock;
    SelectionKey oSelKey;
    Iterator<SelectionKey> oItSelKeys;
    int iCurrState, iMask, iCount;
    iCurrState = INT_SERVER_WORKING;
    iMask = SelectionKey.OP_ACCEPT | SelectionKey.OP_CONNECT | SelectionKey.OP_READ | SelectionKey.OP_WRITE;
    while ( iCurrState == INT_SERVER_WORKING )
    try
    *// retrieving next action*
    iCount = oSel.select();
    if ( iCount > 0 )
    oItSelKeys = oSel.selectedKeys().iterator();
    while ( oItSelKeys.hasNext() )
    oSelKey = oItSelKeys.next();
    oItSelKeys.remove();
    if ( oSelKey.isValid() )
    switch ( oSelKey.readyOps() & iMask ) {
    case SelectionKey.OP_ACCEPT :
    oSockChan = oSSockChan.accept();
    oSockChan.configureBlocking(false);
    oSock = oSockChan.socket();
    oSock.setKeepAlive(true);
    oSockChan.register(oSel,SelectionKey.OP_READ,new MyPacket(oSock.getInetAddress(),oSock.getPort()));
    break;
    case SelectionKey.OP_READ :
    oSelKey.interestOps(0);
    ((MyPacket) oSelKey.attachment()).inRequest(); *// preparing request*
    this.getReader().add(oSelKey); *// sending key to reading thread*
    break;
    case SelectionKey.OP_WRITE :
    oSelKey.interestOps(0);
    ((MyRequest) oSelKey.attachment()).inResponse(); *// preparing response*
    this.getWriter().add(oSelKey); *// sending key to writing thread*
    break;
    case SelectionKey.OP_CONNECT :
    default :
    *// nothing to do*
    catch ( IOException oExcept )
    *// do some actions*
    </pre>
    Timeouts are easily controlled by reading and writing threads (see OP_READ and OP_WRITE ).
    But when a client just connects without consequent data send, the state of this connection remains as OP_ACCEPT. The connection remains open for arbitrarily large time and I cannot control it!
    Please help with idea how can I terminate such connections!

    How can I process the keys that weren't selected at the bottom of the loop? Should I use the method keys() ?Yes. Form a new set from keys() and removeAll(selectedKeys()). Do that before you process selectedKeys().
    And the second moment: as I understood a single key may contain several operations simultaneously? Thus I should use several if's (but not if/else 'cause it's the equivalent of switch ... case ).If there is anything unclear about 'your switch statement is invalid. You need an if/else chain' I fail to see what it is. Try reading it again. And if several ifs were really the equivalent of "switch ... case", there wouldn't be a problem in the first place. They're not, and there is.

  • Environnement with pro-cobol and linux redhat

    Hi,
    I have a linux redhat Linux 2.6.9-55.ELsmp #1 SMP Fri Apr 20 17:03:35 EDT 2007 i686 i686 i386 GNU/Linux
    and oracle 11g database where we have installed Pro-cobol with a launcher xframe ( not me !)
    we want to use command-line with pro-cobol :
    exemples :
    export COBOLOPTS="-dy -shared -M -lxconv -L$XFRAMEHOME/lib -I $PWD -WC,""DLOAD"" -WC,""SOURCE"" -WC,""COPY"" -WC,""XREF"" -WC,""FLAG(E)"" -WC,""MODE(STD)"" -WC,""ALPHAL(WORD)"" -WC,""NOTRUNC"" -WC,""NOSDS"" -WC,""SRF(FIX)"" -WC,""MAP"" -do ./ -dp ./ "
    cobol -o OV1SLSP.e OV1SLSP.pre OV1MADR0.o $ORACLE_HOME/precomp/lib/cobsqlintf.o OV1MADR1.pre.o OV1MSNT0.pre.o 2> OV1SLSP.errors
    execution:
    OV1SLSP.e
    results
    Erreur de segmentation
    we have a this error.
    but when we use xframe launcher :
    execution:
    xrun OV1SLSP
    results
    XRUN: STARTING OV1SLSP
    OV1MADR0 PLANTAGE SQL RNVP : -1012
    SQLERRMC ORA-01012: non connecté
    COBOL:rts: HALT: JMP0015I-U [PID:000004A0 TID:B7FFC940] CANNOT CALL PROGRAM 'COBCANC'. xvsamRts: undefined symbol: COBCANC PGM=OV1MADR0
    XRUN: TERMINATED WITH CODE 134
    =>This message is normal because we have connect to database !
    It's working perfect.
    My question is : what is the correct librairies to have to make static compiling pro-cobol's programs?
    hope to be cleared.
    Thanks.
    Edited by: french_dam on 28 janv. 2011 10:07
    Edited by: french_dam on 28 janv. 2011 10:11

    Have you checked the system requirements for using Pro-Cobol with Oracle 11g and Linux? See here:
    Pro*COBOL® Programmer's Guide 11g Release 1 (11.1)
    http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28428/pcoabops.htm#insertedID1
    Hope this helps,
    Ben

  • How to generate non-blocking commands to a serial device

    I have a serial device which accepts non-blocking commands. This is, if you send a command that takes 1 minute, while this happens, you can send more commands and they will be executed. Once a command is done, it sends back a code that relates to that command, so you know it is finished.
    I have a VI which tries to communicate with this serial device (see attachment). It does work, but it blocks the execution until a command is finished. So I can send commands one by one, but not in parallel, or in a delayed non-block way. The problem is the while loop which waits until the device outputs something.
    I need to do something similar, but non blocking. The VI should be able to send several commands while others are executed.
    This subVI is controlled from a main VI, which is just a State Machine with a few states, where each state is some action which is sent to this subVI, and then to the serial device.
    Attachments:
    blocking_vi.png ‏27 KB

    Use another loop that does nothing but read from the serial port.  Report the data to whoever needs it with a Queue.
    There are only two ways to tell somebody thanks: Kudos and Marked Solutions
    Unofficial Forum Rules and Guidelines

  • Oracle 11.2 - Perform parallel DML on a non partitioned table with LOB column

    Hi,
    Since I wanted to demonstrate new Oracle 12c enhancements on SecureFiles, I tried to use PDML statements on a non partitioned table with LOB column, in both Oracle 11g and Oracle 12c releases. The Oracle 11.2 SecureFiles and Large Objects Developer's Guide of January 2013 clearly says:
    Parallel execution of the following DML operations on tables with LOB columns is supported. These operations run in parallel execution mode only when performed on a partitioned table. DML statements on non-partitioned tables with LOB columns continue to execute in serial execution mode.
    INSERT AS SELECT
    CREATE TABLE AS SELECT
    DELETE
    UPDATE
    MERGE (conditional UPDATE and INSERT)
    Multi-table INSERT
    So I created and populated a simple table with a BLOB column:
    SQL> CREATE TABLE T1 (A BLOB);
    Table created.
    Then, I tried to see the execution plan of a parallel DELETE:
    SQL> EXPLAIN PLAN FOR
      2  delete /*+parallel (t1,8) */ from t1;
    Explained.
    SQL> select * from table(dbms_xplan.display);
    PLAN_TABLE_OUTPUT
    Plan hash value: 3718066193
    | Id  | Operation             | Name     | Rows  | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
    |   0 | DELETE STATEMENT      |          |  2048 |     2   (0)| 00:00:01 |        |      |            |
    |   1 |  DELETE               | T1       |       |            |          |        |      |            |
    |   2 |   PX COORDINATOR      |          |       |            |          |        |      |            |
    |   3 |    PX SEND QC (RANDOM)| :TQ10000 |  2048 |     2   (0)| 00:00:01 |  Q1,00 | P->S | QC (RAND)  |
    |   4 |     PX BLOCK ITERATOR |          |  2048 |     2   (0)| 00:00:01 |  Q1,00 | PCWC |            |
    |   5 |      TABLE ACCESS FULL| T1       |  2048 |     2   (0)| 00:00:01 |  Q1,00 | PCWP |            |
    PLAN_TABLE_OUTPUT
    Note
       - dynamic sampling used for this statement (level=2)
    And I finished by executing the statement.
    SQL> commit;
    Commit complete.
    SQL> alter session enable parallel dml;
    Session altered.
    SQL> delete /*+parallel (t1,8) */ from t1;
    2048 rows deleted.
    As we can see, the statement has been run as parallel:
    SQL> select * from v$pq_sesstat;
    STATISTIC                      LAST_QUERY SESSION_TOTAL
    Queries Parallelized                    1             1
    DML Parallelized                        0             0
    DDL Parallelized                        0             0
    DFO Trees                               1             1
    Server Threads                          5             0
    Allocation Height                       5             0
    Allocation Width                        1             0
    Local Msgs Sent                        55            55
    Distr Msgs Sent                         0             0
    Local Msgs Recv'd                      55            55
    Distr Msgs Recv'd                       0             0
    11 rows selected.
    Is it normal ? It is not supposed to be supported on Oracle 11g with non-partitioned table containing LOB column....
    Thank you for your help.
    Michael

    Yes I did it. I tried with force parallel dml, and that is the results on my 12c DB, with the non partitionned and SecureFiles LOB column.
    SQL> explain plan for delete from t1;
    Explained.
    | Id  | Operation             | Name     | Rows  | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
    |   0 | DELETE STATEMENT      |          |     4 |     2   (0)| 00:00:01 |        |      |            |
    |   1 |  DELETE               | T1       |       |            |          |        |      |            |
    |   2 |   PX COORDINATOR      |          |       |            |          |        |      |            |
    |   3 |    PX SEND QC (RANDOM)| :TQ10000 |     4 |     2   (0)| 00:00:01 |  Q1,00 | P->S | QC (RAND)  |
    |   4 |     PX BLOCK ITERATOR |          |     4 |     2   (0)| 00:00:01 |  Q1,00 | PCWC |            |
    |   5 |      TABLE ACCESS FULL| T1       |     4 |     2   (0)| 00:00:01 |  Q1,00 | PCWP |            |
    The DELETE is not performed in Parallel.
    I tried with another statement :
    SQL> explain plan for
    2        insert into t1 select * from t1;
    Here are the results:
    11g
    | Id  | Operation                | Name     | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
    |   0 | INSERT STATEMENT         |          |     4 |  8008 |     2   (0)| 00:00:01 |        |      |            |
    |   1 |  LOAD TABLE CONVENTIONAL | T1       |       |       |            |          |        |      |            |
    |   2 |   PX COORDINATOR         |          |       |       |            |          |        |      |            |
    |   3 |    PX SEND QC (RANDOM)   | :TQ10000 |     4 |  8008 |     2   (0)| 00:00:01 |  Q1,00 | P->S | QC (RAND)  |
    |   4 |     PX BLOCK ITERATOR    |          |     4 |  8008 |     2   (0)| 00:00:01 |  Q1,00 | PCWC |            |
    |   5 |      TABLE ACCESS FULL   | T1       |     4 |  8008 |     2   (0)| 00:00:01 |  Q1,00 | PCWP |            |
    12c
    | Id  | Operation                          | Name     | Rows  | Bytes | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |
    |   0 | INSERT STATEMENT                   |          |     4 |  8008 |     2   (0)| 00:00:01 |        |      |            |
    |   1 |  PX COORDINATOR                    |          |       |       |            |          |        |      |            |
    |   2 |   PX SEND QC (RANDOM)              | :TQ10000 |     4 |  8008 |     2   (0)| 00:00:01 |  Q1,00 | P->S | QC (RAND)  |
    |   3 |    LOAD AS SELECT                  | T1       |       |       |            |          |  Q1,00 | PCWP |            |
    |   4 |     OPTIMIZER STATISTICS GATHERING |          |     4 |  8008 |     2   (0)| 00:00:01 |  Q1,00 | PCWP |            |
    |   5 |      PX BLOCK ITERATOR             |          |     4 |  8008 |     2   (0)| 00:00:01 |  Q1,00 | PCWC |            |
    It seems that the DELETE statement has problems but not the INSERT AS SELECT !

  • Difficulties for launching process execution with platformRequest(String)

    Hello,
    by April, 10, I have posted a message concerning how to lauch a process by means of a midlet. I have got a response from your part to proposing to use:
    platformRequest(String).
    I have tested this command successfully for lauching webpages.
    But It did not work for lauching programs such as "java myprog"
    It seems that the platformRequest(String) cannot lauch the dos prompt
    and therefore the process hangs. The displayed message is: Performing platformRequest for URL: java myprog
    I wonder if someone can provide an example of a midlet that lauches the execution of a program.
    Thanks for your help
    wahab

    a mobile device is not a personal computer...
    could you please re-read this:
    platformRequest
    public final boolean platformRequest(String URL)
                                  throws ConnectionNotFoundException
        Requests that the device handle (for example, display or install) the indicated URL.
        If the platform has the appropriate capabilities and resources available, it SHOULD
    bring the appropriate application to the foreground and let the user interact with the
    content, while keeping the MIDlet suite running in the background. If the platform does not
    have appropriate capabilities or resources available, it MAY wait to handle the URL
    request until after the MIDlet suite exits. In this case, when the requesting MIDlet suite
    exits, the platform MUST then bring the appropriate application (if one exists) to the
    foreground to let the user interact with the content.
    This is a non-blocking method. In addition, this method does NOT queue multiple
    requests. On platforms where the MIDlet suite must exit before the request is handled, the
    platform MUST handle only the last request made. On platforms where the MIDlet suite
    and the request can be handled concurrently, each request that the MIDlet suite makes
    MUST be passed to the platform software for handling in a timely fashion.
    If the URL specified refers to a MIDlet suite (either an Application Descriptor or a JAR file),
    the application handling the request MUST interpret it as a request to install the named
    package. In this case, the platform's normal MIDlet suite installation process SHOULD be
    used, and the user MUST be allowed to control the process (including cancelling the
    download and/or installation). If the MIDlet suite being installed is an update of the
    currently running MIDlet suite, the platform MUST first stop the currently running MIDlet
    suite before performing the update. On some platforms, the currently running MIDlet suite
    MAY need to be stopped before any installations can occur.
      If the URL specified is of the form tel:<number>, as specified in RFC2806, then the
    platform MUST interpret this as a request to initiate a voice call. The request MUST be
    passed to the "phone" application to handle if one is present in the platform. The "phone"
    application, if present, MUST be able to set up local and global phone calls and also
    perform DTMF post dialing. Not all elements of RFC2806 need be implemented,
    especially the area-specifier or any other requirement on the terminal to know its context.
    The isdn-subaddress, service-provider and future-extension may also be ignored. Pauses
    during dialing are not relevant in some telephony services.
      Devices MAY choose to support additional URL schemes beyond the requirements listed
    above.
        Many of the ways this method will be used could have a financial impact to the user
    (e.g. transferring data through a wireless network, or initiating a voice call). Therefore the
    platform MUST ask the user to explicitly acknowlege each request before the action is
    taken. Implementation freedoms are possible so that a pleasant user experience is
    retained. For example, some platforms may put up a dialog for each request asking the
    user for permission, while other platforms may launch the appropriate application and
    populate the URL or phone number fields, but not take the action until the user explicitly
    clicks the load or dial buttons.
        Parameters:
            URL - The URL for the platform to load. An empty string (not null) cancels any pending requests.
        Returns:
            true if the MIDlet suite MUST first exit before the content can be fetched.
        Throws:
            ConnectionNotFoundException - if the platform cannot handle the URL requested.
        Since:
            MIDP 2.0use PushRegistry if you wanna call different MIDlets
    or try C and C++ or SAVAJE mobile os
    and you said that you have ever posted something but there's only one message registered
    with your new OP's name...
    edited by
    supareno

Maybe you are looking for

  • Problem with Request for Permissions (mobile app)

    In my application I want to publish the results of the games on facebook. I used this tutorial: http://www.adobe.com/devnet/facebook/articles/flex_fbgraph_pt1.html Here is a fragment of my source code: <fx:Script>         <![CDATA[             import

  • Program to execute ARCHIVFILE_CLIENT_TO_SERVER FM

    Hi experts; My knowhow of ABAP is very limited so be patience. I need to create a program to execute FM ARCHIVFILE_CLIENT_TO_SERVER. If you run it, the FM will ask you a path and a targetpath. my path should be pclis02\consult\Equipa_EM\Line_TEXT.csv

  • Moving messages via OWA can bypass litigation hold

    When you move folders between different mailboxes in OWA, it seems that any hold related settings are simply bypassed. I really really hope there's something wrong I am doing, but so far I have been able to reproduce this in all my tests. And the imp

  • I can´t open Adobe Premiere Pro cs6 trail

    Could you help me solve this? "Adobe Premiere Pro could not find any capable video play modules. Please update your video displayy drivers and start agiain"

  • V2V to reduce provisioned size of VM while powered-on: How? vCenter 5.5

    Unfortunately, VMware Converter does not allow you to do post-conversion synchronizations when shrinking a disk, only when maintaining or increasing the size. This means you would lose all changes that happen after the conversion starts. The only sup