ORACLE-----DG的搭建

數據庫容災
dg :dataguard
standby:備庫
 node

1、備庫分類:


物理備庫---主庫當中的數據同步到備庫中,只能工做在mount狀態 但在11g能夠工做在open狀態,不停的應用主庫傳遞過來的日誌
邏輯備庫---主庫傳遞到備庫中,作的是SQL應用,工做在open中,不會同步在主庫中
11g:快照備庫---經過咱們的物理備庫轉爲快照備庫,工做在open狀態,用來作測試
將物理備庫轉爲快照備庫,測試昨完後,將快照備庫轉爲物理備庫,咱們的快照備庫就不存在了
 sql

2、備庫工做原理:



全部的同步產品都是記錄數據塊的更改信息獲得日誌流(物理備庫),或者經過日誌挖掘獲得SQL語句來達到數據同步(邏輯備庫),根據產品的同步機制,來到達數據的同步。
日誌流數據同步(塊恢復的操做):物理同步即物理備庫,要求主庫的結構和備庫的結構是如出一轍,才能保證主庫中的數據和備庫中的數據如出一轍
日誌挖掘(邏輯備庫):主庫的結構和備庫的結構能夠不一致,不必定能達到時時同步
數據庫加了密,或者沒有打開附加日誌,日誌挖掘就會不全,備庫就沒辦法和主庫一致
 數據庫

3、四種搭建DG方式:


1.遠程/本地切換--經常使用
2.備份(經常使用)(rman備份用在數據量很少的狀況下,一般能在半個小時內完成備份,rman會消耗內存佔用I/O,超過半個小時,咱們就用DG的方式備份)
3.讀寫分離----lg 邏輯備庫11g開始
-----物理備庫也能夠作一些報表操做,日誌挖掘
4.測試---特別是數據庫開發的項目
邏輯備庫,11g可使用快照備庫
 vim

4、DG實現方式:


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

5、搭建方法:


步驟:
主庫
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

主備切換的兩種方式:

switchover---


在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的搭建。


 



 

failover----


主庫掛掉了
把備庫的ip地址改成主庫的
d>help failover

手動切庫
1.standby---primary
備庫
alter database commit to switchover to primaty with session shutdown;
shutdown immediate
startup
2.主庫已經沒辦法用了。咱們就從新克隆庫,再搭建dg






 

手工

11g—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=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;  

相關文章
相關標籤/搜索