Sunteți pe pagina 1din 12

- We found that BD is in ARCHIVELOG mode

ARCHIVE LOG LIST;


- We note that we have enabled FLASHBACK mode
SELECT FLASHBACK_ON FROM V$DATABASE;
- If it is not enabled, review the settings and activate FRA
SHOW PARAMETER RECOVERY_FILE
ALTER DATABASE FLASHBACK ON;
- Activate functionality BLOCK CHANGE TRACKING for Incremental Backups
- Default is created in the location specified by parameter DB_CREATE_FILE_DEST
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/u02/app/oracle/oradata/
OCM/block_change_tracking.f' REUSE;
- We check that was created correctly
SELECT * FROM V$BLOCK_CHANGE_TRACKING;
vi $ORACLE_HOME/network/admin/tnsnames.ora
# Add the entry for BD OEM
OEM =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP) (HOST = oem.dbajunior.com) (PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = OEM)
)
)
- Create the need to accommodate the TABLESPACE RECOVERY CATALOG
CREATE TABLESPACE RCAT DATAFILE '/u01/app/oracle/oradata/OEM/rcat.dbf'
SIZE 100M AUTOEXTEND ON NEXT 1M MAXSIZE 1G EXTENT MANAGEMENT LOCAL UNIFORM SIZE
1M;
- Create the Recovery Catalog owner user with the necessary permissions
CREATE USER rman IDENTIFIED BY rman DEFAULT TABLESPACE RCAT TEMPORARY TABLESPACE
TEMP;
ALTER USER rman QUOTA UNLIMITED ON RCAT;
GRANT RECOVERY_CATALOG_OWNER TO rman;
rman catalog rman/rman@oem
CREATE CATALOG;
# Edit it TNSNAMES.ORA file
vi $ORACLE_HOME/network/admin/tnsnames.ora
# Add the following entries to the tnsnames.ora file from BD OEM.
OCM =
(DESCRIPTION=
(ADDRESS = (PROTOCOL = tcp) (HOST = ocm.dbajunior.com) (PORT = 1521))
(CONNECT_DATA=
(SERVICE_NAME=OCM)))
# Recorded in the BD catalog.
rman target sys@ocm catalog rman/rman@oem
REGISTER DATABASE;
RESYNC CATALOG;

BACKUP DATAFILE '/u01/app/oracle/oradata/OCM/users01.dbf' FORMAT '/tmp/backup/te


st.bkp';
CATALOG BACKUPPIECE '/tmp/backup/test.bkp';
CATALOG START WITH '/tmp/backup/';
CATALOG RECOVERY AREA;
DELETE BACKUPPIECE '/tmp/backup/test.bkp';
rman target sys@ocm catalog rman/rman@oem
RMAN> SHOW ALL;
RMAN configuration parameters for database with db_unique_name OCM are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOA
D TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/dbhome_1/
dbs/snapcf_OCM.f'; # default
CONFIGURE CONTROLFILE AutoBackup ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/tmp/%F';
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK CLEAR;
# Let's see how to increase the number of copies of your backups
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
# Tambin can specify that the check is no backup as obsolete ever
CONFIGURE RETENTION POLICY TO NONE;
# Not to be confused with CLEAR, which would set the default value of REDUNDANCY
1
CONFIGURE RETENTION POLICY CLEAR;
# Let's change the retention policy setting backups 7 days
# It is important that this retention is less than parameter CONTROL_FILE_RECORD
_KEEP_TIME
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
# Configuramos OPTIMIZATION
CONFIGURE BACKUP OPTIMIZATION ON;
# We specify 2 channel default for disk backups
CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET;
# We launch a backup of a couple of small DATAFILES to check
# We will check two channels open
BACKUP DATAFILE 4.5;

# We delete backups completed


DELETE BACKUP OF DATAFILE 4,5;
# We connect to the database using the OCM recovery catalog
rman target sys@ocm catalog rman/rman@oem
# We did a Backup of all the BD + with archivelogs
BACKUP DATABASE PLUS ARCHIVELOG;
SELECT * FROM V$RECOVERY_AREA_USAGE;
# This
DELETE
# With
DELETE

