A review of the SQL that Lisbeth Salander [in the movie "The Girl With The Dragon Tattoo"] writes.
.
.
.
.
.
.
I am an Oracle Database Specialist in Singapore.
Please note that this site uses cookies. 
SQL> create tablespace NEWTBS datafile '/tmp/newtbs.dbf' size 50M;
Tablespace created.
SQL> create table hemant.objcopy tablespace newtbs as select * from dba_objects;
Table created.
SQL> select file_id from dba_data_files where tablespace_name = 'NEWTBS';
   FILE_ID
----------
        15
SQL> alter system checkpoint;
System altered.
SQL> select f.checkpoint_change#, h.checkpoint_change#
  2  from v$datafile f, v$datafile_header h
  3  where f.file#=15 and h.file#=15 and f.file#=h.file#;
CHECKPOINT_CHANGE# CHECKPOINT_CHANGE#
------------------ ------------------
           5312187            5312187
SQL> 
RMAN> backup tablespace newtbs; Starting backup at 20-MAY-12 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=13 device type=DISK channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00015 name=/tmp/newtbs.dbf channel ORA_DISK_1: starting piece 1 at 20-MAY-12 channel ORA_DISK_1: finished piece 1 at 20-MAY-12 piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_05_20/o1_mf_nnndf_TAG20120520T230907_7vl28n6q_.bkp tag=TAG20120520T230907 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01 Finished backup at 20-MAY-12 Starting Control File Autobackup at 20-MAY-12 piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/autobackup/2012_05_20/o1_mf_n_783817749_7vl28oln_.bkp comment=NONE Finished Control File Autobackup at 20-MAY-12 RMAN>Next, I update the object(s) in the tablespace.
SQL> connect hemant/hemant Connected. SQL> select segment_name from user_segments where tablespace_name = 'NEWTBS'; SEGMENT_NAME -------------------------------------------------------------------------------- OBJCOPY SQL> insert into objcopy select * from dba_objects; 76670 rows created. SQL> update objcopy set owner = owner || '_1'; 153301 rows updated. SQL> commit; Commit complete. SQL> SQL> alter system switch logfile; System altered. SQL>I then remove and restore the datafile :
SQL> connect / as sysdba Connected. SQL> !rm /tmp/newtbs*.dbf SQL> alter database datafile 15 offline; Database altered. SQL> RMAN> restore datafile 15; Starting restore at 20-MAY-12 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=7 device type=DISK channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00015 to /tmp/newtbs.dbf channel ORA_DISK_1: reading from backup piece /home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_05_20/o1_mf_nnndf_TAG20120520T230907_7vl28n6q_.bkp channel ORA_DISK_1: piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_05_20/o1_mf_nnndf_TAG20120520T230907_7vl28n6q_.bkp tag=TAG20120520T230907 channel ORA_DISK_1: restored backup piece 1 channel ORA_DISK_1: restore complete, elapsed time: 00:00:03 Finished restore at 20-MAY-12 RMAN>If I now query the V$DATAFILE and V$DATAFILE_HEADER views, I see :
SQL> select f.checkpoint_change#, h.checkpoint_change#
  2  from v$datafile f, v$datafile_header h
  3  where f.file#=15 and h.file#=15 and f.file#=h.file#
  4  /
CHECKPOINT_CHANGE# CHECKPOINT_CHANGE#
------------------ ------------------
           5315901            5313637
SQL> 
I then RECOVER the datafile :
SQL> recover datafile 15;
ORA-00279: change 5313637 generated at 05/20/2012 23:09:08 needed for thread 1
ORA-00289: suggestion :
/home/oracle/app/oracle/flash_recovery_area/ORCL/archivelog/2012_05_20/o1_mf_1_1
3_7vl2f3nf_.arc
ORA-00280: change 5313637 for thread 1 is in sequence #13
Specify log: {=suggested | filename | AUTO | CANCEL}
Log applied.
Media recovery complete.
SQL> 
SQL> select f.checkpoint_change#, h.checkpoint_change#
  2  from v$datafile f, v$datafile_header h
  3  where f.file#=15 and h.file#=15 and f.file#=h.file#
  4  /
CHECKPOINT_CHANGE# CHECKPOINT_CHANGE#
------------------ ------------------
           5321980            5321980
