7 cursors as out param , giving memory leak

Hi,
Please advise on the following problem i am facing:
One of my store procedure returning 7 cursors from a store procedure , its causing memory leak .Please note that i am closing all the cursor and jdbc statement in my calling java program still its causing memory leak.
Could anybody please advise me on this problem.
Thanks,
PP

Is this a memory leak on the client or on the server? 99% of the time, this sort of error is the result of not cleaning up some memory structure-- perhaps there is a case where one or more ResultSet isn't being closed.
Justin
Distributed Database Consulting, Inc.
http://www.ddbcinc.com/askDDBC

Similar Messages

  • SQL Server 2000 and JDBC,Registering cursor as OUT param

    hi
    I am using JDK1.4,SQL Server 2000 and Microsoft's JDBC driver.
    I am stuck in accessing cursors.
    The SP i wrote is
    USE pubs
    IF EXISTS (SELECT name FROM sysobjects
    WHERE name = 'spSelectEmployees' and type = 'P')
    DROP PROCEDURE spSelectEmployees
    GO
    CREATE PROCEDURE spSelectEmployees @emp_cursor CURSOR VARYING OUTPUT
    AS
    SET @emp_cursor = CURSOR
    FORWARD_ONLY STATIC FOR
    SELECT *
    FROM employee
    OPEN @emp_cursor
    GO
    The problem I face is that when i register the output param in java code,what datatype do I specify..code is written below.
    calStmt = conn.prepareCall("{CALL pubs.dbo.spSelectEmployees(?)}", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    calStmt.registerOutParameter(1,Types.?????);-->What goes here???
    java.sql.Types does not give any datatype for cursor or object.Any one knows if there is an extended type given by Microsoft Driver??

    I am using JDK1.4,SQL Server 2000 and Microsoft's JDBC driver. Premably for 2000. Numerous posts here suggests that driver has problems. The jTDS driver would be a better choice.
    java.sql.Types does not give any datatype for cursor or object.Any one knows if there is an extended type given by Microsoft Driver??You are correct that it would require a driver specific type. I have no idea what it is.
    Why don't you modify the proc to return a result set.

  • Memory leak issue in tuxedo server

    Hi,
    I am facing memory issues in our tuxedo application.One of the server memory utilization is gradually increasing after reboot. As a temporary solution , we are making restart of that particular server every week.
    I have installed Valgrind tool.i am trying to call the service ( Around 800 services are part of application ) which i suspect causing memory leak through ud script. like below.
    valgrind ud32 < servicename.ud
    but it is not giving memory leak details in actual service instead it is giving details about ud.
    Could you guys suggest how can we find memory leak in tuxedo services.
    Thanks
    Ramana

    HI Sir,
    Thanks a lot for your response.
    I ran the comand as mentioned by you in your post. but i haven't shutdown the server bcoz it is prod environment.
    It logged huge output to the log file.
    Below is the summary of the logfile.
    ==00:00:00:05.383 23666== LEAK SUMMARY:
    ==00:00:00:05.383 23666== definitely lost: 7,105 bytes in 7 blocks
    ==00:00:00:05.383 23666== indirectly lost: 3,383 bytes in 18 blocks
    ==00:00:00:05.383 23666== possibly lost: 28,653 bytes in 9 blocks
    ==00:00:00:05.383 23666== still reachable: 529,286 bytes in 288 blocks
    ==00:00:00:05.383 23666== suppressed: 0 bytes in 0 blocks
    ==00:00:00:05.383 23666==
    ==00:00:00:05.383 23666== For counts of detected and suppressed errors, rerun with: -v
    ==00:00:00:05.383 23666== Use --track-origins=yes to see where uninitialised values come from
    ==00:00:00:05.383 23666== ERROR SUMMARY: 107 errors from 72 contexts (suppressed: 10 from 10)
    But I am not able to understand the output logfile. Could you please let me know how can we analyze the logfile.
    Thanks in advance.

  • Memory Leaks in Java

    Hi,
    I have a considerably large business application that consists of JSPs and JavaBeans which connects to a database. The application runs off a Tomcat server. Some information about the application is as follows:
    a. JDK version 1.4.2_11
    b. Database used is MS SQL Server 2000 with Server pack 4
    c. Running on Tomcat version 4.1.31. Tomcat is being run under services.
    d. Third party libraries -
         Cryptix32
         i-Net Crystal Clear
         CeWolf and JFreeChart
         iText
         jxl
    I noticed that the Tomcat memory utilization increases after a period of using the application.
    I recently purchased JProbe as it was recommended as a good tool to check for memory leaks in Java applications. Having purchased Jprobe, the team is now proceeding to investigate the cause of the problem.
    I would like very much to seek the expertise of the community here as to some technique / steps the team should take during the course of the investigation.
    We are currently following the following steps:
    a. Startup JProbe
    b. Set a JProbe J2EE memory session which points to Tomcat and JDK
    c. Run the JProbe session
    d. Do a Collect Stack Trace
    e. Login to our application, execute a "single function" and then logout
    f. Do an Include Heapdump in Snapshot
    g. Save the snapshot
    h. Stop the JProbe session
    i. Investigate the output
    j. Repeat (c) to (i) for other functions in our application
    Would appreciate if the community here could advice if we are proceeding with the investigation correctly and whether we are missing out on any memory leaks. All suggestions are most welcome.
    Thanks.

    Hi,
    Just a bit more information about the application:
    Application contains:
    - 4490 JSP files
    - 1492 Java Classes
    Application Server:
    - Tomcat 4.1.31
    - JDK 1.4.2_11
    Database:
    - Microsoft SQL Server JDBC 2000
    - Microsoft SQL Server 2000 SP4
    Other JAR files:
    - Cryptix 32
    - jxl
    - CeWolf
    - i-Net Crystal Clear
    All items mentioned above is running on a Server with Microsoft Windows Server 2003 with 2GB of RAM.
    The JSP communicates to the JavaBean which in turn will connect to the Database via JDBC. We are not using connection pooling at the moment.
    The SQL Server takes around 1GB of ram and I have configured Tomcat with an Initial 250MB and a maximum of 750MB of RAM. Tomcat is running under NT services.
    Tomcat memory slowly increases and it takes around 4-7 weeks before it reaches the maximum memory and we get the out of memory error.
    We have done checking for memory leaks using JProbe but have not found any leaks in our program yet. We did find some of our classes were not closing the connection. I am not sure whether this could be the cause of the memory leak. We have also checked for static members in our classes and have not found anything wrong with them.
    Can anyone tell me whether:
    a) Is 2GB RAM sufficient for this type of configuration?
    b) If we add more RAM will it be more beneficial?
    c) Our Tomcat web.xml configuration. Reloadable = true, Development = true. Will this cause memory leaks?
    d) Should we upgrade to Tomcat 5 or 6?
    e) Should we upgrade the JDBC Driver to 2005?
    f) Should we upgrade the version of JDK to 1.5 or 1.6?
    g) Is it recommended to restart Tomcat every now and then?
    Thanks.

  • How to track Memory Leaks in 3.6.8?

    I've been noticing for several updates now that I seem to be getting major memory leaks. Firefox starts off around 1-200,000 K memory usage in task manager, but within a few hours it will be past 800,000 K. Now, the things I've seen so far talk about disabling plugins and all to find the problem, but this doesn't happen immediately, so disabling things one by one isn't very feasible. How can i track the memory leak to a specific plugin, or else make it leak much, much faster so I can do the one by one thing?
    == This happened ==
    Every time Firefox opened
    == A few updates ago

    Well, It just has taken a turn for the worse... In the attached screenshot you can see firefox took 1.123.112kb out of my memory at which point the GUI became unresponsive. This has actually happened before, but not as soon...
    I had 18 tabs open (but at the moment I have all of them opened again after a restart of firefox and it takes 143.988 kb at this very moment, which still is a lot actually). My computer has 4gb RAM-memory of which 46% is in use at the moment according to windows task manager.
    It would be great if the whole tabstructure and maybe the garbage collector for the TraceMonkey javascript engine was reviewed... This might point out where the memory leaks are located.

  • How to root out memory leak with  Java JNI & Native BDB 11g ?

    We are testing a web application using the 32-bit compiled native 11g version of BDB (with replication) under 32-bit IBM 1.5 JVM via JNI under 64-bit RedHat Linux. We are experiencing what appears to be a memory leak without a commensurate increase in Java heap size. Basically the process size continues to grow until the max 32-process size is reached (4Gb) and eventually stops running (no core). Java heap is set to 2Gb min/max. GCs are nominal, so the leak appears to be native and outside Java bytecode.
    We need to determine whether there is a memory leak in BDB, or the IBM JVM or simply a mis-use of BDB in the Java code. What tools/instrumentation/db statistic should be used to help get to root cause? Do you recommend using System Tap (with some particular text command script)? What DB stats should we capture to get to the bottom of this memory leak? What troubleshooting steps can you recommend?
    Thanks ahead of time.
    JE.
    Edited by: 787930 on Aug 12, 2010 5:42 PM

    That's troublesome... DB itself doesn't have stats that track VM in any useful way. I am not familiar with SystemTap but a quick look at it seems to imply that it's better for kernel monitoring than user space. It's pretty hard to get DB to leak significant amounts of memory. The reason is that it mostly uses shared memory carved from the environment. Also if you are neglecting to close or delete some object DB generally complains about it somewhere.
    I don't see how pmap would help if it's a heap leak but maybe I'm missing something.
    One way to rule DB out is to replace its internal memory allocation functions with your own that are instrumented to track how much VM has been allocated (and freed). This is very easy to do using the interfaces:
    db_env_set_func_malloc()
    db_env_set_func_free()
    These are global to your process and your functions will be used where DB would otherwise call malloc() and free(). How you get usage information out of the system is an exercise left to the reader :-) If it turns out DB is the culprit then there is more thinking to do to isolate the problem.
    Other ideas that can provide information if not actual smoking guns:
    -- accelerate reproduction of the problem by allocating nearly all of the VM to the JVM and the DB cache (or otherwise limit the allowable VM in your process)
    -- change the VM allocated to the JVM in various ways
    Regards,
    George

  • Find out whether our application caused the memory leak

    whether have the command to find out whether our application caused the memory leak !
    We are using Jdev10g + BC4J + Struts + JSP to build our enterprise application,
    but when the application running some days in our Application Server(RedHat AS3-86, with 4GB RAM), the memory consumed is serious ! we doubt and worry
    about maybe our application suffer the memory leak problem, so we want to know have the command to find out whether our application caused the memory leak
    issue and which program is the major murderer for memory.

    The second scenario is, as we perform some deployment activity on 10g, the memory usage chart shows a sharp consumption of memory about 1.5GB .the loss memory almost be display in "other" legend chart !
    Please give us some advice , thanks in advance

  • How to quickly and accurately find out the memory leak points?

    Hi, all.I have added a option -XX:+HeapDumpOnOutOfMemoryError in the bootstarp script of my application.
    The application has been run for one day and the OOM error was thrown again. So I downloaded the hprof file and used MAT to parse it.
    But after seeing the leak suspects I still have no idea what's wrong and what's the possible leak point.
    Can anyone shard some experience how to find out the memory leak points quickly and accurately?
    It would be more nice if you can take a loot at the leak supects.
    Thanks,
    SuoNayi

    Furthermore, when I try to dump the thread stack, I can see the following errors/warns:
    Thread 12135: (state = BLOCKED)
    - java.lang.Object.wait(long) @bci=0 (Compiled frame; information may be imprecise)
    Error occurred during stack walking:
    sun.jvm.hotspot.utilities.AssertionFailure: Only used on C2 x86
         at sun.jvm.hotspot.utilities.Assert.that(Assert.java:15)
         at sun.jvm.hotspot.code.CodeBlob.getLinkOffset(CodeBlob.java:193)
         at sun.jvm.hotspot.runtime.amd64.AMD64Frame.senderForCompiledFrame(AMD64Frame.java:297)
         at sun.jvm.hotspot.runtime.amd64.AMD64Frame.sender(AMD64Frame.java:213)
         at sun.jvm.hotspot.runtime.Frame.sender(Frame.java:184)
         at sun.jvm.hotspot.runtime.Frame.realSender(Frame.java:189)
         at sun.jvm.hotspot.runtime.VFrame.sender(VFrame.java:102)
         at sun.jvm.hotspot.runtime.VFrame.javaSender(VFrame.java:129)
         at sun.jvm.hotspot.tools.StackTrace.run(StackTrace.java:50)
         at sun.jvm.hotspot.tools.JStack.run(JStack.java:41)
         at sun.jvm.hotspot.tools.Tool.start(Tool.java:204)
         at sun.jvm.hotspot.tools.JStack.main(JStack.java:58)

  • FCE "out of memory" - QT7 memory leak ?

    when I try to render a large number of audio clips in FCE, after rendering about 15 mins of clips, it stops with "out of memory" error.
    when I look at Activity Monitor while this is happening, I see the VM figure for the FCE process grow and grow until it hits 3.50GB then the error is thrown.
    It looks like a memory leak ... with each clip some VM is allocated but not released and eventually the allocation hits an OSX/hardware limit.
    the behaviour seems to have started since upgrading from QT6 to QT7.
    have others observed this ?
    my current workaround is to select 12mins of audio, render the selection, exit FCE to release the VM, open the project again and repeat. very time consuming.

    I also have this problem, and stumbled onto the same workaround as others: render ~15 minutes of audio, quit, restart. A real nuisance!
    I also have seen the rendering of audio "complete", but in fact the audio disappears after some point in the (long) clip. I haven't found any way to re-render it, so I've been forced to reimport the whole clip and start over. Arrrgh! Any of you seen this problem?
    From the symptoms, the root cause does seem to be a memory leak in the audio code (QT?) There's a QT forum posting that seems to indicate the same.
    Any comments/prognosis from anyone at Apple?

  • Plugin-container.exe takes over and uses 100% of my CPU locking me out and leaving my PC non-functioning. Is this a bug, or a memory leak, in the Firefox software? Can anything be done to fix this problem?

    In looking at Windows Task Manager I found that plugin-container.exe was taking over 100% of my CPU and my system was frozen. Is this a memory leak or other bug?

    Thank you! I have been having problems with Adobe Flash since downloading the new 11.1 version. I will download it again and reinstall it, hopefully that will correct the problem.

  • Windows Audio Device Graph Isolation [audiodg.exe] MEMORY LEAK - EATS OUT 60-85% of CPU

    Hello,
    I've updated, 2 days ago, from Win 8 to Win 8.1 Pro and this memory leak problem that has occurred to me previously in other Win versions has arrived again. Didn't upgrade from boot, just from the desktop. Cleaned up the previous Windows installations and all
    that jazz that was inherent to Windows updates. Tried to fix this problem with the normal method of disabling the enhancements at the playback device but they are gone.
    My drivers are all up to date and have a Conexant SmartAudio HD sound platform. 
    Thanks in advance for any sort of help.

    I maybe got a solution for this... (Worked for me)
    I
    Right-click the speaker icon in the lower right corner.
    Select Playback Devices from the menu. A list of devices should appear on the screen.
    Double-click the device that has a green checkmark. The properties windows for that device should open.
    Click the Enhancements tab at the top.
    From the list of enhancements, uncheck all of them, or click the Disable all enhancements checkbox.
    Click the OK button to save your changes and close the window.
    Click OK to close the Playback Devices window.
    Please reply if that helped you :-)

  • Custom MediaStreamSource and Memory Leaks During SampleRequested

    Greetings,
    I have a nasty memory leak problem that is causing me to pull my hair out.
    I'm implementing a custom MediaStreamSource along with MediaTranscoder to generate video to disk. The frame generation operation occurs in the SampleRequested handler (as in the MediaStreamSource example). No matter what I do - and I've tried a
    ton of options - inevitably the app runs out of memory after a couple hundred frames of HD video. Investigating, I see that indeed GC.GetTotalMemory reports an increasing, and never decreasing, amount of allocated RAM. 
    The frame generator in my actual app is using RenderTargetBitmap to get screen captures, and is handing the buffer to MediaStreamSample.CreateFromBuffer(). However, as you can see in the example below, the issue occurs even with a dumb allocation
    of RAM and no other actual logic. Here's the code:
    void _mss_SampleRequested(Windows.Media.Core.MediaStreamSource sender, MediaStreamSourceSampleRequestedEventArgs args)
    if ( args.Request.StreamDescriptor is VideoStreamDescriptor )
    if (_FrameCount >= 3000) return;
    var videoDeferral = args.Request.GetDeferral();
    var descriptor = (VideoStreamDescriptor)args.Request.StreamDescriptor;
    uint frameWidth = descriptor.EncodingProperties.Width;
    uint frameHeight = descriptor.EncodingProperties.Height;
    uint size = frameWidth * frameHeight * 4;
    byte[] buffer = null;
    try
    buffer = new byte[size];
    // do something to create the frame
    catch
    App.LogAction("Ran out of memory", this);
    return;
    args.Request.Sample = MediaStreamSample.CreateFromBuffer(buffer.AsBuffer(), TimeFromFrame(_FrameCount++, _frameSource.Framerate));
    args.Request.Sample.Duration = TimeFromFrame(1, _frameSource.Framerate);
    buffer = null; // attempt to release the memory
    videoDeferral.Complete();
    App.LogAction("Completed Video frame " + (_FrameCount-1).ToString() + "\n" +
    "Allocated memory: " + GC.GetTotalMemory(true), this);
    return;
    It usually fails around frame 357, with GC.GetTotalMemory() reporting 750MB allocated.
    I've tried tons of work-arounds, none of which made a difference. I tried putting the code that allocates the bytes in a separate thread - no dice.  I tried Task.Delay to give the GC a chance to work, on the assumption that it just had no time
    to do its job. No luck.
    As another experiment, I wanted to see if the problem went away if I allocated memory each frame, but never assigned it to the MediaStreamSample, instead giving the sample (constant) dummy data. Indeed, in that scenario, memory consumption stayed
    constant. However, while I never get an out-of-memory exception, RequestSample just stops getting called around frame 1600 and as a result the transcode operation never actually returns to completion.
    I also tried taking a cue from the SDK sample which uses C++ entirely to generate the frame. So I passed the buffer as a Platform::Array<BYTE> to a static Runtime extension class function I wrote in C++.
    I won't bore you with the C++ code, but even directly copying the bytes of the array to the media sample using memcpy still had the same result! It seems that there is no way to communicate the contents of the byte[] array to the media sample without
    it never being released.
    I know what some will say: the difference between my code and the SDK sample, of course, is that the SDK sample generates the frame _entirely_ in C++, thus taking care of its own memory allocation and deallocation. Because I want to get
    the data from RenderTargetBitmap, this isn't an option for me. (As a side note, if anyone knows if there's a way to get the contents of an RT Window using DirectX, that might work too, but I know this is not a C++ forum, so...). But more importantly,
    MediaStreamSource and MediaStreamSample are managed classes that appear to allow you to generate custom frames using C# or other managed code. The MediaStreamSample.CreateFromBuffer function appears to be tailored for exactly what I want. But there appears
    to be no way to release the buffer when giving the bytes to the MediaStreamSample. At least none that I can find.
    I know the RT version of these classes are new to Windows 8.1, but I did see other posts going back 3 years discussing a similar issue in Silverlight. That never appears to have been resolved.
    I guess the question boils down to this: how do I safely get managed data, allocated during the SampleRequested handler, to the MediaStreamSample without causing a memory leak? Also, why would the SampleRequested handler just stop getting called
    out of the blue, even when I artificially eliminate the memory leak problem?
    Thanks so much for all input!

    Hi Rob - 
    Thanks for your quick reply and for clarifying the terminology. 
    In the Memory Usage test under Analyze/Performance and Diagnostics (is that what you mean?) it's clear that each frame of video being created is not released from memory except when memory consumption gets very high. GC will occasionally kick in, but eventually
    it succumbs.
    Interestingly, if I reduce the frame size substantially, say 320x240, it never runs out of RAM no matter how many frames I throw at it. The Memory Usage test, however, shows the same pattern. But this time the GC can keep up and release the RAM.
    After playing with this ad nauseum,  I am fairly convinced I know what the problem is, but the solution still escapes me. It appears that the Transcoder is requesting frames from the MediaStreamSource (and the MediaStreamSource is providing them via
    my SampleRequested handler) faster than the Transcoder can write them to disk and release them. Why would this be happening? The MediaStreamSource.BufferTime property is - I thought - used to prevent this very problem. However, changing the BufferTime seems
    to have no effect at all - even changing it to ZERO doesn't change anything. If I'm right, this would explain why the GC can't do its job - it can't release the buffers I'm giving to the Transcoder via SampleRequested because the Transcoder won't give them
    up until it's finished transcoding and writing them to disk. And yet the transcoder keeps requesting samples until there's no more memory to create them with.
    The following code, which I made from scratch to illustrate my scenario, should be air-tight according to everything I've read. And yet, it still runs out of memory when the frame size is too large. 
    If you or anyone else can spot the problem in this code, I'd be thrilled to hear it. Maybe I'm omitting a key step with regard to getting the deferral? Or maybe it's a bug in the back-end? Can I "slow down" the transcoder and force it to release samples
    it's already used?
    Anyway here's the new code, which other than App.cs is everything. So if I'm doing something wrong it will be in this module:
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Threading.Tasks;
    using System.Linq;
    using System.Runtime.InteropServices.WindowsRuntime;
    using System.Diagnostics;
    using Windows.Foundation;
    using Windows.Foundation.Collections;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Controls.Primitives;
    using Windows.UI.Xaml.Data;
    using Windows.UI.Xaml.Input;
    using Windows.UI.Xaml.Media;
    using Windows.UI.Xaml.Navigation;
    using Windows.UI.Popups;
    using Windows.Storage;
    using Windows.Storage.Pickers;
    using Windows.Storage.Streams;
    using Windows.Media.MediaProperties;
    using Windows.Media.Core;
    using Windows.Media.Transcoding;
    // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
    namespace MyTranscodeTest
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    MediaTranscoder _transcoder;
    MediaStreamSource _mss;
    VideoStreamDescriptor _videoSourceDescriptor;
    const int c_width = 1920;
    const int c_height = 1080;
    const int c_frames = 10000;
    const int c_frNumerator = 30000;
    const int c_frDenominator = 1001;
    uint _frameSizeBytes;
    uint _frameDurationTicks;
    uint _transcodePositionTicks = 0;
    uint _frameCurrent = 0;
    Random _random = new Random();
    public MainPage()
    this.InitializeComponent();
    private async void GoButtonClicked(object sender, RoutedEventArgs e)
    Windows.Storage.Pickers.FileSavePicker picker = new Windows.Storage.Pickers.FileSavePicker();
    picker.FileTypeChoices.Add("MP4 File", new List<string>() { ".MP4" });
    Windows.Storage.StorageFile file = await picker.PickSaveFileAsync();
    if (file == null) return;
    Stream outputStream = await file.OpenStreamForWriteAsync();
    var transcodeTask = (await this.InitializeTranscoderAsync(outputStream)).TranscodeAsync();
    transcodeTask.Progress = (asyncInfo, progressInfo) =>
    Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
    _ProgressReport.Text = "Sourcing frame " + _frameCurrent.ToString() + " of " + c_frames.ToString() +
    " with " + GC.GetTotalMemory(false).ToString() + " bytes allocated.";
    await transcodeTask;
    MessageDialog dialog = new MessageDialog("Transcode completed.");
    await dialog.ShowAsync();
    async Task<PrepareTranscodeResult> InitializeTranscoderAsync (Stream output)
    _transcoder = new MediaTranscoder();
    _transcoder.HardwareAccelerationEnabled = false;
    _videoSourceDescriptor = new VideoStreamDescriptor(VideoEncodingProperties.CreateUncompressed( MediaEncodingSubtypes.Bgra8, c_width, c_height ));
    _videoSourceDescriptor.EncodingProperties.PixelAspectRatio.Numerator = 1;
    _videoSourceDescriptor.EncodingProperties.PixelAspectRatio.Denominator = 1;
    _videoSourceDescriptor.EncodingProperties.FrameRate.Numerator = c_frNumerator;
    _videoSourceDescriptor.EncodingProperties.FrameRate.Denominator = c_frDenominator;
    _videoSourceDescriptor.EncodingProperties.Bitrate = (uint)((c_width * c_height * 4 * 8 * (ulong)c_frDenominator) / (ulong)c_frNumerator);
    _frameDurationTicks = (uint)(10000000 * (ulong)c_frDenominator / (ulong)c_frNumerator);
    _frameSizeBytes = c_width * c_height * 4;
    _mss = new MediaStreamSource(_videoSourceDescriptor);
    _mss.BufferTime = TimeSpan.FromTicks(_frameDurationTicks);
    _mss.Duration = TimeSpan.FromTicks( _frameDurationTicks * c_frames );
    _mss.Starting += _mss_Starting;
    _mss.Paused += _mss_Paused;
    _mss.SampleRequested += _mss_SampleRequested;
    MediaEncodingProfile outputProfile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Ntsc);
    outputProfile.Audio = null;
    return await _transcoder.PrepareMediaStreamSourceTranscodeAsync(_mss, output.AsRandomAccessStream(), outputProfile);
    void _mss_Paused(MediaStreamSource sender, object args)
    throw new NotImplementedException();
    void _mss_Starting(MediaStreamSource sender, MediaStreamSourceStartingEventArgs args)
    args.Request.SetActualStartPosition(new TimeSpan(0));
    /// <summary>
    /// This is derived from the sample in "Windows 8.1 Apps with Xaml and C# Unleashed"
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="args"></param>
    void _mss_SampleRequested(MediaStreamSource sender, MediaStreamSourceSampleRequestedEventArgs args)
    if (_frameCurrent == c_frames) return;
    var deferral = args.Request.GetDeferral();
    byte[] frameBuffer;
    try
    frameBuffer = new byte[_frameSizeBytes];
    this._random.NextBytes(frameBuffer);
    catch
    throw new Exception("Sample source ran out of RAM");
    args.Request.Sample = MediaStreamSample.CreateFromBuffer(frameBuffer.AsBuffer(), TimeSpan.FromTicks(_transcodePositionTicks));
    args.Request.Sample.Duration = TimeSpan.FromTicks(_frameDurationTicks);
    args.Request.Sample.KeyFrame = true;
    _transcodePositionTicks += _frameDurationTicks;
    _frameCurrent++;
    deferral.Complete();
    Again, I can't see any reason why this shouldn't work. You'll note it mirrors pretty closely the sample in the Windows 8.1 Apps With Xaml Unleashed book (Chapter 14). The difference is I'm feeding the samples to a transcoder rather than a MediaElement (which,
    again should be no issue).
    Thanks again for any suggestions!
    Peter

  • ORA 04030 Out of process memory error

    Dear experts,
    I know there are multiple discussions around this error and I have been reading through most of them in the past one week or so, but looks like we are running out of options or are missing the color altogether. Ok, we are getting ORA-04030 - out of process memory while allocating....while one of our batch process runs in the night. It simply tries to insert/update to a table. Our installation is 11.2.0.1.0 with no RAC configuration and on 64-bit AIX having 6 cores, 12 CPUs and 16 GB memory.
    We have checked the Workarea_Size_Policy is set to be as Auto so Oracle decides how much memory to allocate to PGA automatically on run-time based on the demand. And based on the AWR report it doesnt look like we are anywhere near the country having a PGA-deficit!! I am attaching the AWR report in a word document here for your reference.
    Also attached below are the configurations and the ulimit values.
    IKBTRN1> show parameter workarea;
    NAME                                 TYPE                             VALUE
    workarea_size_policy                 string                           AUTO
    oraipeikbtrn1:/home/oracle-> ulimit -a
    time(seconds)        unlimited
    file(blocks)         unlimited
    data(kbytes)         unlimited
    stack(kbytes)        4194304
    memory(kbytes)       unlimited
    coredump(blocks)     unlimited
    nofiles(descriptors) unlimited
    threads(per process) unlimited
    processes(per user)  unlimited
    Now, nothing seems to have contributed to the out of process memory issue from Oracle standpoint. I would be happy to be proved wrong here, if I am wrong.
    So, whats going wrong here? A possible memory leak which we cannot zero down to, a OS memory limit or something else?
    Seeking expert's advise on this, and also sincerely appreciate your time in looking at this.
    Thanks.
    P.S - I am pasting the whole AWR report since there is no 'upload file' option here that I can see.
    WORKLOAD REPOSITORY report for
    DB Name     DB Id     Instance     Inst num     Startup Time     Release     RAC
    IKBTRN1     54659199     IKBTRN1     1     06-Jun-11 02:06     11.2.0.1.0     NO
    Host Name     Platform     CPUs     Cores     Sockets     Memory (GB)
    oraipeikbtrn1.******.com     AIX-Based Systems (64-bit)     12     6          16.00
         Snap Id     Snap Time     Sessions     Cursors/Session
    Begin Snap:     5952     26-Aug-11 03:00:48     34     2.0
    End Snap:     5953     26-Aug-11 04:00:52     32     1.9
    Elapsed:          60.07 (mins)          
    DB Time:          1.93 (mins)          
    Report Summary
    Cache Sizes
         Begin     End          
    Buffer Cache:     1,056M     704M     Std Block Size:     8K
    Shared Pool Size:     3,456M     3,456M     Log Buffer:     7,184K
    Load Profile
    Load Profile
         Per Second     Per Transaction     Per Exec     Per Call
    DB Time(s):     0.0     2.0     0.02     0.02
    DB CPU(s):     0.0     0.5     0.00     0.00
    Redo size:     556.1     34,554.8          
    Logical reads:     151.4     9,407.6          
    Block changes:     1.9     119.8          
    Physical reads:     14.2     882.6          
    Physical writes:     9.5     590.4          
    User calls:     1.8     112.8          
    Parses:     1.5     93.7          
    Hard parses:     0.1     8.9          
    W/A MB processed:     -0.1     -6.9          
    Logons:     0.0     1.6          
    Executes:     1.9     115.4          
    Rollbacks:     0.0     0.0          
    Transactions:     0.0               
    Instance Efficiency Percentages (Target 100%)
    Buffer Nowait %:     100.00     Redo NoWait %:     100.00
    Buffer Hit %:     96.63     In-memory Sort %:     99.97
    Library Hit %:     95.68     Soft Parse %:     90.49
    Execute to Parse %:     18.74     Latch Hit %:     100.00
    Parse CPU to Parse Elapsd %:     57.23     % Non-Parse CPU:     86.28
    Shared Pool Statistics
         Begin     End
    Memory Usage %:     85.72     85.76
    % SQL with executions>1:     93.91     96.66
    % Memory for SQL w/exec>1:     89.07     87.04
    Top 5 Timed Foreground Events
    Event     Waits     Time(s)     Avg wait (ms)     % DB time     Wait Class
    DB CPU          29          24.66     
    db file scattered read     3,456     17     5     14.92     User I/O
    db file sequential read     4,304     17     4     14.77     User I/O
    direct path read temp     764     17     22     14.31     User I/O
    direct path write temp     259     5     21     4.70     User I/O
    Host CPU (CPUs: 12 Cores: 6 Sockets: )
    Load Average Begin     Load Average End     %User     %System     %WIO     %Idle
    1.39     1.37     0.2     0.2     0.2     99.6
    Instance CPU
    %Total CPU     %Busy CPU     %DB time waiting for CPU (Resource Manager)
    0.1     20.5     0.0
    Memory Statistics
         Begin     End
    Host Mem (MB):     16,384.0     16,384.0
    SGA use (MB):     4,704.0     4,352.0
    PGA use (MB):     196.1     188.4
    % Host Mem used for SGA+PGA:     29.91     27.71
    Main Report
    •     Report Summary
    •     Wait Events Statistics
    •     SQL Statistics
    •     Instance Activity Statistics
    •     IO Stats
    •     Buffer Pool Statistics
    •     Advisory Statistics
    •     Wait Statistics
    •     Undo Statistics
    •     Latch Statistics
    •     Segment Statistics
    •     Dictionary Cache Statistics
    •     Library Cache Statistics
    •     Memory Statistics
    •     Streams Statistics
    •     Resource Limit Statistics
    •     Shared Server Statistics
    •     init.ora Parameters
    Back to Top
    Wait Events Statistics
    •     Time Model Statistics
    •     Operating System Statistics
    •     Operating System Statistics - Detail
    •     Foreground Wait Class
    •     Foreground Wait Events
    •     Background Wait Events
    •     Wait Event Histogram
    •     Wait Event Histogram Detail (64 msec to 2 sec)
    •     Wait Event Histogram Detail (4 sec to 2 min)
    •     Wait Event Histogram Detail (4 min to 1 hr)
    •     Service Statistics
    •     Service Wait Class Stats
    Back to Top
    Time Model Statistics
    •     Total time in database user-calls (DB Time): 115.9s
    •     Statistics including the word "background" measure background process time, and so do not contribute to the DB time statistic
    •     Ordered by % or DB time desc, Statistic name
    Statistic Name     Time (s)     % of DB Time
    sql execute elapsed time     101.69     87.75
    DB CPU     28.58     24.66
    parse time elapsed     10.14     8.75
    hard parse elapsed time     9.92     8.56
    failed parse elapsed time     4.92     4.25
    hard parse (sharing criteria) elapsed time     4.27     3.68
    connection management call elapsed time     0.42     0.36
    PL/SQL compilation elapsed time     0.34     0.30
    PL/SQL execution elapsed time     0.18     0.15
    sequence load elapsed time     0.00     0.00
    repeated bind elapsed time     0.00     0.00
    DB time     115.88     
    background elapsed time     86.01     
    background cpu time     5.06     
    Back to Wait Events Statistics
    Back to Top
    Operating System Statistics
    •     *TIME statistic values are diffed. All others display actual values. End Value is displayed if different
    •     ordered by statistic type (CPU Use, Virtual Memory, Hardware Config), Name
    Statistic     Value     End Value
    NUM_LCPUS     0     
    NUM_VCPUS     0     
    AVG_BUSY_TIME     1,260     
    AVG_IDLE_TIME     360,705     
    AVG_IOWAIT_TIME     534     
    AVG_SYS_TIME     483     
    AVG_USER_TIME     679     
    BUSY_TIME     16,405     
    IDLE_TIME     4,329,811     
    IOWAIT_TIME     7,284     
    SYS_TIME     7,092     
    USER_TIME     9,313     
    LOAD     1     1
    OS_CPU_WAIT_TIME     503,900     
    PHYSICAL_MEMORY_BYTES     17,179,869,184     
    NUM_CPUS     12     
    NUM_CPU_CORES     6     
    GLOBAL_RECEIVE_SIZE_MAX     1,310,720     
    GLOBAL_SEND_SIZE_MAX     1,310,720     
    TCP_RECEIVE_SIZE_DEFAULT     16,384     
    TCP_RECEIVE_SIZE_MAX     9,223,372,036,854,775,807     
    TCP_RECEIVE_SIZE_MIN     4,096     
    TCP_SEND_SIZE_DEFAULT     16,384     
    TCP_SEND_SIZE_MAX     9,223,372,036,854,775,807     
    TCP_SEND_SIZE_MIN     4,096     
    Back to Wait Events Statistics
    Back to Top
    Operating System Statistics - Detail
    Snap Time     Load     %busy     %user     %sys     %idle     %iowait
    26-Aug 03:00:48     1.39                         
    26-Aug 04:00:52     1.37     0.38     0.21     0.16     99.62     0.17
    Back to Wait Events Statistics
    Back to Top
    Foreground Wait Class
    •     s - second, ms - millisecond - 1000th of a second
    •     ordered by wait time desc, waits desc
    •     %Timeouts: value of 0 indicates value was < .5%. Value of null is truly 0
    •     Captured Time accounts for 78.2% of Total DB time 115.88 (s)
    •     Total FG Wait Time: 62.08 (s) DB CPU time: 28.58 (s)
    Wait Class     Waits     %Time -outs     Total Wait Time (s)     Avg wait (ms)     %DB time
    User I/O     8,949     0     56     6     48.74
    DB CPU               29          24.66
    System I/O     1,916     0     3     1     2.18
    Other     506     88     1     2     0.92
    Configuration     2     50     1     500     0.86
    Commit     37     0     1     18     0.56
    Application     20     0     0     17     0.29
    Network     4,792     0     0     0     0.01
    Concurrency     1     0     0     0     0.00
    Back to Wait Events Statistics
    Back to Top
    Foreground Wait Events
    •     s - second, ms - millisecond - 1000th of a second
    •     Only events with Total Wait Time (s) >= .001 are shown
    •     ordered by wait time desc, waits desc (idle events last)
    •     %Timeouts: value of 0 indicates value was < .5%. Value of null is truly 0
    Event     Waits     %Time -outs     Total Wait Time (s)     Avg wait (ms)     Waits /txn     % DB time
    db file scattered read     3,456     0     17     5     59.59     14.92
    db file sequential read     4,304     0     17     4     74.21     14.77
    direct path read temp     764     0     17     22     13.17     14.31
    direct path write temp     259     0     5     21     4.47     4.70
    control file sequential read     1,916     0     3     1     33.03     2.18
    ADR block file read     38     0     1     28     0.66     0.92
    log buffer space     2     50     1     500     0.03     0.86
    log file sync     37     0     1     18     0.64     0.56
    enq: RO - fast object reuse     14     0     0     24     0.24     0.29
    local write wait     44     0     0     1     0.76     0.03
    SQL*Net message to client     4,772     0     0     0     82.28     0.01
    Disk file operations I/O     110     0     0     0     1.90     0.00
    ADR block file write     7     0     0     0     0.12     0.00
    SQL*Net message from client     4,773     0     15,396     3226     82.29     
    Streams AQ: waiting for messages in the queue     720     100     3,600     5000     12.41     
    Back to Wait Events Statistics
    Back to Top
    Background Wait Events
    •     ordered by wait time desc, waits desc (idle events last)
    •     Only events with Total Wait Time (s) >= .001 are shown
    •     %Timeouts: value of 0 indicates value was < .5%. Value of null is truly 0
    Event     Waits     %Time -outs     Total Wait Time (s)     Avg wait (ms)     Waits /txn     % bg time
    control file sequential read     4,950     0     35     7     85.34     40.74
    control file parallel write     1,262     0     31     25     21.76     36.46
    log file parallel write     383     0     4     10     6.60     4.37
    db file parallel write     627     0     2     3     10.81     2.36
    change tracking file synchronous read     56     0     2     34     0.97     2.21
    os thread startup     17     0     1     88     0.29     1.74
    ADR block file read     135     0     1     7     2.33     1.04
    change tracking file synchronous write     56     0     1     15     0.97     0.98
    SGA: allocation forcing component growth     8     100     1     100     0.14     0.93
    db file sequential read     112     0     1     6     1.93     0.75
    process diagnostic dump     94     0     0     1     1.62     0.09
    ADR block file write     92     0     0     1     1.59     0.07
    LGWR wait for redo copy     11     0     0     1     0.19     0.01
    log file sync     2     0     0     3     0.03     0.01
    ADR file lock     92     22     0     0     1.59     0.01
    Parameter File I/O     24     0     0     0     0.41     0.01
    direct path write     6     0     0     1     0.10     0.00
    Disk file operations I/O     54     0     0     0     0.93     0.00
    rdbms ipc message     17,637     97     61,836     3506     304.09     
    Streams AQ: waiting for time management or cleanup tasks     5     60     11,053     2210602     0.09     
    DIAG idle wait     7,203     100     7,203     1000     124.19     
    PX Idle Wait     1,802     100     3,604     2000     31.07     
    pmon timer     1,212     99     3,603     2973     20.90     
    Space Manager: slave idle wait     726     99     3,603     4963     12.52     
    smon timer     12     100     3,600     300004     0.21     
    Streams AQ: qmn slave idle wait     128     0     3,583     27993     2.21     
    Streams AQ: qmn coordinator idle wait     256     50     3,583     13996     4.41     
    SQL*Net message from client     293     0     2     5     5.05     
    Back to Wait Events Statistics
    Back to Top
    Wait Event Histogram
    •     Units for Total Waits column: K is 1000, M is 1000000, G is 1000000000
    •     % of Waits: value of .0 indicates value was <.05%; value of null is truly 0
    •     % of Waits: column heading of <=1s is truly <1024ms, >1s is truly >=1024ms
    •     Ordered by Event (idle events last)
              % of Waits
    Event     Total Waits     <1ms     <2ms     <4ms     <8ms     <16ms     <32ms     <=1s     >1s
    ADR block file read     173     80.3     5.2     2.3     5.8     1.7          4.6     
    ADR block file write     99     96.0     3.0                    1.0          
    ADR file lock     102     100.0                                   
    Disk file operations I/O     165     100.0                                   
    LGWR wait for redo copy     11     90.9               9.1                    
    Parameter File I/O     24     100.0                                   
    SGA: allocation forcing component growth     8                                   100.0     
    SQL*Net break/reset to client     6     100.0                                   
    SQL*Net message to client     4992     100.0                                   
    SQL*Net more data from client     20     100.0                                   
    asynch descriptor resize     541     100.0                                   
    change tracking file synchronous read     56     83.9                         1.8     14.3     
    change tracking file synchronous write     56     80.4     7.1               1.8          10.7     
    control file parallel write     1262     80.3     1.7     .6     .6     .8     1.3     14.7     
    control file sequential read     6866     94.1     .9     .7     .7     .3     .4     2.9     
    db file parallel write     628     94.3     2.1     1.0     .8     .3     .3     1.3     
    db file scattered read     3457     72.6     7.2     5.4     6.9     5.7     .5     1.6     
    db file sequential read     4525     78.7     2.7     1.8     9.6     5.3     .4     1.5     
    direct path read temp     764     40.2     18.6     9.4     6.2     11.0     5.8     8.9     
    direct path sync     1     100.0                                   
    direct path write     6     83.3     16.7                              
    direct path write temp     259     .4          1.2     88.8          .4     9.3     
    enq: RO - fast object reuse     14     42.9     42.9          7.1               7.1     
    latch free     1     100.0                                   
    latch: cache buffers lru chain     2     100.0                                   
    latch: checkpoint queue latch     2     100.0                                   
    latch: messages     2     100.0                                   
    latch: object queue header operation     2     100.0                                   
    latch: redo allocation     1     100.0                                   
    latch: row cache objects     1     100.0                                   
    local write wait     44     100.0                                   
    log buffer space     2     50.0                              50.0     
    log file parallel write     383     92.4     .8          1.0               5.7     
    log file sync     39     82.1     2.6          2.6               12.8     
    os thread startup     17                                   100.0     
    process diagnostic dump     94     34.0     63.8     2.1                         
    reliable message     7     100.0                                   
    utl_file I/O     12     100.0                                   
    DIAG idle wait     7204                                   100.0     
    PX Idle Wait     1802                                        100.0
    SQL*Net message from client     5067     87.1     6.6     1.0     .5     .5     .1     .5     3.7
    Space Manager: slave idle wait     726     .6                                   99.4
    Streams AQ: qmn coordinator idle wait     256     49.2     .8                              50.0
    Streams AQ: qmn slave idle wait     128                                        100.0
    Streams AQ: waiting for messages in the queue     721                                        100.0
    Streams AQ: waiting for time management or cleanup tasks     5     40.0                              20.0     40.0
    class slave wait     17     100.0                                   
    pmon timer     1212     .9                                   99.1
    rdbms ipc message     17.6K     1.8     .4     .2     .2     .1     .1     21.0     76.2
    smon timer     12                                        100.0
    Back to Wait Events Statistics
    Back to Top
    I couldnt add the rest of the report here since it is telling me I have exceeded 30000 characters. If you want to see the full report, please email me at [email protected]

    Unless your database is strictly a DSS-type of database, your AWR report exposes loads of issues with it. And I think none of the time during the AWR window was spent on database. Look at the DB time (with all those multi cores) compared with the elapsed time of the AWR.
    As you are on 11g, why not make use of MEMORY_TARGET (a single parameter to manage both SGA and PGA)? If you are already on it, ignore this as I can't see it anywhere. If not, get rid of SGA_TARGET and PGA_AGGREGATE_TARGET and replace it with a single MEMORY_TARGET parameter. However you may have a minimum threshold set for different SGA pools so that they won't shrink beyond that point.
    Having said that, setting MEMORY_TARGET is not a guarantee to avoid ORA-4030. Just a single bad PL/SQL code could go and exploit the untunable part of your process memory and even go and blow up the physical memory. If you are using FORALL and BULK load, see if you can cut it down into few chunks rather than running as a single process.
    What does your V$PGASTAT say?

  • Pro*c multithreaded application has memory leak

    Hi there,
    I posted this message a week ago in OCI section, nobody answer me.
    I am really curious if my application has a bug or the pro*c has a bug.
    Anyone can compile the sample code and test it easily.
    I made multithreaded application which queries dynamic SQL, it works.
    But the memory leaks when i query the SQL statement.
    The more memory leaks, the more i query the SQL statement, even same SQL
    statement.
    I check it with top, shell command.
    My machine is SUN E450, Solaris 8. Oracle 9.2.0.1
    Compiler : gcc (GCC) 3.2.2
    I changed source code which is from
    $(ORACLE_HOME)/precomp/demo/proc/sample10.pc
    the sample10 doesn't need to be multithreaded. But i think it has to work
    correctly if i changed it to multithreaded application.
    the make file and source code will be placed below.
    I have to figure out the problem.
    Please help
    Thanks in advance,
    the make file is below
    HOME = /user/jkku
    ORA = $(ORACLE_HOME)
    CC = gcc
    PROC = proc
    LC_INCL = -I$(HOME)/work/dbmss/libs/include
    lc_incl = include=$(HOME)/work/dbmss/libs/include
    SYS_INCL =
    sys_incl =
    ORA_INCL = -I. \
    -I$(ORA)/precomp/public \
    -I$(ORA)/rdbms/public \
    -I$(ORA)/rdbms/demo \
    -I$(ORA)/rdbms/pbsql/public \
    -I$(ORA)/network/public \
    -DSLMXMX_ENABLE -DSLTS_ENABLE -D_SVID_GETTOD
    INCLUDES = $(LC_INCL) $(SYS_INCL) $(ORA_INCL)
    includes = $(lc_incl) $(sys_incl)
    LC_LIBS =
    SYS_LIBS = -lpthread -lsocket -lnsl -lrt
    ORA_LIBS = -L$(ORA)/lib/ -lclntsh
    LIBS = $(LC_LIBS) $(SYS_LIBS) $(ORA_LIBS)
    # Define C Compiler flags
    CFLAGS += -D_Solaris64_ -m64
    CFLAGS += -g -D_REENTRANT
    # Define pro*c Compiler flags
    PROCFLAGS += THREADS=YES
    PROCFLAGS += CPOOL=YES
    # Our object files
    PRECOMPS = sample10.c
    OBJS = sample10.o
    .SUFFIXES: .o .c .pc
    .c.o:
    $(CC) -c $(CFLAGS) $(INCLUDES) $*.c
    .pc.c:
    $(PROC) $(PROCFLAGS) $(includes) $*.pc $*.c
    all: sample10
    sample10: $(PRECOMPS) $(OBJS)
    $(CC) $(CFLAGS) -o sample10 $(OBJS) $(LIBS)
    clean:
    rm -rf *.o sample10 sample10.c
    the source code is below which i changed the oracle sample10.pc to
    multithreaded application.
    Sample Program 10: Dynamic SQL Method 4
    This program connects you to ORACLE using your username and
    password, then prompts you for a SQL statement. You can enter
    any legal SQL statement. Use regular SQL syntax, not embedded SQL.
    Your statement will be processed. If it is a query, the rows
    fetched are displayed.
    You can enter multi-line statements. The limit is 1023 characters.
    This sample program only processes up to MAX_ITEMS bind variables and
    MAX_ITEMS select-list items. MAX_ITEMS is #defined to be 40.
    #include <stdio.h>
    #include <string.h>
    #include <setjmp.h>
    #include <sqlda.h>
    #include <stdlib.h>
    #include <sqlcpr.h>
    /* Maximum number of select-list items or bind variables. */
    #define MAX_ITEMS 40
    /* Maximum lengths of the names of the
    select-list items or indicator variables. */
    #define MAX_VNAME_LEN 30
    #define MAX_INAME_LEN 30
    #ifndef NULL
    #define NULL 0
    #endif
    /* Prototypes */
    #if defined(__STDC__)
    void sql_error(void);
    int oracle_connect(void);
    int alloc_descriptors(int, int, int);
    int get_dyn_statement(void);
    void set_bind_variables(void);
    void process_select_list(void);
    void help(void);
    #else
    void sql_error(/*_ void _*/);
    int oracle_connect(/*_ void _*/);
    int alloc_descriptors(/*_ int, int, int _*/);
    int get_dyn_statement(/* void _*/);
    void set_bind_variables(/*_ void -*/);
    void process_select_list(/*_ void _*/);
    void help(/*_ void _*/);
    #endif
    char *dml_commands[] = {"SELECT", "select", "INSERT", "insert",
    "UPDATE", "update", "DELETE", "delete"};
    EXEC SQL INCLUDE sqlda;
    EXEC SQL INCLUDE sqlca;
    EXEC SQL BEGIN DECLARE SECTION;
    char dyn_statement[1024];
    EXEC SQL VAR dyn_statement IS STRING(1024);
    EXEC SQL END DECLARE SECTION;
    EXEC ORACLE OPTION (ORACA=YES);
    EXEC ORACLE OPTION (RELEASE_CURSOR=YES);
    SQLDA *bind_dp;
    SQLDA *select_dp;
    /* Define a buffer to hold longjmp state info. */
    jmp_buf jmp_continue;
    char *db_uid="dbmuser/dbmuser@dbmdb";
    sql_context ctx;
    int err_sql;
    enum{
    SQL_SUCC=0,
    SQL_ERR,
    SQL_NOTFOUND,
    SQL_UNIQUE,
    SQL_DISCONNECT,
    SQL_NOTNULL
    int main()
    int i;
    EXEC SQL ENABLE THREADS;
    EXEC SQL WHENEVER SQLERROR DO sql_error();
    EXEC SQL WHENEVER NOT FOUND DO sql_not_found();
    /* Connect to the database. */
    if (connect_database() < 0)
    exit(1);
    EXEC SQL CONTEXT USE :ctx;
    /* Process SQL statements. */
    for (;;)
    /* Allocate memory for the select and bind descriptors. */
    if (alloc_descriptors(MAX_ITEMS, MAX_VNAME_LEN, NAME_LEN) != 0)
    exit(1);
    (void) setjmp(jmp_continue);
    /* Get the statement. Break on "exit". */
    if (get_dyn_statement() != 0)
    break;
    EXEC SQL PREPARE S FROM :dyn_statement;
    EXEC SQL DECLARE C CURSOR FOR S;
    /* Set the bind variables for any placeholders in the
    SQL statement. */
    set_bind_variables();
    /* Open the cursor and execute the statement.
    * If the statement is not a query (SELECT), the
    * statement processing is completed after the
    * OPEN.
    EXEC SQL OPEN C USING DESCRIPTOR bind_dp;
    /* Call the function that processes the select-list.
    * If the statement is not a query, this function
    * just returns, doing nothing.
    process_select_list();
    /* Tell user how many rows processed. */
    for (i = 0; i < 8; i++)
    if (strncmp(dyn_statement, dml_commands, 6) == 0)
    printf("\n\n%d row%c processed.\n", sqlca.sqlerrd[2], sqlca.sqlerrd[2] == 1 ? '\0' : 's');
    break;
    /* Close the cursor. */
    EXEC SQL CLOSE C;
    /* When done, free the memory allocated for pointers in the bind and
    select descriptors. */
    for (i = 0; i < MAX_ITEMS; i++)
    if (bind_dp->V != (char *) 0)
    free(bind_dp->V);
    free(bind_dp->I); /* MAX_ITEMS were allocated. */
    if (select_dp->V != (char *) 0)
    free(select_dp->V);
    free(select_dp->I); /* MAX_ITEMS were allocated. */
    /* Free space used by the descriptors themselves. */
    SQLSQLDAFree(ctx, bind_dp);
    SQLSQLDAFree(ctx, select_dp);
    } /* end of for(;;) statement-processing loop */
    disconnect_database();
    EXEC SQL WHENEVER SQLERROR CONTINUE;
    EXEC SQL COMMIT WORK RELEASE;
    puts("\nHave a good day!\n");
    return;
    * Allocate the BIND and SELECT descriptors using sqlald().
    * Also allocate the pointers to indicator variables
    * in each descriptor. The pointers to the actual bind
    * variables and the select-list items are realloc'ed in
    * the set_bind_variables() or process_select_list()
    * routines. This routine allocates 1 byte for select_dp->V
    * and bind_dp->V, so the realloc will work correctly.
    alloc_descriptors(size, max_vname_len, max_iname_len)
    int size;
    int max_vname_len;
    int max_iname_len;
    int i;
    * The first sqlald parameter determines the maximum number of
    * array elements in each variable in the descriptor. In
    * other words, it determines the maximum number of bind
    * variables or select-list items in the SQL statement.
    * The second parameter determines the maximum length of
    * strings used to hold the names of select-list items
    * or placeholders. The maximum length of column
    * names in ORACLE is 30, but you can allocate more or less
    * as needed.
    * The third parameter determines the maximum length of
    * strings used to hold the names of any indicator
    * variables. To follow ORACLE standards, the maximum
    * length of these should be 30. But, you can allocate
    * more or less as needed.
    if ((bind_dp =
    SQLSQLDAAlloc(ctx, size, max_vname_len, max_iname_len)) ==
    (SQLDA *) 0)
    fprintf(stderr,
    "Cannot allocate memory for bind descriptor.");
    return -1; /* Have to exit in this case. */
    if ((select_dp =
    SQLSQLDAAlloc(ctx, size, max_vname_len, max_iname_len)) == (SQLDA *)
    0)
    fprintf(stderr,
    "Cannot allocate memory for select descriptor.");
    return -1;
    select_dp->N = MAX_ITEMS;
    /* Allocate the pointers to the indicator variables, and the
    actual data. */
    for (i = 0; i < MAX_ITEMS; i++) {
    bind_dp->I = (short *) malloc(sizeof (short));
    select_dp->I = (short *) malloc(sizeof(short));
    bind_dp->V = (char *) malloc(1);
    select_dp->V = (char *) malloc(1);
    return 0;
    int get_dyn_statement()
    char *cp, linebuf[256];
    int iter, plsql;
    for (plsql = 0, iter = 1; ;)
    if (iter == 1)
    printf("\nSQL> ");
    dyn_statement[0] = '\0';
    fgets(linebuf, sizeof linebuf, stdin);
    cp = strrchr(linebuf, '\n');
    if (cp && cp != linebuf)
    *cp = ' ';
    else if (cp == linebuf)
    continue;
    if ((strncmp(linebuf, "EXIT", 4) == 0) ||
    (strncmp(linebuf, "exit", 4) == 0))
    return -1;
    else if (linebuf[0] == '?' ||
    (strncmp(linebuf, "HELP", 4) == 0) ||
    (strncmp(linebuf, "help", 4) == 0))
    help();
    iter = 1;
    continue;
    if (strstr(linebuf, "BEGIN") ||
    (strstr(linebuf, "begin")))
    plsql = 1;
    strcat(dyn_statement, linebuf);
    if ((plsql && (cp = strrchr(dyn_statement, '/'))) ||
    (!plsql && (cp = strrchr(dyn_statement, ';'))))
    *cp = '\0';
    break;
    else
    iter++;
    printf("%3d ", iter);
    return 0;
    void set_bind_variables()
    int i, n;
    char bind_var[64];
    /* Describe any bind variables (input host variables) */
    EXEC SQL WHENEVER SQLERROR DO sql_error();
    bind_dp->N = MAX_ITEMS; /* Initialize count of array elements. */
    EXEC SQL DESCRIBE BIND VARIABLES FOR S INTO bind_dp;
    /* If F is negative, there were more bind variables
    than originally allocated by sqlald(). */
    if (bind_dp->F < 0)
    printf ("\nToo many bind variables (%d), maximum is %d\n.",
    -bind_dp->F, MAX_ITEMS);
    return;
    /* Set the maximum number of array elements in the
    descriptor to the number found. */
    bind_dp->N = bind_dp->F;
    /* Get the value of each bind variable as a
    * character string.
    * C contains the length of the bind variable
    * name used in the SQL statement.
    * S contains the actual name of the bind variable
    * used in the SQL statement.
    * L will contain the length of the data value
    * entered.
    * V will contain the address of the data value
    * entered.
    * T is always set to 1 because in this sample program
    * data values for all bind variables are entered
    * as character strings.
    * ORACLE converts to the table value from CHAR.
    * I will point to the indicator value, which is
    * set to -1 when the bind variable value is "null".
    for (i = 0; i < bind_dp->F; i++)
    printf ("\nEnter value for bind variable %.*s: ",
    (int)bind_dp->C, bind_dp->S);
    fgets(bind_var, sizeof bind_var, stdin);
    /* Get length and remove the new line character. */
    n = strlen(bind_var) - 1;
    /* Set it in the descriptor. */
    bind_dp->L = n;
    /* (re-)allocate the buffer for the value.
    sqlald() reserves a pointer location for
    V but does not allocate the full space for
    the pointer. */
    bind_dp->V = (char *) realloc(bind_dp->V, (bind_dp->L + 1));
    /* And copy it in. */
    strncpy(bind_dp->V, bind_var, n);
    /* Set the indicator variable's value. */
    if ((strncmp(bind_dp->V, "NULL", 4) == 0) ||
    (strncmp(bind_dp->V, "null", 4) == 0))
    *bind_dp->I = -1;
    else
    *bind_dp->I = 0;
    /* Set the bind datatype to 1 for CHAR. */
    bind_dp->T = 1;
    return;
    void process_select_list()
    int i, null_ok, precision, scale;
    if ((strncmp(dyn_statement, "SELECT", 6) != 0) &&
    (strncmp(dyn_statement, "select", 6) != 0))
    select_dp->F = 0;
    return;
    /* If the SQL statement is a SELECT, describe the
    select-list items. The DESCRIBE function returns
    their names, datatypes, lengths (including precision
    and scale), and NULL/NOT NULL statuses. */
    select_dp->N = MAX_ITEMS;
    EXEC SQL DESCRIBE SELECT LIST FOR S INTO select_dp;
    /* If F is negative, there were more select-list
    items than originally allocated by sqlald(). */
    if (select_dp->F < 0)
    printf ("\nToo many select-list items (%d), maximum is %d\n",
    -(select_dp->F), MAX_ITEMS);
    return;
    /* Set the maximum number of array elements in the
    descriptor to the number found. */
    select_dp->N = select_dp->F;
    /* Allocate storage for each select-list item.
    sqlprc() is used to extract precision and scale
    from the length (select_dp->L).
    sqlnul() is used to reset the high-order bit of
    the datatype and to check whether the column
    is NOT NULL.
    CHAR datatypes have length, but zero precision and
    scale. The length is defined at CREATE time.
    NUMBER datatypes have precision and scale only if
    defined at CREATE time. If the column
    definition was just NUMBER, the precision
    and scale are zero, and you must allocate
    the required maximum length.
    DATE datatypes return a length of 7 if the default
    format is used. This should be increased to
    9 to store the actual date character string.
    If you use the TO_CHAR function, the maximum
    length could be 75, but will probably be less
    (you can see the effects of this in SQL*Plus).
    ROWID datatype always returns a fixed length of 18 if
    coerced to CHAR.
    LONG and
    LONG RAW datatypes return a length of 0 (zero),
    so you need to set a maximum. In this example,
    it is 240 characters.
    printf ("\n");
    for (i = 0; i < select_dp->F; i++)
    char title[MAX_VNAME_LEN];
    /* Turn off high-order bit of datatype (in this example,
    it does not matter if the column is NOT NULL). */
    sqlnul ((unsigned short *)&(select_dp->T), (unsigned short
    *)&(select_dp->T), &null_ok);
    switch (select_dp->T)
    case 1 : /* CHAR datatype: no change in length
    needed, except possibly for TO_CHAR
    conversions (not handled here). */
    break;
    case 2 : /* NUMBER datatype: use sqlprc() to
    extract precision and scale. */
    sqlprc ((unsigned int *)&(select_dp->L), &precision,
    &scale);
    /* Allow for maximum size of NUMBER. */
    if (precision == 0) precision = 40;
    /* Also allow for decimal point and
    possible sign. */
    /* convert NUMBER datatype to FLOAT if scale > 0,
    INT otherwise. */
    if (scale > 0)
    select_dp->L = sizeof(float);
    else
    select_dp->L = sizeof(int);
    break;
    case 8 : /* LONG datatype */
    select_dp->L = 240;
    break;
    case 11 : /* ROWID datatype */
    case 104 : /* Universal ROWID datatype */
    select_dp->L = 18;
    break;
    case 12 : /* DATE datatype */
    select_dp->L = 9;
    break;
    case 23 : /* RAW datatype */
    break;
    case 24 : /* LONG RAW datatype */
    select_dp->L = 240;
    break;
    /* Allocate space for the select-list data values.
    sqlald() reserves a pointer location for
    V but does not allocate the full space for
    the pointer. */
    if (select_dp->T != 2)
    select_dp->V = (char *) realloc(select_dp->V,
    select_dp->L + 1);
    else
    select_dp->V = (char *) realloc(select_dp->V,
    select_dp->L);
    /* Print column headings, right-justifying number
    column headings. */
    /* Copy to temporary buffer in case name is null-terminated */
    memset(title, ' ', MAX_VNAME_LEN);
    strncpy(title, select_dp->S, select_dp->C);
    if (select_dp->T == 2)
    if (scale > 0)
    printf ("%.*s ", select_dp->L+3, title);
    else
    printf ("%.*s ", select_dp->L, title);
    else
    printf("%-.*s ", select_dp->L, title);
    /* Coerce ALL datatypes except for LONG RAW and NUMBER to
    character. */
    if (select_dp->T != 24 && select_dp->T != 2)
    select_dp->T = 1;
    /* Coerce the datatypes of NUMBERs to float or int depending on
    the scale. */
    if (select_dp->T == 2)
    if (scale > 0)
    select_dp->T = 4; /* float */
    else
    select_dp->T = 3; /* int */
    printf ("\n\n");
    /* FETCH each row selected and print the column values. */
    EXEC SQL WHENEVER NOT FOUND GOTO end_select_loop;
    for (;;)
    EXEC SQL FETCH C USING DESCRIPTOR select_dp;
    /* Since each variable returned has been coerced to a
    character string, int, or float very little processing
    is required here. This routine just prints out the
    values on the terminal. */
    for (i = 0; i < select_dp->F; i++)
    if (*select_dp->I < 0)
    if (select_dp->T == 4)
    printf ("%-*c ",(int)select_dp->L+3, ' ');
    else
    printf ("%-*c ",(int)select_dp->L, ' ');
    else
    if (select_dp->T == 3) /* int datatype */
    printf ("%*d ", (int)select_dp->L,
    *(int *)select_dp->V);
    else if (select_dp->T == 4) /* float datatype */
    printf ("%*.2f ", (int)select_dp->L,
    *(float *)select_dp->V);
    else /* character string */
    printf ("%-*.*s ", (int)select_dp->L,
    (int)select_dp->L, select_dp->V);
    printf ("\n");
    end_select_loop:
    return;
    void help()
    puts("\n\nEnter a SQL statement or a PL/SQL block at the SQL> prompt.");
    puts("Statements can be continued over several lines, except");
    puts("within string literals.");
    puts("Terminate a SQL statement with a semicolon.");
    puts("Terminate a PL/SQL block (which can contain embedded
    semicolons)");
    puts("with a slash (/).");
    puts("Typing \"exit\" (no semicolon needed) exits the program.");
    puts("You typed \"?\" or \"help\" to get this message.\n\n");
    int connect_database()
    err_sql = SQL_SUCC;
    EXEC SQL WHENEVER SQLERROR DO sql_error();
    EXEC SQL WHENEVER NOT FOUND DO sql_not_found();
    EXEC SQL CONTEXT ALLOCATE :ctx;
    EXEC SQL CONTEXT USE :ctx;
    EXEC SQL CONNECT :db_uid;
    if(err_sql != SQL_SUCC){
    printf("err => connect database(ctx:%ld, uid:%s) failed!\n", ctx, db_uid);
    return -1;
    return 1;
    int disconnect_database()
    err_sql = SQL_SUCC;
    EXEC SQL WHENEVER SQLERROR DO sql_error();
    EXEC SQL WHENEVER NOT FOUND DO sql_not_found();
    EXEC SQL CONTEXT USE :ctx;
    EXEC SQL COMMIT WORK RELEASE;
    EXEC SQL CONTEXT FREE:ctx;
    return 1;
    void sql_error()
    printf("err => %.*s", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
    printf("in \"%.*s...\'\n", oraca.orastxt.orastxtl, oraca.orastxt.orastxtc);
    printf("on line %d of %.*s.\n\n", oraca.oraslnr, oraca.orasfnm.orasfnml,
    oraca.orasfnm.orasfnmc);
    switch(sqlca.sqlcode) {
    case -1: /* unique constraint violated */
    err_sql = SQL_UNIQUE;
    break;
    case -1012: /* not logged on */
    case -1089:
    case -3133:
    case -1041:
    case -3114:
    case -3113:
    /* �6�Ŭ�� shutdown�ǰų� �α��� ���°� �ƴҶ� ��b�� �õ� */
    /* immediate shutdown in progress - no operations are permitted */
    /* end-of-file on communication channel */
    /* internal error. hostdef extension doesn't exist */
    err_sql = SQL_DISCONNECT;
    break;
    case -1400:
    err_sql = SQL_NOTNULL;
    break;
    default:
    err_sql = SQL_ERR;
    break;
    EXEC SQL CONTEXT USE :ctx;
    EXEC SQL WHENEVER SQLERROR CONTINUE;
    EXEC SQL ROLLBACK WORK;
    void sql_not_found()
    err_sql = SQL_NOTFOUND;

    Hi Jane,
    What version of Berkeley DB XML are you using?
    What is your operating system and your hardware platform?
    For how long have been the application running?
    What is your current container size?
    What's set for EnvironmentConfig.setThreaded?
    Do you know if containers have previously not been closed correctly?
    Can you please post the entire error output?
    What's the JDK version, 1.4 or 1.5?
    Thanks,
    Bogdan

  • DataSocket memory leak problem (2VO0SF00) -- more info?

    When upgrading to LabVIEW 8.5 recently, I noticed the following known issue in the readme file:
    "ID: 2VO0SF00
    DataSocket/OPC Leaks Memory using ActiveX VIs to perform open-write-close repeatedly
    If you call the DataSocket Open, DataSocket Write, and DataSocket Close functions in succession repeatedly, LabVIEW leaks memory. Workaround — To correct this problem, call the DataSocket Open function once, use the DataSocket Write function to write multiple times, and then use the DataSocket Close function."
    Looking back, I think this problem may have been present in previous LabVIEW releases as well, and might be giving rise to a problem that's been dogging me for quite some time (see my thread, "Error 66 with DataSockets", http://forums.ni.com/ni/board/message?board.id=170&thread.id=187206), in addition to general slow/glitchy behaviour when my VI's have been running continuously for a long time. But in order to determine whether or not this issue affects me, and how I should go about fixing it in the context of my own programs, I need a bit more information about the nature of the issue itself and the inner workings of the DataSocket VI's. Any help or insight the community can provide into this would be greatly appreciated!
    Here are my questions:
    It is my understanding from the "known issue" description above that the memory leak happens when you have a DS Open wired to a DS Write wired to a DS Close, all inside a loop (example 1), and that the suggested workaround would be to move the DS Open and DS Close functions out of the loop on opposite sides, wired to the DS Write which remains inside the loop (example 2). Is this correct?
    Does this leak also happen when performing DS open-read-close's repeatedly (example 3)?
    What happens when a DS Write (or DS Read) is called without a corresponding DS Open and DS Close (examples 4a and 4b)? Does it implicitly do a DS open before doing the write operation and a DS close afterwards? What I'm getting at is this: would having an isolated DS Write (or DS Read) inside a loop, not connected to any DS Open or DS Close functions at all, cause this same memory leak?
    If one computer is running the DS server and a second computer is running the VI with the repeated open-write-close's, on which computer does the memory leak occur?
    In my question #1 workaround (example 2), the DS Open and DS Close outside the loop are routed through a shift register and in to and out of the DS Write inside the loop. If the DS connection id goes into the DS Write "connection in" and then splits and goes around the DS Write and out to the DS Close, without coming out of the DS Write "connection out" (example 5), will the memory leak still be avoided? I.e. if the DS Write function doesn't have anything connected to its "connection out", will it try to do an implicit DS Close?
    If the VI causing the memory leak is stopped, but LabVIEW stays running, will the leaked memory be reclaimed? What if the VI is closed? What if all of LabVIEW is closed?
    FYI, in the examples above "x1a" is a statically-defined DataSocket on the DS server running on the computer Max, to which the computer running the example VI's has read/write access. My actual application has numerous VI's and hundreds of DataSocket items, many of which are written to / read from every 50-100 ms in the style of examples 4a and 4b.
    Does anyone have any idea about this stuff?
    Thanks in advance,
    Patrick
    Attachments:
    examples_jpg1.zip ‏63 KB
    examples_vi1.zip ‏40 KB

    Hi Meghan,
    Yes, some of the larger VIs in my application do write to / read from several hundred DataSockets, so it's not feasible to use shift registers for each one individually, and hence why I'm passing the references into an array, etc.
    Your Alternate Solution 2 is more along the lines of something that would work for me. However, my actual code has a lot of nested loops, sequences and DataSocket items which are not all written to in the same frame, so this solution would still be difficult to implement: it would be cumbersome to unpack the entire 500-element reference id array and build a new one (maintaining the positions and values of the unaffected elements) every time I write to some small subset of the DataSockets.
    I think I have a solution which solves the problem and is also scalable to the size of my application -- I've attached it as Example 7. Do you think this will avoid the memory leak? It's the same as your Alternate Solution 2, except that instead of building a new array out of the DS Write reference outs, each reference out replaces the appropriate element of the original array.
    If I understand you correctly, in order to avoid implicit reference opens and closes, a DS Write needs to have both it's reference in and reference out wired to something. Thus, even though my Example 7 replaces an element of the array with an identical value, and therefore doesn't actually change the array (which would be a silly thing to do normally), the DS Writes have their reference outs wired to something, and eventually in a convoluted way to a DS Close, so it should avoid the memory leak.
    Just out of curiosity (I don't think anything like this would apply to my application or any fixes I implement), when would the implicit reference close happen in the attached Example 8? The DS Write has its reference in and reference out both connected to temporally "adjacent" DS Writes via the shift register, so perhaps it wouldn't try to close the reference on each loop iteration? Or would it look into the future and see that there is no DS Close and decide to implicitly do that itself? Or maybe only the DS Write on the last loop iteration does this?
    Thanks for bearing with me through this,
    Patrick
    Attachments:
    example73.JPG ‏40 KB
    example83.JPG ‏14 KB

Maybe you are looking for

  • Help!!!  My Blues are Printing Purple

    I am using windows 8.1 printing from Lightroom.  I calibrated my monitor with an X-rite Color Munki Photo.  At first I thought it was Prophoto vs Adobe RGB, but my latest print shows that is not the problem. I printed from Lightroom with Lightroom ma

  • CoreAudio troubles...

    For some reason today when I launched LogicPro (7.1), every time I hit "record" on an audio track the lead-in starts playing, then dissolves into distortion, then stops, and an error comes up: Core Audio: Disk is too slow (Record) (-10004) I have res

  • Create book file on basis of txt file with local paths?

    I would like to be able to create a book file in FrameMaker 7 or FrameMaker 9 on the basis of a  .txt file reading for instance: c:/documents/job.fm c:/documents/15ss.fm c:/documents/sdf/job1.fm Preferrably I would like to be able to paste the lines

  • Scheduled date not matching std dates defined

    Dear all, We are facing scenario where when we create process order in the system, The system automatically assign dates of operation to be completed ( Earliest & Latest ) while in recipe we have defined std time for that particular phase. So my quer

  • Sales Order Status for Resource Related Billing

    Hi The Resource related billing is done based on the costs accumulated on account assigned WBS Element. The WBS Element system status is set 'Finally Billed'. The overall status of Sales Order line item is still 'open' and does show up in 'Open Order