command deletes all Backupsets


BACKUP;
this other command delete the backups AS COPY
COPY OF DATABASE;

# Full Backup of the database AS COPY


# Default BACKUP AS BACKUPSET is done, unless we change the configuration of RMA
N
# The advantage of this type of backups is that the RESTORE operation is inmmedi
ata
BACKUP AS COPY DATABASE PLUS ARCHIVELOG;
# Backup tablet BD + archivelogs
BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;
# Backup one of the several datafile
BACKUP AS COPY DATAFILE 1,2;
# Backup datafile specifying a location
BACKUP AS COPY DATAFILE 1 FORMAT '/u01/app/oracle/fast_recovery_area/OCM/system0
1.dbf';
# We can use default formats for backups
# The format of the backup files is detailed on the following page:
#
http://docs.oracle.com/cd/E11882_01/backup.112/e10643/rcmsubcl010.htm # RCM
RF195
BACKUP ARCHIVELOG FROM SEQUENCE=1 FORMAT='/u01/app/oracle/fast_recovery_area/OCM
/ar_%t_%s_%p' DELETE INPUT;
# Backup of one or more TABLESPACES
BACKUP TABLESPACE USERS;
# The following script, more complex, it offers a good backup strategy of BD for
the review
# The 1st run BACKUP AS COPY generates a full BD (LEVEL 0 since there are none o
f LEVEL 1)
# The 2nd and subsequent implementation performs an incremental backup (DIFFEREN
TIAL) changes since the last run
# The 3rd execution and subsequent recovery makes a COPY of the database before
doing the backup
# This script provides two advantages:
# 1. Backups are smaller by incremental
# 2. Restorations (RESTORE) very fast to be exact copies of files DATAFILES (SWI
TCH command)
RUN {
RECOVER COPY OF DATABASE WITH TAG 'DAILY_BKP_POLICY';
BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'DAILY_BKP_POLICY' DAT
ABASE PLUS ARCHIVELOG;
}

# We can use the same script for incremental type BACKUPS CUMULATIVE
RUN {
RECOVER COPY OF DATABASE WITH TAG 'DAILY_BKP_POLICY';
BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'DAILY_BKP_POLICY' CUM
ULATIVE DATABASE PLUS ARCHIVELOG;
}
CROSSCHECK BACKUP;
CROSSCHECK ARCHIVELOG ALL;
BACKUP DATABASE Validate;
# physical corruption (V $ DATABASE_BLOCK_C
ORRUPTION Review)
BACKUP CHECK LOGICAL DATABASE;
# Corrupciones Lgicos (Info. en Alert y sessi
on trace file)
RESTORE DATABASE VALIDATE;
REPORT NEED BACKUP;
REPORT OBSOLETE;
REPORT UNRECOVERABLE;
REPORT NEED BACKUP INCREMENTAL 2;
# Datafiles that require more than 2 INC in
Recovery
REPORT NEED BACKUP REDUNDANCY 2;
REPORT NEED BACKUP RECOVERY WINDOW OF 7 DAYS;
REPORT SCHEMA;
REPORT SCHEMA AT TIME 'SYSDATE-7';
VALIDATE DATABASE PLUS ARCHIVELOG;
VALIDATE CHECK LOGICAL TABLESPACE USERS;
VALIDATE CHECK LOGICAL DATAFILE 4;
VALIDATE CHECK LOGICAL DATAFILE 4 BLOCK 1 TO 10;
VALIDATE ARCHIVELOG ALL;
VALIDATE CHECK LOGICAL CURRENT CONTROLFILE;
VALIDATE CHECK LOGICAL BACKUPSET 6446;
RESTORE DATABASE PREVIEW;
RECOVER DATABASE PREVIEW;
LIST BACKUP OF DATABASE;
LIST BACKUP OF ARCHIVELOG FROM SCN 2953216;
LIST BACKUPPIECE '/u01/app/oracle/fast_recovery_area/OCM/autobackup/2013_06_07/o
1_mf_s_817462899_8v31bmrs_.bkp' ;
LIST BACKUPPIECE 8222;
LIST BACKUPSET 8220;
LIST COPY OF TABLESPACE SYSTEM;
LIST COPY OF DATABASE ARCHIVELOG FROM TIME='SYSDATE-7';
LIST INCARNATION;
LIST EXPIRED BACKUP;
LIST BACKUP SUMMARY;
V$ARCHIVED_LOG
V$COPY_CORRUPTION
V$DATABASE_BLOCK_CORRUPTION
V$RMAN_CONFIGURATION
V$BACKUP_<CORRUPTION|SET|SPFILE|DATAFILE|DEVICE|FILES|PIECE|REDOLOG|SYNC_IO|ASYN
C_IO>
V$PROXY_<ARCHIVEDOG|DATAFILE>
Recovery
--------# Erases it datafile 1
rm /u01/app/oracle/oradata/OCM/system01.dbf
# We connect to the database with rman and catalog </ span>
<pre>rman target sys@ocm catalog rman/rman@oem

