dataguard搭建過程


物理Standby和邏輯Standby

1. 物理Standby
Redo Apply: 通過oracle的恢復機制,基於數據庫級別應用redo數據,要求數據庫在mount狀態,不能open。
Read Only: 可以以read only模式打開,以便在standby執行查詢等操作,此時雖然還可以接收redo,但無法應用,直到切換回redo apply狀態才可以再應用。
Read Write: 可臨時性的以read write模式打開,此時日志不傳輸也不應用,如果設置了flashback area,閃回恢復至read write前狀態后,又可以進行redo apply了。
優點: 
1) 可保證standby和primary物理級別上的完全一致性。
2) 效率高,因為是使用最底層的塊級別上的復制。
缺點:
1) 在與primary同步時,standby不能open,無法分擔primary上的負載。

2. 邏輯Standby
SQL Apply: 從redo 日志中提取SQL語句應用,數據庫處於open(read write)模式下。
優點: 
1) 在與primary同步時,standby處於open狀態,可分擔primary上部分的查詢和報表服務。
缺點:
1) standby和primary的物理結構不一致,且對某些數據和SQL語句有限制。
2) 效率較低,因為是執行SQL語句。

===========================
以上寫的都是10中的特性,在11g中,dataguard有了新特性:
物理standby在以read only模式打開的同時,還可以做redo apply,類似於邏輯standby的特點。

 下面開始搭建過程:

Oracle Dataguard step by step

 

 

1、將DB服務器設置為歸檔模式,使用以下命令:

Shutdown immediate

Startup mount

Alter database archivelog;

Alter database open;

Archive log list;(查看歸檔狀態)

 

2、設置DB服務器為force logging模式,使用如下命令;

alter database force logging;

select force_logging from v$database;(查看設置狀態)

 

 

3、同步密碼文件;

Orapwd file=D:\oracle\1120\database\pwdorcl.ora password=orcl10g entries=10

並把新生產的密碼文件復制到備庫D:\oracle\1020\database\下

 

 

4、編輯DB服務器上的D:\oracle\admin\pfile\initorcl.ora文件,添加以下內容:

 

#Primary Database Primary role Parameters

db_unique_name=production

log_archive_dest_1 = 'location=d:\oracle\admin\archive valid_for=(all_logfiles,all_roles)                 

log_archive_dest_2='SERVICE=standby LGWR ASYNC valid_for=(online_logfiles, primary_role) db_unique_name=standbydb'

log_archive_dest_state_1=ENABLE

log_archive_dest_state_2=enable

#log_archive_dest_state_2=defer

log_archive_format = %%ORACLE_SID%%T_%TS%S%R.ARC

remote_login_passwordfile=exclusive

 

#Primary Database Standby role Parameters

fal_server=standby

fal_client=production

#standby_archive_dest='D:\oracle\admin\archive\standby'

standby_file_management=auto

log_file_name_convert=('d:\oracle\oradata\','d:\oracle\oradata\')

db_file_name_convert=('d:\oracle\oradata\','d:\oracle\oradata\')

注意:歸檔日志文件(ARC文件)與數據文件(DBF文件)不能存放在同一物理設備上。

 

5、備份DB服務器上的D:\oracle\1020\network\admin\tnsnames.ora文件

6、編輯DB服務器上的D:\oracle\1020\network\admin\tnsnames.ora文件,添加以下內容:

standby =

(DESCRIPTION =

  (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = Standby服務器名或IP地址 )(PORT = 1521))

  )

  (CONNECT_DATA =

    (SERVICE_NAME = orcl)

  )

)

 

 

7、在DB服務器上建立standby日志文件,使用以下命令;

ALTER DATABASE ADD STANDBY LOGFILE 'd\oracle\oradata\stby_redo1.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo2.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo3.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo4.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo5.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo6.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo7.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo8.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo9.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo10.rdo' SIZE 104857600;

ALTER DATABASE ADD STANDBY LOGFILE 'd:\oracle\oradata\stby_redo11.rdo' SIZE 104857600;

 

注意:Standby日志文件應建立11組。(要比主庫上的redo日志多一組)

 

以下命令為查看日志狀態及數據庫狀態:

Select member, group# from v$logfile;

Select controlfile_type,open_mode from v$database;

 

 

 

8、在DB服務器上建立standby服務器的控制文件,使用以下命令:

Alter database create standby controlfile as ‘d:\control01.ctl’;

 

9、在DB服務器及Standby服務器上停止Oracle Service;

shutdown immediate;

 

10、將DB服務器上的數據庫文件拷貝到Standby服務器上;

    復制DB服務器數據文件 d:\oracle\oradata 到Standby d:\oracle\oradata    

這里采用的是冷備的方式,也可以用rman的duplicate 在線復制

