Oralce10g data guard配置
具體步驟如下:
一、主庫操作
1、修改主庫屬性:
sql> alter database force logging;
FOR
--- YES |
2、修改數據庫爲歸檔模式:
sql> alter system set log_archive_dest_1='LOCATION=/arch1/' scope=both;
system altered.
sql> shutdown immediate;
Database closed. Database dismounted. oracle instance shut down. sql> startup mount; oracle instance started. Total system Global Area 167772160 bytes
Fixed Size 1218292 bytes Variable Size 79694092 bytes Database Buffers 79691776 bytes Redo Buffers 7168000 bytes Database mounted. sql> alter database archivelog; Database altered.
sql> archive log list;
Database log mode Archive Mode Automatic archival Enabled Archive destination /arch1/ Oldest online log sequence 1 Next log sequence to archive 2 Current log sequence 2 sql> alter database open; Database altered.
|
3、添加standby logfile(也可以不加)
爲主數據庫添加"備用聯機日誌文件",這裏要保證備日誌文件與主庫聯機日誌文件相同大小。
添加備用日誌文件是規則:備用日誌最少應該比redo log 多一個。推薦的備重做日誌數依賴於主數據庫上的線程數。
(每線程日誌文件最大數目 + 1 ) * 線程數
sql> select GROUP#,MEMBERS,BYTES/1024/1024 from v$log;
GROUP# MEMBERS BYTES/1024/1024
---------- ---------- --------------- 1 1 50 2 1 50 3 1 50 sql> select GROUP#,MEMBER from v$logfile;
GROUP# MEMBER
---------- ---------------------------------------- 3 /oracle/oradata/orcl/redo03.log 2 /oracle/oradata/orcl/redo02.log 1 /oracle/oradata/orcl/redo01.log sql> alter database add standby logfile
2 group 4 ('/oracle/oradata/orclstd_redo04a.log','/oracle/oradata/orcl/std_redo04b.log') size 50m, 3 group 5 ('/oracle/oradata/orcl/std_redo05a.log','/oracle/oradata/orcl/std_redo05b.log') size 50m, 4 group 6 ('/oracle/oradata/orcl/std_redo06a.log','/oracle/oradata/orcl/std_redo06b.log') size 50m, 5 group 7 ('/oracle/oradata/orcl/std_redo07a.log','/oracle/oradata/orcl/std_redo08b.dbf') size 50m; Database altered.
|
4、修改主庫參數文件:
sql> create pfile='/oracle/orcl.ora' from spfile;
File created.
orcl.__db_cache_size=79691776
orcl.__java_pool_size=4194304 orcl.__large_pool_size=4194304 orcl.__shared_pool_size=71303168 orcl.__streams_pool_size=0 *.audit_file_dest='/oracle/admin/orcl/adump' *.background_dump_dest='/oracle/admin/orcl/bdump' *.compatible='10.2.0.1.0' *.control_files='/oracle/oradata/orcl/control01.ctl','/oracle/oradata/orcl/control02.ctl','/oracle/oradata/orcl/control03.ctl' *.core_dump_dest='/oracle/admin/orcl/cdump' *.db_block_size=8192 *.db_domain='' *.db_file_multiblock_read_count=16 *.db_name='orcl' *.db_recovery_file_dest='/oracle/flash_recovery_area' *.db_recovery_file_dest_size=2147483648 *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' *.job_queue_processes=10 *.DB_UNIQUE_NAME='orclpri' ##必須 定義每個數據庫的唯一標識 *.log_archive_config='DG_CONFIG=(orclpri,orclstandby)' ###必須 *.log_archive_dest_1='LOCATION=/arch1/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES)' DB_UNIQUE_NAME='orclpri' ###必須 本地的歸檔路徑 *.LOG_ARCHIVE_DEST_2='SERVICE=orclstandby arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orclstandby' ###必須(遠程服務器端的歸檔日誌 )
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE *.LOG_ARCHIVE_DEST_STATE_2=ENABLE *.FAL_SERVER=orclstandby ### 定義FAL服務器的 Net服務的名稱 *.FAL_CLIENT=orclpri ### 定義備數據庫的 Net服務名 (這兩個參數在主庫可有可無,但備庫必須有。ORACLE 老外工程師說這個必須有^_^) *.open_cursors=300 *.pga_aggregate_target=16777216 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.sga_target=167772160 *.undo_management='AUTO' *.undo_tablespace='UNDOTBS1' *.user_dump_dest='/oracle/admin/orcl/udump' *.STANDBY_FILE_MANAGEMENT=AUTO ###設置爲AUTO,使得當數據文件添加到主數據庫或者從主數據庫刪除的時候,對應的修改能夠在備用數據庫中自動執行oracleoracle |
5、用pfile啓動,再重新創建spfile.
sql> shutdown immediate; Database closed. Database dismounted. oracle instance shut down. sql> startup pfile='/oracle/orcl.ora' oracle instance started. Total system Global Area 167772160 bytes
Fixed Size 1218292 bytes Variable Size 79694092 bytes Database Buffers 79691776 bytes Redo Buffers 7168000 bytes Database mounted. Database opened. sql> sql> create spfile from pfile='/oracle/orcl.ora';
File created
|
6、在主庫創建密碼文件、以及控制文件。
[oracle@node2 oracle]$ orapwd file='/oracle/product/10.2.0/db_1/dbs/orapworcl.ora' password=oracle entries=10
sql> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/oracle/oradata/orcl/standby.ctl';
Database altered.
|
7、TNS信息如下:
主庫
ORCL =
(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = tcp)(HOST = 172.16.37.239)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) ) orclpri = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = tcp)(HOST = 172.16.37.239)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) ) orclstandby = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = tcp)(HOST = 172.16.37.211)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) ) EXTPROC_CONNECTION_DATA =
(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) ) 監聽信息如下 SID_LIST_LISTENER =
(SID_LIST = (SID_DESC = (SERVICE_NAME=orclpri) (ORACLE_HOME = /oracle/product/10.2.0/db_1) (SID_NAME=ORCL) ) ) LISTENER =
(DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = tcp)(HOST = localhost.localdomain)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) ) |
8、把數據庫scp到備庫相應的目錄(包括密碼文件、standby controlfile)
二備機操作
1、備份的參數文件內容
orcl.__db_cache_size=79691776 orcl.__java_pool_size=4194304 orcl.__large_pool_size=4194304 orcl.__shared_pool_size=71303168 orcl.__streams_pool_size=0 *.audit_file_dest='/oracle/admin/orcl/adump' *.background_dump_dest='/oracle/admin/orcl/bdump' *.compatible='10.2.0.1.0' *.control_files='/oracle/oradata/orcl/control01.ctl','/oracle/oradata/orcl/control02.ctl','/oracle/oradata/orcl/control03.ctl' *.core_dump_dest='/oracle/admin/orcl/cdump' *.db_block_size=8192 *.db_domain='' *.db_file_multiblock_read_count=16 *.db_name='orcl' *.db_recovery_file_dest='/oracle/flash_recovery_area' *.db_recovery_file_dest_size=2147483648 *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' *.job_queue_processes=10 *.DB_UNIQUE_NAME='orclstandby' ##必須 定義每個數據庫的唯一標識
*.log_archive_config='DG_CONFIG=(orclpri,orclstandby)' ###必須 *.log_archive_dest_1='LOCATION=/arch1/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES)' DB_UNIQUE_NAME='orclstandby' ###必須 本地的歸檔路徑 *.LOG_ARCHIVE_DEST_2='SERVICE=orclpri arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orclpri' ###必須(遠程服務器端的歸檔日誌) *.LOG_ARCHIVE_DEST_STATE_1=ENABLE *.LOG_ARCHIVE_DEST_STATE_2=ENABLE *.FAL_SERVER=orclstandby ### 定義FAL服務器的Oracle Net服務的名稱 *.FAL_CLIENT=orclpri ### 定義備數據庫的Oracle Net服務名 (這兩個參數在主庫可有可無,但備庫必須有。ORACLE 老外工程師說這個必須有^_^) *.open_cursors=300 *.pga_aggregate_target=16777216 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.sga_target=167772160 *.undo_management='AUTO' *.undo_tablespace='UNDOTBS1' *.user_dump_dest='/oracle/admin/orcl/udump' *.STANDBY_FILE_MANAGEMENT=AUTO |
2、修改上面參數文件裏的
*.control_files='/oracle/oradata/orcl/control01.ctl','/oracle/oradata/orcl/control02.ctl','/oracle/oradata/orcl/control03.ctl' 爲: *.control_files='/oracle/oradata/orcl/standby.ctl' ##在主機上生成的那個控制文件,也可以多放幾份 |
3、TNS信息如下:
備庫
ORCL =
(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = tcp)(HOST = 172.16.37.239)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) ) orclpri = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = tcp)(HOST = 172.16.37.239)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) ) orclstandby = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = tcp)(HOST = 172.16.37.211)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) ) EXTPROC_CONNECTION_DATA =
(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) ) 監聽信息如下 SID_LIST_LISTENER =
(SID_LIST = (SID_DESC = (SERVICE_NAME=orclstandby) (ORACLE_HOME = /oracle/product/10.2.0/db_1) (SID_NAME=ORCL) ) ) LISTENER =
(DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = tcp)(HOST = localhost.localdomain)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) ) |
4、用創建的參數文件啓動數據庫到nomount
sql> startup pfile='/oracle/orclstandby.ora' nomount; oracle instance started. Total system Global Area 167772160 bytes
Fixed Size 1218316 bytes Variable Size 62916852 bytes Database Buffers 100663296 bytes Redo Buffers 2973696 bytes sql> ALTER DATABASE MOUNT STANDBY DATABASE;
Database altered.
|
5、修改備庫處於應用歸檔狀態
sql> alter database recover managed standby database disconnect from session;
Database altered.
|
如果主庫從不過來歸檔,可以通過在主庫側手工修改參數如下:
ALTER system SET log_archive_dest_state_2='DEFER' SCOPE=MEMORY; ALTER system SET log_archive_dest_state_2='ENABLE' SCOPE=MEMORY; |
7、測試
通過在主庫執行alter system switch logfile;切換日誌可以觀察到備庫會自動應用通過主庫傳過來的日誌。
三、切換測試
1、在主庫端
select switchover_stats from v$database; |
如果是to standby 表可以正常切換。
直接執行
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY; |
否則執行:
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
shutdown immediate;
startup nomount; alter database mount standby database; |
如果是to_primary 表可以正常切換。
2、在備庫
在備庫
SELECT SWITCHOVER_STATUS FROM V$DATABASE; |
執行:
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; |
否則執行:
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
shutdown immediate;
startup; |
然後觀察主備庫日誌,如果正常的話會看到備庫會自動應用日誌。