dba:oracle:docs:dataguard_mini-howto
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | Last revisionBoth sides next revision | ||
dba:oracle:dataguard_mini-howto [2022/02/11 11:12] – ↷ Page moved from oracle:dataguard_mini-howto to dba:oracle:dataguard_mini-howto dodger | dba:oracle:docs:dataguard_mini-howto [2023/01/31 08:22] – removed - external edit (Unknown date) 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== [DOC] Summary of Dataguard creation ====== | ||
- | ===== creation ===== | ||
- | * create the db (i mean, the master one) | ||
- | * modify tnsnames.ora | ||
- | <code sql> | ||
- | CIBERDB = | ||
- | (DESCRIPTION = | ||
- | (ADDRESS_LIST = | ||
- | (ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1521)) | ||
- | ) | ||
- | (CONNECT_DATA = | ||
- | (SERVICE_NAME = CIBERDB) | ||
- | ) | ||
- | ) | ||
- | |||
- | CIBERSTB = | ||
- | (DESCRIPTION = | ||
- | (ADDRESS_LIST = | ||
- | (ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1521)) | ||
- | ) | ||
- | (CONNECT_DATA = | ||
- | (SERVICE_NAME = CIBERSTB) | ||
- | ) | ||
- | ) | ||
- | </ | ||
- | * replace the orapw (as ORACLE) | ||
- | <code sql> | ||
- | / | ||
- | mv -fv / | ||
- | cp -pfv / | ||
- | </ | ||
- | * broadcast the orapw file (as root): | ||
- | <code sql> | ||
- | rsync -av / | ||
- | </ | ||
- | * enable archiving | ||
- | <code sql> | ||
- | shutdown immediate ; | ||
- | startup mount; | ||
- | alter database archivelog; | ||
- | ALTER DATABASE FORCE LOGGING; | ||
- | alter database open ; | ||
- | </ | ||
- | * create the stby redos: | ||
- | <code SQL> | ||
- | ALTER DATABASE ADD STANDBY LOGFILE (' | ||
- | ALTER DATABASE ADD STANDBY LOGFILE (' | ||
- | ALTER DATABASE ADD STANDBY LOGFILE (' | ||
- | ALTER DATABASE ADD STANDBY LOGFILE (' | ||
- | </ | ||
- | * change multiple params for data guard: | ||
- | <code SQL> | ||
- | ALTER SYSTEM SET remote_login_passwordfile = SHARED scope=spfile; | ||
- | ALTER SYSTEM SET LOG_ARCHIVE_CONFIG=' | ||
- | ALTER SYSTEM SET log_archive_dest_1=' | ||
- | ALTER SYSTEM SET log_archive_dest_2=' | ||
- | ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE scope=spfile | ||
- | ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=spfile | ||
- | alter system set FAL_SERVER=CIBERSTB Scope=BOTH; | ||
- | alter system set FAL_CLIENT=CIBERDB SCOPE=BOTH; | ||
- | ALTER SYSTEM | ||
- | ALTER SYSTEM | ||
- | </ | ||
- | * rman it | ||
- | <code SQL> | ||
- | rman target / | ||
- | run { | ||
- | ALLOCATE CHANNEL ch1 DEVICE TYPE DISK MAXPIECESIZE = 16G; | ||
- | crosscheck archivelog all; | ||
- | delete force noprompt expired archivelog all; | ||
- | backup full as backupset filesperset 64 | ||
- | database format '/ | ||
- | plus archivelog format '/ | ||
- | sql " | ||
- | sql "alter database backup controlfile to trace as ''/ | ||
- | } | ||
- | </ | ||
- | * restart in mount the DB | ||
- | <code SQL> | ||
- | shutdown immediate ; | ||
- | startup mount ; | ||
- | </ | ||
- | * add the stby to oratab in node2: | ||
- | <code SQL> | ||
- | CIBERSTB:/ | ||
- | </ | ||
- | * Transfer the backup to node2 | ||
- | * modify the init.ora (take care with that): | ||
- | <code SQL> | ||
- | cd / | ||
- | cat initCIBERDB.ora | egrep -v " | ||
- | cat >> initCIBERSTB.ora <<EOF | ||
- | *.db_create_file_dest=' | ||
- | *.db_file_name_convert=' | ||
- | *.db_unique_name=' | ||
- | *.db_recovery_file_dest=' | ||
- | *.fal_client=' | ||
- | *.fal_server=' | ||
- | *.log_archive_config=' | ||
- | *.log_archive_dest_1=' | ||
- | *.log_file_name_convert=' | ||
- | *.log_archive_dest_2=' | ||
- | EOF | ||
- | </ | ||
- | * Startup de stby: | ||
- | <code sql> | ||
- | startup nomount pfile=/ | ||
- | </ | ||
- | * Copy the spfile to the correct location | ||
- | <code sql> | ||
- | cp / | ||
- | </ | ||
- | * Create spfile | ||
- | <code sql> | ||
- | Create spfile from pfile; | ||
- | </ | ||
- | * Rman in the STBY: | ||
- | <code sql> | ||
- | rman auxiliary / target sys/ | ||
- | DUPLICATE TARGET DATABASE FOR STANDBY; | ||
- | </ | ||
- | * Query de stby status: | ||
- | <code sql> | ||
- | Select DATABASE_ROLE FROM V$DATABASE ; | ||
- | </ | ||
- | * Start the redo receiver: | ||
- | <code sql> | ||
- | ALTER DATABASE RECOVER MANAGED STANDBY DATABASE disconnect from session; | ||
- | </ | ||
- | * Open the primary: | ||
- | <code sql> | ||
- | alter database open; | ||
- | Alter system switch logfile; | ||
- | </ | ||
- | * Query the primary status (must be valid): | ||
- | <code sql> | ||
- | Select Status, Error from v$Archive_dest where dest_id=2; | ||
- | </ | ||
- | * Query the apply status on the stby: | ||
- | <code sql> | ||
- | SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY; | ||
- | SELECT SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE# ; | ||
- | </ | ||
- | |||
- | |||
- | ===== switchover to standby ===== | ||
- | * On the Primary: | ||
- | <code sql> | ||
- | Alter Database Commit to Switchover to Physical Standby with session Shutdown; | ||
- | shutdown immediate ; | ||
- | startup mount ; | ||
- | </ | ||
- | * Check the status of the db (the old primary): | ||
- | <code sql> | ||
- | Select Database_role from v$database; | ||
- | </ | ||
- | * And start the MRP process: | ||
- | <code sql> | ||
- | Alter Database Recover Managed Standby Database Disconnect; | ||
- | </ | ||
- | * On the STBY HOST (the new primary) stop the MRP: | ||
- | <code sql> | ||
- | Alter database Recover Managed Standby Database Cancel; | ||
- | </ | ||
- | * AND change the role: | ||
- | <code sql> | ||
- | Alter Database Commit to Switchover to PRIMARY with session Shutdown; | ||
- | </ | ||
- | * check it: | ||
- | <code sql> | ||
- | Select Database_role from v$Database; | ||
- | </ | ||
- | |||
- | |||
- | QUERY FOR CONTROL_FILES TO ASSURE THE CORRECT ONE'S ARE WORKING!!! | ||
- | |||
- | * Restart the new primary: | ||
- | <code sql> | ||
- | shutdown immediate ; | ||
- | startup; | ||
- | </ | ||
- | * CHECK status | ||
- | <code sql> | ||
- | Select Database_role from v$Database; | ||
- | Select Status, Error from v$Archive_dest where dest_id=2; | ||
- | SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY; | ||
- | SELECT SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE# ; | ||
- | </ | ||
- | |||
- | |||
- | * It's possible that you need to alter the control files, in that case, you must query asmcmd for the actual ones. | ||
- | <code sql> | ||
- | ALTER SYSTEM SET CONTROL_FILES=' | ||
- | </ | ||
- | |||
- | * Make the standby create by their own the datafiles: | ||
- | <code sql> | ||
- | ALTER SYSTEM SET standby_file_management=AUTO | ||
- | </ | ||
- | |||
- | ===== Setting up DataGuard Broker ===== | ||
- | * Query the status: | ||
- | <code sql> | ||
- | show parameter broker ; | ||
- | </ | ||
- | * Start it | ||
- | <code sql> | ||
- | alter system set dg_broker_start=true scope=both; | ||
- | </ | ||
- | * watch alert to see the startup process | ||
- | * start the CLI | ||
- | <code sql> | ||
- | dgmgrl ' | ||
- | </ | ||
- | * create the configuration: | ||
- | <code sql> | ||
- | create configuration ' | ||
- | </ | ||
- | * Add the standby: | ||
- | <code sql> | ||
- | add database ' | ||
- | </ | ||
- | * Review the the config: | ||
- | <code sql> | ||
- | show configuration; | ||
- | </ | ||
- | * Enable the config: | ||
- | <code sql> | ||
- | enable configuration; | ||
- | </ | ||
- | * Perform a swithover: | ||
- | <code sql> | ||
- | switchover to ' | ||
- | show database verbose ' | ||
- | </ | ||
- | |||
- | ===== From Physical Standby to Snapshot ===== | ||
- | In the Stby, of course: | ||
- | <code sql> | ||
- | Alter database Recover Managed Standby Database Cancel; | ||
- | </ | ||
- | Ensure that the database is mounted, but not open. | ||
- | <code sql> | ||
- | ALTER DATABASE CONVERT TO SNAPSHOT STANDBY; | ||
- | </ | ||
- | |||
- | ===== From Snapshot to Physical Standby ===== | ||
- | |||
- | |||
- | |||
- | |||
- | ====== Status Querys ====== | ||
- | |||
- | ===== ROLE of the connected DB ===== | ||
- | <code sql> | ||
- | ===== Status of the REDO shipping to STBY ===== | ||
- | Maybe there are more than 1 stby database, so '' | ||
- | <code sql> | ||
- | |||
- | ===== Determine the most recently archived redo log file ===== | ||
- | <code sql> | ||
- | SELECT MAX(SEQUENCE# | ||
- | </ | ||
- | |||
- | |||
- | ===== List of archived_log ordered ===== | ||
- | <code sql> | ||
- | SELECT SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE# ; | ||
- | </ | ||
- | ===== Determine the most recently archived redo log file at each redo transport destination ===== | ||
- | <code sql> | ||
- | COL DESTINATION FORMAT A30 ; | ||
- | SELECT DESTINATION, | ||
- | FROM V$ARCHIVE_DEST_STATUS - | ||
- | WHERE STATUS <> ' | ||
- | </ | ||
- | ===== DataGuard STATS ===== | ||
- | on the slave | ||
- | <code sql> | ||
- | col SOURCE_DB_UNIQUE_NAME format a15 | ||
- | col unit format a30 | ||
- | col TIME_COMPUTED format a30 | ||
- | col DATUM_TIME format a30 | ||
- | col VALUE FORMAT A18; | ||
- | SELECT * FROM V$DATAGUARD_STATS ; | ||
- | </ | ||
- | ===== DataGuard LOG ===== | ||
- | on any node | ||
- | <code sql> | ||
- | COL FACILITY FORMAT A40; | ||
- | COL SEVERITY FORMAT A30; | ||
- | COL MESSAGE FORMAT A120; | ||
- | SELECT * FROM V$DATAGUARD_STATUS ; | ||
- | </ | ||
- | |||
- | |||
- | ===== Standby Apply process status ===== | ||
- | <code sql> | ||
- | COL PID format A10; | ||
- | COL CLIENT_PID FORMAT A10 ; | ||
- | COL CLIENT_DBID | ||
- | COL GROUP# FORMAT A12 ; | ||
- | select * from V$MANAGED_STANDBY ; | ||
- | </ | ||
- | |||
- | ===== Log History ===== | ||
- | <code sql> | ||
- | SELECT THREAD#, SEQUENCE#, first_time, FIRST_CHANGE#, | ||
- | </ |
dba/oracle/docs/dataguard_mini-howto.txt · Last modified: 2023/01/31 08:22 by dodger