官方參考:https://docs.oracle.com/cd/E11882_01/server.112/e40771/toc.htm
http://www.oracle.com/technetwork/cn/tutorials/smiley-fsfo-088047-zhs.html
環境概述:搭好Dataguard,搭建參考:https://blog.51cto.com/snowhill/1923591
源:db_name:db rac
備:db_name:sbdb1 單機html
1 啓用dgmgrl
相關參數:
dg_broker_start
dg_broker_config_file1sql
配置: alter system set dg_broker_start=true scope=both;
此時數據庫會增長dmon進程數據庫
[oracle@12crac2 ~]$ ps -ef|grep -i _dmon|grep -v grep oracle 2699 1 0 06:57 ? 00:00:01 ora_dmon_db1
對應log:$ORACLE_BASE/diag/rdbms/xxx/xxxx/drc$ORACLE_SID.log
但此時使用是用不了的,以下所示:bootstrap
DGMGRL> show configuration ORA-16532: Data Guard broker configuration does not exist
需手動配置添加:oracle
DGMGRL> help create DGMGRL> create configuration 'db' as primary database is db connect identifier is db; DGMGRL>help add DGMGRL>add database "SBDB1" as connect identifier is "sbdb1" maintained as physical; DGMGRL>enable configuration
注:add database 'SBDB1' ,這裏的dg是指database的dbuniquename,而as connect identifier is sbdb1這裏的sbdb1是指tnsname.ora鏈接到standby database的net service name.注意區分大小,默認爲小寫;
同時檢查alert_$ORACLE_SID.log日誌能夠看到:app
RSM0 started with pid=48, OS id=34551 ALTER SYSTEM SET log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST','valid_for=(ALL_LOGFILES, ALL_ROLES)' SCOPE=BOTH; ALTER SYSTEM SET log_archive_trace=0 SCOPE=BOTH SID='db1'; ALTER SYSTEM SET log_archive_format='%t_%s_%r.dbf' SCOPE=SPFILE SID='db1'; ALTER SYSTEM SET standby_file_management='AUTO' SCOPE=BOTH SID='*'; ALTER SYSTEM SET archive_lag_target=0 SCOPE=BOTH SID='*'; ALTER SYSTEM SET log_archive_max_processes=4 SCOPE=BOTH SID='*'; ALTER SYSTEM SET log_archive_min_succeed_dest=1 SCOPE=BOTH SID='*';
檢查drc$ORACLE_SID.log:異步
Creating Data Guard Broker Monitor Process (DMON) 04/03/2018 23:26:33 >> Starting Data Guard Broker bootstrap << Broker Configuration File Locations: dg_broker_config_file1 = "/u01/app/oracle/product/11.2.0/dbhome_1/dbs/dr1SBDB1.dat" dg_broker_config_file2 = "/u01/app/oracle/product/11.2.0/dbhome_1/dbs/dr2SBDB1.dat" 04/03/2018 23:26:38 Broker Configuration: "db" Protection Mode: Maximum Performance Fast-Start Failover (FSFO): Disabled, flags=0x0, version=0 Primary Database: db (0x01010000) Standby Database: SBDB1, Enabled Physical Standby (0x02010000)
全部配置完成,這玩意只能用在企業版
二 檢查配置:ide
DGMGRL> show database sbdb1 Object "sbdb1" was not found DGMGRL> show database SBDB1 Object "sbdb1" was not found
注意大小寫測試
DGMGRL> show database 'SBDB1' Database - SBDB1 Role: PHYSICAL STANDBY Intended State: APPLY-ON Transport Lag: 0 seconds (computed 0 seconds ago) Apply Lag: 0 seconds (computed 0 seconds ago) Apply Rate: 0 Byte/s Real Time Query: ON Instance(s): SBDB1 Database Status: SUCCESS
三 相關測試:snapshot standby,switchover
3.1不開database flashback on 測試:
不用dgmrl的方法參見:http://www.javashuo.com/article/p-uwixqqww-gp.htmlui
DGMGRL> convert database 'SBDB1' to snapshot standby; Converting database "SBDB1" to a Snapshot Standby database, please wait... Database "SBDB1" converted successfully
這裏從alert_sbdb1.log裏看,數據庫並無發生重啓,只是將會話殺掉了;
SQL> select open_mode, database_role, protection_mode,flashback_on from v$database; OPEN_MODE DATABASE_ROLE PROTECTION_MODE FLASHBACK_ON -------------------- ---------------- -------------------- ------------------ READ WRITE SNAPSHOT STANDBY MAXIMUM PERFORMANCE **RESTORE POINT ONLY** SQL> truncate table system.test; Table truncated. SQL> select count(*) from system.test; COUNT(*) ---------- 0 DGMGRL>convet database 'SBDB1' to physical standby; Unable to connect to database ORA-12545: Connect failed because target host or object does not exist Failed. Warning: You are no longer connected to ORACLE. Please complete the following steps and reissue the CONVERT command: shut down instance "SBDB1" of database "SBDB1" start up and mount instance "SBDB1" of database "SBDB1"
手動啓動備庫到mount狀態,後面的dgmgrl自動恢復到sbdb1,但在open過程當中常常會死在最後一步,相關日誌以下:
ALTER DATABASE CONVERT TO PHYSICAL STANDBY (SBDB1) Killing 3 processes with pids 3013,3017,3019 (all RFS) in order to disallow current and future RFS connections. Requested by OS process 3025 Flashback Restore Start Flashback Restore Complete Drop guaranteed restore point Guaranteed restore point dropped Clearing standby activation ID 1736364983 (0x677ed3b7) The primary database controlfile was created using the 'MAXLOGFILES 192' clause. There is space for up to 188 standby redo logfiles Use the following SQL commands on the standby database to create standby redo logfiles that match the primary database: ALTER DATABASE ADD STANDBY LOGFILE 'srl1.f' SIZE 52428800; ALTER DATABASE ADD STANDBY LOGFILE 'srl2.f' SIZE 52428800; ALTER DATABASE ADD STANDBY LOGFILE 'srl3.f' SIZE 52428800; ALTER DATABASE ADD STANDBY LOGFILE 'srl4.f' SIZE 52428800; ALTER DATABASE ADD STANDBY LOGFILE 'srl5.f' SIZE 52428800; Waiting for all non-current ORLs to be archived... All non-current ORLs have been archived. Clearing online redo logfile 1 /u01/app/oracle/oradata/SBDB1/SBDB1/onlinelog/o1_mf_1_fd4wmho5_.log Clearing online log 1 of thread 1 sequence number 3 Clearing online redo logfile 1 complete Clearing online redo logfile 2 /u01/app/oracle/oradata/SBDB1/SBDB1/onlinelog/o1_mf_2_fd4wmjq3_.log Clearing online log 2 of thread 1 sequence number 4 Clearing online redo logfile 2 complete Completed: alter database convert to physical standby Wed Apr 04 01:15:50 2018 Primary database is in MAXIMUM PERFORMANCE mode RFS[3]: Assigned to RFS process 3029 RFS[3]: Selected log 5 for thread 1 sequence 70 dbid 1729483220 branch 965667412 Wed Apr 04 01:16:11 2018 RFS[4]: Assigned to RFS process 3031 RFS[4]: Selected log 6 for thread 1 sequence 69 dbid 1729483220 branch 965667412 Wed Apr 04 01:16:11 2018 Expanded controlfile section 11 from 28 to 203 records Requested to grow by 175 records; added 7 blocks of records Archived Log entry 29 added for thread 1 sequence 69 ID 0x6715d4d4 dest 1: Wed Apr 04 01:16:13 2018 ARC2: Becoming the active heartbeat ARCH Wed Apr 04 01:17:13 2018 alter database open Data Guard Broker initializing...
最後一步會假死一下,不要緊,直接shutdown abort,再啓動,就能夠了;因爲dgmgrl的存在,他會自動補上命令,以下圖所示:
SQL> select open_mode, database_role, protection_mode,flashback_on from v$database; OPEN_MODE DATABASE_ROLE PROTECTION_MODE FLASHBACK_ON -------------------- ---------------- -------------------- ------------------ READ ONLY WITH APPLY PHYSICAL STANDBY MAXIMUM PERFORMANCE NO SQL> select count(*) from system.test; COUNT(*) ---------- 15386
爲啥會自動,檢查數據庫配置:
DGMGRL> show database verbose 'SBDB1'; Database - SBDB1 Role: PHYSICAL STANDBY Intended State: APPLY-ON Transport Lag: 0 seconds (computed 1 second ago) Apply Lag: 0 seconds (computed 1 second ago) Apply Rate: 0 Byte/s Real Time Query: ON
3.2 啓用Fast start failover
DGMGRL> enable fast_start failover Error: ORA-16651: requirements not met for enabling fast-start failover Failed. DGMGRL> exit [oracle@12crac2 ~]$ oerr ora 16651 16651, 0000, "requirements not met for enabling fast-start failover" // *Cause: The attempt to enable fast-start failover could not be completed // because one or more requirements were not met: // - The Data Guard configuration must be in either MaxAvailability // or MaxPerformance protection mode. // - The LogXptMode property for both the primary database and // the fast-start failover target standby database must be // set to SYNC if the configuration protection mode is set to // MaxAvailability mode. // - The LogXptMode property for both the primary database and // the fast-start failover target standby database must be // set to ASYNC if the configuration protection mode is set to // MaxPerformance mode. // - The primary database and the fast-start failover target standby // database must both have flashback enabled. // - No valid target standby database was specified in the primary // database FastStartFailoverTarget property prior to the attempt // to enable fast-start failover, and more than one standby // database exists in the Data Guard configuration.
簡單點來講就是:
1確保broker配置爲運行在Max Availability模式。
2在primary和standby機器上都啓用flashback database,這個在reinstate failed的數據庫的時候要用。
3啓動observer
啓用database flashback 再次enable:
DGMGRL> enable fast_start failover Enabled. DGMGRL> show configuration Configuration - db Protection Mode: MaxAvailability Databases: db - Primary database Warning: ORA-16819: fast-start failover observer not started SBDB1 - (*) Physical standby database Warning: ORA-16819: fast-start failover observer not started Fast-Start Failover: ENABLED Configuration Status: WARNING
[oracle@12crac2 ~]$ oerr ora 16819 16819, 0000, "fast-start failover observer not started" // *Cause: The observer for fast-start failover was not started. As a // result, fast-start failover could not happen in the case of // a primary database failure. // *Action: Start the fast-start failover observer by using, for example, the // DGMGRL START OBSERVER command.
啓動observer:
DGMGRL> start observer Observer started
再次查看配置:
DGMGRL> show configuration Configuration - db Protection Mode: MaxAvailability Databases: db - Primary database SBDB1 - (*) Physical standby database Fast-Start Failover: ENABLED Configuration Status: SUCCESS
3.3 switchover
手工switchover 步驟:http://www.javashuo.com/article/p-yjifawos-gs.html
如今更簡化下,用dgmgrl只需一個命令:SWITCHOVER TO <standby database name>;
DGMGRL> switchover to 'SBDB1'; Performing switchover NOW, please wait... Operation requires a connection to instance "SBDB1" on database "SBDB1" Connecting to instance "SBDB1"... Connected. New primary database "SBDB1" is opening... Operation requires startup of instance "db1" on database "db" Starting instance "db1"... Unable to connect to database ORA-12514: TNS:listener does not currently know of service requested in connect descriptor Failed. Warning: You are no longer connected to ORACLE. Please complete the following steps to finish switchover: start up instance "db1" of database "db"
這個failed不用擔憂,手動啓動一下原主庫就能夠完成切換了;
切換完了,檢查下:
DGMGRL> show configuration Configuration - db Protection Mode: MaxAvailability Databases: SBDB1 - Primary database db - (*) Physical standby database Fast-Start Failover: ENABLED Configuration Status: SUCCESS
再切回來:
DGMGRL> switchover to db Performing switchover NOW, please wait... Operation requires a connection to instance "db1" on database "db" Connecting to instance "db1"... Connected. New primary database "db" is opening... Operation requires startup of instance "SBDB1" on database "SBDB1" Starting instance "SBDB1"...
如還有啥疑問看官方參考:https://docs.oracle.com/cd/E11882_01/server.112/e40771/sofo.htm#DGBKR385
四 dgmgrl 調整參數:
4.1調整應用延遲edit database 'SBDB1' set property DelayMins=1 ;
其實就是以下命令:
ALTER SYSTEM SET log_archive_dest_2='service="sbdb1"','LGWR ASYNC NOAFFIRM delay=1 optional compression=disable max_failure=0 max_connections=1 reopen=300 db_unique_name="SBDB1" net_timeout=30','valid_for=(all_logfiles,primary_role)' SCOPE=BOTH; ALTER SYSTEM SWITCH ALL LOGFILE start (db1) ALTER SYSTEM SWITCH ALL LOGFILE complete (db1)
4.2調整異步同步模式edit database 'SBDB1' set property LogXptMode=sync;
對應的命令以下:ALTER SYSTEM SET log_archive_dest_2='service="sbdb1"','LGWR SYNC AFFIRM delay=1 optional compression=disable max_failure=0 max_connections=1 reopen=300 db_unique_name="SBDB1" net_timeout=30','valid_for=(all_logfiles,primary_role)' SCOPE=BOTH;
固然全部能用broker配置的參數,不要用sqlplus來幹;
五 相關報錯處理
broker錯誤通常爲大小寫不一致,數據庫配置和broker配置不一致引發,啓用broker後,dataguard相關的配置都最好用broker管理;
5.1 ora-16541
DGMGRL> show configuration ORA-16541: database is not enabled
此錯誤出現一個節點,通常是因爲配置不一致引發
[oracle@12crac1 dbs]$ oerr ora 16541 16541, 00000, "database is not enabled" // *Cause: The database specified in the request was not enabled. // *Action: Select an enabled database and reissue the request.
再另外一個節點上查看,通常報的錯不同
DGMGRL> show configuration Configuration - db Protection Mode: MaxAvailability Databases: db - Primary database Warning: ORA-16792: configurable property value is inconsistent with database setting SBDB1 - Physical standby database Warning: ORA-16792: configurable property value is inconsistent with database setting Fast-Start Failover: DISABLED
此錯誤爲參數與dgmgrl 裏的不一致引發,檢查啓用dg broker以後的配置,發現更改改了log_file_name_convert,db_file_name_convert引發,在另外一個節點作以下配置就能夠了
DGMGRL> edit database db set property LogFileNameConvert='/u01/app/oracle/oradata/SBDB1/,+data'; Property "logfilenameconvert" updated DGMGRL> edit database db set property DbFileNameConvert='/u01/app/oracle/oradata/SBDB1/,+data'; Property "dbfilenameconvert" updated DGMGRL> edit database 'SBDB1' set property DbFileNameConvert='+data,/u01/app/oracle/oradata/SBDB1/'; Property "dbfilenameconvert" updated DGMGRL> edit database 'SBDB1' set property LogFileNameConvert='+data,/u01/app/oracle/oradata/SBDB1/'; Property "logfilenameconvert" updated DGMGRL> enable configuration DGMGRL> show configuration Configuration - db Protection Mode: MaxAvailability Databases: db - Primary database SBDB1 - Physical standby database Fast-Start Failover: DISABLED Configuration Status: SUCCESS
5.2 ora-16820
DGMGRL> show configuration
Configuration - db
Protection Mode: MaxAvailability
Databases:
SBDB1 - Primary database
Error: ORA-16820: fast-start failover observer is no longer observing this database
db - (*) Physical standby database
Error: ORA-16820: fast-start failover observer is no longer observing this database
Fast-Start Failover: ENABLED
Configuration Status:
ERROR
此錯誤比較扯淡,stop observer,start observer就能夠了;
5.3 ora-16661
啓用fast failover後,非正常關閉兩個節點,再次啓動數據庫,通常會出現兩個節點都是primary 的狀況,這時啓動dgmgrl會報:
DGMGRL> show configuration
Configuration - db
Protection Mode: MaxAvailability
Databases:
SBDB1 - Primary database
Error: ORA-16820: fast-start failover observer is no longer observing this database
db - (*) Physical standby database (disabled)
ORA-16661: the standby database needs to be reinstated
Fast-Start Failover: ENABLEDConfiguration Status:
ERROR
而另一節點報錯以下:
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-16649: possible failover to another database prevents this database from
being opened
檢查數據庫狀態也不怎麼對:
SQL> select database_role,FLASHBACK_ON from v$database;DATABASE_ROLE FLASHBACK_ON
PRIMARY YES
DGMGRL> show configuration
ORA-16795: the standby database needs to be re-created
看到此錯誤也別真去recreated standby,在確認你的配置上沒有問題後,直接在另一個節點:
DGMGRL> reinstate database db
Reinstating database "db", please wait...
Reinstatement of database "db" succeeded
這時後啓動的節點會變成physical standby,再次stop observer,start observer就能夠了;
5.4 Error: ORA-16525: the Data Guard broker is not yet available
主庫或者備的庫的db_broker_start參數設置不對;
5.5 ORA-16797: database is not using a server parameter file
沒用spfile啓動數據庫
5.6 ora-16610 主庫或者備庫的dg_broker_config_file_1/2參數設置不對
DGMGRL> show configuration Configuration - 1 Protection Mode: MaxPerformance Databases: prod2 - Primary database standby - Physical standby database Fast-Start Failover: DISABLED Configuration Status: ORA-16610: command "Broker operation" in progress DGM-17017: unable to determine configuration status
查看drcstandby.log
drcx: cannot open configuration file "/home/oracle/broker/standby2.data" ORA-27037: unable to obtain file status Linux-x86_64 Error: 2: No such file or directory Additional information: 3 08/02/2018 10:52:38 drcx: cannot open configuration file "/home/oracle/broker/standby1.dat" ORA-27037: unable to obtain file status Linux-x86_64 Error: 2: No such file or directory Additional information: 3 DMON Registering service standby_DGB with listener(s) 08/02/2018 10:52:41
解決辦法:
dgmgrl>disable configuration; sql>alter system set dg_broker_start=false; sys@standby>alter system set dg_broker_config_file1='/home/oracle/broker/standby1.dat'; sys@standby>alter system set dg_broker_config_file2='/home/oracle/broker/standby2.dat'; DGMGRL> enable configuration DGMGRL> show configuration Configuration - 1 Protection Mode: MaxPerformance Databases: prod2 - Primary database standby - Physical standby database Fast-Start Failover: DISABLED Configuration Status: SUCCESS