# We restore and recover the DATAFILE


RESTORE DATAFILE 1;
RECOVER DATAFILE 1;
sql 'ALTER DATABASE OPEN';
# We delete the TABLESPACE USERS DATAFILE
rm /u01/app/oracle/oradata/OCM/users01.dbf
- We force the failure attempt to write to the TBS
CREATE TABLE TEST (C1 NUMBER) TABLESPACE USERS;
# We connect to the database with rman and catalog
rman target sys@ocm catalog rman/rman@oem
# We connect to the database with rman and catalog
rman target sys@ocm catalog rman/rman@oem
# DRA specific commands run within RMAN
# We list the problem is in BD
LIST FAILURE;
# Failure to analyze DRA we generate script corrections
ADVISE FAILURE;
# See the contents of repair script
REPAIR FAILURE PREVIEW;
# Run the script
REPAIR FAILURE;
RUN {
sql 'ALTER DATABASE DATAFILE 4 OFFLINE' ;
SET NEWNAME FOR DATAFILE 4 TO '/u02/app/oracle/oradata/OCM/users01.dbf';
RESTORE DATAFILE 4;
SWITCH DATAFILE 4;
RECOVER DATAFILE 4;
sql 'ALTER DATABASE DATAFILE 4 ONLINE';
}
- We create a TABLESPACE test with a sample table
CREATE TABLESPACE TEST DATAFILE '/u01/app/oracle/oradata/OCM/test01.dbf' size 10
0M;
CREATE TABLE TEST_TABLE TABLESPACE TEST AS SELECT * FROM HR.EMPLOYEES;
# Erases it datafile
rm / u01/app/oracle/oradata/OCM/test01.dbf
- Recover el DATAFILE
ALTER DATABASE DATAFILE 6 OFFLINE;
- Create a DATAFILE with the same characteristics as the missing DATAFILE
- We can use the same name to retrieve the original location or a different
ALTER DATABASE CREATE DATAFILE '/u01/app/oracle/oradata/OCM/test01.dbf' AS '/u02
/app/oracle/oradata/OCM/test01.dbf';
RECOVER DATAFILE 6;
ALTER DATABASE DATAFILE 6 ONLINE;
- We note that we have not lost data
SELECT COUNT(*) FROM TEST_TABLE;