SQL> 
 
Note : The CHECKPOINT_CHANGE# has been incremented and both the views now show the same value.
Bringing the datafile online again increments the CHECKPOINT_CHANGE#.SQL> select f.checkpoint_change#, h.checkpoint_change#
  2  from v$datafile f, v$datafile_header h
  3  where f.file#=15 and h.file#=15 and f.file#=h.file#
  4  /
CHECKPOINT_CHANGE# CHECKPOINT_CHANGE#
------------------ ------------------
           5322278            5322278
SQL> 
I could ask the question : Why is the CHECKPOINT_CHANGE# incremented for a datafile that was OFFLINE and [merely] RECOVERed ?  But I am sure that you know the answer now.SQL> select current_scn from v$database; 
    CURRENT_SCN
---------------
        5288289
SQL> select checkpoint_change#, count(*) from v$datafile group by checkpoint_change#; 
CHECKPOINT_CHANGE#        COUNT(*)
------------------ ---------------
           5287941              14
SQL> select checkpoint_change#, count(*) from v$datafile_header group by checkpoint_change#;
CHECKPOINT_CHANGE#        COUNT(*)
------------------ ---------------
           5287941              14
SQL> 
In this case, V$DATABASE's current_scn is ahead of those of the datafiles last checkpoint. We know that this is acceptable -- because the database SCN is continuously being incremented while datafiles are checkpointed only on occasion.  The above values are after a database instance startup.SQL> alter system checkpoint;
System altered.
SQL> select checkpoint_change#, count(*) from v$datafile group by checkpoint_change#;
CHECKPOINT_CHANGE#        COUNT(*)
------------------ ---------------
           5288402              14
SQL> select checkpoint_change#, count(*) from v$datafile_header group by checkpoint_change#;
CHECKPOINT_CHANGE#        COUNT(*)
------------------ ---------------
           5288402              14
SQL> alter tablespace users offline;
Tablespace altered.
SQL> alter tablespace users online;
Tablespace altered.
SQL> select checkpoint_change#, count(*) from v$datafile group by checkpoint_change#;
CHECKPOINT_CHANGE#        COUNT(*)
------------------ ---------------
           5288402              13
           5288445               1
SQL> select checkpoint_change#, count(*) from v$datafile_header group by checkpoint_change#;
CHECKPOINT_CHANGE#        COUNT(*)
------------------ ---------------
           5288402              13
           5288445               1
