Documente Academic
Documente Profesional
Documente Cultură
# 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 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;
.
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;