- We clean environment
DROP TABLESPACE TEST INCLUDING CONTENTS AND DATAFILES;
ALTER DATABASE CREATE DATAFILE '/u01/app/oracle/oradata/OCM/test01.dbf' AS '/u01
/app/oracle/oradata/OCM/test01.dbf';
# Delete an CONTROLFILE
rm / u01/app/oracle/oradata/OCM/control01.ctl
- Close the database (if it has not fallen)
SHUTDOWN ABORT
# Copy the "live" on location CONTROLFILE we deleted
cp -p /u01/app/oracle/fast_recovery_area/OCM/control02.ctl /u01/app/oracle/orada
ta/OCM/control01.ctl
STARTUP
# We delete both CONTROLFILE we BD OCM
rm / u01/app/oracle/oradata/OCM/control01 . ctl
rm /u01/app/oracle/fast_recovery_area/OCM/control02.ctl
SHUTDOWN ABORT
# Run the following script from RMAN
# These commands can be executed within a RUN block, but rather have more contro
l
STARTUP NOMOUNT;
RESTORE CONTROLFILE FROM AUTOBACKUP;
sql 'ALTER DATABASE MOUNT';
RECOVER DATABASE;
sql 'ALTER DATABASE OPEN RESETLOGS' ;
# Guard a backup (important)
BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;
- The first is to put the database in MOUNT state
SHUTDOWN IMMEDIATE
STARTUP MOUNT
- We get the last ARCHIVELOG applied to obtain the final sequence (Ej)
-THREAD# RESETLOGS_CHANGE# ARC SEQUENCE# COMPLETIO
--- --------- ----------------- --- ---------- ---------1
3012881 YES
2 07-JUN-13
SELECT
THREAD#,
RESETLOGS_CHANGE#,
ARCHIVED,
SEQUENCE#,
COMPLETION_TIME
FROM
V$ARCHIVED_LOG
WHERE
ARCHIVED='YES'
AND COMPLETION_TIME = (SELECT MAX(COMPLETION_TIME)
FROM V$ARCHIVED_LOG
WHERE ARCHIVED='YES');
# Erases them files
rm /u01/app/oracle/oradata/OCM/system01.dbf

rm
rm
rm
rm
rm
rm
rm
rm
rm
rm
rm
rm
rm
rm

/u01/app/oracle/oradata/OCM/sysaux01.dbf
/ u01/app/oracle/oradata/OCM/undotbs01 . DBF
/u02/app/oracle/oradata/OCM/users01.dbf
/u02/app/oracle/oradata/OCM/system02.dbf
/ u01/app/oracle/oradata/OCM/temp01 . dbf
/ u01/app/oracle/oradata/OCM/control01 . ctl
/u01/app/oracle/fast_recovery_area/OCM/control02.ctl
/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfileOCM.ora
/ u01/app/oracle/oradata/OCM/redo101 . log
/ u01/app/oracle/oradata/OCM/redo201 . log
/ u01/app/oracle/oradata/OCM/redo301 . log
/ u02/app/oracle/oradata/OCM/redo102 . log
/ u02/app/oracle/oradata/OCM/redo202 . log
/ u02/app/oracle/oradata/OCM/redo302 . log

# We threw the BD
SHUTDOWN ABORT
# We connect with RMAN
rman target sys@ocm catalog rman/rman@oem
# Set the DBID of the database
# What can we get from the previous logs RMAN catalog or accessed
# Ej: connected to target database: OCM (DBID=2196200734)
# Ej2: SELECT DB_ID FROM DB WHERE DB_KEY = (SELECT DB_KEY FROM DBINC
#
WHERE DB_NAME='OCM' AND DBINC_STAT
US='CURRENT');
SET DBID 2196200734
STARTUP NOMOUNT
- We set the parameters of the FRA
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=4G;
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/u01/app/oracle/fast_recovery_area';
# We recover the SPFILE, reinciamos instance and restore the database
RESTORE SPFILE FROM AUTOBACKUP;
SHUTDOWN IMMEDIATE;
STARTUP NOMOUNT;
RESTORE CONTROLFILE FROM AUTOBACKUP;
ALTER DATABASE MOUNT;
RESTORE DATABASE
- We get the last ARCHIVELOG AVAILABLE
SELECT
THREAD#,
RESETLOGS_CHANGE#,
ARCHIVED,
SEQUENCE#,
COMPLETION_TIME
FROM
V$ARCHIVED_LOG
WHERE
ARCHIVED='YES'
AND COMPLETION_TIME = (SELECT MAX(COMPLETION_TIME)
FROM V$ARCHIVED_LOG
WHERE ARCHIVED='YES');
# ARCHIVELOG recovered until the last (n +1) and open with RESETLOGS
RECOVER DATABASE UNTIL SEQUENCE 3 THREAD 1;

sql 'ALTER DATABASE OPEN RESETLOGS' ;


