MFC based apllication and row LOCK.

Dear Oracle Tech.
As end user of Oracle Database, we seek advise from Oracle on the following issue: our business application is an Windows system (MFC based) built with Visual Studio 6; Our database is Oracle 9i;
We have a database resources shared by many users that connect in ODBC way. We would like to have that when ever some one is using
(modifing, eg. CRecordset::Edit() - CRecordset::Update() cycle for mfc developers)
a row it is locked by the front end application so that no other can commit changes to that row until this user releases the locks by either quitting the application or by moving on to a different record.
There is a way in oracle functionality to obtain this? In this case other users may read locked record anyway?
Thank You.

I've never heard of the Oracle Control Panel, and nothing like that appears on my machine. Is it possible that this is an Oracle forms-type feature? I have a hard time believing that Oracle would or could provide pessimistic locking for arbitrary applications accessing the database.
The easiest way to implement pessimistic locking is to use the "for update" clause. If I do a "select * from emp for update", every row in the emp table will be locked for writing (Oracle will never block a reader). This assumes that you're not in autocommit mode, since locks will always be released when your transaction ends.
Justin

Similar Messages

  • V$system_event, timeouts and row lock contention

    Hello everyone,
    What is the meaning of the total_timeouts column in the v$system_event view if it is related to the event "enq: TX - row lock contention"?
    How can we have a timeout since "query timeout" is a non existent concept on Oracle?
    Maybe I am wrong.
    Regards.
    Carl

    Hello everyone,
    What is the meaning of the total_timeouts column in
    the v$system_event view if it is related to the event
    "enq: TX - row lock contention"?
    How can we have a timeout since "query timeout" is a
    non existent concept on Oracle?
    Maybe I am wrong.
    Regards.
    CarlThe value for timeouts, in this case, indicates the number of times one of the sessions had to wait a full 3 second time slice while waiting for a second session to either commit or roll back, in anticipation of a potential primary key violation. If the second session commits, the first session will receive an error indicating a primary key violation.
    Test setup:
    In session 2:
    CREATE TABLE T1 (C1 VARCHAR2(20) PRIMARY KEY);
    INSERT INTO T1 VALUES ('ORACLE');
    In session 1:
    INSERT INTO T1 VALUES ('ORACLE');
    After executing tha above, allow 60 seconds to elapse after the insert in session 1, and then check the delta values in either V$SYSTEM_EVENT or V$SESSION_EVENT:
    20 waits on ENQ: TX - ROW LOCK CONTENTION, 19 timeouts, 59.99 seconds, with an average wait of 2.9995 seconds.
    Charles Hooper
    IT Manager/Oracle DBA
    K&M Machine-Fabricating, Inc.

  • Read only users and row locks

    Can read-only users obtain row locks on non-temporary (i.e,. visible to other users) tables, for example through SELECT FOR UPDATE, even though they couldn't not ultimately modify said tables?

    Yes.
    Here is an example with Oracle XE 11G and HR schema:
    Connecting as user having only CREATE SESSION and SELECT privilege on HR.JOBS table:
    SQL> desc hr.jobs;
    Name                                      Null?    Type
    JOB_ID                                    NOT NULL VARCHAR2(10)
    JOB_TITLE                                 NOT NULL VARCHAR2(35)
    MIN_SALARY                                         NUMBER(6)
    MAX_SALARY                                         NUMBER(6)
    SQL> select * from session_roles;
    no rows selected
    SQL> select * from session_privs;
    PRIVILEGE
    CREATE SESSION
    SQL> select owner, table_name, privilege from user_tab_privs;
    OWNER                          TABLE_NAME
    PRIVILEGE
    HR                             JOBS
    SELECT
    SQL> select job_title from hr.jobs for update;
    JOB_TITLE
    President
    Administration Vice President
    Administration Assistant
    Finance Manager
    Accountant
    Accounting Manager
    Public Accountant
    Sales Manager
    Sales Representative
    Purchasing Manager
    Purchasing Clerk
    JOB_TITLE
    Stock Manager
    Stock Clerk
    Shipping Clerk
    Programmer
    Marketing Manager
    Marketing Representative
    Human Resources Representative
    Public Relations Representative
    19 rows selected.
    SQL>Now connecting as HR following statement hangs:
    SQL> connect hr/hr
    Connected.
    SQL> select * from jobs for update;Going back to first session:
    SQL> update hr.jobs set min_salary=0;
    update hr.jobs set min_salary=0
    ERROR at line 1:
    ORA-01031: insufficient privileges

  • Positioned Updates and Row Locking

    The latest 8.1.6 driver doesn't seem to support Positioned updates (select for update)... are you planning to do so? If not, is there a nice way to lock records programmatically using jdbc?
    Thanks,
    Patrick Caldwell
    [email protected]

    Never mind... i just found the answer in your documentation... i was trying to use "setCursorName" but this isn't supported... have to use ROWID to do this...
    thanks,
    pat

  • Index contention & row lock contention

    Hi,
    Recently our application loaded a handsome amount of data into our production database. The process took around 5 to 6 hours. During this process, we observed that the performance degraded.
    The major wait events are
    1) TX index contention (concurrency) and
    2) ROW LOCK CONTENTION (application).
    The sql which lead to index contention is a simple insert statement into a table x and row lock contention is into a table y.
    Both x and y are major detail tables of our application. X has around 4 foreign keys, one foriegn key is referencing table y. the foreign key column x is indexed.
    our database is on 10gR2 and using ASSM.
    The data block wait event stats during the load process is as follows
    select * from dba_hist_waitstat where snap_id between '21454' and '21462' AND WAIT_COUNT>0 and class='data block';
    SNAP_ID DBID INSTANCE_NUMBER CLASS WAIT_COUNT TIME
    21454 3937665896 1 data block 195089769 33899167
    21455 3937665896 1 data block 195095958 33902183
    21456 3937665896 1 data block 195096398 33902377
    21457 3937665896 1 data block 195097225 33902843
    21458 3937665896 1 data block 195628987 34037147
    21459 3937665896 1 data block 195944006 34055524
    21460 3937665896 1 data block 195944496 34055642
    21461 3937665896 1 data block 196183308 34112433
    21462 3937665896 1 data block 196213292 34127409
    9 rows selected.
    select snap_id,eq_type,req_reason, total_req#, total_wait#,failed_req#, cum_wait_time from dba_hist_enqueue_stat where snap_id between '21454' and '21462' and failed_req#>0 and eq_type='TM'
    SYS@sqdb AS SYSDBA> /
    SNAP_ID EQ REQ_REASON TOTAL_REQ# TOTAL_WAIT# FAILED_REQ# CUM_WAIT_TIME
    21454 TM contention 682928465 14 2735 1750
    21455 TM contention 682939964 14 2735 1750
    21456 TM contention 682950668 14 2735 1750
    21457 TM contention 682967980 14 2735 1750
    21458 TM contention 682983109 14 2735 1750
    21459 TM contention 682998136 14 2735 1750
    21460 TM contention 683006816 14 2735 1750
    21461 TM contention 683018179 14 2735 1750
    21462 TM contention 683432945 14 2735 1750
    9 rows selected.
    I dont see any significant ITL contention on these objects compared to other contention. (from segment statistics)
    SYS@sqdb AS SYSDBA> select b.object_name,a.snap_id, a.physical_writes_total,a.physical_writes_delta,a.physical_reads_total,a.physical_reads_delta, a.itl_waits_total,a.itl_waits_delta from dba_hist_seg_stat a,(select object_id,object_name from dba_objects where owner='ABCD') b where snap_id between '21454' and '21462' and a.obj#= b.object_id and a.itl_waits_delta> 0 order by itl_waits_delta,2,1;
    OBJECT_NAME SNAP_ID PHYSICAL_WRITES_TOTAL PHYSICAL_WRITES_DELTA PHYSICAL_READS_TOTAL PHYSICAL_READS_DELTA ITL_WAITS_TOTAL ITL_WAITS_DELTA
    IX4_Y 21462 37958 169 105668 174 38 1
    IX4_X 21462 102380 1480 147196 5780 56 1
    As per the application design, for each row of Y, there are multiple number of rows in X and it varies. What additional information do you think I should be collecting and any tips to fix the issue?
    Thanks,
    Murthy

    hi
    Are you using in your insert statement something like "SELECT ... FOR UPDATE"
    post the result of this query during the error:
    SELECT * FROM DBA_BLOCKERS;
    SELECT * FROM DBA_WAITERS;

  • How can I make Numbers respect the row and column locks in an Excel workbook opened in Numbers???

    I have a Windows server app that generates Excel workbooks to be emailed to political campaign volunteers to be loaded into Numbers on an iPad, edited, then emailed back to be posted to the server database.  There are two problems encountered:
    1.  The Excel workbook has the first row (column headings) and first column (route identifier) of cells locked, so that they will not scroll off the screen, but Numbers doesn't respect the locks, so when the user scrolls horizontally or vertically, the column headings and/or the route identifier scroll off the screen.
    2.  The Excel workbook has pop-up "tool-tip" type comments in certain column headings in order to provide the user with the acceptable entries for those columns, but Numbers does not respect those.  When the user touches any of the commented column heading cells, a context menu appears instead of the comment.
    What must I do in the Excel workbook sheets, or what settings can be made in Numbers to correct the above?

    I imported a Numbers '09 file into Numbers on the iPad.  All comments were removed during import. Frozen header row and column were retained.
    Thank you for your responses I must ask, however, when you refer to "importing" the Excel file, are you referring to a two step process whereby the Excel file is first converted by some other process into Numbers format, then opened in the Numbers application - which is what I have to do in my PC application to generate the Excel file, and reverse that process to convert the Excel back into my database format - or are you simply referring to opening the file in Numbers as "importing" it?  And please excuse any ignorance, as I'm not at all familiar with Apple's terminologies.  In fact, I don't own an iPad myself, but rather I have to depend on one of my clients to do the testing for me.
    I imported an XLSX file into Numbers on the iPad.  The file used "freeze panes" to "freeze" the first column and row. Only warning on import was that it changed fonts. It imported without the first row and column frozen and with no comments. Nothing I can do about the missing comments but it was a simple matter to turn the first column & row into headers and freeze them.
    Unfortunately this would not be an efficient  solution, since the end users are, for the most part, elderly political campaign volunteers who are fairly computer illiterate.  These workbooks are actually canvassing lists - known as walklists.  Their purpose is for the volunteers to interview voters, record the results of the interviews, and post the results to a database, which provides the campaigns with valuable strategizing capabilities.  Also, these workbooks have multiple pages - as many as 10 or more.  and from what I infer from the above, the setting changes would have to be made on each page.
    My whole intent in developing this iPad/Tablet methodology was to significantly reduce volunteer's work - which is a recruitment benefit - and eliminate paper.  While the latter would be accomplished, the former would not, and in fact would tend to increase it.  It's necessary to keep the first row - column headings - and the first column - the route identifier - from scrolling off the page, so that the volunteer won't have to keep scrolling up and down and right and left to know what the data are.
    Conclusion: Comments are not supported on the iPad version of Numbers.  Frozen headers are not imported from Excel but can be recreated easily.
    I was previously directed to the Apple website  http://www.apple.com/ipad/from-the-app-store/apps-by-apple/numbers.html which extols the wonders of the Numbers application.  About halfway down the page there's a section regarding, "Sliders steppers and pop-ups".  The web page states that pop-ups can be set up but, being a marketing site, gives no indication whatsoever as to how it's done.  I was hoping someone could tell my if there's any way to carry them over from an Excel file.

  • Why there is a huge difference between a row size on a disk based table and a row size in memoptimized table of SQL 2014?

    Hi All,
    I have two table with similar structure and data, one is on disk and the other is in memory. I somehow calculated the difference between a row size of on disk and in memory table and found that the row size of in memory is 700 Bytes more than the disk based
    tables.
    aa

    As others mentioned, memory optimized tables and disk based tables have different structures in SQL Server 2014.
    For memory optimized tables, the number of indexes on table also contribute to the size. You can calculate the exact size of rows and thus the table size using the formula given in the below articles
    Table and Row Size in Memory-Optimized Tables
    Estimate the Size of a Table
    Krishnakumar S

  • How and when the database release a row lock?

    Dear experts,
    We are using the following statement to obtain a row lock in a table in the database(ORACLE of course),
    SELECT * FROM {TABLE_NAME} WHERE ID = 1 for update
    and if we succeed grabbing the row lock we will continue to issue a update statement every 30 seconds to preserve the lock as far as possible.
    here is the update statement to preserve the lock,
    UPDATE {TABLE_NAME} SET time = ? WHERE ID = 1.
    As you see more longer we keep holding the row lock , more update statements are submitted in the pending transaction.
    In normal case our application can grab the exclusive row lock and works for a long time,however sometimes a connection reset exception is thrown
    and our application will close the connection(I assume the pending transaction will be rolled back by the database) and exit the JVM.
    Since other applications will keep trying to grab the same row lock to become the master role,
    we expect one of them can succeed but they are all failed because the database has not released the row lock as expected.
    Can someone explain more details about how and when the row lock can get released in our use case?
    Thanks,
    SuoNayi
    Edited by: SuoNayi on 2013-5-30 上午8:12

    Hm. Is this part of an XA transaction by any chance? I know that Oracle maintains separate bookkeeping for such transactions which can cause rows to stay 'locked' even when the regular DBA views will indicate there is no user currently locking the record at all. I have no idea about the actual details and what you need to do to clean up such a situation, that is something a DBA should know and do.
    If not... well this is more of a question for people who know the DBMS, which makes it a target for the Oracle DBMS forums. Java developers don't tend to have DBA-level knowledge of the database, you should ask the question where you have more chance of people with expertise answering stuff:
    General Database Discussions

  • Identifying deadlocked resources in graph with 1 row lock and 1 table lock

    Hi, I have run into repeated occurrences of the deadlock graph at the bottom of this post and have a few questions about it:
    1. It appears that proc 44, session 548 is holding a row lock (X). Is the waiter, proc 30, session 542, trying to acquire a row lock (X) also or an exclusive table lock (X) on the table containing that row?
    2. Under what circumstances would something hold a row exclusive table lock (SX) and want to upgrade that to a share row exclusive table lock (SSX)?
    3. Our table cxml_foldercontent has a column 'structuredDataId' with a FK to cxml_structureddata.id and an ON DELETE SET NULL trigger. Would this help explain why an "update" to one table (i.e.g cxml_foldercontent) would also need to acquire a lock in a foreign table, cxml_structureddata?
    4. What is the difference between "Current SQL statement:" and "Current SQL statement for this session:"? That terminology is confusing. Is session 542 executing the "update" or the "delete"?
    5. In the "Rows waited on:" section is it saying that Session 542 is waiting on on obj - rowid = 0000BE63 - AAAL5jAAGAAA6tZAAK or that it is has the lock on that row and other things are waiting on it?
    A couple of notes:
    - the cxml_foldercontent.structuredDataId FK column has an index on it already
    Deadlock graph:
                           ---------Blocker(s)--------  ---------Waiter(s)---------
    Resource Name                    process session holds waits  process session holds waits
    TX-003a0011-000003d0        44       548     X               30        542             X
    TM-0000be63-00000000       30       542     SX              44        548     SX    SSX
    session 548: DID 0001-002C-000002D9     session 542: DID 0001-001E-00000050
    session 542: DID 0001-001E-00000050     session 548: DID 0001-002C-000002D9
    Rows waited on:
    Session 542: obj - rowid = 0000BE63 - AAAL5jAAGAAA6tZAAK
      (dictionary objn - 48739, file - 6, block - 240473, slot - 10)
    Session 548: no row
    Information on the OTHER waiting sessions:
    Session 542:
      pid=30 serial=63708 audsid=143708731 user: 41/CASCADE
      O/S info: user: cascade, term: unknown, ospid: 1234, machine:
                program: JDBC Thin Client
      application name: JDBC Thin Client, hash value=2546894660
      Current SQL Statement:
    update cascade.cxml_foldercontent set name=:1 , lockId=:2 , isCurrentVersion=:3 , versionDate=:4 , metadataId=:5 , permissionsId=:6 , workflowId=:7 , isWorkingCopy=:8 , parentFolderId=:9 , relativeOrder=:10 , cachePath=:11 , isRecycled=:12 , recycleRecordId=:13 , workflowComment=:14 , draftUserId=:15 , siteId=:16 , prevVersionId=:17 , nextVersionId=:18 , originalCopyId=:19 , workingCopyId=:20 , displayName=:21 , title=:22 , summary=:23 , teaser=:24 , keywords=:25 , description=:26 , author=:27 , startDate=:28 , endDate=:29 , reviewDate=:30 , metadataSetId=:31 , expirationNoticeSent=:32 , firstExpirationWarningSent=:33 , secondExpirationWarningSent=:34 , expirationFolderId=:35 , maintainAbsoluteLinks=:36 , xmlId=:37 , structuredDataDefinitionId=:38 , pageConfigurationSetId=:39 , pageDefaultConfigurationId=:40 , structuredDataId=:41 , pageStructuredDataVersion=:42 , shouldBeIndexed=:43 , shouldBePublished=:44 , lastDatePublished=:45 , lastPublishedBy=:46 , draftOriginalId=:47 , contentTypeId=:48  where id=:49
    End of information on OTHER waiting sessions.
    Current SQL statement for this session:
    delete from cascade.cxml_structureddata where id=:1

    Mohamed Houri wrote:
    What is important for a foreign key is to be indexed (of course if the parent table is deleted/merged/updated, or if a performance reason imposes it). Wether this index is unique or not doesn't matter (as far as i know).But, you should ask your self the following question : what is the meaning of having a 1 to 1 relationship between a parent and a child table ? if you succeed to create a unique index on your FK then this means that for each PK value corresponds at most one FK value!! Isn't it? is this what you want to have?Thanks, as I mentioned above, cxml_structureddata is actually the child table of cxml_foldercontent with 1 or more records' owningEntityId referring to rows in cxml_foldercontent. The reason for the FK on cxml_foldercontent.structuredDataId is a little ambiguous but it explained above.
    Will a TX-enqueue held on mode X always be waited on by another TX-enqueue row lock X? Or can it be waited on by an Exclusive (X) table lock?Not really clear. Sorry, are you saying my question is unclear or it's not clear why type of eXclusive lock session 542 is trying to acquire in the first line of the trace? Do you think that the exclusive lock being held by session 548 in the first line is on rows in cxml_foldercontent (due to the ON DELETE SET NULL on these child rows) or rows in the cxml_structureddata that it's actually deleting?
    Is there any way for me to tell for certain?
    The first enqueue is a TX (Transaction Enqueue) held by session 548 on mode X (exclusive). This session represents the blocking session. At the same time the locked row is waited on by the blocked session (542) and the wait is on mode X (exclusive). So put it simply, we have here session 542 waiting for session 548 to release it lock (may be by commiting/roll backing). At this step we are not in presence of a deadlock.
    The second line of the deadlock graph shows that session 542 is the blocking session and it is doing a TM enqueue (DML lock) held on SX(Shared eXclusive). While session 548(which is the waiting session) is blocked by session 542 and is waiting on SSX mode.
    Here we see that 548 is blocking session 542 via a TX enqueue and session 542 is blocking session 548 via a TM enqueue ---> That is the deadlock. Oracle will then immediately choose arbitrarlly a victim session (542 or 548) and kill its process letting the remaining session continuing its work.
    That is your situation explained here.Thanks, any idea why session 542 (the DELETE from cxml_structureddata) would be trying to upgrade it's lock to SSX? Is this lock mode required to update a child tables foreign key columns when using an ON DELETE SET NULL trigger? Having read more about SSX, I'm not sure I understand in what cases it's used. Is there a way for me to confirm with 100% certainty specifically which tables in the TM enqueue locks are being held on? Is session 548 definitely trying to acquire an SSX mode on my cxml_foldecontent table or could it be cxml_structureddata table?
    (a) Verify that all your FK are indexed (be carreful that the FK columns should be at the leading edge of the index)Thanks, we've done this already. When you say the "leading edge" you mean for a composite index? These indexes are all single column.
    (b) Verify the logic of the DML against cxml_foldercontentCan you be more specific? Any idea what I'm looking for?

  • Lock columns and rows

    Hi I am trying to create a form/spreadsheet for shift bosses at work. I want them to be able to imput certain data but I also want to lockout certain columns and rows. Mostly so the formulas aren't tampered with. Is this possible?
    Also, is it possible to save to a database?
    Any help would be much appreciated.

    dogg,
    Create separate Input and Calculation tables. Lock the calculation table (Arrange > Lock), leave the input table accessible. If you don't want the calculations to be viewed during input, you can change the colors of all lines, fills and text to White before locking, and put them on a different Sheet for good measure.
    Another technique that plays on Numbers graphics advantage is to cover areas of your sheet that you wish to protect with a shape. Create a Shape and place it to cover your sensitive equations. Then set the Shape's Fill Color to 0% Opacity and lock the shape. Now you have what I call the salad bar sneeze guard effect for spreadsheets. You can defeat it if you try hard, but it works most of the time.
    Jerry
    Message was edited by: Jerrold Green1

  • How to lock a row and release lock

    Hello
    There are two thread, they read the same row, I want to lock this row when the first thread read the record, after this thread commit its data, release the lock, the second thread can lock this record, also can commit its data. I also want to know how to release the lock. And these operations are in different Classes, e.g. in Class A first thread lock the record, in Class B second lock the record, and in Class C release the lock.
    Note: these two thread will read this record at same time.
    Thanks in advance.

    TopLink provides to forms of locking, optimistic and pessimistic.
    <p>
    You are referring to pessimistic. You can use pessimistic locking in TopLink through the ReadObject/ReadAllQuery API acquireLocks(), or acquireLocksWithoutWaiting(), this will use a "Select ... for Update" in SQL. You must be in a transaction to lock a row in the database (UnitOfWork in TopLink), and you locks are released when you commit or rollback the transaction. If you are using JPA, TopLink supports a JPA query hint "toplink.pessimistic-lock"="Lock" to allow pessimistic locking.
    <p>
    You can also use optimistic locking. An optimistic lock does not prevent another user from reading the same row, but ensures that only one user will be able to commit changes to the row. Optimistic locking typically has the advantage of better concurrency, and does not have issues with deadlocks.
    <p>---
    <br>James Sutherland
    <br>Oracle TopLink, EclipseLink
    <br>Wiki: Java Persistence, EclipseLink

  • Lock first column and row of a grid so they don't scroll of the screen

    Hello,
    In a flex app we use a grid with repeaters to build it dynamically depending on a datafeed. But we need the first row and column to stay always on the screen. Any ideas on how to do this ? Did a search for an example but couldn't find anything like it.
    I know it exists for a datagrid, but can't find any similar for a grid...
    http://flexonblog.wordpress.com/2008/04/22/lock-columns-and-rows-in-datagrid-for-visibilit y/
    Thanks for any ideas!
    Frank

    Doesn't exist for Grid container.  You might just remove the first items from the dataProvider and place them outside the Grid.
    Alex Harui
    Flex SDK Developer
    Adobe Systems Inc.
    Blog: http://blogs.adobe.com/aharui

  • How can I retain updates made in multiple locked rows and override scope rollback defined for row locking purposes ?

    I have a set of stored procedures in SQL
    One of which is called to build a list of entries to submit to a web service
    Those queries are called by identical processes running on different machines, so to prevent duplicate processing we lock rows that are presently being processed.
    BEGIN
    TRAN TRAN1
    SELECT t.[TransactionId],t.[ContentIdentifier]
    FROM [dbo].[Transactions]
    t WITH(READPAST,
    UPDLOCK,
    ROWLOCK)where
    (t.Quarantined
    <> 1)
    COMMIT
    A Second stored procedure simply updates the Quarantined flag.
    My C# code
    TransactionOptions transactionOptions
    =
    new
    TransactionOptions();
    transactionOptions.IsolationLevel
    =
    IsolationLevel.ReadCommitted;
    transactionOptions.Timeout
    =
    new
    TimeSpan(0,
    10,
    0);
    using (TransactionScope
    scopeMain =
    new
    TransactionScope(TransactionScopeOption.Required,
    transactionOptions))
    TransactionsReady = DAL.GetFilesForProcessingByServiceType(i);
    using (TransactionScope
    scopeSuppress =
    new
    TransactionScope(TransactionScopeOption.Suppress,
    transactionOptions))
    foreach (var
    Transaction in TransactionsReady)
    { try
    returnData = proxy.Submit(stuffToProcess);
    using (var
    scopeInner =
    new System.Transactions.TransactionScope())
    DAL.QuarantineTransaction(Transaction.TransactionId);
    scopeInner.Complete();
    scopeSuppress.Complete();
    scopeMain.Complete();
    The problem I experience is that if I have the Transaction Scope scopeSuppress uncommented, then the QuarantineTransaction stored procedure deadlocks.
    However if I comment out the ScopeSuppress, while the process then works, if it is interrupted mid-way, then all of the Quarantine flags get reset, meaning the entire batch of items will get re-submitted next
    pass (this is not desirable).
    What I actually want to occur, is for the Quarantine flag to be retained on all processed records so that even if the program terminates unexpectedly, processed items remain processed but all the row locks are
    released.
    Does anyone know of a way to achieve this ?

    The hour is late where I sit, so I don't have the time to dive into this in detail.
    However, if memory serves, TransactionScopes defaults to Serializable isolation level, which may explain the deadlocks you are getting.
    Erland Sommarskog, SQL Server MVP, [email protected]

  • Tuning row lock contention wait events

    Hello everyone,
    Working on 10g/windows
    Top 5 events
    EVENT TOTAL_WAITS TIME_WAITED AVG_MS PERCENT
    CPU 9462339 48
    enq: TX - row lock contention 12531 3660728 2921.34 18
    control file parallel write 1300731 3088079 23.74 16
    log file parallel write 1510503 1264080 8.37 6
    log file sync 1072553 968007 9.03 5
    Distribution of row lock wait during the last 4 days in the database server
    END_INTERVAL_TIME TOTAL_WAITS TIME_WAITED_MICRO AVG_WAIT_MS
    2008-04-01 16:00:58 909 2721008230 2993.41
    2008-04-01 15:00:27 50 149941140 2998.82
    2008-03-31 12:00:42 193 575595397 2982.36
    2008-03-29 23:00:13 172 513058700 2982.9
    2008-03-29 22:00:37 164 483940046 2950.85
    2008-03-27 22:00:35 565 1667120838 2950.66
    2008-03-26 18:00:59 348 1042918982 2996.89
    My analysis:
    It's obvious that the row lock contention wait time is huge, and this direct me to find out SQL stmt, causing this.
    all the SQL statement was SELECT ....... FOR UPDATE stmt.
    I was also able to find out locked tables.
    My tuning idea:
    1. I'm thinking to reorganize hot tables as well as their indexes, but by instinct it seems to not give so much value to avoid the huge row lock wait time.
    2. I'm also seeing if I can reduce the number of rows per block, by increasing PCTFREE and diminishing PCTUSED, so the contention will spread over many blocks instead of one heavy block.
    Question
    As SQL stmt related to those locked tables are select ... for update, how could I tune this kind of stmt?
    Does someone have other idea to come up with this row lock contention?
    Tanks for your effort and help

    Taking another look at your suggested function based index, it depends on the data type of the DEV.POS_FOLIO_ID.POS_FOLIO_ID column. If the column is defined as a number, and it is a primary key, there will already be a usable index on that column.
    Yesterday, I wrote this: "Once I understood why or how the sessions were trying to insert duplicate primary key values, I would try to determine why the average number of seconds for the wait event is almost 3 seconds (maybe a timeout)."
    After fixing the formatting of the top 5 wait events (total duration unknown):
    EVENT                        TOTAL_WAITS  TIME_WAITED   AVG_MS PERCENT
    CPU                                         94,623.39             48
    enq: TX - row lock contention     12,531    36,607.28  2921.34    18
    control file parallel write    1,300,731    30,880.79    23.74    16
    log file parallel write        1,510,503    12,640.80     8.37     6
    log file sync                  1,072,553     9,680.07     9.03     512,531 * 3 second time out = 37,593 seconds = 10.44 hours.
    What if the reason for the 3 second average wait time is due to a timeout. I performed a little experiment... I changed a row in a test table and then made a pot of coffee.
    In session 1:
    CREATE TABLE T1 (
      C1 NUMBER(10),
      C2 NUMBER(10),
      PRIMARY KEY (C1));
    INSERT INTO T1
    SELECT
      ROWNUM,
      ROWNUM*10
    FROM
      DUAL
    CONNECT BY
      LEVEL<=1000000;
    COMMIT;I now have a test table with 1,000,000 rows. I start monitoring the changes in the wait events roughly every 60 seconds, and V$SESSION_WAIT and V$LOCK roughly 4 times per second.
    Back in session 1:
    UPDATE
      T1
    SET
      C1=-C1
    WHERE
      C1<=100;I have now modified the first 100 rows that were inserted into the table, time to make the pot of coffee.
    In session 2, I try to insert a row with a primary key value of -10:
    INSERT INTO T1 VALUES (
      -10,
      10);Session 2 hangs.
    If I take the third 60 second snap of the system wide wait events as the zero point, and the 11th snap as the end point. There were 149 waits on ENQ: TX - ROW LOCK CONTENTION, 148 time outs, 446.62 seconds of total time in the wait event, with an average wait time of 2.997450 seconds.
    Rolling down to the session level wait events, SID 208 (my session 2) had 149 waits on ENQ: TX - ROW LOCK CONTENTION, for a total time of 446.61 seconds with an average wait time of 2.997383 seconds. All of the 149 waits and the wait time was in this one session that was locked up for the full duration of this time period because session 1 was making a pot of coffee.
    Rolling down to V$SESSION_WAIT (sampled roughly 4 times per second): At the start of the third time interval, SID 208 has been in the ENQ: TX - ROW LOCK CONTENTION wait event for 39 seconds and is actively waiting trying to execute SQL with a hash value of 1001532423, the wait object is -1, wait file is 0, wait block is 0, wait row is 0, P1 is 1415053316, P2 is 196646, P3 is 4754.
    At the end of the 11th time interval: , SID 208 has been in the ENQ: TX - ROW LOCK CONTENTION wait event for 483 seconds and is actively waiting trying to execute SQL with a hash value of 1001532423, the wait object is -1, wait file is 0, wait block is 0, wait row is 0, P1 is 1415053316, P2 is 196646, P3 is 4754.
    Rolling down to V$LOCK (sampled roughly 4 times per second): I see that SID 214 (session 1) is blocking SID 208 (session 2). SID 214 has a TX lock in mode 6 with ID1 of 196646 and ID2 of 4754. SID 208 is requesting a TX lock in mode 4 with ID1 of 196646 and ID2 of 4754.
    So, it seems that I need a faster coffee pot rather than an additional index on my table. It could be that the above process would have found that the application associated with SID 214 was abandoned or crashed and for some reason the lock was not released for a long period of time, a little less than 10.44 hours in your case.
    Charles Hooper
    IT Manager/Oracle DBA
    K&M Machine-Fabricating, Inc.

  • Row lock contention problem on Inventory Management

    Hi
    My client is product based company and have e-Commerce (online Sale Order) application using Oracle database 10.2.0.5 & Web application deployed on WLS. Client have ~ 90 Warehouse country wide and ~ 200 Products (Items). Each product stock for each warehouse is maintained in Inventory Table (INV_BALANCE) which get updated for each order and their sale's products. We are using NO WAIT function to acquire lock on row to update stock balance. Last few months, client business is growing very fast and during Promotional Events (EXPO), they have sales of ~ 75K orders (~ 250K Items) within 2-3 days which start causing  row lock contention problem on INV_BALANCE table. We are seeing lots of "Row Lock Wait" and "enq: TX - row lock contention" event which cause ORA-00060: Deadlock detected and we need to eventually clear blocking sessions or everything just choked.
    select statistic_name,value from sys.v_$segment_statistics where object_name = 'INV_BALANCE'
    STATISTIC_NAME                                                                                                                        VALUE
    logical reads                                                                                                                                12423072
    buffer busy waits                                                                                                                           3895
    db block changes                                                                                                                         3516768
    physical reads                                                                                                                               957
    physical writes                                                                                                                            12197
    row lock waits                                                                                                                             49909
    space used                                                                                                                                -52921
    Deadlock graph:
                           ---------Blocker(s)--------  ---------Waiter(s)---------
    Resource Name          process session holds waits  process session holds waits
    TX-00880017-00002584       321    1675     X            110    1445           X
    TX-00b60008-00000741       110    1445     X            337    2158           X
    TX-0148000b-0000009e       337    2158     X            378    1525           X
    TX-01d50015-0000006f       378    1525     X            363    1842           X
    TX-02290012-00000070       363    1842     X            267    1798           X
    TX-024a0026-0000006e       267    1798     X            364    2084           X
    TX-020a0004-0000006f       364    2084     X            135    2113           X
    TX-01dc001f-00000070       135    2113     X            129    1586           X
    session 1675: DID 0001-0141-000001CA    session 1445: DID 0001-006E-00000202
    session 1445: DID 0001-006E-00000202    session 2158: DID 0001-0151-0000026B
    session 2158: DID 0001-0151-0000026B    session 1525: DID 0001-017A-00000167
    session 1525: DID 0001-017A-00000167    session 1842: DID 0001-016B-000002B4
    session 1842: DID 0001-016B-000002B4    session 1798: DID 0001-010B-000001F1
    Rows waited on:
    Session 1445: obj - rowid = 0001AE0E - AAAlK8AAHAAD7rMABY
      (dictionary objn - 110094, file - 7, block - 1030860, slot - 88)
    Session 2158: obj - rowid = 0001AE0E - AAAlK8AAHAAD7rMACD
      (dictionary objn - 110094, file - 7, block - 1030860, slot - 131)
    Session 1525: obj - rowid = 0001AE0E - AAAlK8AAHAAD7rOAB2
      (dictionary objn - 110094, file - 7, block - 1030862, slot - 118)
    Information on the OTHER waiting sessions:
    Session 1445:
      sid: 1445 ser: 37 audsid: 38316795 user: 69/<none>
                program: JDBC Thin Client
      application name: JDBC Thin Client, hash value=2546894660
      Current SQL Statement:
      SELECT ROWID, NVL(QTY_PEND,0)+NVL(:B3 ,0) FROM INV_BALANCE WHERE WHS_ID = :B2 AND STOCK_ID = :B1 FOR UPDATE OF QTY_PEND WAIT 10
    Please help me on following
    Q1: How can we reduce the "row lock Contention" on INV_BALANCE, all possible ways & best practices?
    Q2: How can we change the design to not have "row lock Contention" at all?
    Appreciate your help
    Thanks
    Amit Garg
    www.otnblogs.com

    Hi Amit!
    I saw you are using FOR UPDATE  in your query.
    If you  want reduce row locks, then you not must use FOR UPDATE.
    As you know, FOR UPDATE is locking rows.
    Regards
    Mahir M. Quluzade

Maybe you are looking for

  • OBIEE not applying outer join syntax to filters

    (Note: I've already thoroughly searched the forums before posting this. Thanks) My problem is the following: I'm trying to build a report that is a count from my fact table, grouped by month from my date dimension for a given year, resulting in 12 da

  • Ease in/out for a scaling image?

    I have an image with a keyframe on the first frame and one on the last, and I have the image scaling up on the last frame. I'm not happy with how CS6 is scaling the image up, I would like to have it do it smoother. I right click on the last keyframe

  • I need to provide red color to the texbox control in list tile

    Hi, I need to provide red color to the texbox control in list tile, please reply if any one knows how to do it. Thanks, Vijay.

  • Customeraging wise b/a report

    Hi in have to see customer aging wise b/s items which repiort i have to run

  • CUTOVER STRATEGY (CUTOVER DATA)

    HI When working in the project there is an stage where u have to deside CUTOVER STARTEGY (CUTOVER DATA) before go live phase can any one expalin what CUTOVER STARTEGY means in project point of view. Maximum (Releted Project).. Manoj.