rman target sys/oracle@production auxiliary sys/oracle@standby nocatalog
duplicate target database for standby from active database nofilenamecheck;

 

11、復制第9步建立的控制文件到Standby服務器

Copy D:\control01.ctl to Standby Server d:\oracle\oradata\control01.ctl

Copy D:\control01.ctl to Standby Server d:\oracle\oradata\control02.ctl

 

12、在DB服務器上啟動oracle

13、備份Standby服務器上的D:\oracle\1020\database\initorcl.ora文件;

 

14、在Standby服務器編輯D:\oracle\1020\database\initorcl.ora文件,增加以下內容;

#Standby Database standby role parameters

db_unique_name=standby

fal_server=production

fal_client=standby

log_file_name_convert=('d:\oracle\oradata\','d:\oracle\oradata\')

db_file_name_convert=('d:\oracle\oradata\','d:\oracle\oradata\')

standby_archive_dest='D:\ORACLE\admin\archive\standby'   ------該參數在11g中棄用,

standby_file_management=AUTO

 

# Standby database primary role parameters

log_archive_dest_1 = 'location=d:\oracle\admin\archive valid_for=(all_logfiles,all_roles)                 

log_archive_dest_2='SERVICE=production LGWR ASYNC valid_for=(online_logfiles, primary_role) db_unique_name=prodb'

log_archive_dest_state_1=ENABLE

log_archive_dest_state_2=defer

#log_archive_dest_state_2=ENABLE

log_archive_format = %%ORACLE_SID%%T_%TS%S%R.ARC

remote_login_passwordfile=exclusive

 

15、備份Standby服務器上的D:\oracle\1020\network\admin\tnsnames.ora文件

16、在Standby服務器編輯D:\oracle\1020\network\admin\tnsnames.ora文件,增加以下內容:

production =

(DESCRIPTION =

  (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = ‘DB服務器名或IP地址’)(PORT = 1521))

  )

  (CONNECT_DATA =

    (SID = orcl)

  )

)

 

 

17、將Standby服務器上的Oracle用NOMOUNT狀態啟動;

Shutdown immediate;

Startup nomount;

 

18、激活Managed recovery Process (MRP),用以下命令: 取消mrp: alter database recover managed standby database cancel;

Alter database mount standby database;

Alter database recover managed standby database disconnect from session;

 

19、驗證tnsname

Tnsping production (在Standby服務器上執行)

Tnsping standby(在DB服務器上執行)

 

20、在DB服務器和Standby服務器上驗證角色狀態

Select controlfile_type,open_mode from v$database;

DB 服務器顯示如下內容:

 

Standby顯示如下內容:

 

 

21、檢查日志的傳輸及應用

在DB服務器上執行如下命令:

Alter system switch logfile;

Archive log list;(注意歸檔日志序列號)

在Standby服務器上執行如下命令;

Select sequence#,name,applied from v$archived_log;(注意歸檔日志是否全部應用,歸檔日志序列是否最后一個)

 

 

 

dataguard --swithover 和failover的說明:

 

 

SWITCHOVER

Switchover是有計划的將primary切換為standby,standby切換為primary.在主庫結束生產后,備庫應用完所有主庫archivelog或者redo log后進行切換,不丟失數據。

常用場景:

(1) 有計划的災備切換演練,如測試災備站點的可用性,客戶端連接等,確保主庫發生重大意外時,可以切換至備庫正常運轉。

(2) 主庫長時間的維護升級,如OS升級,DB滾動升級,更換存儲,更換OS硬件設備等。

(3) 切換有風險,一般不做切換。

FAILOVER

Failover通常在主庫突發故障,短時間無法解決,考慮到備庫的可用性,數據丟失的容忍度,迫切需要向外提供數據庫服務時進行Failover.

Failover前,如果數據庫沒有操作在最大保護模式,可能發生數據丟失。

Failover前,需要將准備Failover的備庫置於最大性能模式。

Failover前,盡量應用所有的主庫重做數據,減少數據丟失。

Failover后,原主庫將從DG配置中刪除,如果原主庫啟用了Flashback,則在修復故障后,故障的數據庫可恢復為新的standby數據庫。

 

Oracle11.2之前,可以拷貝primary的online redo log到standby做recover,從Oracle11.2開始,Oracle提供了flush redo到standby的功能,當primary不能OPEN時,啟動到mount狀態,standby redo apply處於激活狀態,執行以下語句flush redo到standby,以此來減少數據丟失:

SQL> alter system flush redo to target_db_name; 

 

具體切換過程

①switchover-----無損轉換

1、檢查primary數據庫是否支持切換成standby

   SQL>Select switchover_status from v$database;

   如果支持則status狀態為  To standby 或session active(當前有用戶連接)

2、啟動switchover

   SQL>alter database commit to switchover to standby/physical standby with session shutdown;