# We made another backup
BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;
# We delete the temporary tablespace DATAFILE
rm / u01/app/oracle/oradata/OCM/temp01 . dbf
- Create a temporary TABLESPACE and assign default to the BD
CREATE Temporary Tablespace TEMP2 tempfile '/ u01/app/oracle/oradata/OCM/temp2
01.dbf' size 20M;
ALTER DATABASE DEFAULT Temporary Tablespace TEMP2;
- Recreate the TEMP tablespace and assign default to the BD
DROP TABLESPACE TEMP ;
CREATE Temporary Tablespace TEMP tempfile '/ u01/app/oracle/oradata/OCM/temp0
1.dbf' size 20M;
ALTER DATABASE DEFAULT Temporary Tablespace TEMP ;
- We delete the tablespace TEMP2 we used
- If you do not leave us, we need to remove the sessions that are using it (eg y
our own.)
-- SELECT USERNAME, SESSION_NUM, SESSION_ADDR FROM V$SORT_USAGE;
DROP TABLESPACE TEMP2 INCLUDING CONTENTS AND DATAFILES;
- Create a test TBS
CREATE TABLESPACE BC DATAFILE '/u01/app/oracle/oradata/OCM/bc01.dbf' SIZE 20M;
- Create a sample table in that TBS
CREATE TABLE TEST_BC TABLESPACE BC AS SELECT * FROM DBA_OBJECTS;
- Locate the Datafile (FILE_NO) and a block wherein said table is stored
- In my example I get this output:
-FILE_NO BLOCK_NO
-- ---------- ----------5
131
SELECT DISTINCT
MIN(DBMS_ROWID.ROWID_RELATIVE_FNO(rowid)) as FILE_NO,
MIN(DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid)) as BLOCK_NO
FROM TEST_BC;
- Cleaned the cache (so we force that corruption is displayed quickly)
ALTER SYSTEM FLUSH BUFFER_CACHE;
# We connect with RMAN, list the fault and get the recommendation of DRA
rman target / catalog rman/rman@OEM
LIST FAILURE;
ADVISE FAILURE;
# In another session, we see the contents of the file to be executed to retrieve
the blocks
# The contents of the script is as follows:
# # block media recovery for multiple blocks
# recover datafile 5 block 131 to 132;
Cat / u01/app/oracle/diag/rdbms/ocm/OCM/hm/reco_3702026499 . HM
# We launched with the RMAN recovery script
REPAIR FAILURE;
- Finally we will query the table again to see if the problem has been corrected

.
SELECT * FROM TEST_BC;
- We clean environment
DROP TABLESPACE BC INCLUDING CONTENTS AND DATAFILES;
# In the following example we made a couple of backups KEEP clause
# Must connect to the catalog for testing
rman target / catalog rman/rman@OEM
# We launch a backup of the database never expire
BACKUP DATABASE KEEP FOREVER FORMAT '/tmp/%U';
# Tried to definicar an expiration time of a day for the backup of a datafile
BACKUP DATAFILE 4 KEEP UNTIL TIME 'SYSDATE+1' FORMAT '/tmp/%U';
# Full Backup with minimal impact on the database and a maximum duration of 30 m
inutes
BACKUP AS BACKUPSET DURATION 00:30 MINIMIZE LOAD PARTIAL DATABASE;
# Full Backup minimizing execution time and maximum duration of 15 minutes
# We have removed PARTIAL to if not complete, is considered FAILED
BACKUP AS BACKUPSET DURATION 00:15 MINIMIZE TIME DATABASE;
# We limit the transfer rate to a maximum of 20M per channel
RUN {
ALLOCATE CHANNEL d1 DEVICE TYPE DISK RATE 20M;
ALLOCATE CHANNEL d2 DEVICE TYPE DISK RATE 20M;
AS BACKUP DATABASE backupset;
RELEASE CHANNEL d1;
RELEASE CHANNEL d2;
}
# We can set it to default limit EITHER set up CHANNEL
CONFIGURE CHANNEL DEVICE TYPE DISK RATE 20M;
# Eliminate configuration
CONFIGURE CHANNEL DEVICE TYPE DISK CLEAR;
- We note that we have enabled FLASHBACK mode
SELECT FLASHBACK_ON FROM V$DATABASE;
- If it is not enabled, review the settings and activate FRA
- Might fail for lack of memory, then we need to restart the instance
SHOW PARAMETER RECOVERY_FILE
ALTER DATABASE FLASHBACK ON;
- Configure retention in minutes.
- Since the test takes two days => 2 days * 24 hours * 60 minutes = 2880
ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=2880 SCOPE=BOTH;
- Confiramos we have the recycle bin enabled
SHOW PARAMETER RECYCLEBIN
- Disable FLASHBACK to a specific tablespaces
ALTER TABLESPACE USERS FLASHBACK OFF;
- Activate FLASHBACK again
SHUTDOWN IMMEDIATE
STARTUP MOUNT
ALTER TABLESPACE USERS FLASHBACK ON;
ALTER DATABASE OPEN;

