oracle物理dg單實例配置:
1.查看數據庫版本是否一致
2.配置主備庫的hosts文件和tnsnames.ora,確保監聽正常。
3.主庫參數配置:
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(pri_unique_name,std_unique_nm)' scope=spfile;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/data/arch/pri_sid_nm VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=pri_unique_nm' scope=spfile;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=std_tnsname ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=std_unique_nm' scope=spfile;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE scope=spfile;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE scope=spfile;
ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE scope=spfile;
ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' scope=spfile;
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=4 scope=spfile;
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SCOPE=SPFILE;
ALTER SYSTEM SET FAL_CLIENT ='pri_tnsname' SCOPE=SPFILE;
ALTER SYSTEM SET FAL_SERVER ='std_tnsname' SCOPE=SPFILE;
-------------若主備庫數據日誌文件路徑不一致需要設置,主庫設置是爲主備切換用-------------
ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/data/oradata/MCPDATA_ST','/data/oradata/MCPDATA' scope=spfile;
ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/data/oradata/MCPDATA_ST','/data/oradata/MCPDATA' scope=spfile; 重做日誌(redo log)目錄,先對方,後自己
---------------------------------------------------------------
4.開啓強制歸檔:
alter database force logging;
5.主庫若沒開歸檔需要開啓:
shutdown immediate
startup mount
alter database archivelog;
alter database open;
6.主庫備份並恢復到備庫
創建口令文件:
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=5
創建spfile:
create pfile from spfile;
mount狀態下,使用rman備份數據庫和歸檔日誌
rman target /
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup database format '/data/rman_backup/Full_%U.bak';
backup archivelog all format '/data/rman_backup/Arc_%U.bak';
release channel c1;
release channel c2;
release channel c3;}
備份備庫控制文件
backup device type disk format '/data/rman_backup/Standby_%U.ctl' current controlfile for standby;
將主庫的備份集、口令文件、pfile傳至備庫相應目錄下
備庫配置:
7.配置備庫參數文件:
各中文件路徑確定修改正確,包括數據文件路徑,歸檔日誌路徑
db_unique_name修改成備庫的唯一名
LOG_ARCHIVE_DEST_1修改成備庫本機的log目錄,LOG_ARCHIVE_DEST_2修改成主庫參數 ----------主備切換用
FAL_SERVER修改成主庫連接串,FAL_CLIENT修改成備庫連接串 --------主備切換會用到
----------------若主備庫數據日誌文件路徑不一致備庫需要需要設置下面兩個參數----------------------
ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/data/oradata/MCPDATA_ST','/data/oradata/MCPDATA' scope=spfile;
ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/data/oradata/MCPDATA_ST','/data/oradata/MCPDATA' scope=spfile; -----重做日誌(redo log)目錄,先對方,後自己
-----------------------------------------------------------------------------------------------
查看Oracle的.bash_profile文件裏ORACLE_SID配置是否正確
8.創建spfile文件,並將備庫置於nomount狀態
create spfile from pfile;
startup nomount;
show parameter spfile;
9.使用rman恢復控制文件和數據文件等:
rman target /
restore standby controlfile from '/data/rman_backup/Standby_08ri8i4r_1_1.ctl';
alter database mount;
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
restore database;
release channelc1;
release channelc2;
release channelc3; }
===========================duplicate方式遷移數據(主庫不用停機)===========================
創建口令文件----把主庫的刪掉,修改sys密碼後重新生成一份,把這份傳到備庫:
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=sys的密碼 entries=5
將主庫的pfile文件傳到備庫修改後生成spfile,將備庫起到nomount
rman target sys/wgot11g@BJ-YZ-207R-166-9 auxiliary sys/wgot11g@BJ-YZ-207R-166-8
duplicate target database for standby from active database dorecover nofilenamecheck;
======================================================================================
10.主庫和備庫狀態查看:
column db_unique_name format a10;
set line 220;
SELECT db_unique_name,name,switchover_status,database_role,open_mode FROM v$database;
11.主庫和備庫創建Standby Redo Log組數(主庫創建是爲主備切換用)
公式如下:
如果主庫是單實例庫:Standby Redo Log組數=主庫日誌組總數 + 1
如果主庫是RAC環境:Standby Redo Log組數=(所有節點中日誌組數最大值 + 1) * RAC節點數
alter database add standby logfile thread 1 group 4 '/data/oradata/fle/stdredo04.rdo' size 200m;
alter database add standby logfile thread 1 group 5 '/data/oradata/fle/stdredo05.rdo' size 200m;
alter database add standby logfile thread 1 group 6 '/data/oradata/fle/stdredo06.rdo' size 200m;
alter database add standby logfile thread 1 group 7 '/data/oradata/fle/stdredo07.rdo' size 200m;
12.檢查:
主庫查看路徑狀態:
col dest_name for a20
col status for a8
col type for a8
col database_mode for a20
col recovery_mode for a25
col error for a20
col destination for a40
col synchronization_status for a30
set line 240
select dest_name, status, type, database_mode, recovery_mode, error, destination, synchronization_status
from v$archive_dest_status;
主庫切換日誌:
alter system switch logfile;
備庫查看日誌的應用狀態:
column name format a50;
set line 200;
SELECT thread#,sequence#,name,applied FROM v$archived_log order by sequence#;
查看日誌傳輸進程狀態
col RECOVERY_MODE for a8
col protection_mode for a20
col db_mode for a18
col status for a10
set line 200
SELECT ds.dest_id id ,
ad.status ,
ds.database_mode db_mode ,
ad.archiver TYPE ,
ds.recovery_mode ,
ds.protection_mode ,
ds.standby_logfile_count "SRLs" ,
ds.standby_logfile_active active ,
ds.archived_seq#
FROM v$archive_dest_status ds ,
v$archive_dest ad
WHERE ds.dest_id = ad.dest_id
AND ad.status != 'INACTIVE'
ORDER BY ds.dest_id;
主備切換:
1.將主庫切換成物理standby:
alter database commit to switchover to physical standby with session shutdown;
startup mount;
2.備庫執行切換成primary,完成後數據庫是mount,需要open:
recover managed standby database cancel;
recover automatic standby database ;
RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
alter database commit to switchover to primary with session shutdown;
select status from v$instance;
startup;
3.打開新的備庫(原主庫)的歸檔應用:
alter database recover managed standby database using current logfile disconnect from session;
檢查日誌應用狀態:
4.驗證切換後,歸檔應用是否正常:
新備庫執行:
column name format a50;
set line 200;
SELECT thread#,sequence#,name,applied FROM v$archived_log order by sequence#;
5.檢查切換後的主備庫的角色:
新的主備庫分別執行:
select switchover_status,database_role from v$database;
注意切換完成以後必須自行添加臨時文件,當我們在Primary端添加一個臨時表空間,Standby端雖然不能創建出臨時文件,但是臨時表空間的信息是聯動的帶入的
oracle dataguard主備庫參數文件配置詳解
主庫參數
fle.__db_cache_size=3070230528
fle.__java_pool_size=67108864
fle.__large_pool_size=83886080
fle.__oracle_base='/apps/oracle'#ORACLE_BASE set from environment
fle.__pga_aggregate_target=1073741824
fle.__sga_target=4294967296
fle.__shared_io_pool_size=0
fle.__shared_pool_size=973078528
fle.__streams_pool_size=0
*.audit_file_dest='/apps/oracle/admin/fle/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/data/oradata/fle/control01.ctl','/data/oradata/fast_recovery_area/fle/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='fle'
*.db_recovery_file_dest='/data/oradata/fast_recovery_area'
*.db_recovery_file_dest_size=4294967296
*.diagnostic_dest='/apps/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=fleXDB)'
*.event='10949 TRACE NAME CONTEXT FOREVER'
*.fal_client='BJ-YZ-207R-66-9'
*.fal_server='BJ-YZ-207R-66-8'
*.log_archive_config='DG_CONFIG=(fle,flp)'
*.log_archive_dest_1='LOCATION=/data/arch/fle VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=fle'
*.log_archive_dest_2='SERVICE=BJ-YZ-207R-66-8 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=flp'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=4
*.O7_DICTIONARY_ACCESSIBILITY=FALSE
*.open_cursors=300
*.pga_aggregate_target=1073741824
*.processes=2000
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=4294967296
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
備庫參數
fle.__db_cache_size=2399141888
fle.__java_pool_size=67108864
fle.__large_pool_size=822083584
fle.__oracle_base='/apps/oracle'#ORACLE_BASE set from environment
fle.__pga_aggregate_target=1073741824
fle.__sga_target=4294967296
fle.__shared_io_pool_size=0
fle.__shared_pool_size=905969664
fle.__streams_pool_size=0
*.audit_file_dest='/apps/oracle/admin/fle/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/data/oradata/fle/control01.ctl','/data/oradata/fast_recovery_area/fle/control02.ctl'#Restore Controlfile
*.db_block_size=8192
*.db_domain=''
*.db_name='fle'
*.db_recovery_file_dest='/data/oradata/fast_recovery_area'
*.db_recovery_file_dest_size=4294967296
*.db_unique_name='flp'
*.diagnostic_dest='/apps/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=fleXDB)'
*.event='10949 TRACE NAME CONTEXT FOREVER'
*.fal_client='BJ-YZ-207R-66-8'
*.fal_server='BJ-YZ-207R-66-9'
*.log_archive_config='DG_CONFIG=(flp,fle)'
*.log_archive_dest_1='LOCATION=/data/arch/fle VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=flp'
*.log_archive_dest_2='SERVICE=BJ-YZ-207R-66-9 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=fle'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=4
*.O7_DICTIONARY_ACCESSIBILITY=FALSE
*.open_cursors=300
*.pga_aggregate_target=1073741824
*.processes=2000
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=4294967296
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
主庫參數詳解:
保持同一個Data Guard中所有的DB_NAME相同
DB_NAME=ora11g
爲一個數據庫指定一個唯一的名稱,該參數一經指定就不會發生改動除非DBA主動改動
DB_UNIQUE_NAME=ora11g_primary
初始化參數LOG_ARCHIVE_CONFIG用於控制發送歸檔日誌到遠程位置、接收遠程歸檔日誌,並指定Data Guard配置的惟一數據庫名,默認值爲SEND,RECEIVE,NODG_CONFIG。
當設置該參數爲SEND時,會激活發送歸檔日誌到遠程位置;當設置該能數爲NOSEND時,會禁止發送歸檔日誌到遠程位置;當設置該參數爲RECEIVE時,會激活接收遠程歸檔日誌;當設置該參數
爲NORECEIVE時,會禁止接收遠程歸檔日誌;當設置該參數爲DG_CONFIG時,可以最多指定9個惟一數據庫名;當設置該參數爲NODG_CONFIG時,會禁止指定惟一數據庫名。
LOG_ARCHIVE_CONFIG='DG_CONFIG=(ora11g_primary ,ora11g_standby)'
指定本地歸檔的路徑
LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ora11g_primary'
指定遠端備庫的歸檔路徑
LOG_ARCHIVE_DEST_2='SERVICE=ora11g_standby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ora11g_standby'
LOG_ARCHIVE_DEST_n(從1到10)定義redo文件路徑。該參數必須通過location或service指定歸檔文件路徑。location表示本地路徑,service通常是net service name,即接收redo數據的
standby數據庫。
注意:每一個LOG_ARCHIVE_DEST_n都有一個對應的LOG_ARCHIVE_DEST_STATE_n參數,該參數擁有以下4個屬性值:
ENABLE:默認值,表示允許傳輸服務
DEFER: 指定對應的log_archive_dest_n參數有效,但暫不使用
ALTERNATE:禁止傳輸,但是如果其他相關的目的地的連接通通失敗,則它將變成enable
RESET:功能與DEFER類似,不過如果傳輸目的地之前有過錯誤,它會清除所有錯誤信息
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
遠程登錄設置獨享模式(z注意保證主備庫密碼相同)
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
%s log sequence number
%S log sequence number, zero filled %t thread number, RAC的節點中設有THREAD參數, 就是這個值了
%T thread number, zero filled
------其中這前4項是可以用在 9I 中的
%a activation ID
%d database ID
%r resetlogs ID that ensures unique names are constructed for the archived log files across multiple incarnations of the database
Oracle 10g開始,log_archive_format初始化參數必須包含%s, %t 和 %r,以確保生成的歸檔重做日誌名稱唯一。
(原因:10g能做穿越resetlog的恢復,所以要加%r.而9i的不能做穿越resetlog的恢復,所以沒有%r的參數)
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
當Primary Database的某些日誌沒有發送到Standby Database 這時候發生歸檔裂縫(Archive Gap)
缺失的日誌就是裂縫(GAP)。Data Guard 能夠自動檢測,解決歸檔裂縫,不需要DBA的介入。這需要配置
FAL_CLIENT,FAL_SERVER這兩個參數(FAL:Fetch Archive Log)
從FAL這個名字可以看出,這個過程是 Standby Database 主動發起的取日誌的過程,Standby Database 就是
FAL_CLIENT,它是從FAL_SERVER中取這些GAP。10g中,這個FAL_SERVER可以是Primary Database,也可以是其他的
Standby Database
FAL_CLIENT和FAL_SERVER兩個參數都是Oracle Net NameFAL_CLIENT通過網絡向FAL_SERVER發送請求,
FAL_SERVER通過網絡向FAL_CLIENT發送缺失的日誌
但是這兩個連接不一定是一個連接。因此 FAL_CLIENT向FAL_SERVER發送請求時,會攜帶FAL_CLIENT的參數
值,用來告訴FAL_SERVER應該向哪裏發送缺少的日誌。這個參數也是一個Oracle Net Name 這個Name在FAL_SERVER
上定義的,用來指向FAL_CLIENT
FAL_SERVER=ora11g_standby
FAL_CLIENT=ora11g_primary
如果Primary數據庫數據文件發生修改(如新建)則在standby數據庫作相應修改
設爲AUTO表示自動管理。設爲MANUAL表示需要手工管理(注:重命名修改
是不會傳到standby數據庫)
STANDBY_FILE_MANAGEMENT=AUTO