oracle 11g dataguard之dgmgrl
源:db_name:db rac
備:db_name:sbdb1 單機
1 啟用dgmgrl
相關參數:
dg_broker_start
dg_broker_config_file1
配置: 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
但此時使用
DGMGRL> show configuration ORA-16532: Data Guard broker configuration does not exist 需配置: 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的db_unique_name,而as connect identifier is sbdb1這裏的sbdb1是指tnsname.ora連接到standby database的net service name.
註意區分大小,默認為小寫;
檢查alert_$ORACLE_SID.log日誌可以看到:
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)
二 檢查配置:
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 測試
不用dgmrl的方法參見:http://blog.51cto.com/snowhill/2047857
DGMGRL> convert database ‘SBDB1‘ to snapshot standby;
Converting database "SBDB1" to a Snapshot Standby database, please wait...
Database "SBDB1" converted successfully
這裏從alert_sbdb1.log裏看,數據庫並沒有發生重啟,只是將會話殺掉了;
3.1不開database flashback on 測試:
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
四 dgmgrl 調整參數:
4.1調整應用延遲DGMGRL> 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)
DGMGRL> edit database ‘SBDB1‘ set property LogXptMode=sync;
4.2調整異步同步模式DGMGRL> 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;
oracle 11g dataguard之dgmgrl