VirtualBox ========== create VM machine with oracle software 11gR2 clone VM disk and create new machine with "use existing disk" C:\VMBOX_HOME>VBoxMAnage.exe clonehd D:\virtual\disk\DG11gR2_01.vdi D:\virtual\disk\DG11gR2_02.vdi network/manual TCP IP -- VM Bridge Networking --------------------------------------------- 10.200.0.1 (Microsoft loopback adapter both VMs shares Bridge mode) C:\WINDOWS\system32\drivers\etc 127.0.0.1 localhost 10.200.0.10 prague.host 10.200.0.20 berlin.host Don't forget change hostname in your OS (Zmena identifikace v siti) SQLNET ------- netca ::add listener, tnsl ocal method, netservice name entries --- TNSNAMES.ORA --- NETSERVICE_PRAGUE = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = prague.host)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = DB_IN_PRAGUE) ) ) NETSERVICE_BERLIN = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = berlin.host)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = DB_IN_BERLIN) ) ) ::test tnsping NETSERVICE_PRAGUE tnsping NETSERVICE_BERLIN sqlplus system@NETSERVICE_PRAGUE DB CREATION ----------- -- prague.host C:\prague\oradata C:\prague\arch_1 C:\prague\arch_2 -- berlin.host FS C:\berlin\oradata C:\berlin\arch_1 C:\berlin\arch_2 dbca GLOBAL_DATABSE_NAME && SID=MYDB Data Guard::PRIMARY DB ================================================================================ ALTER DATABASE FORCE LOGGING; CREATE PFILE='C:\init.ora' FROM SPFILE; ### ### INIT.ORA::PRAGUE::PRIMARY-ROLE ---- DB_NAME=MYDB DB_UNIQUE_NAME=DB_IN_PRAGUE LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB_IN_PRAGUE,DB_IN_BERLIN)' LOG_ARCHIVE_DEST_1='LOCATION=C:\prague\arch_1\ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DB_IN_PRAGUE' # disable LOG_ARCHIVE_DEST_2.. standby doesnt exists at the moment, we will enable this later # log_archive_dest_2='SERVICE=NETSERVICE_BERLIN ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB_IN_BERLIN' LOG_ARCHIVE_DEST_STATE_1=ENABLE LOG_ARCHIVE_DEST_STATE_2=ENABLE REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE LOG_ARCHIVE_FORMAT=%t_%s_%r.arc LOG_ARCHIVE_MAX_PROCESSES=30 #### #### INIT.ORA::PRAGUE::STANDBY-ROLE FAL_SERVER=NETSERVICE_BELIN DB_FILE_NAME_CONVERT='berlin','prague' LOG_FILE_NAME_CONVERT='C:\berlin\oradata\','C:\prague\oradata\','C:\berlin\arch_1\','C:\prague\arch_1\','C:\berlin\arch_2\','C:\prague\arch_2\' STANDBY_FILE_MANAGEMENT=AUTO SHUTDOWN IMMEDIATE STARTUP PFILE='C:\init.ora' MOUNT ALTER DATABASE ARCHIVELOG ALTER DATABASE OPEN ALTER SYSTEM SWITCH LOGFILE Redo transport doesnt work when COMPATIBLE parameter differs Ensure the COMPATIBLE initialization parameter is set to the same value on both the primary and standby databases. If the values differ, redo transport services may be unable to transmit redo data from the primary database to the standby databases. In a Data Guard configuration, COMPATIBLE must be set to a minimum of 9.2.0.1.0. However, if you want to take advantage of new Oracle Database 11g features, set the COMPATIBLE parameter to 11.0.0. Data Guard::STANDBY DB ================================================================================ standby instance ---------------- create password file C:\app\oracle\product\11.2.0\dbhome_1\database>orapwd file=PWDMYDB.ORA entries=10 instance parameter file ### ### INIT.ORA::BERLIN::PRIMARY-ROLE ---- DB_NAME=MYDB DB_UNIQUE_NAME=DB_IN_BERLIN LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB_IN_PRAGUE,DB_IN_BERLIN)' LOG_ARCHIVE_DEST_1='LOCATION=C:\berlin\arch_1 VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DB_IN_BERLIN' LOG_ARCHIVE_DEST_2='SERVICE=NETSERVICE_PRAGUE ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB_IN_PRAGUE' LOG_ARCHIVE_DEST_STATE_1=ENABLE LOG_ARCHIVE_DEST_STATE_2=ENABLE REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE LOG_ARCHIVE_FORMAT=%t_%s_%r.arc LOG_ARCHIVE_MAX_PROCESSES=30 #### #### INIT.ORA::BERLIN::STANDBY-ROLE FAL_SERVER=NETSERVICE_PRAGUE DB_FILE_NAME_CONVERT='prague','berlin' *.LOG_FILE_NAME_CONVERT='C:\prague\oradata','C:\berlin\oradata\','C:\prague\arch_1','C:\berlin\arch_1\','C:\prague\arch_2','C:\berlin\arch_2' STANDBY_FILE_MANAGEMENT=AUTO * on windows create win service by oradim oradim -NEW -SID mydb static listener registration with OH and SID (netmanager => listener.ora) # GLOBAL_DBNAME value from the SERVICE_NAMES parameter in the initialization parameter file SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = DB_IN_BERLIN) (ORACLE_HOME = C:\app\oracle\product\11.2.0\dbhome_1) (SID_NAME = MYDB) ) (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = C:\app\oracle\product\11.2.0\dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll") ) ) lsnrctl reload ::test sqlplus SYS@NETSERVICE_BERLIN AS SYSDBA RMAN duplicate database for standby z FRA ========================================= na primaru rman> backup database; rman> backup archivelog all; rman> croscheck backup; rman> backup current controlfile for standby copy backups to standby (disk type backups) rman rman> connect target / rman> connect auxiliary SYS@NETSERVICE_BERLIN rman> DUPLICATE TARGET DATABASE FOR STANDBY NOFILENAMECHECK DORECOVER; STANDBY REDO LOG ================ ALTER DATABASE ADD STANDBY LOGFILE ('C:\berlin\oradata\MYDB\standby_redo01.log') SIZE 50M; ALTER DATABASE ADD STANDBY LOGFILE ('C:\berlin\oradata\MYDB\standby_redo02.log') SIZE 50M; ALTER DATABASE ADD STANDBY LOGFILE ('C:\berlin\oradata\MYDB\standby_redo03.log') SIZE 50M; SELECT GROUP#, BYTES FROM V$STANDBY_LOG; create spfile from pfile='c:\pfile.ora' ON primary enable back ====================== alter system set log_archive_dest_2='SERVICE=NETSERVICE_BERLIN ASYNC VALID_FOR=(ONLINE_LOGFILE,PRIMARY_ROLE) DB_UNIQUE_NAME=DB_IN_BERLIN'; Start REDO APPLY ================ --ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION; select process, client_process, sequence# from v$managed_standby; SELECT DESTINATION, STATUS, ARCHIVED_THREAD#, ARCHIVED_SEQ# - FROM V$ARCHIVE_DEST_STATUS - WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE'; DESTINATION STATUS ARCHIVED_THREAD# ARCHIVED_SEQ# ------------------ ------ ---------------- ------------- /private1/prmy/lad VALID 1 947 standby1 VALID 1 947 APENDIX ======== The following messages comes from the alert.log file: Redo shipping client performing standby login OCISessionBegin failed -1 .. Detailed OCI error val is 1034 and errmsg is 'ORA-01034: ORACLE not available ' *** 2008-07-06 20:30:58.468 60679 kcrr.c Error 1034 received logging on to the standby Error 1034 connecting to destination LOG_ARCHIVE_DEST_2 standby host 'stdby10g' Error 1034 attaching to destination LOG_ARCHIVE_DEST_2 standby host 'stdby10g' ORA-01034: ORACLE not available *** 2008-07-06 20:30:58.469 60679 kcrr.c PING[ARCp]: Heartbeat failed to connect to standby 'stdby10g'. Error is 1034. *** 2008-07-06 20:30:58.469 58941 kcrr.c kcrrfail: dest:2 err:1034 force:0 blast:1 kcrrwkx: nothing to do (end) *** 2008-07-06 20:31:58.468 kcrrwkx: nothing to do (end) Redo shipping client performing standby login OCISessionBegin failed -1 .. Detailed OCI error val is 1031 and errmsg is 'ORA-01031: insufficient privileges ....... The error come from the incrrect name of the orapwSID file. When I copy it from the primary to the standby, I name it to "orapwSID.ora", not "orapwSID". PRAGUE INIT.ora =============== mydb.__db_cache_size=121634816 mydb.__java_pool_size=4194304 mydb.__large_pool_size=4194304 mydb.__oracle_base='C:\app\oracle'#ORACLE_BASE set from environment mydb.__pga_aggregate_target=180355072 mydb.__sga_target=251658240 mydb.__shared_io_pool_size=0 mydb.__shared_pool_size=113246208 mydb.__streams_pool_size=0 *.audit_file_dest='C:\app\oracle\admin\MYDB\adump' *.audit_trail='db' *.compatible='11.2.0.0.0' *.control_files='C:\prague\oradata\MYDB\control01.ctl','C:\prague\oradata\MYDB\control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_file_name_convert='berlin','prague' *.db_name='MYDB' *.db_unique_name='DB_IN_PRAGUE' *.diagnostic_dest='C:\app\oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=MYDBXDB)' *.fal_server='NETSERVICE_BERLIN' *.log_archive_config='DG_CONFIG=(DB_IN_PRAGUE,DB_IN_BERLIN)' *.log_archive_dest_1='LOCATION=C:\prague\arch_1\ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DB_IN_PRAGUE' *.log_archive_dest_2='SERVICE=NETSERVICE_BERLIN ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB_IN_BERLIN' *.log_archive_format='%t_%s_%r.arc' *.log_file_name_convert='C:\berlin\oradata\','C:\prague\oradata\','C:\berlin\arch_1\','C:\prague\arch_1\','C:\berlin\arch_2\','C:\prague\arch_2\' *.memory_target=428867584 *.open_cursors=300 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.standby_file_management='AUTO' *.undo_tablespace='UNDOTBS1' BERLIN INIT.ora =============== mydb.__db_cache_size=121634816 mydb.__java_pool_size=4194304 mydb.__large_pool_size=4194304 mydb.__oracle_base='C:\app\oracle'#ORACLE_BASE set from environment mydb.__pga_aggregate_target=180355072 mydb.__sga_target=251658240 mydb.__shared_io_pool_size=0 mydb.__shared_pool_size=113246208 mydb.__streams_pool_size=0 *.audit_file_dest='C:\app\oracle\admin\MYDB\adump' *.audit_trail='db' *.compatible='11.2.0.0.0' *.control_files='C:\prague\oradata\MYDB\control01.ctl','C:\prague\oradata\MYDB\control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_file_name_convert='berlin','prague' *.db_name='MYDB' *.db_unique_name='DB_IN_PRAGUE' *.diagnostic_dest='C:\app\oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=MYDBXDB)' *.fal_server='NETSERVICE_BERLIN' *.log_archive_config='DG_CONFIG=(DB_IN_PRAGUE,DB_IN_BERLIN)' *.log_archive_dest_1='LOCATION=C:\prague\arch_1\ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DB_IN_PRAGUE' *.log_archive_dest_2='SERVICE=NETSERVICE_BERLIN ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB_IN_BERLIN' *.log_archive_format='%t_%s_%r.arc' *.log_file_name_convert='C:\berlin\oradata\','C:\prague\oradata\','C:\berlin\arch_1\','C:\prague\arch_1\','C:\berlin\arch_2\','C:\prague\arch_2\' *.memory_target=428867584 *.open_cursors=300 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.standby_file_management='AUTO' *.undo_tablespace='UNDOTBS1'