Flashback
----------- Create a table for testing
CREATE TABLE TEST_EMPLOYEES TABLESPACE USERS AS SELECT * FROM HR.EMPLOYEES;
- Borramos the table
DROP TABLE TEST_EMPLOYEES;
- We consult the recycle bin to see the newly deleted object
- RECYCLEBIN = user_recyclebin (We could also use DBA_RECYCLEBIN)
SELECT * FROM RECYCLEBIN;
- Recover the table
FLASHBACK TABLE TEST_EMPLOYEES TO BEFORE DROP;
- We consult the table
SELECT COUNT(*) FROM TEST_EMPLOYEES;
DROP TABLE TEST_EMPLOYEES;
- Recover the table
FLASHBACK TABLE TEST_EMPLOYEES TO BEFORE DROP RENAME TO TEST_EMPLOYEES_OLD;
- The rename with original name
RENAME TEST_EMPLOYEES_OLD TO TEST_EMPLOYEES;
- We delete the above table
DROP TABLE TEST_EMPLOYEES;
- Create a second table with the same name but records
CREATE TABLE TEST_EMPLOYEES TABLESPACE USERS AS SELECT * FROM HR.EMPLOYEES WHERE
1=2;
- We delete the second table
DROP TABLE TEST_EMPLOYEES;
- We check the content of the RECYCLEBIN and see that we have two tables "TEST_E
MPLOYEES"
SELECT * FROM RECYCLEBIN WHERE ORIGINAL_NAME='TEST_EMPLOYEES';
- We can query data from tables within the RECYCLEBIN own
- We consult the number of rows of the two
SELECT COUNT(*) FROM "BIN$3qdKDJCYSGngQ2QBqMBRgw==$0";
SELECT COUNT(*) FROM "BIN$3qdKDJCdSGngQ2QBqMBRgw==$0";
- The first is the one with 107 records is correct then
- Retrieve the tabla first RecycleBin
FLASHBACK TABLE "BIN$3qdKDJCYSGngQ2QBqMBRgw==$0" TO BEFORE DROP;
- TEST_EMPLOYEES erased the table so that it can not recover Flasback DROP
DROP TABLE TEST_EMPLOYEES PURGE;
- We clean the recycle bin
PURGE RECYCLEBIN;
- Purge the bin contents of a tablespace
PURGE TABLESPACE USERS;
- Purge the objects of a user within a TABLESAPCE
PURGE TABLESPACE USERS USER HR;

- Purge the content of all Recycle Bins