3、SQL>shutdown immediate

   SQL>startup mount

 

4、檢查standby庫是否支持切換

   SQL>Select switchover_status from v$database;

       如果支持則status狀態為  To primary或session active(當前有用戶連接)或switchover pending              (standby庫沒有啟用redo應用)

       如果為switchover pending狀態則需要執行啟用redo日志應用:

   SQL>alter database recover managed standby database disconnect from session;

5、轉換角色到primary

   SQL>alter database commit to switchover to primary with session shutdown;

   SQL>alter database open;

 

②failover-----會丟失數據

執行failover后原primary庫將不再是dataguard中的一部分,所以在執行failover之前,盡可能將原primary庫中的redo文件(含聯機重做日志文件和歸檔日志文件)都復制到standby庫

1、如果待轉換的standby庫處於maximum protection模式,需要切換到maximum performence模式

SQL>alter database set standby database to maximum performence;

2、檢查歸檔日志是否連續

   查詢待轉換standby庫(原primary)的v$archive_gap,確認歸檔文件是否連續

SQL>select thread#,low_sequence#,high_sequence# from v$archive_gap;

如果有返回記錄,則按照列出的記錄號復制對應的歸檔日志到待轉換的standby服務器

文件復制過去后在待轉換的standby服務器上執行:

SQL>alter database register physical logfile ‘filespec1’;

3、檢查歸檔文件是否完整

分別在兩台服務器上執行:

SQL>select distinct thread#,max(sequence#)  over(partition by thread#) a from v$archive_log;

4、啟動failover

SQL>alter database recover managed standby database finish force;

5、切換物理standby為primary

SQL>alter database commit to switchover to primary;

6、啟動新的primary

如果當前庫為mount則直接open,如果為read only,則要先shutdown再open

完!

================================================================================

Standby Redo Log就是在Standby端應用傳遞Redo Log過程中,逐步執行的online redo log。Standby端雖然也有online redo log,但是在redo apply應用的過程中,是不使用online redo log的。即使是11g Active Data Guard支持apply中讀取standby數據,這個操作也是read-only的,並不涉及當前實例redo log的生成(注意是生成)。所以,如果一直是在Standby角色,online redo log是不需要的。

 
Primary傳遞過來的redo log信息,是存放在standby redo log組內進行apply的。並且隨着主庫Primary日志的切換動作而切換。這也就是為什么推薦standby redo log的大小和Primary online redo log的大小保持一致的原因。

 

Oracle Dataguard提供了三種數據保護模式,上述采用的最大性能模式。

1.最大保護模式
1)這種模式提供了最高級別的數據保護能力;
2)要求至少一個物理備庫收到重做日志后,主庫的事務才能夠提交;
3)主庫找不到合適的備庫寫入時,主庫會自動關閉,防止未受保護的數據出現;
優點:該模式可以保證備庫沒有數據丟失;
缺點:主庫的自動關閉會影響到主庫的可用性,同時需要備庫恢復后才能提交,對網絡等客觀條件要求非常的高,主庫的性能會因此受到非常大的沖擊。

2.最大可用性模式
1)該模式提供了僅次於“最大保護模式”的數據保護能力;
2)要求至少一個物理備庫收到重做日志后,主庫的事務才能夠提交;
3)主庫找不到合適的備庫寫入時,主庫不會關閉,而是臨時降低到“最大性能模式”模式,直到問題得到處理;
優點:該模式可以在沒有問題出現的情況下,保證備庫沒有數據丟失,是一種折中的方法;
缺點:在正常運行的過程中缺點是主庫的性能受到諸多因素的影響。

3.最大性能模式
1)該模式是默認模式,可以保證主數據庫的最高可用性;
2)保證主庫運行過程中不受備庫的影響,主庫事務正常提交,不因備庫的任何問題影響到主庫的運行;
優點:避免了備庫對主數據庫的性能和可用性影響;
缺點:如果與主庫提交的事務相關的恢復數據沒有發送到備庫,這些事務數據將被丟失,不能保證數據無損失;

  最大保護 最大可用 最大性能
對主數據庫性能影響 較高 較高
對網絡鏈路要求 極高
備份數據庫發生故障 主數據庫不可用 無影響 無影響
數據保護 無數據丟失   基本無數據丟失 少量數據丟失

 

 

 

 

 

修改數據保護模式步驟

1)關閉數據庫,重啟到Mount 狀態,如果是RAC,需要關閉所有實例,然后只啟動一個實例到mount狀態。

2)修改模式:

語法:ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE {PROTECTION | AVAILABILITY | PERFORMANCE}; 

如:SQL>ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;

3) 打開數據庫: alter database open;

4) 確認修改數據保護模式:

SQL>select protection_mode,protection_level from v$database; 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM