Recover a deleted record / table

Hello,
Our Oracle DB (10.2.0.4) is on archive mode. But flashback is not enabled
In such cases, If a user deleted a table entry / a entire table itself, Is it possible to recover
How to solve this kind of a issue.
Is it really deleting from the DB or else is it just mark as flag (flag as deleted.)
regards,
Zerandib

Hello Zerandib,
depending on how the user deleted the data (DML = DELETE or DDL = TRUNCATE) from the entire table or just a table entry -  you can use flashback query. Flashback query works with the undo data - so you can flashback your table until UNDO_RETENTION.
Official documentation:
http://download.oracle.com/docs/cd/E11882_01/appdev.112/e17125/adfns_flashback.htm#ADFNS01003
If the data is not stored in undo tablespace anymore - you can also use the LogMiner to rebuild your data with help of the archive logs:
http://download.oracle.com/docs/cd/E11882_01/server.112/e16536/logminer.htm#SUTIL1553
If your entire table was deleted with DDL (TRUNCATE) you need to restore your whole database and recover it.
Regards
Stefan

Similar Messages

  • How can i recover my deleted records

    Hello sir,
    I m from j.b.diamond,surat(india). I purchased your oracle 9i (9.0.2) version since last few month. Now a days I have one problem so please solve it..
    I delete few records from my database and then commit it, is it possible to recover that deleted record ? if your answer is “yes” then, how can be it possible ? and if your answer is “no” then why?
    Please response me……
    Thank you.

    You can recover your deleted records by using the flash back query feature available in 9i.

  • Recover a deleted record in NOARCHIVELOG mode?

    Hello,
    I'm running 10gR2 in NOARCHIVELOG mode and we do not take backups (please, let's not get into a discussion about this!).
    I need to know if there is any possible way to recover a record once it has been deleted and a COMMIT has been issued? A user inserted two records in the database that they should not have, and I need to verify there is no possible way to recover those once they have been deleted.
    Thank you,
    Mimi

    Mimi Miami wrote:
    Ok so my UNDO_RETENTION parameter is set to 900...so 15 minutes after I delete the records they should not be querable using Flashback Query any longer, right?No,
    UNDO_RETENTION is low threshold value of undo retention. Meaning, Oracle will try to keep at least that time before overwritten.
    However, it's not gurranteed if not enough undo tablespace available, meaning it can be overwritten before the value is up if not enough undo tablespace to serve new transaction.
    On the other-hand, it will not remove the undo record until it's overwritten, meaning the record could stay there for considerable amount of time if your database is not busy and undo tablespace is big.
    http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/initparams222.htm#REFRN10225
    Not sure what's the intention to make your delete irreversible,
    you could actually create table newtable as select .. from old_table where <except the two records>.
    Drop the old table and rename new table.
    purge the recycle bin of your database

  • Recover a deleted recording after a save

    Help!! I only realized after a save that I'd accidentally deleted the whole first half of my main narrative track. I've been working on this file for several days and was wondering if garageband saves earlier versions of a file, like word does, that can be recovered or reverted to later. Is it possible to revert to an earlier temporary file of some kind? Are aif tracks saved somewhere? If so, where?
    God, I hope so!!
    Thanks for your help.
    Despairingly yours,
    Soccergirl

    Oh no!! Really?
    God that's so abysmal.
    I guess I always thought there must be some temporary somethingorother somewhere.
    Man, how depressing.
    Sigh.
    Thanks for your help.

  • Delete records from tableA which are not in tableB

    Table A contains milions of records which is the best way to delete records from tableA which are not in tableB
    delete from tableA where empno not in (select empno from tableb)
    or
    delete from tableA where empno not exists (select empno from tableb
    where b.empno=a.empno)
    any help

    Hi
    If you can do this, do with this:
    create table tableC
    as select a.*
    from tableA a,
    (select empno from tableA
    minus
    select empno from tableB) b
    where a.empno = b.empno;
    drop table tableA;
    rename table tableC to tableA;
    Ott Karesz
    http://www.trendo-kft.hu

  • How to delete record from table control in BDC?

    Hello friends,
    I am running a BDC program to delete records.
    I have file with following records and i got these records into t_itab.
    Material     Plant     Start date     End date     Cost
    MQ100001     S001     09/01/2008     09/31/2008     55.00
    MQ100004     S002     09/01/2008     09/31/2008     56.00
    MQ100008     S003     09/01/2008     09/31/2008     57.00
    Now, I have BDC transaction in which table control screen which contains following structure.
    MQ100001     S001     09/01/2008     09/31/2008     55.00
    MQ100002     S002     09/01/2008     09/31/2008     56.00
    MQ100004     S003     09/01/2008     09/31/2008     47.00     
    MQ100005     S004     09/01/2008     09/31/2008     25.00
    MQ100006     S012     09/01/2008     09/31/2008     76.00
    MQ100007     S033     09/01/2008     09/31/2008     17.00
    MQ100008     S011     09/01/2008     09/31/2008     95.00
    MQ100009     S002     09/01/2008     09/31/2008     46.00
    I have recorded from SHDB in which first record will be delete.
    So, when i loop through t_itab,instead of deleting MQ100001,MQ100004 and MQ100008 from BDC screen,
    it is deleting MQ100001,MQ100002 and MQ100004 (first record for each process ).
    Which i don't want to.
    Is there any facility in BDC to put records on top which i want to delete?
    Please guide me.
    Regards,
    RH

    Hi,
    While doing recording check for Filter button available for the table control, if it available then do the recording for the same.
    Once it is done while passing the data from internal table put the value into Filter field.
    Hope it resolves your issue.
    Thanks & Regards.
    Nagaraj Kalbavi

  • How to delete record from table control using BDC?

    Hello friends,
    I am running a BDC program to delete records.
    I have file with following records and i got these records into t_itab.
    Material     Plant     Start date     End date     Cost
    MQ100001     S001     09/01/2008     09/31/2008     55.00
    MQ100004     S002     09/01/2008     09/31/2008     56.00
    MQ100008     S003     09/01/2008     09/31/2008     57.00
    Now, I have BDC transaction in which table control screen which contains following structure.
    MQ100001     S001     09/01/2008     09/31/2008     55.00
    MQ100002     S002     09/01/2008     09/31/2008     56.00
    MQ100004     S003     09/01/2008     09/31/2008     47.00     
    MQ100005     S004     09/01/2008     09/31/2008     25.00
    MQ100006     S012     09/01/2008     09/31/2008     76.00
    MQ100007     S033     09/01/2008     09/31/2008     17.00
    MQ100008     S011     09/01/2008     09/31/2008     95.00
    MQ100009     S002     09/01/2008     09/31/2008     46.00
    I have recorded from SHDB in which first record will be delete.
    So, when i loop through t_itab,instead of deleting MQ100001,MQ100004 and MQ100008 from BDC screen,
    it is deleting MQ100001,MQ100002 and MQ100004 (first record for each process ).
    Which i don't want to.
    Is there any facility in BDC to put records on top which i want to delete?
    Please guide me.
    Regards,
    RH

    One option is to identify the table and find out the location as the number of row which should be deleted from the table and then in the bdc program instead of postioning the cursor on the row 1(using the statement perform bdc_cursor ....(01)), replace the 01 with the row number.
    Second option is that if a filter control is available for the table control, then filter the data each and every time with the material number to be deleted and then delete the first row.
    Regards
    Farzan

  • How to Restore deleted records in other table in oracle database 10g...

    Hi All,
    i want to restore deleted records of a particular table in other table
    suppose:
    i perform a query
    delete from emp
    where deptno =30;
    now i wont to restore deptno=30 records in other table, let say in emp1 table
    can any one let me know how to do it?
    Thanks..

    This is what flashback query is for:
    orclz> conn scott/tiger
    Connected.
    orclz> select count(*) from emp;
      COUNT(*)
            14
    orclz> delete from emp where deptno=30;
    6 rows deleted.
    orclz> commit;
    Commit complete.
    orclz> create table deleted30 as select * from emp as of timestamp(systimestamp - 5/1440) where deptno=30;
    Table created.
    orclz> select count(*) from deleted30;
      COUNT(*)
             6
    orclz>

  • Delete records in a table and at the same time print out for reference

    I am working on a req to delete some records from a table and at the same time, record/print the deleted records in the outstream (DBMS_OUTPUT.PUT_LINE)
    DECLARE
    v_rec_po hst_po%ROWTYPE;
    BEGIN
    DELETE FROM hst_po po
    WHERE abbrpoid = '&opportunity_code'
    AND updatedby = (SELECT employeeid
    FROM tes_employee
    WHERE name = &emp_name)
    AND audittimestamp BETWEEN TO_DATE ('&start_timestamp',
    'DD-MON-YYYY HH24:MI'
    AND TO_DATE ('&end_timestamp',
    'DD-MON-YYYY HH24:MI'
    END;
    I was thinking of using returning into and then using DBMS_output to pull out the delted records, but there will be multiple rows deleted fro this statements. I am stuck here..Can anyone help

    How about:
    SQL> create table t
      2  (x int)
      3  /
    Table created.
    SQL> insert into t
      2  select rownum
      3    from all_objects
      4   where rownum <= 10
      5  /
    10 rows created.
    SQL> declare
      2     cnt pls_integer;
      3  begin
      4     delete from t;
      5     cnt := sql%rowcount;
      6     dbms_output.put_line ('Removed: '||to_Char (cnt));
      7  end;
      8  /
    Removed: 10
    PL/SQL procedure successfully completed.Edited by: Alex Nuijten on Jun 4, 2009 8:58 AM

  • Deleting records from a table

    Hi
    I have to delete a table which is having nearly 9 crore records, I deleted some of the old records which is nearly 10-15 lakhs records and I have checked the free size of the tablespace after giving alter table <table name> deallocate unused, but the free space remains same not even 1KB is increased.
    Kindly help me in this

    Physically reorganizing the table is going to require having enough disk space to make a copy of the entire table. You're either going to need to find additional space on a different mount point or find things that can be dropped/deleted to free up space, at least temporarily. For example, you might drop a bunch of indexes, do the re-org, and then re-create the indexes, though this obviously makes the reorg far more risky.
    Otherwise, deleting data is going to free up space in the table for future inserts although it won't free up space in the tablespace. Given that you're doing significant loads into this table, I don't see why it would make a difference whether you've got the free space in the tablespace or in the table-- either way, it's going to be used by the loads...
    Justin

  • Procedure to delete mutiple table records with 1000 rows at a time

    Hello Champs,
    I am having requirement to create procedure to achive the deletes from 5 big tables. 1 master table and 4 child tables. Each table has 28 millions records. Now I have to schedule a procedure to run it on daily basis to delete approximately 500k records from each tables. But the condition is: Seperate procedures for each tables and delete only 1000 rows at a time. The plan is below. Since I am new for writing complicate procedure, I don't have much idea how to code the procedures, can some one help me to design the procedure queries. Many Thanks
    1. Fetch 1000 rows from master table with where clause condition.
    2. Match them with each child tables and delete the records.
    3. Atlast delete those 1000 rows from master table.
    4. over all commit for all 5 X 1000 records.
    5. Repeat the steps 1 to 4 till no rows to fetch from master table.
    Below are detailed procedure plan:----
    ----- Main procedure to fetch 1000 rows at a time and providing them as input to 5 different procedures to delete records, repeating same steps till no rows to fetch i.e. (i=0)-----
    Create procedure fetch_record_from_master_table:
    loop
    i = Select column1 from mastertable where <somecondition> and rowcount <= 1000;
    call procedure 1 and i rows as input;
    call procedure 2 and i rows as input;
    call procedure 3 and i rows as input;
    call procedure 4 and i rows as input;
    call procedure 5 and i rows as input;
    commit;
    exit when i=0
    end loop;
    ----- Sepereate procedure's to delete records from each child tables------
    Create procedure 1 with input:
    delete from child_table1 where column1=input rows of master table;
    Create procedure 2 with input:
    delete from child_table2 where column1=input rows of master table;
    Create procedure 3 with input:
    delete from child_table3 where column1=input rows of master table;
    Create procedure 4 with input:
    delete from child_table4 where column1=input rows of master table;
    --- procedure to delete records from master table atlast----
    Create procedure 5 with input:
    delete from Master_table where column1=input rows of master table;

    Oops, but this will work, won't it?
    begin
      execute immediate 'truncate table child_table1';
      execute immediate '  truncate table child_table2';
      execute immediate '  truncate table child_table3';
      execute immediate '  truncate table child_table4';
      for r_fk in ( select table_name, constraint_name
                    from user_constraints
                    where table_name = 'MASTER_TABLE'
                    and   constraint_type = 'R'
      loop
        execute immediate 'ALTER TABLE ' || r_fk.table_name || ' MODIFY CONSTRAINT ' || r_fk.constraint_name || ' DISABLE';
      end loop;
      execute immediate '  truncate table master_table';
      for r_fk in ( select table_name, constraint_name
                    from user_constraints
                    where table_name = 'MASTER_TABLE'
                    and   constraint_type = 'R'
      loop
        execute immediate 'ALTER TABLE ' || r_fk.table_name || ' MODIFY CONSTRAINT ' || r_fk.constraint_name || ' ENABLE';
      end loop;
    end;
    / Or
      truncate table child_table1;
      truncate table child_table2;
      truncate table child_table3;
      truncate table child_table4;
    begin
      for r_fk in ( select table_name, constraint_name
                    from user_constraints
                    where table_name = 'MASTER_TABLE'
                    and   constraint_type = 'R'
      loop
        execute immediate 'ALTER TABLE ' || r_fk.table_name || ' MODIFY CONSTRAINT ' || r_fk.constraint_name || ' DISABLE';
      end loop;
    end;
    truncate table master_table;
    begin
      for r_fk in ( select table_name, constraint_name
                    from user_constraints
                    where table_name = 'MASTER_TABLE'
                    and   constraint_type = 'R'
      loop
        execute immediate 'ALTER TABLE ' || r_fk.table_name || ' MODIFY CONSTRAINT ' || r_fk.constraint_name || ' ENABLE';
      end loop;
    end;
    /

  • Best approach to delete records that are not in the source table anymore.

    I have a situation where I need to remove records from dimensions that are not in the source data anymore. Right now we are not maintaing history, i.e. not using SCD but planning for the next release. If we did that it would be easy to figure the latest records. The load is nightly and records are updated and new added.
    The approach that I am considering is to join the dimension tables the the sources on keys and delete what doesn't join. However, is there perhaps some function in OWB that would allow to do this automatically on import so it can be also in place for the future?
    Thanks!

    Bear in mind that deleting dimension records becomes problematic if you have facts attached to them. Just because this record is no longer in the active set doesn't mean that it wasn't used historically, and so have foreign key constraints on it in your database. IF this is the case, a short-term solution would be to add an expiry_date field to the dimension and update the load to set this value when the record disappears rather than to delete it.
    And to do that, use the target dimension as a source table, outer join it to the actual source table on the natural key, and so your update will set expiry_date=nvl(expiry_date,sysdate) to set to sysdate if this record has not already been expired on all records where the outer join fails.
    Further consideration: what do you do if the record is re-inserted into the source table? create a new dimension key? Or remove the expiry date?
    But I will say that I am not a fan of deleting records in most circumstances. What do you do if you discover a calculation error and need to fix that and republish historical cubes? Without the historical data, you lose the ability to do things like that.

  • How to delete records from dynamic internal table.

    Hi Experts,
    Need urgent help!!!
    Issue is with Dynamic internal tables.
    Below is code written by me :
    FORM select_query USING Lw_tabnam
                      TYPE  t682i-kotabnr.
      DATA :  lw_line  TYPE REF TO data,
              lw_line1 TYPE REF TO data.
        CREATE DATA Lw_line    TYPE (lw_TABNAM).
        ASSIGN      Lw_line->* TO   <WA_tbl>.
        CREATE DATA LW_LINE    TYPE STANDARD TABLE OF (Lw_tabnam)
                               WITH NON-UNIQUE DEFAULT KEY.
        ASSIGN      Lw_line->* TO <TBL>.
        SELECT * FROM  (Lw_tabnam)
                 INTO CORRESPONDING FIELDS OF TABLE <TBL>
                 WHERE (t_keys).
    Endform.
    code is working fine.
    here even the table name and where condition are dynamic,everything is fine upto this point.
    Now i have to delete some record from <TBL> based on some conditons.
         for ex : ( here lc_fieldname is KUNNR)
          loop at t_kunnr.
              lw_tabix = sy-tabix.
            Read table <tbl>
                    with key (lc_fieldname) = t_kunnr-kunnr ASSIGNING <wa_tbl>.
            If sy-subrc = 0.
            *Delete
            delete <tbl> from <wa_tbl>
    delete <tbl> index  lw_tabix.
            Endif.
         Endloop.
    The above delete statement doesn't work ,even we can't use index as it gives a syntax error " something related to "index is not allowed in standard table or hash table.
    Can you help me ab't how to delete records in Dynamic internal table?
    Other option that i am thinking of is to create a static table of type dynamic table.
    means, data itab type standard table of <tbl> .I know the syntax is wrong ,however is there any way to do this?
    Thanks in advance ,
    If you have any suggestion ab't this then do let me know.
    bye,
    Gaurav.

    Hi
    I wrote this code and it works fine:
    DATA LW_TABNAM(10) VALUE 'LFA1'.
    DATA : LW_LINES TYPE REF TO DATA,
           LW_LINE  TYPE REF TO DATA.
    FIELD-SYMBOLS: <TABLE> TYPE TABLE,
                   <WA>    TYPE ANY.
    CREATE DATA LW_LINES TYPE TABLE OF (LW_TABNAM)
    WITH NON-UNIQUE DEFAULT KEY.
    ASSIGN LW_LINES->* TO <TABLE>.
    CREATE DATA LW_LINE TYPE (LW_TABNAM).
    ASSIGN LW_LINE->* TO <WA>.
    DO 10 TIMES.
      APPEND INITIAL LINE TO <TABLE>.
    ENDDO.
    SY-TABIX = 4.
    DELETE <TABLE> INDEX SY-TABIX.
    WRITE SY-SUBRC.
    I hope it help you
    Max

  • Deleting records in a table based a collection

    I wanna delete records in a table which do not match the records in the collection.
    Since the collection is a pl/sql collection I cannot do it like
    v_t v_type;
    DELETE FROM sample WHERE flex_name NOT IN (SELECT * FROM TABLE(v_type(SELECT * FROM v_t)));
    is there any other alternative to do the same ?

    Hi
    please use this code it is working
    DATA :
       BEGIN OF fs_itab,
          first(2) TYPE c,
          second TYPE c,
          third TYPE c,
          fourth(2) TYPE c,
       END OF fs_itab.
    DATA :
    t_itab LIKE STANDARD TABLE OF fs_itab.
    CLEAR fs_itab.
    fs_itab-first = 'AA'.
    fs_itab-second = 'Z'.
    fs_itab-third = 'Y'.
    fs_itab-fourth = 'AA'.
    APPEND fs_itab TO t_itab.
    CLEAR fs_itab.
    fs_itab-first = 'AA'.
    fs_itab-second = 'Z'.
    fs_itab-third = 'Y'.
    fs_itab-fourth = 'AA'.
    APPEND fs_itab TO t_itab.
    CLEAR fs_itab.
    fs_itab-first = 'AA'.
    fs_itab-second = 'Z'.
    fs_itab-third = 'Y'.
    fs_itab-fourth = 'CC'.
    APPEND fs_itab TO t_itab.
    CLEAR fs_itab.
    fs_itab-first = 'BB'.
    fs_itab-second = 'P'.
    fs_itab-third = 'Q'.
    fs_itab-fourth = 'DD'.
    APPEND fs_itab TO t_itab.
    CLEAR fs_itab.
    fs_itab-first = 'BB'.
    fs_itab-second = 'P'.
    fs_itab-third = 'Q'.
    fs_itab-fourth = 'BB'.
    APPEND fs_itab TO t_itab.
    LOOP AT t_itab INTO fs_itab.
      IF fs_itab-first NE fs_itab-fourth.
        DELETE TABLE t_itab FROM fs_itab.
      ENDIF.
    ENDLOOP.
    LOOP AT t_itab INTO fs_itab.
      WRITE :
         / fs_itab-first,
           fs_itab-second,
           fs_itab-third,
           fs_itab-fourth.
    ENDLOOP.
    Regards
    Pavan

  • Delete records in internal table

    Hi,
    I have two internal tables  itab1 and itab2.
    I need to delete records from itab1 comparing the data from itab2. I tried to use the read statement within the main table.
    My problem is itab2  and itab1 has multiple records and all the records need to be checked from itab2 with itab1 before deleting the records from itab1.
    itab1 and itab2 have a common field 'runid' between them.
    How can this be accomplished?
    Thanks,
    VG

    >
    Venkat.O wrote:
    > Hi VG,
    > Try this way.
    >
    > data: tabix type sy-tabix.
    > loop at itab1.
    >   tabix = sy-tabix.
    >  _LOOP at itab2 where runid = itab1-runid._
    _>  if sy-subrc NE 0._
    >   delete itab1 index tabix.
    >  endif.
    > endloop.
    >
    > Thanks
    > Venkat.O
    Venkat, inside a loop a IF SY-SUBRC NE 0 doesn't make sense because you are in the loop only after the condition in WHERE clause is satisfied (which means SY-SUBRC is always 0). Also you are missing another ENDLOOP.

Maybe you are looking for

  • Windows 7 installation issues (0x8007005)

    I recently added a SSD in the optical bay of my unibody macbook pro and am currently trying to install a fresh copy of Windows 7 Ultimate x64 on it. If I go to run the installer from my Windows 7 installation on my disk drive through the optical driv

  • Significant time waiting for User I/O on the hot object

    How to correct this warnings shone in enterprise manager's top most poor sql's in performance analysis ; The SQL statement with SQL_ID "dnpdchg674nrr" spent significant time waiting for User I/O on the hot object. Texto SQLSELECT COUNT(*) AS QTDCTA F

  • App that puts Finder on desktop

    After trying like heck to fix the resolution on my Mac mini connected to a Toshiba TV.....1080p display leaves black frame, overscan option cuts out the Finder menu....I am wondering if there is an app out there that put the complete Finder on the de

  • Themes not working in imovie for ipad

    Themes not loading for imovie for ipad.  I can use the themes in the Trailers, but not in creating a themed movie.  Please help!

  • CREATE DATABASE disabled on cloud instances?

    Hi Folks, Wondering if any SAP guys can advise on limitations of "CREATE DATABASE" command on HANA on AWS (and/or other cloud providers)? I tried executing it on my AWS instance and received the error "feature not supported". My suspicion is that thi