PURGE DBA_RECYCLEBIN;
- Create a sample table
CREATE TABLE TEST_EMPLOYEES TABLESPACE USERS AS SELECT * FROM HR.EMPLOYEES;
- Create an index
CREATE INDEX IDX_EMPLOYEES ON TEST_EMPLOYEES(EMPLOYEE_ID) TABLESPACE USERS;
- Borramos the table
DROP TABLE TEST_EMPLOYEES;
- IMPORTANT! We consulted with the names deleted objects
SELECT * FROM RECYCLEBIN;
- Recover the table
FLASHBACK TABLE TEST_EMPLOYEES TO BEFORE DROP;
- Check the index name
SELECT INDEX_NAME FROM DBA_INDEXES WHERE TABLE_NAME='TEST_EMPLOYEES';
- Rename the index
ALTER INDEX "BIN$3qdKDJCiSGngQ2QBqMBRgw==$0" RENAME TO "IDX_EMPLOYEES";
- We clean environment
DROP TABLE TEST_EMPLOYEES PURGE;
- The GUARANTEE clause indicates that the Flashback Logs are kept beyond the ret
ention
CREATE RESTORE POINT BEFORE_EXERCISES GUARANTEE FLASHBACK DATABASE;
- We see the point of restoring the BD
SELECT * FROM V$RESTORE_POINT;
- We delete the HR diagram
DROP USER HR CASCADE;
- FLASHBACK conducted a full DB restore point
- We have to state the BD MOUNT
STARTUP MOUNT FORCE
FLASHBACK DATABASE TO RESTORE POINT BEFORE_EXERCISES;
- Abrimos the BD
ALTER DATABASE OPEN RESETLOGS;
- Create a restore point second
CREATE RESTORE POINT AFTER_EXERCISES GUARANTEE FLASHBACK DATABASE;
- We consult restore points for the SCN
SELECT * FROM V$RESTORE_POINT;
- In my case this is the output
-SCN NAME
-- ---------- ------------------3124322 BEFORE_EXERCISES
-3124333 AFTER_EXERCISES
-- DB Llevamos the 2nd period (AFTER EXERCISES)
STARTUP FORCE MOUNT

FLASHBACK DATABASE TO RESTORE POINT AFTER_EXERCISES;


- Open the database in read mode to check this point we take an interest
ALTER DATABASE OPEN READ ONLY;
- Suppose we are not interested and want to go back to the previous point
- Pero this time, instead of using en la etiquita "BEFORE_EXERCISES", we will us
e el SCN
STARTUP FORCE MOUNT
FLASHBACK Database TO SCN 3124322;
- If we decide that we want to go in reverse, we can recover a hacer
RECOVER DATABASE;
- We raised the BD (Notice that we do not use RESETLOGS)
ALTER DATABASE OPEN;
- We delete the restore points.
DROP RESTORE POINT BEFORE_EXERCISES;
DROP RESTORE POINT AFTER_EXERCISES;
- Database Flashack a specific time
FLASHBACK Database TO timestamp (TO_TIMESTAMP ( '2013 / 06/08 19:14:35 ' , 'y
yyy / MM / DD HH24: MI: SS' ));
- Flashback to a sequence (within RMAN)
FLASHBACK DATABASE TO SEQUENCE=1;
- Create a sample table
CREATE TABLE TEST_EMPLOYEES TABLESPACE USERS AS SELECT * FROM HR.EMPLOYEES;
- We delete two records in the table TEST_EMPLOYEES
DELETE FROM TEST_EMPLOYEES WHERE EMPLOYEE_ID=100;
COMMIT;
DELETE FROM TEST_EMPLOYEES WHERE EMPLOYEE_ID=101;
COMMIT;
- We consult transactions made from the view FLASHBACK_TRANSACTION_QUERY
SELECT * FROM FLASHBACK_TRANSACTION_QUERY WHERE TABLE_NAME='TEST_EMPLOYEES';
- We may also obtain information from the transactions made through Pseudocolumn
s Version Query
- We get only those changes that provegan a DELETE (versions_operation = 'D')
SELECT VERSIONS_XID, VERSIONS_STARTSCN, VERSIONS_ENDSCN, VERSIONS_OPERATION, EMP
LOYEE_ID, FIRST_NAME
FROM TEST_EMPLOYEES VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
WHERE VERSIONS_OPERATION='D'
ORDER BY 2;
- Through the transaction ID (XID), we can reverse the DELETEs made
- We use the procedure TRANSACTION_BACKOUT DBMS_FLASHBACK Package
EXEC DBMS_FLASHBACK.TRANSACTION_BACKOUT (2, xid_array ( '01000C004A030000 ' , '
09001F0020030000 ' ));
- That we again have consulted the records
SELECT EMPLOYEE_ID, FIRST_NAME FROM TEST_EMPLOYEES WHERE EMPLOYEE_ID IN (100,101
);
- We clean environment
DROP TABLE TEST_EMPLOYEES PURGE;

S-ar putea să vă placă și