for more read documentation
format signs:
| %s | set nr |
| %p | piece of set nr |
| %c | copy nr for multi copy |
| %d | database name |
| %I | database id |
| %t | time index in sec |
| %D | day of month |
| %M | month |
| %Y | year |
| %T | year,month,day YYYYMMDD |
| %u | eight digit name consist of set nr and time |
| %U | uniq file name (necessary for many channel), consist of database id,day nr,month,year,file nr |
| %F | for controlfile c-[db_ID]-[YYYYMMDD]-[hex sequence from 00 to ff – max 256 different values] |
connect to database without catalog using controlfile:
rman> connect target /
rman> connect target [sys_user]/pass@[sid_target]
connect to catalog, and next to database (in one catalog may be register many databases):
rman> connect catalog [rman_user]/[pass]@[sid_rman_base]
rman> connect target [sys_user]/pass@[sid_target] lub
settings:
rman> configure retention policy to redundancy [number_of_files];
rman> configure retention policy to recovery window of [number od days] days;
rman> configure device type disk backup type to compressed backupset;
rman> configure device type disk backup type to [copy|backupset];
example of default settings:
CONFIGURE RETENTION POLICY TO REDUNDANCY ;
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/oracle/rmandata/%F.rbk’;
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 CHANNEL DEVICE TYPE DISK FORMAT '/oracle/rmandata/data-%I-%T-%s-%p-%U.rbk’;
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128′; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/oracle/product/10.2.0/db_1/dbs/snapcf_sow01.f’; # default
example of backup script:
run {
backup full tag „FULL”
filesperset 20
database;
sql 'alter system archive log current’;
backup format '/oracle/rmandata/arc-%I-%T-%s-%p-%U.rbk’
archivelog all delete input;
}
! if you set CONFIGURE CONTROLFILE AUTOBACKUP ON – for any command „BACKUP” automaticaly will be backuped controlfile, thus we get two entries for one backup in command „list backup”,
in example of backup script above we get four entries
!setting tags is not neccessary because in default you get nice format TAGYYYYMMDDTHH24MISS
list commands:
rman> list all script names;
rman> list copy of database;
rman> list backup [summary];
rman> list backup by file;
rman> list backup of database [summary];
rman> list backup of database archivelog all;
rman> list backup of archivelog all [summary];
rman> list backup of datafile '[path]’ | [nr] [summary];
rman> list backupset [nr],[nr],[nr];
rman> list archivelog all; #list current archivelog
rman> crosscheck backup | archivelog | copy #check if backup files are still exist and they obtain status AVAILABLE or EXPIRED, (you can test move backup files to other location and then bring it back)
rman> list expired backupset; #backups that were not found during a crosscheck, crosscheck must be first
rman> list expired backup of archivelog summary;
rman> list expired copy of archivelog all;
rman> list incarnation of database;
report commands:
rman> report schema;
rman> report need backup; #what is neccessary to backup according present backup policy
rman> report need backup days 7;
rman> report need backup redundancy 7;
rman> report need recovery window of 7 days;
rman> report obsolete; #old files according present policy, (if you change policy, report will be change olso)
rman> report obsolete redundancy 7;
rman> report obsolete recovery window of 7 days;
delete commands:
rman> delete obsolete; #remove expired according present backup policy
rman> delete expired archivelog all;
backup commands:
rman> backup as copy database – copy at files which format is simmilar as datafiles
rman> backup as backupset database – copy at set?
rman> backup database;
other commands:
sql> select obsolete,backup_type,file_type,fname from v$backup_files;
sql> select * from v$rman_status;
sql> select * from v$rman_output;
rman> run {execute script [script_name];}
rman> run {sql '[sql_command’}
rman> run {host '[os_command]’}
rman> create script {[data_script];}
create database for catalog:
sql> create tablespace [ts_rman] datafile '[file]’ size [size]m autoextend on next [size]m;
sql> create user [rman_user] identified by [password] default tablespace [ts];
sql> grant resource,connect,recovery_catalog_owner to [rman_user];
create structure of catalog database on schema [rman_user]):
rman catalog [rman_user]/[pass]@[sid_rman_base] lub
rman> connect catalog [rman_user]/[pass]@[sid_rman_base]
rman> create catalog
register database in catalog (in table [rman_user].db occur new entry):
rman catalog [rman_user]/[pass] target [sys_user]/[pass]@[sid] lub
rman> connect catalog [rman_user]/[pass]@[sid_rman_base]
rman> connect target [sys_user]/[pass]@[sid]
you get:
RMAN-06004: ORACLE error from recovery catalog database: RMAN-20001: target database not found in recovery catalog
rman> register database;
base tables of schema [rman_user]:
DB – inf about register databases
DF,DFATT – inf about database files
SCR,SCRL – scripts
ORL – inf about redologs
TS,TSATT – inf about tablespaces
TF,TFATT – inf about temp tablespaces
V$BACKUP_CORRUPTION #damaged blocks of backupset
V$COPY_CORRUPTION #damaged blocks of copy files
[rman_user].RC_STORED_SCRIPT
[rman_user].RC_STORED_SCRIPT_LINE
backupsets:
FULL BACKUP – full backup
all blocks, can not be used with incremental backup
in default is incremental backupset
levels can be 0,1,2,3,4
backupset on level 0 – all blocks like FULL BACKUP
backupset on level 1 – contain blocks which were changed from parent backup (base on SCN which is wrote inside each block, if child block SCN > parent block SCN than it is copied)
INCREMENTAL BACKUP SET – backupset of level n, which contain blocks which were modified from backupset of level n or n-1
INCREMENTAL CUMULATIVE – backupset of level n, which contain blocks which were modified from backupset of level n-1 or lower
options:
BACKUP INCREMENTAL LEVEL=0 DATABASE
BACKUP INCREMENTAL LEVEL=1 CUMULATIVE DATABASE
BACKUP (tablespace [ts_name1,ts_name2)
BACKUP ARCHIVELOG FROM TIME '[time]’ | FROM LOG SEQ=[nr_seq]
BACKUP ARCHIVELOG UNTIL TIME '[time]’ | UNTIL LOG SEQ=[nr_seq]
BACKUP ARCHIVELOG ALL DELETE INPUT #backup with remove
COPIES [nr] FORMAT '[1st_copy]’,'[2nd_copy] ’ #a number of copies (up to 4)
example scripts:
rman> create script [script_name] {
rman> allocate channel [channel_name] type disk;
rman> set limit channel [channel_name] kbytes=10000; –limit of backup piece
rman> backup
rman> filesperset 20 –a number of files in one backupset (default 4 datafiles and,16 archivelogs),
— ! one backupset include many files but one files could not be in many backupsets
rman> format '[dir_path/file_%s_%p_%t]’ — %s-backupset nr, %p-backup piece nr, %t-4byte timestamp
(archivelog all);
rman> release channel [channel_name];
}
rman> create script [script_name] {
rman> allocate channel [channel_name] type disk;
rman> copy
rman> datafile '[file_path.dbf]’ to '[file_path.bck]’,
rman> datafile '[file_path.dbf]’ to '[file_path.bck]’,
rman> current controlfile to '[controlfile_path.bck]’
rman> tag='[tag_name]’;
rman> release channel [channel_name];
}
create script [script_name] {
rman> allocate channel [channel_name] type disk;
rman> copy controlfile to '[path_control.bck]’;
rman> release channel [channel_name];
}
create script [script_name] {
rman> allocate channel [channel_name] type disk;
rman> backup
rman> filesperset 3
rman> tag='[tag_name]’
rman> format '[dir_path/fileincrement_%s_%p_%d]’
(database include current controlfile);
release channel [channel_name];
}
rman> create script [script_name] {
rman> allocate channel [channel1_name] type disk;
rman> allocate channel [channel2_name] type disk;
rman> set limit channel [channel1_name] kbytes 10000;
rman> set limit channel [channel2_name] kbytes 10000;
rman> backup full
rman> filesperset 3
rman> tag='[tag_name]’
rman> format '[dir_path/fileincrement_%s_%p_%d]’
(datafile 1,2,3 channel [channel1_name)
(datafile 4,5,6 channel [channel1_name);
rman> release channel [channel1_name];
rman> release channel [channel2_name];
}
rman> create script [scirpt_name]{
rman> allocate channel [channel_name1] type disk;
rman> allocate channel [channel_name2] type disk;
rman> backup
rman> format '/[backup_dir]/controlfile_t%t_s%s_p%p’
rman> (current controlfile);
rman> backup
rman> incremental level 0
rman> tag db_intr_0
rman> filesperset 5
rman> format '/[backup_dir]/datafile_t%t_s%s_p%p’
rman> (database);
rman> sql 'alter system archive log current’;
rman> backup
rman> filesperset 20
rman> format '/[backup_dir]/archivelog_t%t_s%s_p%p’
rman> (archivelog all delete input);
rman> release channel [channel_name1];
rman> release channel [channel_name2];
}
recovery:
all db:
sql> STARTUP MOUNT;
rman> RESTORE DATABASE; #or
rman> RESTORE DATABASE UNTIL TIME „to_date(’2009/08/18 16:00′,’YYYY/MM/DD HH24:MI’)”; #or
rman> RESTORE DATABASE FROM TAG=”[tag_name]”; #check TAG from command „list backup”
rman> RECOVER DATABASE; #get alertlogs from backup
rman> ALTER DATABASE OPEN;
! MAKE FULL BACKUP
tablespace:
rman> SQL 'ALTER TABLESPACE [ts_name] OFFLINE’;
rman> RESTORE TABLESPACE [ts_name];
rman> RECOVER TABLESPACE [ts_name];
rman> SQL 'ALTER TABLESPACE [ts_name] ONLINE’;
datafile:
rman> SQL 'ALTER DATABASE DATAFILE [file_nr] OFFLINE’;
rman> RESTORE DATAFILE [file_nr];
rman> RECOVER DATAFILE [file_nr];
rman> SQL 'ALTER DATABASE DATAFILE [file_nr] ONLINE’;
backup without alertlog from disk:
rman> SHUTDOWN IMMEDIATE;
rman> STARTUP NOMOUNT;
rman> CONFIGURE DEFAULT DEVICE TYPE TO DISK;
rman> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/[backup_datafile_path]/ora_df%t_s%s_s%p’ MAXPIECESIZE 4000M;
rman> CONFIGURE DEVICE TYPE DISK PARALLELISM 2;
rman> CONFIGURE CONTROLFILE AUTOBACKUP ON;
rman> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/[backup_controlfile_path]/%F’;
rman> BACKUP DATABASE;
rman> ALTER DATABASE OPEN;
recovery cold backup without alertlog:
remove all datafiles etc.
rman> set DBID=[dbid]
rman> set controlfile autobackup format for device type disk to '[backup_controlfile_path]/%F’;
rman> restore controlfile from autobackup;
rman> alter database mount;
rman> recover database; (!get error RMAN-03002, RMAN-06054)
rman> recover database noredo;
rman> alter database open resetlogs;
odtwarzanie do momentu w czasie:
należy ustawić zmienną:
export NLS_LANG=american_america.AL32UTF8
export NLS_DATE_FORMAT=’yyyy-mm-dd hh24:mi:ss’
rman> run {
set until time „to_date(’2009-09-25:18:18′,’yyyy-mm-dd:hh24:mi’)”;
restore database;
recover database;
}
rman> alter database open resetlogs
! wszystko musi się znaleźć w jednym bloku run ponieważ inaczej będzie odtwarzał do stanu bieżącego a nie do punktu w czasie, z uwagi na fakt że set będzie się odnosił tylko do instrukcji RESTORE a już nie do RECOVER
! jezeli już raz odtwarzaliśmy do momentu w czasie i otworzyliśmy bazę z opcją RESETLOGS, to w przypadku gdy okazało się że nie trafiliśmy, a chcielibyśmy odtworzyć inny moment w czasie to dostaniemy komunikat:
RMAN-06004: ORACLE error from recovery catalog database: RMAN-20207: UNTIL TIME or RECOVERY WINDOW is before RESETLOGS time
należy wtedy wykonać zapytanie:
rman> list incarnation of database;
otrzymamy listę wszystkich tzw. inkarnacji, ponieważ w momencie odtwarzania do punktu w czasie i otwierania bazy w trybie RESETLOGS otrzymujemy komunikat:
database opened
new incarnation of database registered in recovery catalog
starting full resync of recovery catalog
full resync complete
tak więc lecąc dalej wykonujemy (na niezamontowanej bazie):
rman> reset database to incarnation [nr inkarnacji];
rman> run {
set until time „to_date(’2009-09-26 23:32′,’yyyy-mm-dd hh24:mi’)”;
restore controlfile;
alter database mount;
restore database;
recover database;}
rman> alter dat
abase open resetlogs;
!Jeżeli chcemy podać inną lokalizację plików źródłowych:
rman> catalog start with '[backup_datafile_path]’