數據庫容災
dg :dataguard
standby:備庫
node
物理備庫---主庫當中的數據同步到備庫中,只能工做在mount狀態 但在11g能夠工做在open狀態,不停的應用主庫傳遞過來的日誌
邏輯備庫---主庫傳遞到備庫中,作的是SQL應用,工做在open中,不會同步在主庫中
11g:快照備庫---經過咱們的物理備庫轉爲快照備庫,工做在open狀態,用來作測試
將物理備庫轉爲快照備庫,測試昨完後,將快照備庫轉爲物理備庫,咱們的快照備庫就不存在了
sql
全部的同步產品都是記錄數據塊的更改信息獲得日誌流(物理備庫),或者經過日誌挖掘獲得SQL語句來達到數據同步(邏輯備庫),根據產品的同步機制,來到達數據的同步。
日誌流數據同步(塊恢復的操做):物理同步即物理備庫,要求主庫的結構和備庫的結構是如出一轍,才能保證主庫中的數據和備庫中的數據如出一轍
日誌挖掘(邏輯備庫):主庫的結構和備庫的結構能夠不一致,不必定能達到時時同步
數據庫加了密,或者沒有打開附加日誌,日誌挖掘就會不全,備庫就沒辦法和主庫一致
數據庫
1.遠程/本地切換--經常使用
2.備份(經常使用)(rman備份用在數據量很少的狀況下,一般能在半個小時內完成備份,rman會消耗內存佔用I/O,超過半個小時,咱們就用DG的方式備份)
3.讀寫分離----lg 邏輯備庫11g開始
-----物理備庫也能夠作一些報表操做,日誌挖掘
4.測試---特別是數據庫開發的項目
邏輯備庫,11g可使用快照備庫
vim
1.日誌傳輸服務
主庫日誌經過什麼方式傳遞給備庫
備庫經過什麼方式接收或取回主庫日誌
日誌在傳遞時,是否要求主庫日誌和備庫日誌如出一轍
備庫日誌是否容許跟主庫的日誌有差別
備庫在接受日誌時,是否容許有時間差
備庫要求時時同步,主備日誌一致
主庫日誌跟備庫日誌有時間差,主庫當中的誤操做均可以在備庫中找到
主庫日誌與備庫日誌不一致,採用延遲同步,日誌也將有差別
lgwr:聯機日誌(online)---sync|async //派生出lsnr進程將主庫中的日誌傳到備庫中 log buffer |online sync |async ---
arc:歸檔日誌(archivelog)主庫傳過來的是歸檔日誌,主備日誌會有時間差 ,最多能夠設置30個進程 arcivelog|async
備庫在接受到歸檔日誌時,直接
主庫傳的是歸檔日誌,直接放到備庫的歸檔日誌中,再應用,使用於沒有聯機日誌的時候
主庫傳日誌,備庫應用的方式:
logxtpmode==sync
lgwr ----sync/async online---rfs---standb online
alter database recover managed standbydatabase disconnect from session;//應用歸檔日誌
alter database recover managed standby database using current logfile disconnect from session;//時時應用聯機日誌,即時時同步
alter database recover managed standby database delay 60; //日誌在備庫中延遲1個小時應用
alter database recover mangaged standby database cancel;
arc---archivelog
pply
switchover---
switchover to <備庫名>
參數設置:
log_archive_config='dg_config(pridb_unique_name,stddb_unique_name,...)' //dg中有哪些成員哪幾個備庫,10g最多9個,11g最多30個
log_archive_dest_n[1...31] //指定日誌存放的路徑
log_archive_dest_1=locationg='/' db_unique_name=' 主庫名'; //表示主庫的日誌存放的路徑
log_archive_dest_2=service='service_names' db_unqiue_name='std(備庫名字)' ; //須要在備庫設置
SQL> show parameter log_archive_dest; //enable表示日誌路徑可用,disable表示日誌路徑不可用服務器
SQL> show parameter log_archive_min; //日誌傳遞最小成功數至少要保證有多少個備庫能傳遞成功,有多少個備庫值就設置爲幾 NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_min_succeed_dest integer 1
備庫:
rfs:備庫接收進程,若是主庫沒有傳遞日誌過來,備庫主動去抓取日誌過來。
須要設置幾個參數 (fetch archive log=fal)
fal_client=db_unique_name(備庫pri)
fal_server=db_unique_name(主庫std)
log_archive_dest_1=location='/' db_unique_name=(std) //只有備庫要切爲主庫時才須要設置他
log_archive_dest_2=service='service_names' db_unqiue_name='pri';
log_archive_config='dg_config(pri[send|nosend],std[receive|noreceive])';
若是要傳送鏈接日誌,須要在主庫中 須要設置
log_archive_dest_2=service='service_names' <arc async>|<lger sync 表示傳的logbuffer中的內容|async表示傳的是online中的內容 |<delay|nodelay>表示是否容許有延遲> db_unqiue_name='pri';
網絡
SQL> show parameter fal_
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
fal_client string
fal_server string
SQL> session
2.角色轉換服務
1>switchover :正常切換
主庫和備庫均可以正常工做時,通常用在硬件或軟件升級時,主庫切爲備庫,備庫切爲主庫
2>failover:故障切換
主庫出了問題,沒辦法提供對外服務,須要將備庫切換爲主庫,原來的主庫將不是DG成員,切換完成後,11g中可對原來的主庫進行實例化,或者設置爲備庫再用switchover切換成主庫
3.保護模式
1>最大保護模式 ---工做在這種模式可保證數據零丟失,主庫作了任何操做,主庫中的online log都必須傳遞到備庫聯機日誌中,不然主庫不能進行事務提交。若是有緣由沒法傳遞到備庫中,備庫沒法訪問,主庫將會直接當機。
開機順序:備庫---主庫
關機順序:主庫---備庫
2>最大性能模式---主庫所作任何操做,能夠不當即傳遞到備庫中去,能夠容許有延遲。備庫接收到日誌後,也能夠當即應用,也能夠延遲應用
開關機順序沒有影響
3>最大可用性能模式---能夠保證數據的零丟失,主庫中作的操做必須將聯機日誌成功傳遞到備庫,才能夠作事務提交,若是備庫沒法訪問時,會自動轉移到最大性能模式,直到備庫恢復後,又恢復回來
開機順序:備庫---主庫
關機順序:主庫---備庫
架構
SQL> select protection_mode from v$database; //查看數據工做在什麼模式下
PROTECTION_MODE
--------------------
MAXIMUM PERFORMANCEoracle
架構:主庫和備庫的平臺必須一致,操做系統位數必須一致,系統版本可存在差別
數據庫的版本也必須一致
服務器硬件也最好同樣
切換-----必須一致【內存,硬盤,cpu】
備份-----能夠不一致【備份的空間必須足夠】
主備切換
一、sqlplus 命令方式,要求很是高,命令一個都不能錯 (推薦)
二、oem 要求網絡必須好,配置好oem,要求cpu必須足夠,點鼠標的方式,不太推薦
三、dgbroker 工具,須要配置 (推薦)
app
步驟:
主庫
1.修改參數
2.主備開啓強制日誌記錄
3.備庫若是爲邏輯備庫,須要在主庫開啓附加日誌 【物理備庫不須要這一步】
4.打開閃回功能【快照備庫須要】
5.配置網絡
6.備份【10g須要11g不須要】
7.打開dgbroker功能【要使用dgbroker搭建dg】
8.建立備庫聯機日誌【1.備庫要時時應用日誌 using curent logfile 2.作切換,備變主,主變備】
備庫:
1.安裝和主如出一轍的環境
2.修改參數,將備庫加入DG中
3.準備參數文件
4.拷貝主庫密碼文件到備庫
5.建立存放備庫文件目錄
6.配置網絡
7.rman克隆備庫
8.配置DG,可使用dgbroker功能
9.驗證數據的同步
1.主庫
startup mount;//啓動到mount
alter database archivelog; //打開歸檔模式
alter database open
SQL> archive log list; //查看歸檔模式是否已經開啓
alter system set db_unique_name=pupdb scope=spfile;//修改數據庫名字
show parameter log_archive_c
alter system set log_archive_config='dg_config=(pupdb,supdb)'; //給主備命名
shutdown immediate
startup
show parameter log_archive_
select force_logging from v$database ;//查看強制日誌記錄是否打開
alter database force logging ;//打開強制日誌記錄,nologging 關閉強制記錄
show parameter db_u
show parameter service_n
配置網絡:
[oracle@64ora ~]$ vim /u01/grid/11g/network/admin/listener.ora
# listener.ora Network Configuration File: /u01/grid/11g/network/admin/listener.ora # Generated by Oracle configuration tools. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = updb.com) (ORACLE_HOME = /u01/oracle/11g) (SID_NAME = updbdb) ) (SID_DESC = (GLOBAL_DBNAME = pupdb) (ORACLE_HOME = /u01/oracle/11g) (SID_NAME = updb) ) (SID_DESC = (GLOBAL_DBNAME = updb_DGMGRL) (ORACLE_HOME = /u01/oracle/11g) (SID_NAME = updb) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 64ora.com)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) ADR_BASE_LISTENER = /u01/oracle ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON # line added by Agent
全局數據庫名
<show patameter db_n> + <show parameter db_domin>
[oracle@64ora ~]$ vim /u01/oracle/11g/network/admin/tnsnames.ora
PUPDB = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.224.135)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = pupdb) ) ) SUPDB = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.224.136 )(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = supdb) ) )
建立備庫聯機日誌,須要比主庫多一個組
alter database add standby logfile group 11 ‘/u01/oracle/oradata/updb/sredo01.log’ size 50m
alter database add standby logfile group 12 ‘/u01/oracle/oradata/updb/sredo02.log’ size 50m
alter database add standby logfile group 13 ‘/u01/oracle/oradata/updb/sredo03.log’ size 50m
alter database add standby logfile group 14 ‘/u01/oracle/oradata/updb/sredo04.log’ size 50m
select group# from v$standby_log; SQL> select group# from v$standby_log; GROUP# ---------- 11 12 13 14 alter system switch logfile
備庫:(沒有庫)
create pfile from spfile ;//從主庫拷一個到備庫
vim /initupdb.ora
compatible //軟件版本留下
*.control_files='/u01/oracle/oradata/updb/control01.ctl','/u01/oracle/ //軟件版本留下 *.fast_recovery_area/updb/control02.ctl' *.db_block_size=8192 *.db_domain='com' *.db_name='updb' *.db_recovery_file_dest='/u01/oracle/fast_recovery_area' *.db_recovery_file_dest_size=4322230272 *.db_unique_name='SUPDB' *.diagnostic_dest='/u01/oracle' *.log_archive_config='dg_config=(pupdb,supdb)' *.undo_tablespace='UNDOTBS1'
建立路徑:
[root@64clone dbs]# mkdir /u01/oracle/oradata/updb -p
[root@64clone dbs]# mkdir /u01/oracle/fast_recovery_area/updb -p
[root@64clone dbs]# mkdir /u01/oracle/admin/updb/adump -p
[root@64clone dbs]# mkdir /u01/oracle/admin/updb/dpdump -p
建立密碼文件:
cd /u01/oracle/11g/dbs
orapwd file=orapwdupdb password=oracle
網絡配置:
[root@64clone dbs]# vim /u01/oracle/11g/network/admin/tnsnames.ora
PUPDB = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.224.135)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = pupdb) ) ) SUPDB = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.224.136 )(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = supdb) ) )
[root@64clone dbs]# vim /u01/grid/11g/network/admin/listener.ora
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = updb) (ORACLE_HOME = /u01/oracle/11g) (SID_NAME = updb) ) (SID_DESC = (GLOBAL_DBNAME = supdb) (ORACLE_HOME = /u01/oracle/11g) (SID_NAME = updb) ) (SID_DESC = (GLOBAL_DBNAME = supdb_DGMGRL) (ORACLE_HOME = /u01/oracle/11g) (SID_NAME = updb) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 64clone.com)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) ADR_BASE_LISTENER = /u01/oracle ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON # line added by Agent
重啓監聽
startup nomount
rman target sys/oracle@pupdb auxiliary sys/oracle@supdb
r>>duplicate target database for standby nofilenamecheck from active database;
rman完成後,備庫默認進入mount模式
select open_mode,database_role from v$database; //能夠看到是什麼庫
show parameter broke_
alter system set dg_broker_start=true; //主備都要打開db_broker_start 功能
create spfile from pfile //用文本參數文件建立一個二進制參數文件
dgmgrl sys/oracle@pupdb //主備均可完成
d>>help //查看裏面的命令
d>>help create //查看如何建立
d>>create configuration dgc as primary database is pupdb connect identifier is pupdb(鏈接字符串,即tnsname裏面定義的鏈接別名);
d>>help add //查看如何建立備庫
d>>add database supdb as connect identifier is supdb maintained as physical;
d>>show configuration; //查看DG 狀況
DGMGRL> show configuration; Configuration - dgc Protection Mode: MaxPerformance Databases: pupdb - Primary database supdb - Physical standby database Fast-Start Failover: DISABLED Configuration Status: DISABLED
d>>show database verbose pupdb
修改日誌傳輸的模式和standbyFile //主備都要修改
d>>show database verbose pupdb
d>>edit database pupdb set property logxptmode=sync
d>>edit database pupdb set propery standbyfilemanagement=auto;
d>>edit database supdb set property logxptmode=sync
d>>edit database supdb set propery standbyfilemanagement=auto;
d>>enable configuration //啓用配置
d>>show configuration
d> show database verbose supdb //
Database Status:
SUCCESS
有success才代表成功了,如過不成功查看錯誤緣由,若是備庫是因爲參數文件致使的,那麼
備庫中用spfile 傳建一個pflie
startup mount
再執行enabel configuration 命令
驗證:
desc v$archived_log //能夠經過比對日誌號是否相同
select sequence#,applied from v$archived_log
主備切換的兩種方式:
在dgbroker 中切換主備
d>>switchover to supdb
select open_mode,database_role from v$database ;
手動切庫
1.primary---standby
查看主備日誌是否同步了,肯定兩個庫的主備關係
select sequence#,applied from v$archived_log
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 //備庫
主庫:
alter database commit to switchover to physical standby [with session shutdown]; //在主庫中切換,with session shutdown 其餘用戶不能夠作操做了
shutdown immediate
startup nomount
alter database mount standby database ;
2.standby---primary
備庫:
alter database commit to switchover to primary with session shutdown
shutdown immediate
startup
3.新備庫中執行
alter database recover managed standby database disconnect from session;//在備庫中應用主庫傳來的日誌,mrp進程作塊恢復的操做
或
alter database recover managed standby database using current logfile disconnect from session; //前提是必須是要有聯機日誌
驗證:切換日誌,而後再驗證
切完以後在咱們的dgbroker 中已經不可以認出主備庫了,咱們只有刪掉主備裏的dg參數文件,從新建一次
SQL> show parameter dg_
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
dg_broker_config_file1 string /u01/oracle/11g/dbs/dr1PUPDB.d
at
dg_broker_config_file2 string /u01/oracle/11g/dbs/dr2PUPDB.d
at
dg_broker_start boolean TRUE
SQL> alter system set dg_broker_start=false;
再根據參數文件的路徑,刪掉參數文件的物理文件
登陸到dgbroker裏,從新進行DG的搭建。
主庫掛掉了
把備庫的ip地址改成主庫的
d>help failover
手動切庫
1.standby---primary
備庫
alter database commit to switchover to primaty with session shutdown;
shutdown immediate
startup
2.主庫已經沒辦法用了。咱們就從新克隆庫,再搭建dg
主
1.alter database archivelog
2.alter database force logging //強制日誌記錄
3.alter system set log_archive_config='dg_config=(pupdb,supdb)';
alter system set log_archive_dest_1=location='/u01/orache/arc' db_unique_name=pupdb;
alter system set log_archive_dest_2=service=supdb [lgwr sync 默認傳歸檔,加上傳聯機]db_unique_name=supdb;
alter system set standby_filemanagement=auto;
alter system set db_unique_name=pupdb scope=spflie;
alter system set fal_service=pupdb;
<alter system set fal_client=supdb;>
重啓數據庫
4.配置網絡,不用配置dg_broker的網絡
5.tnsping pupdb|tnsping supdb
6.備份(10g,9i)
備:
1.alter database archivelog
2.alter database force logging //強制日誌記錄
3.alter system set log_archive_config='dg_config=(pupdb,supdb)';
alter system set log_archive_dest_1=location='/u01/orache/arc' db_unique_name=supdb;
alter system set log_archive_dest_2=service=pupdb [lgwr sync 默認傳歸檔,加上傳聯機]db_unique_name=supdb;
alter system set standby_filemanagement=auto;
alter system set db_unique_name=pupdb scope=spflie;
alter system set fal_service=pupdb;
alter system set fal_client=supdb;
重啓數據庫
2.拷貝主庫的密碼文件
3.配置網絡
4.rman 克隆
5.驗證
alter database recover managed standby database disconnect from session;
alter database recover managed standby database using current logfile disconnect from session; //兩條任選一條,運用日誌
alter database recover managed standby database cancel; //取消運用日誌
在sqlplus 中作的切庫操做,不會寫如到dgbroker 中的參數文件裏,因此用sqlplus切庫後,在dgbroker中是不會有改變的
1. 在dgbroker中物理備庫轉爲快照備庫/將快照備庫轉爲物理備庫
d>>help convert
2.在sqlplus 中 物理備庫---->快照備庫
1>搭建一個物理備庫
2>停物理備庫日誌應用
alter database recover managed standby database cancel;
3>一致性關閉數據庫,啓動到mount;
select open_mode from v$database ; //若是數據庫原本就是mount狀態,就無需關機這一步
4> 轉換物理備庫爲快照備庫
alter database convert to snapshot standby;
5>打開快照備庫
alter database open ;
能夠在快照備庫裏作測試操做
測試完畢後
快照備庫----->物理備庫
1>關閉快照備庫
shutdown immediate
startup mount
2>將快照備庫轉爲物理備庫
alter database covert to physical standby ;
shutdown immediate;
startup mount;
3>從新啓用物理日誌
alter database recover managed standby database disconnect from session
1.sqlplus 中 物理備庫---->邏輯備庫
1> 備庫
停掉日誌應用
alter databse recover managed standby database cancel
2>主庫:
exec dbms_logstdby.build ;//在主庫生成logminer 的數據字典
3>備庫
啓動到mount狀態
startup mount
alter database recover to logical standby apply immediate //將物理備庫轉爲邏輯備庫,當即應用日誌
alter database open resetlogs;
alter database start logical standby apply; //啓用歸檔日誌
或
alter database start logical standby apply immediate; //啓用聯機日誌
打開主庫的附加日誌功能
2.sqlplus 中 邏輯備庫---->主庫
switchover ---logical
1>logical standby
alter database prepare to switchover to primary ; //邏輯備庫切換前的準備操做
select database_role from v$database;//角色不會發生變化
2>primary
alter database perpare to switchover to logical standby ;//主庫切換前的準備操做
3>logical standby
alter database commit to switchover to primary; // 備庫切爲主庫
4>primary
alter database commit to switchover to logical standby; //主庫切爲備庫
alter database start logical standby apply [immediate];
failover--- 1>logical standby alter database prepare to switchover to primary ; alter database commit to switchover to primary;