Table lock while index rebuild

Dear all,
Can anyone kindly tell if the rebuild index operation locks the table on which rebuild index is performed ? (meaning that no inserts or updates are possible on that table during that time)
I am using Oracle 10.1.0.4
Thanks in advance
L

Dear all,
Can anyone kindly tell if the rebuild index operation
locks the table on which rebuild index is performed ?
(meaning that no inserts or updates are possible on
that table during that time)
I am using Oracle 10.1.0.4
Thanks in advance
LThe online index rebuild allow DML statements on the tables during the index creation. When you use the ONLINE option to create or alter an index, the current index is left intact while a new copy of the index is created. This allows DML statements to access the old index.
Message was edited by:
oraburn

Similar Messages

  • Table lock while creating index?

    Hello,
    my db is oracle10g. My database is OLTP system. I wanted to create index on one of the table. The table has 200 million records.
    Does it lock the entire table when i create index? I am thinking, how it impacts the regular operations in the database while creating the index?
    Any help is appreciated...

    Hi,
    Do you have Enterprise Edition? If so, the online option is available to you.
    So, you can do:
    create index my_new_index on my_tab(col1,col2) online;or:
    alter index my_existing_index rebuild online;If you don't use the online option, then yes, the table will be locked against updates, any OLTP traffic will serialize behinds the index maintenance operation.
    Hope that helps,
    -Mark

  • Problem in table locking while running the parallel jobs (deadlock?)

    Hi,
    I am trying to delete the entried from a custom table. If I schedule the parallel jobs, I am getting the following dump while deleting the entries from table. This is happening for custom table ( in CRM system).
    Exception : DBIF_RSQL_SQL_ERROR
    And complaining that, deadlock occured. I am not sure what it is..
    Could you please help me out, how can we solve this issue?
    Thanks,
    Sandeep

    Hello Sandeep ,
    I would suggest you Record based  Lock Objects ,
    take a look at below link...to get a general idea..!
    <link removed>
    Hope it helps,
    Thanks and Regards,
    Edited by: Suhas Saha on Aug 19, 2011 11:27 AM

  • Regarding the dead lock while index creation

    Hi,
    We have a requirement where we are trying to load and create the index for few cubes simulatneously, but it has resulted in dead lock situation, can you please tell us about this problem in detail.
    Thanks

    Hi Mahesh,
    This kind of problem will arrive when the index creation for ur data targets are happening and those data targets shares some common data like master data, since both will be refering to the same, usually dead locks situation comes into picture
    thanks,
    vinay
    Edited by: vinaykumarhs on Mar 20, 2011 12:26 AM

  • Goldengate Extracts reads slow during Table Data Archiving and Index Rebuilding Operations.

    We have configured OGG on a  near-DR server. The extracts are configured to work in ALO Mode.
    During the day, extracts work as expected and are in sync. But during any dialy maintenance task, the extracts starts lagging, and read the same archives very slow.
    This usually happens during Table Data Archiving (DELETE from prod tables, INSERT into history tables) and during Index Rebuilding on those tables.
    Points to be noted:
    1) The Tables on which Archiving is done and whose Indexes are rebuilt are not captured by GoldenGate Extract.
    2) The extracts are configured to capture DML opeartions. Only INSERT and UPDATE operations are captured, DELETES are ignored by the extracts. Also DDL extraction is not configured.
    3) There is no connection to PROD or DR Database
    4) System functions normally all the time, but just during table data archiving and index rebuild it starts lagging.
    Q 1. As mentioned above, even though the tables are not a part of capture, the extracts lags ? What are the possible reasons for the lag ?
    Q 2. I understand that Index Rebuild is a DDL operation, then too it induces a lag into the system. how ?
    Q 3. We have been trying to find a way to overcome the lag, which ideally shouldn't have arised. Is there any extract parameter or some work around for this situation ?

    Hi Nick.W,
    The amount of redo logs generated is huge. Approximately 200-250 GB in 45-60 minutes.
    I agree that the extract has to parse the extra object-id's. During the day, there is a redo switch every 2-3 minutes. The source is a 3-Node RAC. So approximately, 80-90 archives generated in an hour.
    The reason to mention this was, that while reading these archives also, the extract would be parsing extra Object ID's, as we are capturing data only for 3 tables. The effect of parsing extract object id's should have been seen during the day also. The reason being archive size is same, amount of data is same, the number of records to be scanned is same.
    The extract slows down and read at half the speed. If normally it would take 45-50 secs to read an archive log of normal day functioning, then it would take approx 90-100 secs to read the archives of the mentioned activities.
    Regarding the 3rd point,
    a. The extract is a classic extract, the archived logs are on local file system. No ASM, NO SAN/NAS.
    b. We have added  "TRANLOGOPTIONS BUFSIZE" parameter in our extract. We'll update as soon as we see any kind of improvements.

  • Error while importing table having ctxcat index

    Hi
    I created a table and ctxcat index on the same. I exported the same. While importing, table got imported but for index creation it gave error imp-00017 with ora-29855.
    Though the index have been created but with some errors. I can see the index in all_indexes table but if i try to see the entry in dba_segments, record is not found.
    Seems that index is not created properly.
    Pls suggest ASAP.
    Regards
    Rajiv

    What's your source and target Oracle version ?
    1) make sure context option is installed on target DB
    2) create a user ctxsys, the schema where the context related objects resides

  • Oracle Sys table index rebuild

    hi, expert
    I am new to this expert Forums
    Blow Table Index are rebuild,This table are relation with sys user or not?
    after rebuild index, getting error in alert log file
    ORA-00600: internal error code, arguments: [psdnop-1], [1410], [], [], [], [], [], [], [], [], [], []
    ORA-01410: invalid ROWID
    when trying to select * from dba_network_acls getting error massage Rowid invalid
    ALTER INDEX CTXSYS.SYS_C003684 REBUILD;
    ALTER INDEX CTXSYS.SYS_C003683 REBUILD;
    ALTER INDEX CTXSYS.SYS_C003682 REBUILD;
    ALTER INDEX CTXSYS.SYS_C003681 REBUILD;
    ALTER INDEX CTXSYS.SYS_IOT_TOP_54056 REBUILD;
    ALTER INDEX CTXSYS.SYS_C003677 REBUILD;
    ALTER INDEX CTXSYS.SYS_IL0000054052C00002$$ REBUILD;
    ALTER INDEX CTXSYS.SYS_IOT_TOP_54044 REBUILD;
    ALTER INDEX CTXSYS.SYS_C003675 REBUILD;
    ALTER INDEX CTXSYS.SYS_IOT_TOP_54038 REBUILD;
    ALTER INDEX CTXSYS.SYS_IOT_TOP_54031 REBUILD;
    ALTER INDEX CTXSYS.SYS_IOT_TOP_54028 REBUILD;
    ALTER INDEX CTXSYS.SYS_IOT_TOP_54018 REBUILD;
    ALTER INDEX CTXSYS.DR_STOPLIST_PK REBUILD;
    ALTER INDEX CTXSYS.DR_STOPLIST_UNIQ REBUILD;
    ALTER INDEX CTXSYS.DR_THS_BT REBUILD;
    ALTER INDEX CTXSYS.DR_UNIQ_THS_BT REBUILD;
    ALTER INDEX CTXSYS.SYS_IOT_TOP_54003 REBUILD;
    ALTER INDEX CTXSYS.DR_THS_RINGID REBUILD;
    ALTER INDEX CTXSYS.DR_UNIQ_THS_PHRASE REBUILD;
    ALTER INDEX CTXSYS.SYS_C003629 REBUILD;
    ALTER INDEX CTXSYS.SYS_C003626 REBUILD;
    ALTER INDEX CTXSYS.SYS_C003627 REBUILD;
    ALTER INDEX CTXSYS.SYS_IOT_TOP_53991 REBUILD;
    ALTER INDEX CTXSYS.SYS_IOT_TOP_53963 REBUILD;
    ALTER INDEX OLAPSYS.SYS_C004604 REBUILD;
    ALTER INDEX OLAPSYS.SYS_C004600 REBUILD;
    ALTER INDEX XDB.SYS_C003740 REBUILD;
    ALTER INDEX XDB.SYS_C003741 REBUILD;
    ALTER INDEX XDB.SYS_C003742 REBUILD;
    ALTER INDEX MDSYS.UNIQUE_CLASS_CONSTRAINT REBUILD;
    ALTER INDEX MDSYS.UNIQUE_USER_CONSTRAINT REBUILD;
    ALTER INDEX MDSYS.UNIQUE_LRS_GEOM_LAYER REBUILD;
    ALTER INDEX MDSYS.UNIQUE_NETWORK_LAYER REBUILD;
    ALTER INDEX MDSYS.UNIQUE_NETWORK_LINK_LAYER REBUILD;
    ALTER INDEX MDSYS.UNIQUE_NETWORK_NODE_LAYER REBUILD;
    ALTER INDEX MDSYS.UNIQUE_NETWORK_PATH_LAYER REBUILD;
    ALTER INDEX MDSYS.UNIQUE_NETWORK_PATH_LINK_LAYER REBUILD;
    It is possible to recreate this index again to solve this problem, or any other solution.
    Thanks in Advance sir,

    Pl do not post duplicate threads - Oracle sys Index rebuild then Getting error Invalid Error Ora-01410

  • High wait on Library Cache Lock while doing ALTER TABLE EXCHANGE PARTITION

    We are observing a very high wait time on "Library cache lock" while performing Exchange partition.
    Here we go
    ALTER TABLE PSALESREG EXCHANGE PARTITION P123
    WITH TABLE PBKPSALESREF WITHOUT VALIDATION
    call count cpu elapsed disk query current rows
    Parse 1 0.00 0.00 0 0 0 0
    Execute 1 0.11 *6684.73* 2 9 2 0
    Fetch 0 0.00 0.00 0 0 0 0
    total 2 0.11 6684.73 2 9 2 0
    Misses in library cache during parse: 1
    Optimizer mode: ALL_ROWS
    Elapsed times include waiting on following events:
    Event waited on Times Max. Wait Total Waited
    ---------------------------------------- Waited ---------- ------------
    library cache lock 2274 3.12 *6681.32*
    Is it a bug? is anyone there who experienced the same issue?
    Rgds

    Maurice Muller wrote:
    Hi,
    As far as I remember a exchange partition can only be done when no other query is accessing the table.
    So you should check if any other queries are executed against the table PSALESREG while you do the exchange partition. Maurice,
    queries won't block the exchange operation but continue to read from the "original", exchanged segment; this "cross-DDL" read consistency is a feature that has been introduced a long time ago.
    But any kind of (long-running) DML should effectively prevent the exchange operation. Still I would assume that this shouldn't show up as "library cache lock", but you would get an "ORA-00054: resource busy" error.
    Regards,
    Randolf
    Oracle related stuff blog:
    http://oracle-randolf.blogspot.com/
    SQLTools++ for Oracle (Open source Oracle GUI for Windows):
    http://www.sqltools-plusplus.org:7676/
    http://sourceforge.net/projects/sqlt-pp/

  • Error in apply process while indexing for table

    Hi,
    I have successfully implemented downstream capture-apply process from 11g to 11g.
    But, my apply process is aborting due to following error:-
    ORA-01435: user does not exist
    for LCR Error:
    alter index testuser.batchload_stat rebuild
    How can i resolve this conflict or Is their a way to disable index rebuild in target database for given apply process?

    Hi,
    Unfortunately, I have no idea how you could disable index rebuilt. But, since testuser doesn't exist on your target database, why don't you exclude his schema from replication?

  • Table files and Index files 2GB on Windows 2003 Server SP2 32-bit

    I'm new to Oracle and I've ran into the problem where my Table files and Index files are > 2GB. I have an Oracle instance running version 10.2.0.3.0. I have a number of tables file and index files that have a current files size of 1.99GB. My Oracle crashes about three times a week because of a "Write Fault/Failure. I've detemined that the RDBM is trying to write a index or table files > 2GB. When this occurs it crashes.
    I've been reading the Oracle knowledge base that it suggest that there is a fix or release of Oracle 10g to resolve this problem. However, I've been unable to locate any fix or release to address my issue. Does such a fix or release exist? How do I address this issue? I'm from the world of MS SQL and IBM DB2 and we don't have this issue. I am running and NTFS files system. Could this be issue be related to an Windows Fix?
    Surely Oracle can handel databases > 2GB.
    Thanks in advance for any help.

    After reading your response it appears that my real problem has to do with checking pointing. I've included below a copy of the error message:
    Oracle process number: 8
    Windows thread id: 3768, image: ORACLE.EXE (CKPT)
    *** 2008-07-27 16:50:13.569
    *** SERVICE NAME:(SYS$BACKGROUND) 2008-07-27 16:50:13.569
    *** SESSION ID:(219.1) 2008-07-27 16:50:13.569
    ORA-00206: Message 206 not found; No message file for product=RDBMS, facility=ORA; arguments: [3] [1]
    ORA-00202: Message 202 not found; No message file for product=RDBMS, facility=ORA; arguments: [D:\ELLIPSE_DATABASE\CONTROL\CTRL1_ELLPROD1.CTL]
    ORA-27072: Message 27072 not found; No message file for product=RDBMS, facility=ORA
    OSD-04008: WriteFile() failure, unable to write to file
    O/S-Error: (OS 33) The process cannot access the file because another process has locked a portion of the file.
    error 221 detected in background process
    ORA-00221: Message 221 not found; No message file for product=RDBMS, facility=ORA
    ORA-00206: Message 206 not found; No message file for product=RDBMS, facility=ORA; arguments: [3] [1]
    ORA-00202: Message 202 not found; No message file for product=RDBMS, facility=ORA; arguments: [D:\ELLIPSE_DATABASE\CONTROL\CTRL1_ELLPROD1.CTL]
    ORA-27072: Message 27072 not found; No message file for product=RDBMS, facility=ORA
    OSD-04008: WriteFile() failure, unable to write to file
    O/S-Error: (OS 33) The process cannot access the file because another process has locked a portion of the file.
    Can you tell me why I'm having issues with checking point and the control file?
    Can I rebuild the control file if it s corrupt?
    The problem has been going on since April 2008. I'm takening over the system.
    Thanks

  • Index rebuilding slow in Oracle 10g

    We are trying to build indexes in Oracle 10g and its extremely slow. Any pointers to find out what the problem is and then fixing it?
    I am using a syntax like:
    alter index INDEX_NAME rebuild tablespace TABLESPACE_NAME online compute statistics parallel;
    Should online and parallel together be an issue? (I don't necessarily need to do online, I just removed online and started again, but not sure how it will go)

    user8294047 wrote:
    We are trying to build indexes in Oracle 10g and its extremely slow. Any pointers to find out what the problem is and then fixing it?
    I am using a syntax like:
    alter index INDEX_NAME rebuild tablespace TABLESPACE_NAME online compute statistics parallel;
    Should online and parallel together be an issue? (I don't necessarily need to do online, I just removed online and started again, but not sure how it will go)In addition to the advices you've already got regarding index rebuilding in general:
    If you're using the ONLINE rebuild option it might take a while if there are active transactions on the table, since it waits until no transactions are active to start the rebuild process, the same applies to the completion of the ONLINE operation.
    Of course, you should get an "ORA-00054 resource busy" error when this is the case when using the normal (offline) rebuild option without the ONLINE keyword.
    Regards,
    Randolf
    Oracle related stuff blog:
    http://oracle-randolf.blogspot.com/
    SQLTools++ for Oracle (Open source Oracle GUI for Windows):
    http://www.sqltools-plusplus.org:7676/
    http://sourceforge.net/projects/sqlt-pp/

  • 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?

  • Gathering schema Statistics and Index rebuilding

    I want to know after how much time we must gather the schema Statistics and Index rebuilding.
    In our system approximately 7 logfile generates in one day
    Please suggest me

    Index rebuilding sounds so much Oracle 7! Indexes today generally take care of themselves quite well, throughout inserts, deletes and updates. It rebalances itself automatically when necessary, without requiring any rebuild. As for the stats, run it for sure after large data movements (i.e. deletes and inserts). Besides that, implement table monitoring for your tables, and run once in a while dbms_stats with the options parameter as GATHER STALE. That way, Oracle will automatically know which objects need their stats refreshed.
    Daniel

  • Oracle sys Index rebuild then Getting error Invalid Error Ora-01410

    Oracle sys Index rebuild,
    after Getting error Invalid Error Ora-01410 in alert log file.every Insert ,update and delete.
    Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
    PL/SQL Release 11.1.0.7.0 - Production
    Oracle sys Index rebuild list
    CTXSYS
    EXFSYS
    FLOWS_030000
    FLOWS_FILES
    MDSYS
    OLAPSYS
    ORDSYS
    OWBSYS
    SI_INFORMTN_SCHEMA
    TSMSYS
    WKSYS
    MDSYS
    After rebuild above index im getting error while inserting,update,delete table rows
    Error like 'INVALID ROWID' alert log file
    ANY ONE HELP ME TO RESOLVE THE PROBLEM
    Edited by: 927230 on May 26, 2012 8:51 PM
    Edited by: 927230 on May 26, 2012 8:53 PM

    927230 wrote:
    Oracle sys Index rebuild after Getting error Invalid Error Ora-01410
    Oracle 11.1 version
    Oracle sys Index rebuild list
    CTXSYS
    EXFSYS
    FLOWS_030000
    FLOWS_FILES
    MDSYS
    OLAPSYS
    ORDSYS
    OWBSYS
    SI_INFORMTN_SCHEMA
    TSMSYS
    WKSYS
    MDSYS
    After rebuild above index im getting error while inserting,update,delete table rows
    Error like 'INVALID ROWID'
    ANY ONE HELP ME TO RESOLVE THE PROBLEMwhich came first the error or the rebuild?
    COPY & PASTE whole session & SQL so we can see exactly what you do & how Oracle responds
    post results from following SQL below
    SELECT * FROM V$VERSION

  • Why DDL during SELECT is possible. Or why SELECT does not put a table lock?

    This is a question to people who really knows Oracle internals or/and RDB theory.
    (The question is relocated from another thread for not hijacking on that's original question.)
    Why DDL during SELECT is possible? Or why SELECT does not put TM 2 Row Shared lock on table(s)?
    This not locking causes a possibility while one session is running a long select, another can truncate and even drop table(s) that are being read by the first session.
    I think, humbly assume, that Oracle does not put TM 2 lock on tables, that are being simply SELECTed, by some significant technical reason. But I do not know this reason. If somebody knows please shed a light.
    Also, if you know that this behavior is totally correct from perspective of RDB theory, please explain me.
    I'll try to explain my point.
    It is a matter of data consistency and integrity that is supported in Oracle everywhere except this place.
    a) If one session is reading data from moment T and other session changes data on its way at moment T1, the first session wont read that changed data, it will read the data that was there on moment T.
    This is declared as Read Consistency principle.
    b) If one session is changing data, and another session tries to truncate or drop table - the second session will fail with error ORA-00054: resource busy and acquire with NOWAIT specified.
    This is declared as Data Integrity principle.
    c) But why not to follow the above principles in case when one session reads data and another session tries to truncate or drop table (or do other DDL operations)?
    It is counter-intuitive. Why not to put TM 2 (SS) lock during SELECT execution that would prevent DDLs on this table?
    What I only can assume is that this is only because some technical difficulty or limitation.
    What is this limitation or other reason in favor of which Oracle sacrificed consistency in this case?

    user11181920 wrote:
    Aman,
    There was no need to clarify how DML lock works, I know that.
    Also I know that in Oracle a Select does not lock neither table rows nor table itself.
    The reason I mentioned it because you brought up the word change which is far better suited for DML's than DDL's as the former has a requirement to have its Undo preserved.
    Again, my question was why Select does not protect itself by locking table(s), partitions and indexes?Protect from what? There is nothing wrong with doing a select. What would happen with a select doing a lock on the table before being executed in its entirety (forget DDL and DML altogether for a moment) ? State one good reason that there should be a lock for the select. If it has to, it would be always isn't it?
    The keyword here is concurrency and that's what is the best when the number of locks obtained are lesser at non-required operations. A select doesn't change anything that's why in Oracle, there is no read-level lock.I am not saying about row locks while reading. They are not needed because Undo resolves concurrency.Only in the case of DML where the change is still active and the buffers are dirty. With a DDL, its an implicit commit.
    I am asking why Select does not enqueue one, only one lock per object that participates in the Select?Again, my question back to you is, what good you would get from it? What purpose it would solve?
    It is not very expensive, I suppose. But it would protect from DDLs that can destroy the Select's result set. You have seen in your system and in my demo(and that's what the the question was on the other thread also) that the result remains intact and its not a behavior from now. Its the same since the time I have started learning Oracle. Can you explain that why you think that the result of select statement would be wrong for a drop table? I believe, its been stated repeatedly that if the select has no requirement to look back the table, it would get completed. Only if the select needs to access the table again, it would fail. So even if we consider your explanation, there is no wrong result shown at all. Once the session encounters that the table is dropped for the statement, the execution stops right away. So where is the destroyed result?
    Yes, it is less dangerous when Select does not lock table comparing with what would happen with DMLs in such case (that is why DMLs protect themselves by TM 3), it affects only the Select and its consumer, but still ... I don't understand this Oracle's decision. What is a reasoning behind it?.As I said, to improve concurrency.
    Aman....

Maybe you are looking for