How to create a physical standby database

See RMAN effective use, How to duplicate a database.htm
p>
#drop any existing standby logfile using:
select 'alter database drop standby logfile ''' || member || ''';'
from v$logfile where type = 'STANDBY'

alter database force logging;
#too many bugs with compress
ALTER DATABASE ARCHIVELOG COMPRESS disable;
select protection_mode from v$database;
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;

rman target sys/oracle@pro catalog pro/pro@rman auxiliary sys/oracle@prostdby

CONFIGURE ARCHIVELOG DELETION POLICY TO applied on standby;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/data03/oradata/MPD/DB1/ITADRT/backup/backup/snapcf_ITADRT.f';

#This is the full backup
run {
  resync catalog;
  #set command id to 'backup_db';
  allocate channel t1 type DISK format '/BackupNFS/%d_%s_%p_%U_DB';
  backup as compressed backupset filesperset 8 database;
  release channel t1;
}

#And this is the archive logs backup
run{
  resync catalog;
  #set command id to 'backup_arch';
  allocate channel t1 type DISK format '/BackupNFS/%d_%s_%p_%U_ARCH';
  change archivelog all crosscheck;
  #This is not for spamming... 
  sql "alter system archive log current";
  backup as compressed backupset ARCHIVELOG ALL NOT BACKED UP 1 TIMES filesperset 8;
  release channel t1;
}

run {
  resync catalog;
  allocate channel t1 type DISK format '/BackupNFS/%d_%s_%p_%U_ARCH';
  backup as compressed backupset ARCHIVELOG ALL NOT BACKED UP 1 TIMES filesperset 8;
  BACKUP CURRENT CONTROLFILE FOR STANDBY;
  release channel t1;
  #you may use:
  #select next_change# from v$archived_log where sequence# = (select max(sequence#) from v$archived_log)
  set until scn 517764;
  duplicate target database for standby NOFILENAMECHECK dorecover;
}

p>
#If you want to apply immediately at runtime then you need standby logfiles
alter database backup controlfile to trace;
#now copy the part relative the standby controlfile creation and run to q

q>
ALTER DATABASE ADD STANDBY LOGFILE '/opt/oracle/data/PROSTDBY/redostdby/redostdby01a.rdo' SIZE 10M REUSE;
ALTER DATABASE ADD STANDBY LOGFILE '/opt/oracle/data/PROSTDBY/redostdby/redostdby02a.rdo' SIZE 10M REUSE;
ALTER DATABASE ADD STANDBY LOGFILE '/opt/oracle/data/PROSTDBY/redostdby/redostdby03a.rdo' SIZE 10M REUSE;
ALTER DATABASE ADD STANDBY LOGFILE '/opt/oracle/data/PROSTDBY/redostdby/redostdby04a.rdo' SIZE 10M REUSE;

p>
ALTER DATABASE ADD STANDBY LOGFILE '/opt/oracle/data/PROSTDBY/redostdby/redostdby01a.rdo' SIZE 10M REUSE;
ALTER DATABASE ADD STANDBY LOGFILE '/opt/oracle/data/PROSTDBY/redostdby/redostdby02a.rdo' SIZE 10M REUSE;
ALTER DATABASE ADD STANDBY LOGFILE '/opt/oracle/data/PROSTDBY/redostdby/redostdby03a.rdo' SIZE 10M REUSE;
ALTER DATABASE ADD STANDBY LOGFILE '/opt/oracle/data/PROSTDBY/redostdby/redostdby04a.rdo' SIZE 10M REUSE;



p>
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE [PROTECTION | AVAILABILITY];

q>
#Change the standby to mount and start apply
  alter database close;
  ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
  #realtime
  ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
  #Oracle Standard compatible
  RECOVER STANDBY DATABASE UNTIL CANCEL;

#Change the standby to read/only
  #this does not stop primary even if in MAXIMUM PROTECTION
  ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
  alter database open;
 
Switchover
p>
I recommend to switch in "MAXIMUM PROTECTION" before switching over
SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS
--------------------
TO STANDBY

ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
shutdown immediate;
startup mount; #startup nomount; alter database mount standby database;

q>
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

Failover
q>
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
ALTER DATABASE OPEN;
 
Manually align up to now the standby database
rman target sys/oracle@pro catalog pro/pro@rman auxiliary sys/oracle@prostdby

run {
  resync catalog;
  change archivelog all crosscheck;
  set until sequence $NEXT_SEQUENCE;
  allocate channel t1 type DISK format '/data03/oradata/MPD/DB1/ITADRT/backup/backup/%d_%s_%p_%U_ARCH';
  change archivelog all crosscheck;
  sql "alter system archive log current";
  backup as backupset filesperset 8 archivelog all delete input;
  release channel t1;
}

run {
  resync catalog;
  change archivelog all crosscheck;
  set until sequence $SEQUENCE;
  #the 'delete archivelog' deletes the archivelogs from standby site after apply
  recover standby clone database delete archivelog;
}

 

init.ora p (primary instance)
db_name=PRO
###########
# STANDBY #
###########
db_unique_name=PRO
log_archive_config='DG_CONFIG=(PRO,PROSTDBY)'
log_archive_dest_2='LOCATION=/opt/oracle/data/PRO/archive MANDATORY VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PRO'
log_archive_dest_state_1=enable
log_archive_dest_1='SERVICE=PROSTDBY LGWR SYNC AFFIRM REOPEN=5 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=PROSTDBY'
log_archive_dest_state_2=enable
log_archive_format=%t_%s_%r.arc
log_archive_max_processes=4
########################
# STANDBY WHEN STANDBY #
########################
fal_server=PROSTDBY
fal_client=PRO
db_file_name_convert='PROSTDBY','PRO'
log_file_name_convert='PROSTDBY','PRO'
standby_file_management=AUTO
 
###########################################
# Diagnostics and Statistics
###########################################
background_dump_dest=/opt/oracle/admin/PRO/bdump
core_dump_dest=/opt/oracle/admin/PRO/cdump
user_dump_dest=/opt/oracle/admin/PRO/udump
 
###########################################
# File Configuration
###########################################
control_files=("/opt/oracle/data/PRO/ctl/control01.ctl")
db_recovery_file_dest=/opt/oracle/data/PRO/recovery
db_recovery_file_dest_size=200M
 
###########################################
# Miscellaneous
###########################################
compatible=10.2.0.4.0
   
###########################################
# SGA Memory
###########################################
sga_target=300M
 
###########################################
# Security and Auditing
###########################################
remote_login_passwordfile=EXCLUSIVE
 
Init.ora q (standby instance)
db_name=PRO
###########
# STANDBY #
###########
db_unique_name=PROSTDBY
log_archive_config='DG_CONFIG=(PRO,PROSTDBY)'
log_archive_dest_2='LOCATION=/opt/oracle/data/PROSTDBY/archive MANDATORY VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PROSTDBY'
log_archive_dest_state_1=enable
log_archive_dest_1='SERVICE=PRO LGWR SYNC AFFIRM REOPEN=5 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=PRO'
log_archive_dest_state_2=enable
log_archive_format=%t_%s_%r.arc
log_archive_max_processes=4
########################
# STANDBY WHEN STANDBY #
########################
fal_server=PRO
fal_client=PROSTDBY
db_file_name_convert='PRO','PROSTDBY'
log_file_name_convert='PRO','PROSTDBY'
standby_file_management=AUTO
 
###########################################
# Diagnostics and Statistics
###########################################
background_dump_dest=/opt/oracle/admin/PROSTDBY/bdump
core_dump_dest=/opt/oracle/admin/PROSTDBY/cdump
user_dump_dest=/opt/oracle/admin/PROSTDBY/udump
 
###########################################
# File Configuration
###########################################
control_files=("/opt/oracle/data/PROSTDBY/ctl/control01.ctl")
db_recovery_file_dest=/opt/oracle/data/PROSTDBY/recovery
db_recovery_file_dest_size=200M
 
###########################################
# Miscellaneous
###########################################
compatible=10.2.0.4.0
 
###########################################
# SGA Memory
###########################################
sga_target=300M
 
###########################################
# Security and Auditing
###########################################
remote_login_passwordfile=EXCLUSIVE
  
###########################################
# System Managed Undo and Rollback Segments
###########################################
undo_management=AUTO
undo_tablespace=UNDOTBS1