目錄
某現場生產環境下prov庫經常發生歸檔日誌滿,導致業務中斷的情況。現場找過來後覈查,在清理歸檔的時候檢查dg環境發現該庫沒有搭建dg環境。跟現場確認,該庫需要搭建dg環境。故整理該文檔,用於prov庫的dg搭建。
2.1、檢查主備掛載點
2.1.1、主站點
provexppool/provexp 16T 3.8T 12T 25% /provexp
provexppool 20T 36K 16T 1% /provexppool
provdata02pool/provdata 6.0T 64G 5.9T 2% /provdata02
provredopool/provredo 200G 12G 188G 7% /provredo
provdata02pool 7.3T 31K 7.3T 1% /provdata02pool
provredopool 245G 31K 233G 1% /provredopool
provdata01pool/provdata 6.0T 239G 5.8T 4% /provdata01
provdata01pool 7.3T 31K 7.1T 1% /provdata01pool
provarchpool/provarch 600G 67G 533G 12% /provarch
provarchpool 733G 31K 667G 1% /provarchpool
2.1.2、容災站點
provexppool/provexp 16T 902M 16T 1% /provexp
provdata02pool 7.3T 31K 7.3T 1% /provdata02pool
provdata01pool/provdata01 6.0T 72G 5.9T 2% /provdata01
provarchpool/provarch 600G 31K 600G 1% /provarch
provredopool/provredo 200G 3.0G 197G 2% /provredo
provexppool 20T 31K 20T 1% /provexppool
provdata01pool 7.3T 31K 7.3T 1% /provdata01pool
provredopool 245G 31K 242G 1% /provredopool
provarchpool 733G 31K 733G 1% /provarchpool
provdata01pool/provdata02 6.0T 20M 6.0T 1% /provdata02
2.1.3、結論
主站點和容災站點prov庫的掛載點完全一致。
2.2、主容站點數據文件位置
2.2.1、主站點
SQL> select file_name,TABLESPACE_NAME from dba_data_files ;
FILE_NAME TABLESPACE_NAME
---------------------------------------- ------------------------------
/provdata01/prov/system01.dbf SYSTEM
/provdata01/prov/sysaux01.dbf SYSAUX
/provdata01/prov/undotbs01.dbf UNDOTBS1
/provdata01/prov/users01.dbf USERS
/provdata01/prov/oss_index00.dbf OSS_INDEX
/provdata01/prov/oss_data00.dbf OSS_DATA
/provdata02/prov/oss_archive00.dbf OSS_ARCHIVE
/provdata02/prov/idx_cc00.dbf IDX_CC
/provdata01/prov/tab_cc00.dbf TAB_CC
9 rows selected.
SQL>
SQL> select file_name,TABLESPACE_NAME from dba_temp_files ;
FILE_NAME TABLESPACE_NAME
---------------------------------------- ------------------------------
/provdata01/prov/temp01.dbf TEMP
SQL>
SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
/provredo/prov/redo1_1.dbf
/provredo/prov/redo1_2.dbf
/provredo/prov/redo2_1.dbf
/provredo/prov/redo2_2.dbf
/provredo/prov/redo3_1.dbf
/provredo/prov/reod3_2.dbf
/provredo/prov/redo4_1.dbf
/provredo/prov/redo4_2.dbf
/provredo/prov/redo5_1.dbf
/provredo/prov/redo5_2.dbf
/provredo/prov/redo6_1.dbf
MEMBER
--------------------------------------------------------------------------------
/provredo/prov/redo6_2.dbf
/provredo/prov/redo7_1.dbf
/provredo/prov/redo7_2.dbf
/provredo/prov/redo8_1.dbf
/provredo/prov/redo8_2.dbf
16 rows selected.
SQL>
2.2.2、容災站點
SQL> col file_name format a40
SQL> select file_name,TABLESPACE_NAME from dba_data_files ;
FILE_NAME TABLESPACE_NAME
---------------------------------------- ------------------------------
/provdata01/prov/system01.dbf SYSTEM
/provdata01/prov/sysaux01.dbf SYSAUX
/provdata01/prov/undotbs01.dbf UNDOTBS1
/provdata01/prov/users01.dbf USERS
SQL>
SQL> select file_name,TABLESPACE_NAME from dba_temp_files ;
FILE_NAME TABLESPACE_NAME
---------------------------------------- ------------------------------
/provdata01/prov/temp01.dbf TEMP
SQL>
SQL> select member from v$logfile;
MEMBER
---------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------/provredo/prov/redo1_1.dbf
/provredo/prov/redo1_2.dbf
/provredo/prov/redo2_1.dbf
/provredo/prov/redo2_2.dbf
/provredo/prov/redo3_1.dbf
/provredo/prov/redo3_2.dbf
6 rows selected.
SQL>
2.2.3、結論
主站點和容災站點數據文件位置基本一致。
2.3、強制日誌模式
2.3.1、主站點
檢查主站點強制日誌模式
SQL> select force_logging from v$database;
FOR
---
NO
SQL>
看到主站點prov庫沒有開啓強制日誌模式,需要開啓。
2.3.2、結論
需要開啓強制日誌模式。
alter database force logging;
2.4、主庫歸檔模式
2.4.1、主站點
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /provarch/prov
Oldest online log sequence 2301
Next log sequence to archive 2308
Current log sequence 2308
SQL>
2.4.2、結論
主庫歸檔滿足。
2.5、主容監聽
2.5.1、主站點
ossdb02:[/oracle$]lsnrctl status LISTENER_prov
LSNRCTL for Solaris: Version 11.2.0.4.0 - Production on 17-MAR-2020 04:49:04
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=1xx.xxx.xxx.xxx)(PORT=1522)))
STATUS of the LISTENER
------------------------
Alias LISTENER_prov
Version TNSLSNR for Solaris: Version 11.2.0.4.0 - Production
Start Date 15-SEP-2017 11:30:42
Uptime 416 days 14 hr. 50 min. 29 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /oracle/product/112/network/admin/listener.ora
Listener Log File /oracle/product/112/log/diag/tnslsnr/ossdb02/listener_prov/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=1xx.xxx.xxx.xxx)(PORT=1522)))
Services Summary...
Service "prov" has 1 instance(s).
Instance "prov", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
ossdb02:[/oracle$]
2.5.2、容災站點
dr-ossdb01:[/oracle/product/112/network/admin$]lsnrctl status LISTENER_prov
LSNRCTL for Solaris: Version 11.2.0.4.0 - Production on 17-MAR-2020 04:48:17
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=1xx.xxx.xxx.xxx)(PORT=1522)))
STATUS of the LISTENER
------------------------
Alias LISTENER_prov
Version TNSLSNR for Solaris: Version 11.2.0.4.0 - Production
Start Date 09-JAN-2020 18:38:04
Uptime 67 days 10 hr. 10 min. 12 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /oracle/product/112/network/admin/listener.ora
Listener Log File /oracle/product/112/log/diag/tnslsnr/dr-ossdb01/listener_prov/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=1xx.xxx.xxx.xxx)(PORT=1522)))
Services Summary...
Service "prov" has 1 instance(s).
Instance "prov", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
2.5.3、結論
主容監聽正常。
2.6、tns檢查
2.6.1、主站點
[/oracle$]tnsping dr_prov
TNS Ping Utility for Solaris: Version 11.2.0.4.0 - Production on 17-MAR-2020 04:52:15
Copyright (c) 1997, 2013, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 1xx.xxx.xxx.xxx)(PORT = 1522))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = prov)
))OK (30 msec)
[/oracle$]tnsping pr_prov
TNS Ping Utility for Solaris: Version 11.2.0.4.0 - Production on 17-MAR-2020 04:52:23
Copyright (c) 1997, 2013, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 1xx.xxx.xxx.xxx)(PORT = 1522))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = prov)
))OK (10 msec)
2.6.2、容災站點
[/oracle/product/112/network/admin$]tnsping PR_PROV
TNS Ping Utility for Solaris: Version 11.2.0.4.0 - Production on 17-MAR-2020 04:51:42
Copyright (c) 1997, 2013, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 1xx.xxx.xxx.xxx)(PORT = 1522))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = prov
)))OK (40 msec)
[/oracle/product/112/network/admin$]tnsping DR_PROV
TNS Ping Utility for Solaris: Version 11.2.0.4.0 - Production on 17-MAR-2020 04:51:54
Copyright (c) 1997, 2013, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 1xx.xxx.xxx.xxx)(PORT = 1522))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = prov
)))OK (10 msec)
2.6.3、結論
主容站點tns配置正常。
2.7、檢查db_unique_name
2.7.1、主站點
SQL> show parameter name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cell_offloadgroup_name string
db_file_name_convert string
db_name string prov
db_unique_name string prov
global_names boolean FALSE
instance_name string prov
lock_name_space string
log_file_name_convert string
processor_group_name string
service_names string prov
SQL>
2.7.2、容災站點
SQL> show parameter name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cell_offloadgroup_name string
db_file_name_convert string
db_name string prov
db_unique_name string prov
global_names boolean FALSE
instance_name string prov
lock_name_space string
log_file_name_convert string
processor_group_name string
service_names string prov
SQL>
2.7.3、結論
需要更改db_unique_name。
主站點:
alter system set db_unique_name=pr_prov scope=spfile ;
容災站點:
alter system set db_unique_name=dr_prov scope=spfile ;
該更改需要重啓數據庫生效。
2.8、數據庫dg相關參數
2.8.1、主站點
alter system set fal_client='pr_prov' scope=both;
alter system set fal_server ='dr_prov' scope=both;
alter system set log_archive_config='DG_CONFIG=(pr_prov,dr_prov)' ;
alter system set log_archive_dest_1='LOCATION=/provarch/prov valid_for=(all_logfiles,all_roles) db_unique_name=pr_prov' scope=both;
alter system set log_archive_dest_2='SERVICE=dr_prov LGWR ASYNC valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=dr_prov' scope=both;
alter system set standby_file_management='AUTO' scope=both;
2.8.2、容災站點
alter system set fal_client='dr_prov' scope=both;
alter system set fal_server ='pr_prov' scope=both;
alter system set log_archive_config='DG_CONFIG=(dr_prov,pr_prov)' ;
alter system set log_archive_dest_1='LOCATION=/provarch/prov valid_for=(all_logfiles,all_roles) db_unique_name=dr_prov' scope=both;
alter system set log_archive_dest_2='SERVICE=pr_prov LGWR ASYNC valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=pr_prov' scope=both;
alter system set standby_file_management='AUTO' scope=both;
2.8.3、結論
以上參數可以直接改,無需重啓數據庫即可生效。
3.1、主庫備份
3.1.1、主庫全備
export ORACLE_SID=prov
rman target /
run {
allocate channel t1 type disk;
allocate channel t2 type disk;
backup full filesperset 6 format '/provexp/rmanprovfull/db_%d_%U' database;
sql 'alter system switch logfile';
release channel t1;
release channel t2;
}
3.1.2、備份主庫歸檔
RMAN>backup archivelog all format '/provexp/rmanprovfull/arch_%T_%s_%p.bak';
3.1.3、備份主庫控制文件
RMAN>backup device type disk format '/provexp/rmanprovfull/ctl_%U' current controlfile for standby;
3.2、拷貝備份到備庫
su - oracle
$scp /provexp/rmanprovfull/* 1xx.xxx.xxx.xxx:/provexp/rmanprovfull/
3.3、恢復備庫控制文件
重啓備庫至nomount狀態:
export ORACLE_SID=prov
sqlplus / as sysdba
sql>shutdown immediate;
sql>startup nomount;
Sql>quit
$rman target /
rman>restore controlfile from '/provexp/rmanprovfull/ctl_xxx';
啓動備庫到physical standby狀態
Sql>alter database mount standby database;
3.4、恢復備庫
export ORACLE_SID=prov
rman target /
Rman> run{
allocate channel t1 type disk;
allocate channel t2 type disk;
restore database;
release channel t1;
release channel t2;
}
3.5、啓動備庫應用日誌
Sql>alter database recover managed standby database disconnect from session;
3.6、增加standby日誌組
最好主庫備庫都加,大小和個數跟現有redo日誌大小和個數一致。
SQL> select group#,SEQUENCE#,BYTES,MEMBERS,status from v$log ;
GROUP# SEQUENCE# BYTES MEMBERS STATUS
---------- ---------- ---------- ---------- ----------------
1 40 52428800 2 INACTIVE
2 41 52428800 2 CURRENT
3 39 52428800 2 INACTIVE
SQL>
SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
/oradata/prov/redo01_01.log
/oradata/prov/redo01_02.log
/oradata/prov/redo02_01.log
/oradata/prov/redo02_02.log
/oradata/prov/redo03_01.log
/oradata/prov/redo03_02.log
6 rows selected.
SQL> alter database add standby logfile group 4('/oradata/prov/stdredo04_01.log','/oradata/prov/stdredo04_02.log') size 512m;
Database altered.
SQL> alter database add standby logfile group 5('/oradata/prov/stdredo05_01.log','/oradata/prov/stdredo05_02.log') size 512m;
Database altered.
SQL> alter database add standby logfile group 6('/oradata/prov/stdredo06_01.log','/oradata/prov/stdredo06_02.log') size 512m;
Database altered.
3.7、驗證
3.7.1、主容狀態
數據庫角色
主:
SQL> select database_role from v$database;
DATABASE_ROLE
----------------
PRIMARY
SQL>
容災站點:
SQL> select database_role from v$database;
DATABASE_ROLE
------------------------------------------------
PHYSICAL STANDBY
SQL>
3.7.2、進程檢查
主:
SQL> select process,block#,blocks ,status ,sequence# from v$managed_standby;
PROCESS BLOCK# BLOCKS STATUS SEQUENCE#
--------- ---------- ---------- ------------ ----------
ARCH 55296 1572 CLOSING 38
ARCH 22528 1866 CLOSING 39
ARCH 0 0 CONNECTED 0
ARCH 53248 1871 CLOSING 37
LNS 6768 1 WRITING 40
SQL>
ARCH進程: 用於主庫上覆制redo log,從而生成歸檔日誌,當前狀態爲CLOSING表示該進程目前正在複製。
LNS進程: 用於在主庫上將主庫的歸檔日誌同步到備庫上,將歸檔日誌投遞給備庫上的RFS進程。
容災站點:
SQL> select process,block#,blocks ,status ,sequence# from v$managed_standby;
PROCESS BLOCK# BLOCKS STATUS SEQUENCE#
--------- ---------- ---------- ------------ ----------
ARCH 0 0 CONNECTED 0
ARCH 0 0 CONNECTED 0
ARCH 0 0 CONNECTED 0
ARCH 0 0 CONNECTED 0
RFS 0 0 IDLE 0
RFS 6833 1 IDLE 40
RFS 0 0 IDLE 0
MRP0 0 0 WAIT_FOR_LOG 40
RFS 0 0 IDLE 0
9 rows selected.
SQL>
FRS進程:用於備庫接收從主庫LNS進程或ARCH進程投遞過來的歸檔日誌。 ARCH: 用於複製從主庫上同步過來的歸檔日誌。
MRP0:用於應用歸檔日誌。
3.7.3、備庫檢查裂縫
SQL> select * from v$archive_gap;
no rows selected
SQL>
如果DG環境日誌同步正常,則不會查到任何記錄,如果查出結果,則說明目前的DG環境歸檔日誌有裂縫,需要檢查相關日誌是否存在後應用。
3.7.4、日誌應用檢查
備庫查看當前日誌應用:
SQL> select name,SEQUENCE#,APPLIED from v$archived_log order by sequence#;
NAME SEQUENCE# APPLIED
-------------------------------------------------- ---------- ---------
/oradata/provarch/1_34_1034939605.dbf 34 YES
/oradata/provarch/1_35_1034939605.dbf 35 YES
/oradata/provarch/1_36_1034939605.dbf 36 YES
/oradata/provarch/1_37_1034939605.dbf 37 YES
/oradata/provarch/1_38_1034939605.dbf 38 YES
/oradata/provarch/1_39_1034939605.dbf 39 YES
6 rows selected.
SQL>
應用到39號日誌了。
主庫:
SQL> alter system switch logfile ;
System altered.
SQL>
備庫:
SQL> select name,SEQUENCE#,APPLIED from v$archived_log order by sequence#;
NAME SEQUENCE# APPLIED
-------------------------------------------------- ---------- ---------
/oradata/provarch/1_34_1034939605.dbf 34 YES
/oradata/provarch/1_35_1034939605.dbf 35 YES
/oradata/provarch/1_36_1034939605.dbf 36 YES
/oradata/provarch/1_37_1034939605.dbf 37 YES
/oradata/provarch/1_38_1034939605.dbf 38 YES
/oradata/provarch/1_39_1034939605.dbf 39 YES
/oradata/provarch/1_40_1034939605.dbf 40 YES
7 rows selected.
SQL>
看到備庫日誌應用到40號了,說明日誌應用正常。
3.7.5、驗證備庫數據一致性
備庫正常狀態下都是mount狀態,並且同步應用日誌,此時無法查詢數據。如果需要查詢數據,可以先將備庫臨時修改爲read-only,待查詢完成之後再修改爲mount狀態。備庫在readonly的狀態下,如果要啓動日誌應用進程,則必須要有standby日誌,否則會報錯。這也就是需要3.6章節的原因。
修改爲read-only需要執行兩步:
取消備庫日誌應用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
Database altered.
SQL> alter database open read only;
Database altered.
SQL> select database_role, open_mode from v$database;
DATABASE_ROLE OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY READ ONLY
啓動日誌應用進程
SQL> recover managed standby database using current logfile disconnect from session;
ORA-38500: USING CURRENT LOGFILE option not available without standby redo logs
這個表示要有standby日誌,在備庫是readonly的狀態下即可做3.6節的內容。
3.7.6、測試表
主:
SQL> select * from tmp_list_001 ;
ID NAME
---------- --------------------------------------------------
1 wufan
2 haha
SQL>
SQL> insert into tmp_list_001 values(3,'iwhalecloud');
1 row created.
SQL> commit ;
Commit complete.
SQL>
SQL> alter system switch logfile ;
System altered.
SQL>
容災站點:
SQL> select * from tmp_list_001 ;
ID NAME
---------- --------------------------------------------------
1 wufan
2 haha
3 iwhalecloud
SQL>
3.7.7、此時雙庫的狀態
主:
SQL> select database_role,OPEN_MODE from v$database ;
DATABASE_ROLE OPEN_MODE
---------------- --------------------
PRIMARY READ WRITE
容:
SQL> select database_role,OPEN_MODE from v$database ;
DATABASE_ROLE OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY READ ONLY WITH APPLY
在修改db_unique_name的時候主庫需要停機使修改生效,以便配置後續的dg。停機時間在幾分鐘至10幾分鐘內。