SQL> 
RMAN> list backup summary; List of Backups =============== Key TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag ------- -- -- - ----------- --------------- ------- ------- ---------- --- 1 B A A DISK 01-JAN-12 1 1 YES TAG20120101T110005 2 B A A DISK 01-JAN-12 1 1 YES TAG20120101T110005 3 B F A DISK 01-JAN-12 1 1 YES TAG20120101T110008 4 B F A DISK 01-JAN-12 1 1 YES TAG20120101T110008 5 B A A DISK 01-JAN-12 1 1 YES TAG20120101T110205 6 B A A DISK 01-JAN-12 1 1 YES TAG20120101T112514 7 B A A DISK 01-JAN-12 1 1 YES TAG20120101T112514 8 B F A DISK 01-JAN-12 1 1 YES TAG20120101T112516 9 B F A DISK 01-JAN-12 1 1 YES TAG20120101T112516 10 B F A DISK 01-JAN-12 1 1 YES TAG20120101T112516 11 B F A DISK 01-JAN-12 1 1 YES TAG20120101T112516 12 B A A DISK 01-JAN-12 1 1 YES TAG20120101T112655 13 B F A DISK 01-JAN-12 1 1 NO TAG20120101T115229 14 B F A DISK 13-FEB-12 1 1 NO TAG20120213T234617 15 B A A DISK 23-MAR-12 1 1 YES TAG20120323T231436 16 B A A DISK 23-MAR-12 1 1 YES TAG20120323T231436 17 B A A DISK 23-MAR-12 1 1 YES TAG20120323T231436 18 B F A DISK 23-MAR-12 1 1 YES TAG20120323T231454 19 B A A DISK 23-MAR-12 1 1 YES TAG20120323T231639 20 B F A DISK 23-MAR-12 1 1 NO TAG20120323T231640 21 B F A DISK 23-MAR-12 1 1 YES TAG20120323T235528 22 B F A DISK 23-MAR-12 1 1 NO TAG20120323T235653 23 B F A DISK 24-MAR-12 1 1 NO TAG20120324T001027 24 B F A DISK 24-MAR-12 1 1 NO TAG20120324T001527 25 B F A DISK 24-MAR-12 1 1 NO TAG20120324T001528 RMAN>And the backups are located in the FRA (what can you surmise about the 13-FEB backup that doesn't exist here ?)
[oracle@linux64 backupset]$ pwd /home/oracle/app/oracle/flash_recovery_area/ORCL/backupset [oracle@linux64 backupset]$ ls -l total 12 drwxrwx--- 2 oracle oracle 4096 Jan 1 11:26 2012_01_01 drwxrwx--- 2 oracle oracle 4096 Mar 23 23:55 2012_03_23 drwxrwx--- 2 oracle oracle 4096 Mar 24 00:15 2012_03_24 [oracle@linux64 backupset]$ [oracle@linux64 backupset]$ du -sh * 1.1G 2012_01_01 1.1G 2012_03_23 1.3M 2012_03_24 [oracle@linux64 backupset]$What if one of the backups was relocated to another mountpoint ?
[oracle@linux64 backupset]$ mv 2012_01_01 /newmountpoint/FRA [oracle@linux64 backupset]$ du -sh /newmountpoint/FRA/* 1.1G /newmountpoint/FRA/2012_01_01 [oracle@linux64 backupset]$ RMAN> crosscheck backup; allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=195 device type=DISK crosschecked backup piece: found to be 'EXPIRED' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_annnn_TAG20120101T110005_7hzm1p3b_.bkp RECID=1 STAMP=771418806 crosschecked backup piece: found to be 'EXPIRED' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_annnn_TAG20120101T110005_7hzm1q6l_.bkp RECID=2 STAMP=771418807 crosschecked backup piece: found to be 'EXPIRED' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_nnndf_TAG20120101T110008_7hzm1rj9_.bkp RECID=3 STAMP=771418808 crosschecked backup piece: found to be 'EXPIRED' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_ncnnf_TAG20120101T110008_7hzm5dob_.bkp RECID=4 STAMP=771419318 crosschecked backup piece: found to be 'EXPIRED' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_annnn_TAG20120101T110205_7hzm5g23_.bkp RECID=5 STAMP=771419318 crosschecked backup piece: found to be 'EXPIRED' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_annnn_TAG20120101T112514_7hznjtnr_.bkp RECID=6 STAMP=771420314 crosschecked backup piece: found to be 'EXPIRED' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_annnn_TAG20120101T112514_7hznjvr1_.bkp RECID=7 STAMP=771420315 crosschecked backup piece: found to be 'EXPIRED' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznjx24_.bkp RECID=8 STAMP=771420317 crosschecked backup piece: found to be 'EXPIRED' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznm84k_.bkp RECID=9 STAMP=771420392 crosschecked backup piece: found to be 'EXPIRED' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznmq8q_.bkp RECID=10 STAMP=771420407 crosschecked backup piece: found to be 'EXPIRED' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznmydw_.bkp RECID=11 STAMP=771420414 crosschecked backup piece: found to be 'EXPIRED' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_annnn_TAG20120101T112655_7hznmzlq_.bkp RECID=12 STAMP=771420415 ..... some lines deleted .... crosschecked backup piece: found to be 'AVAILABLE' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_03_23/o1_mf_annnn_TAG20120323T231436_7ps4tww3_.bkp RECID=15 STAMP=778720476 crosschecked backup piece: found to be 'AVAILABLE' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_03_23/o1_mf_annnn_TAG20120323T231436_7ps4txz4_.bkp RECID=16 STAMP=778720477 crosschecked backup piece: found to be 'AVAILABLE' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_03_23/o1_mf_annnn_TAG20120323T231436_7ps4vf2f_.bkp RECID=17 STAMP=778720493 crosschecked backup piece: found to be 'AVAILABLE' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_03_23/o1_mf_nnndf_TAG20120323T231454_7ps4vgmf_.bkp RECID=18 STAMP=778720494 crosschecked backup piece: found to be 'AVAILABLE' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_03_23/o1_mf_annnn_TAG20120323T231639_7ps4yqqm_.bkp RECID=19 STAMP=778720599 crosschecked backup piece: found to be 'AVAILABLE' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/autobackup/2012_03_23/o1_mf_n_778720600_7ps4ys8j_.bkp RECID=20 STAMP=778720601 crosschecked backup piece: found to be 'AVAILABLE' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_03_23/o1_mf_nnndf_TAG20120323T235528_7ps77jf2_.bkp RECID=21 STAMP=778722928 crosschecked backup piece: found to be 'AVAILABLE' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/autobackup/2012_03_23/o1_mf_n_778723013_7ps7b5l1_.bkp RECID=22 STAMP=778723013 crosschecked backup piece: found to be 'AVAILABLE' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/autobackup/2012_03_24/o1_mf_n_778723827_7ps83mpw_.bkp RECID=23 STAMP=778723827 crosschecked backup piece: found to be 'AVAILABLE' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_03_24/o1_mf_nnndf_TAG20120324T001527_7ps8dzm8_.bkp RECID=24 STAMP=778724127 crosschecked backup piece: found to be 'AVAILABLE' backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/autobackup/2012_03_24/o1_mf_n_778724128_7ps8f0o8_.bkp RECID=25 STAMP=778724128 Crosschecked 25 objects RMAN> RMAN> delete expired backup; using channel ORA_DISK_1 List of Backup Pieces BP Key BS Key Pc# Cp# Status Device Type Piece Name ------- ------- --- --- ----------- ----------- ---------- 1 1 1 1 EXPIRED DISK /home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_annnn_TAG20120101T110005_7hzm1p3b_.bkp 2 2 1 1 EXPIRED DISK /home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_annnn_TAG20120101T110005_7hzm1q6l_.bkp 3 3 1 1 EXPIRED DISK /home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_nnndf_TAG20120101T110008_7hzm1rj9_.bkp 4 4 1 1 EXPIRED DISK /home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_ncnnf_TAG20120101T110008_7hzm5dob_.bkp 5 5 1 1 EXPIRED DISK /home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_annnn_TAG20120101T110205_7hzm5g23_.bkp 6 6 1 1 EXPIRED DISK /home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_annnn_TAG20120101T112514_7hznjtnr_.bkp 7 7 1 1 EXPIRED DISK /home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_annnn_TAG20120101T112514_7hznjvr1_.bkp 8 8 1 1 EXPIRED DISK /home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznjx24_.bkp 9 9 1 1 EXPIRED DISK /home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznm84k_.bkp 10 10 1 1 EXPIRED DISK /home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznmq8q_.bkp 11 11 1 1 EXPIRED DISK /home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznmydw_.bkp 12 12 1 1 EXPIRED DISK /home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_annnn_TAG20120101T112655_7hznmzlq_.bkp Do you really want to delete the above objects (enter YES or NO)? YES deleted backup piece backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_annnn_TAG20120101T110005_7hzm1p3b_.bkp RECID=1 STAMP=771418806 deleted backup piece backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_annnn_TAG20120101T110005_7hzm1q6l_.bkp RECID=2 STAMP=771418807 deleted backup piece backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_nnndf_TAG20120101T110008_7hzm1rj9_.bkp RECID=3 STAMP=771418808 deleted backup piece backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_ncnnf_TAG20120101T110008_7hzm5dob_.bkp RECID=4 STAMP=771419318 deleted backup piece backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_annnn_TAG20120101T110205_7hzm5g23_.bkp RECID=5 STAMP=771419318 deleted backup piece backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_annnn_TAG20120101T112514_7hznjtnr_.bkp RECID=6 STAMP=771420314 deleted backup piece backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_annnn_TAG20120101T112514_7hznjvr1_.bkp RECID=7 STAMP=771420315 deleted backup piece backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznjx24_.bkp RECID=8 STAMP=771420317 deleted backup piece backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznm84k_.bkp RECID=9 STAMP=771420392 deleted backup piece backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznmq8q_.bkp RECID=10 STAMP=771420407 deleted backup piece backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznmydw_.bkp RECID=11 STAMP=771420414 deleted backup piece backup piece handle=/home/oracle/app/oracle/flash_recovery_area/ORCL/backupset/2012_01_01/o1_mf_annnn_TAG20120101T112655_7hznmzlq_.bkp RECID=12 STAMP=771420415 Deleted 12 EXPIRED objects RMAN> RMAN> list backup summary; List of Backups =============== Key TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag ------- -- -- - ----------- --------------- ------- ------- ---------- --- 13 B F A DISK 01-JAN-12 1 1 NO TAG20120101T115229 14 B F A DISK 13-FEB-12 1 1 NO TAG20120213T234617 15 B A A DISK 23-MAR-12 1 1 YES TAG20120323T231436 16 B A A DISK 23-MAR-12 1 1 YES TAG20120323T231436 17 B A A DISK 23-MAR-12 1 1 YES TAG20120323T231436 18 B F A DISK 23-MAR-12 1 1 YES TAG20120323T231454 19 B A A DISK 23-MAR-12 1 1 YES TAG20120323T231639 20 B F A DISK 23-MAR-12 1 1 NO TAG20120323T231640 21 B F A DISK 23-MAR-12 1 1 YES TAG20120323T235528 22 B F A DISK 23-MAR-12 1 1 NO TAG20120323T235653 23 B F A DISK 24-MAR-12 1 1 NO TAG20120324T001027 24 B F A DISK 24-MAR-12 1 1 NO TAG20120324T001527 25 B F A DISK 24-MAR-12 1 1 NO TAG20120324T001528 RMAN>Apparently, Oracle is no longer "aware" of the 01-Jan-12 backup.
RMAN> catalog start with '/newmountpoint/FRA'; searching for all files that match the pattern /newmountpoint/FRA List of Files Unknown to the Database ===================================== File Name: /newmountpoint/FRA/2012_01_01/o1_mf_annnn_TAG20120101T110005_7hzm1q6l_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_annnn_TAG20120101T110205_7hzm5g23_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznm84k_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznjx24_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_annnn_TAG20120101T112514_7hznjtnr_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznmydw_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_annnn_TAG20120101T112514_7hznjvr1_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_ncnnf_TAG20120101T110008_7hzm5dob_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_annnn_TAG20120101T110005_7hzm1p3b_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznmq8q_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_nnndf_TAG20120101T110008_7hzm1rj9_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_annnn_TAG20120101T112655_7hznmzlq_.bkp Do you really want to catalog the above files (enter YES or NO)? YES cataloging files... cataloging done List of Cataloged Files ======================= File Name: /newmountpoint/FRA/2012_01_01/o1_mf_annnn_TAG20120101T110005_7hzm1q6l_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_annnn_TAG20120101T110205_7hzm5g23_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznm84k_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznjx24_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_annnn_TAG20120101T112514_7hznjtnr_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznmydw_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_annnn_TAG20120101T112514_7hznjvr1_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_ncnnf_TAG20120101T110008_7hzm5dob_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_annnn_TAG20120101T110005_7hzm1p3b_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_nnndf_TAG20120101T112516_7hznmq8q_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_nnndf_TAG20120101T110008_7hzm1rj9_.bkp File Name: /newmountpoint/FRA/2012_01_01/o1_mf_annnn_TAG20120101T112655_7hznmzlq_.bkp RMAN> list backup summary; List of Backups =============== Key TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag ------- -- -- - ----------- --------------- ------- ------- ---------- --- 13 B F A DISK 01-JAN-12 1 1 NO TAG20120101T115229 14 B F A DISK 13-FEB-12 1 1 NO TAG20120213T234617 15 B A A DISK 23-MAR-12 1 1 YES TAG20120323T231436 16 B A A DISK 23-MAR-12 1 1 YES TAG20120323T231436 17 B A A DISK 23-MAR-12 1 1 YES TAG20120323T231436 18 B F A DISK 23-MAR-12 1 1 YES TAG20120323T231454 19 B A A DISK 23-MAR-12 1 1 YES TAG20120323T231639 20 B F A DISK 23-MAR-12 1 1 NO TAG20120323T231640 21 B F A DISK 23-MAR-12 1 1 YES TAG20120323T235528 22 B F A DISK 23-MAR-12 1 1 NO TAG20120323T235653 23 B F A DISK 24-MAR-12 1 1 NO TAG20120324T001027 24 B F A DISK 24-MAR-12 1 1 NO TAG20120324T001527 25 B F A DISK 24-MAR-12 1 1 NO TAG20120324T001528 26 B A A DISK 01-JAN-12 1 1 YES TAG20120101T110005 27 B A A DISK 01-JAN-12 1 1 YES TAG20120101T110205 28 B F A DISK 01-JAN-12 1 1 YES TAG20120101T112516 29 B F A DISK 01-JAN-12 1 1 YES TAG20120101T112516 30 B A A DISK 01-JAN-12 1 1 YES TAG20120101T112514 31 B F A DISK 01-JAN-12 1 1 YES TAG20120101T112516 32 B A A DISK 01-JAN-12 1 1 YES TAG20120101T112514 33 B F A DISK 01-JAN-12 1 1 YES TAG20120101T110008 34 B A A DISK 01-JAN-12 1 1 YES TAG20120101T110005 35 B F A DISK 01-JAN-12 1 1 YES TAG20120101T112516 36 B F A DISK 01-JAN-12 1 1 YES TAG20120101T110008 37 B A A DISK 01-JAN-12 1 1 YES TAG20120101T112655 RMAN>
23:13:45 SQL> REM Demo User_Tab_Modifications
23:13:45 SQL> 
23:13:45 SQL> alter session set nls_date_format='DD-MON HH24:MI:SS';
Session altered.
23:13:45 SQL> 
23:13:45 SQL> -- create the target table
23:13:45 SQL> drop table UTM_TARGET  purge;
Table dropped.
23:13:45 SQL> create table UTM_TARGET
23:13:45   2  as select * from dba_objects
23:13:45   3  where 1=2;
Table created.
23:13:45 SQL> select count(*) from UTM_TARGET;
  COUNT(*)
----------
         0
23:13:45 SQL> 
23:13:45 SQL> exec dbms_lock.sleep(120);
PL/SQL procedure successfully completed.
23:15:45 SQL> 
23:15:45 SQL> -- query USER_TAB_MODIFICATIONS
23:15:45 SQL> select timestamp,inserts,updates,deletes
23:15:45   2  from user_tab_modifications
23:15:45   3  where table_name = 'UTM_TARGET';
no rows selected
23:15:45 SQL> 
23:15:45 SQL> -- insert rows and commit
23:15:45 SQL> insert into UTM_TARGET
23:15:45   2  select * from dba_objects;
76630 rows created.
23:15:46 SQL> commit;
Commit complete.
23:15:46 SQL> 
23:15:46 SQL> exec dbms_lock.sleep(120);
PL/SQL procedure successfully completed.
23:17:46 SQL> 
23:17:46 SQL> -- query USER_TAB_MODIFICATIONS
23:17:46 SQL> select timestamp,inserts,updates,deletes
23:17:46   2  from user_tab_modifications
23:17:46   3  where table_name = 'UTM_TARGET';
no rows selected
23:17:46 SQL> 
23:17:46 SQL> -- flush monitoring info
23:17:46 SQL> exec dbms_stats.flush_database_monitoring_info;
PL/SQL procedure successfully completed.
23:17:46 SQL> 
23:17:46 SQL> -- query USER_TAB_MODIFICATIONS
23:17:46 SQL> select timestamp,inserts,updates,deletes
23:17:46   2  from user_tab_modifications
23:17:46   3  where table_name = 'UTM_TARGET';
TIMESTAMP          INSERTS    UPDATES    DELETES
--------------- ---------- ---------- ----------
01-MAY 23:17:46      76630          0          0
23:17:46 SQL> 
23:17:46 SQL> -- what about Direct Path INSERTs ? are they captured
23:17:46 SQL> insert /*+ APPEND */ into UTM_TARGET
23:17:46   2  select * from dba_objects;
76630 rows created.
23:17:46 SQL> 
23:17:46 SQL> -- run a query. It should error if Direct Path INSERT has been used
23:17:46 SQL> select count(*) from UTM_TARGET;
select count(*) from UTM_TARGET
                     *
ERROR at line 1:
ORA-12838: cannot read/modify an object after modifying it in parallel
23:17:46 SQL> 
23:17:46 SQL> -- commit so that the Direct Path INSERT is visible
23:17:46 SQL> commit;
Commit complete.
23:17:46 SQL> 
23:17:46 SQL> exec dbms_lock.sleep(120);
PL/SQL procedure successfully completed.
23:19:46 SQL> 
23:19:46 SQL> -- query USER_TAB_MODIFICATIONS
23:19:46 SQL> select timestamp,inserts,updates,deletes
23:19:46   2  from user_tab_modifications
23:19:46   3  where table_name = 'UTM_TARGET';
TIMESTAMP          INSERTS    UPDATES    DELETES
--------------- ---------- ---------- ----------
01-MAY 23:17:46      76630          0          0
23:19:46 SQL> 
23:19:46 SQL> -- flush monitoring info
23:19:46 SQL> exec dbms_stats.flush_database_monitoring_info;
PL/SQL procedure successfully completed.
23:19:46 SQL> 
23:19:46 SQL> -- query USER_TAB_MODIFICATIONS
23:19:46 SQL> select timestamp,inserts,updates,deletes
23:19:46   2  from user_tab_modifications
23:19:46   3  where table_name = 'UTM_TARGET';
TIMESTAMP          INSERTS    UPDATES    DELETES
--------------- ---------- ---------- ----------
01-MAY 23:19:46     153260          0          0
23:19:46 SQL> 
23:19:46 SQL> -- run an UPDATE
23:19:46 SQL> update UTM_TARGET
23:19:46   2  set owner = 'SYTEM2' where owner = 'SYSTEM';
1058 rows updated.
23:19:47 SQL> commit;
Commit complete.
23:19:47 SQL> 
23:19:47 SQL> exec dbms_lock.sleep(120);
PL/SQL procedure successfully completed.
23:21:47 SQL> 
23:21:47 SQL> -- flush monitoring info
23:21:47 SQL> exec dbms_stats.flush_database_monitoring_info;
PL/SQL procedure successfully completed.
23:21:47 SQL> 
23:21:47 SQL> -- query USER_TAB_MODIFICATIONS
23:21:47 SQL> select timestamp,inserts,updates,deletes
23:21:47   2  from user_tab_modifications
23:21:47   3  where table_name = 'UTM_TARGET';
TIMESTAMP          INSERTS    UPDATES    DELETES
--------------- ---------- ---------- ----------
01-MAY 23:21:47     153260       1058          0
23:21:47 SQL> 
23:21:47 SQL> 
23:21:47 SQL> -- what happens after we call  DBMS_STATS.GATHER_TABLE_STATS  ?
23:21:47 SQL> exec dbms_stats.gather_table_stats('HEMANT','UTM_TARGET');
PL/SQL procedure successfully completed.
23:21:47 SQL> 
23:21:47 SQL> -- query USER_TAB_MODIFICATIONS
23:21:47 SQL> select timestamp,inserts,updates,deletes
23:21:47   2  from user_tab_modifications
23:21:47   3  where table_name = 'UTM_TARGET';
no rows selected
23:21:47 SQL> -- the GATHER_STATS call has now flushed the view
23:21:47 SQL> -- the DML "counter" has got reset to 0 -- w.r.t. the time when the Gather_Stats is executed
23:21:47 SQL> 
23:21:47 SQL> 
23:21:47 SQL> -- run a DELETE
23:21:47 SQL> delete UTM_TARGET
23:21:47   2  where owner = 'SYTEM2' ;
1058 rows deleted.
23:21:47 SQL> commit;
Commit complete.
23:21:47 SQL> 
23:21:47 SQL> exec dbms_lock.sleep(120);
PL/SQL procedure successfully completed.
23:23:47 SQL> 
23:23:47 SQL> -- flush monitoring info
23:23:47 SQL> exec dbms_stats.flush_database_monitoring_info;
PL/SQL procedure successfully completed.
23:23:47 SQL> 
23:23:47 SQL> -- query USER_TAB_MODIFICATIONS
23:23:47 SQL> select timestamp,inserts,updates,deletes
23:23:47   2  from user_tab_modifications
23:23:47   3  where table_name = 'UTM_TARGET';
TIMESTAMP          INSERTS    UPDATES    DELETES
--------------- ---------- ---------- ----------
01-MAY 23:23:47          0          0       1058
23:23:47 SQL> 
As you can see, even if I populate my target table with rows, USER_TAB_MODIFICATIONS does not reflect this information until and unless DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO is called.   Similarly, the last set of commands demnostrates how a DBMS_STATS.GATHER_TABLE_STATS has purged this view of information on my target tble (UTM_TARGET).