Dataguard配置總結
本例情形
在主庫存在運行的情況下,增加配置dataguard備庫,實現雙機熱備,高可用性。
主庫要求,歸檔模式,強制歸檔。
主庫idty
備庫idty_st
1、密碼文件
為備庫制作密碼文件、參數文件。密碼文件直接使用主庫文件,參數文件需要修改。
cp orapwidty ~/
scp orapwidty 132.108.200.133:/home/oracle
2、參數文件
create pfile='/home/oracle/pfileidty_st.ora' from spfile
scp pfileidty_st.ora 132.108.200.133:/home/oracle
3、參數文件修改
--------------以下修改作為參考
*.log_archive_config='dg_config=(idty,idty_st)'
*.DB_UNIQUE_NAME=idty_st
*.LOG_ARCHIVE_DEST_2='SERVICE=idty ARCH VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=idty'
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.FAL_SERVER=idty
*.FAL_CLIENT=idty_st
*.STANDBY_FILE_MANAGEMENT=AUTO
*.standby_archive_dest='/home/oracle/app/oracle/stlog/idty'
修改備課日志目錄,如果不改默認在dbs目錄。如果存在多個備庫,則日志數據不便於區分。
alter system set standby_archive_dest='/home/oracle/app/oracle/stlog/idty' scope=both;
4、備庫創建數據文件目錄、回閃區日志文件目錄
日志目錄/oradat/idty /fast_recovery_area/idty
接收日志目錄 /stlog/idty
5、啟動備庫數據庫 ,啟動到nomount
export ORACLE_SID=idty
產生spfile
create spfile from pfile='/home/oracle/pfileidty_st.ora';
startup nomount
修改備課日志目錄,如果不改默認在dbs目錄。如果存在多個備庫,則日志數據不便於區分。
alter system set standby_archive_dest='/home/oracle/app/oracle/stlog/idty' scope=both;
sqlplus "/as sysdba"
select name from v$database;
6、配置tnsnames listener
主庫/備庫配置tnsnames
IDTY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 132.108.120.179)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = idty)
)
)
IDTY_ST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 132.108.200.133)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = idty_st)
)
)
備庫配置監聽
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=idty_st)
(ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome1)
(SID_NAME=idty))
)
重啟監聽
7、rman duplicate復制主庫創建備庫
在備庫,rman登錄主庫
rman target sys/xxxxxx@idty auxiliary sys/xxxxxx@idty_st
開始復制
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER (適用與主、備庫oracle_home路徑不同,設置了目錄轉換的情形。)
如果目錄不同,需要修改pfile,增加目錄轉換。本例目錄相同就沒有設置目錄轉換。
DB_FILE_NAME_CONVERT='/home/app/oracle/oradata/ljydb','/home/oracle/app/oracle/oradata/ljydb'
LOG_FILE_NAME_CONVERT='/home/app/oracle/oradata/ljydb','/home/oracle/app/oracle/oradata/ljydb','/home/app/oracle/fast_recovery_area/ljydb','/home/oracle/app/oracle/fast_recovery_area/ljydb'
如果和主庫路徑相同,則要加NOFILENAMECHECK參數。否則報RMAN-05001,conflicts with a file used by the target database。
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK;
8、主庫配置
保證主庫要求,歸檔模式,強制歸檔。
ALTER DATABASE FORCE LOGGING;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
修改參數:
alter system set log_archive_config='dg_config=(idty,idty_st)' scope=both;
alter system set log_archive_dest_2='service=idty_st async valid_for=(online_logfiles,primary_role) db_unique_name=idty_st' scope=both;
alter system set log_archive_dest_state_2=enable;
建議先關閉日志傳輸,等備庫配置好后在啟動傳輸。
alter system set log_archive_dest_state_2=defer;
show parameter log_archive_config;
show parameter log_archive_config;
9、備庫應用日志
應用日志
alter database recover managed standby database disconnect from session;
暫停日志應用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
10、主庫啟動日志傳輸
啟動日志傳輸
alter system set log_archive_dest_state_2=enable;
建議先關閉日志傳輸,等備庫配置好后在啟動傳輸。
--測試下 產生歸檔文件
alter system switch logfile;
11、多個實例監聽靜態配置方法
listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = cvm-dbsrv02)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=ljydb_st)
(ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome1)
(SID_NAME=ljydb))
(SID_DESC=
(GLOBAL_DBNAME=idty_st)
(ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome1)
(SID_NAME=idty))
)
12、問題及解決方法
ORA-17628:問題解決,原因是備庫缺少日志目錄、數據文件目錄,創建相應的目錄,即可解決問題。
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 10/26/2017 16:56:20
RMAN-05501: aborting duplication of target database
RMAN-03015: error occurred in stored script Memory Script
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 10/26/2017 16:56:20
ORA-17628: Oracle error 19505 returned by remote Oracle server
沒有創建日志目錄/oradat/idty /fast_recovery_area/idty
ORA-32004:問題原因,pfile增加了參數設置,改變了默認值則出現提示,不影響數據庫啟動。本例子設置了參數standby_archive_dest
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
!!!!!!!!!----------------------
SQL> startup nomount
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.
看日志:
Deprecated system parameters with specified values:
standby_archive_dest
##### ---------------------
RMAN-05001,主備庫oracle目錄相同的情況下,如果沒有nofilenamecheck參數,則復制庫的時候會報這個錯。
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 10/27/2017 10:40:46
RMAN-05501: aborting duplication of target database
RMAN-05001: auxiliary file name /home/oracle/app/oracle/oradata/idty/ts_data03.dbf conflicts with a file used by the target database
RMAN-05001: auxiliary file name /home/oracle/app/oracle/oradata/idty/ts_data02.dbf conflicts with a file used by the target database
RMAN-05001: auxiliary file name /home/oracle/app/oracle/oradata/idty/ts_data01.dbf conflicts with a file used by the target database
RMAN-05001: auxiliary file name /home/oracle/app/oracle/oradata/idty/users01.dbf conflicts with a file used by the target database
RMAN-05001: auxiliary file name /home/oracle/app/oracle/oradata/idty/undotbs01.dbf conflicts with a file used by the target database
RMAN-05001: auxiliary file name /home/oracle/app/oracle/oradata/idty/sysaux01.dbf conflicts with a file used by the target database
RMAN-05001: auxiliary file name /home/oracle/app/oracle/oradata/idty/system01.dbf conflicts with a file used by the target database
!!!!!!!!!------以下原因描述來源網絡:
nofilenamecheck如果副本數據庫與目標庫不在同一台機器上,並且副本數據庫的在線日志文件路徑與目標庫相同,
則運行duplicate命令時必須指定NOFILENAMECHECK參數以避免沖突提示。
暈了吧,異機操作路徑相同還必需指定NOFILENAMECHECK。此處oracle表現的很傻,
它不知道你要恢復的路徑是在另一台機器上,它只是認為要恢復到的路徑怎么跟目標數據庫表現的一樣呢?
會不會是要覆蓋目標數據庫啊,為了避免這種情形,於是它就報錯。所以一旦異機恢復,並且路徑相同,
那么你必須通過指定NOFILENAMECHECK來避免oracle的自動識別。
13、常用sql語句
查看日志目錄
select *From v$archive_dest;
查看數據庫是否歸檔模式
select log_mode,force_logging from v$database
select * from V$DATAGUARD_CONFIG ;
查數據庫
select *From v$archive_dest_status
select open_mode from v$database;
select *from v$session;
查看日志應用傳輸清單
SELECT SEQUENCE#,name , FIRST_TIME, NEXT_TIME ,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE# desc;
查看備庫日志傳輸、應用進程狀態、日志
SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;
SELECT * FROM V$DATAGUARD_STATUS order by timestamp desc;
1、擴大恢復目錄空間大小
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=10G SCOPE=BOTH;
14、dataguard方案的局限性思考
因為dataguard的原理是通過網絡傳輸歸檔日志到備庫,然后在備庫應用日志,實現雙機熱備。
那么對於日志量生成速度太快的數據庫,臨界情況是主庫日志產生的速度大於網絡傳輸數據的速度,將導致備庫永遠追不上主庫,主庫未傳輸的日志占用空間將不斷擴張,而且因為未傳輸完成也不能清除。
因此,dataguard方案不適合分析型數據庫。
從經驗人士獲知的dataguard可適應的極限日志量為400G-500G/每天。(未實驗驗證)