天天看點

Oracle12c DataGuard 實體備庫的簡單配置

一.oracle data guard 主要用于確定企業資料的高可用,資料保護和容災恢複。

二.典型的dg 配置包含一個主庫和一個或若幹個備庫。主庫用于正常的企業操作使用,并且将redo 資料傳送到備庫中。備庫可以在遠端機器上,也可以再本機。通常配置如下圖

Oracle12c DataGuard 實體備庫的簡單配置

三.data guard 的保護模式

①Maximum availability這種保護模式提供了最進階别的資料保護,不惜犧牲主庫的可用性。在這種模式下,隻有主庫産生的需要recover的那些redo data 至少寫入到了一個相同步的standby database 的standby redo log裡,主庫的事務才會送出。這種模式確定了資料的零丢失

②Maximum performance這種模式是data guard預設的保護模式,也算是最進階别的保護模式,不過不會影響主庫的性能。隻要事物産生的那些redo data 被寫到了online log上事物就可以送出。這些redo data也需要向其他一個或多個的備庫寫,它可以和事物送出不同步。是以主庫的性能在向備庫寫 redo data時不會受到影響。

③Maximum protection這種模式可以 確定當主機當機時沒有資料丢失。這種模式是在送出事物之前必須将要恢複的redo data寫入到online log  和至少一個的standby database中,為了防止資料丢失,當redo data無法寫入到被庫時,主庫直接shutdown。

四.配置

主庫

IP:                                               192.168.163.139

sid:                                              eras

db_unique_name:                        primary

備庫

IP:                                              192.168.163.140

sid:                                               eras

db_unique_name                          standby

1.資料庫設定為歸檔模式,歸檔目錄/home/oracle/archivelog/

關閉資料庫,重新開機加載 sql>shutdown immediate;              sql>startup mount;

設定歸檔,并建立歸檔目錄sql>alter database archivelog;                                                    sql>!mkdir -p /home/oracle/archivelog

設定主備參數 sql>alter system set log_archive_dest_1=’location=/home/oracle/archivelog/ valid_for=(all_logfiles,all_roles) db_unqique_name=primary’ scope=spfile;      (主庫)

sql>alter system set  log_archive_dest_1=’location=/home/oracle/archivelog/ valid_for=(all_logfiles,all_roles) db_unique_name=standby’ scope=spfile;   (備庫)

設定歸檔日志格式sql>alter system set log_archive_format=’%t_%s_%r.arc’ scope =spfile;

sql>alter system set remote_login_passwordfile=exclusive scope =spfile;

sql> alter database open

sql>alter system archive log start;

2.啟用資料庫閃回功能

檢視閃回目錄sql>show parameter db_recovery_file_dest;

修改閃回目錄打下sql>alter system set db_recovery_file_dest_size=10G;

檢視閃回功能的啟用狀态sql>select flashback_on from v$database;

啟用閃回功能sql>alter database flashback on;

3.檢視data guard是否安裝,如未安裝,需安裝

sql>select * from v$option where parameter=’Oracle Data Guard’;

4.設定強制記錄日志

sql>alter database force logging;

5.設定自動管理備庫檔案

sql>alter system set standby_file_management=’AUTO’;

6.添加日志檔案組

在建立standby logfile時需要注意,standby logfile的大小不小于online redo log files的大小

查詢 online redo log files 的大小 sql>select group#,bytes/1024/1024 as M from v$log;

一般,standby logfiles 日志檔案組數要比primary資料庫的online redo log files 日志檔案組數至少多一個。

※不建議組号group#緊挨着online redo log file的組号,可以從11到14建立standby logfile

建立目錄dg

sql>!mkdir /u01/app/oracle/oradata/eras/dg

sql>!chmod 777 /u01/app/oracle/oradata/eras/dg

添加日志檔案組

sql>alter database add standby logfile group 11 ‘/u01/app/oracle/oradata/eras/dg/standby11.log’ size 50M;

sql>alter database add standby logfile group 12 ‘/u01/app/oracle/oradata/eras/dg/standby12.log’ size 50M;

sql>alter database add standby logfile group 13 ‘/u01/app/oracle/oradata/eras/dg/standby13.log’ size 50M;

sql>alter database add standby logfile group 14 ‘/u01/app/oracle/oradata/eras/dg/standby14.log’ size 50M;

※以上所有步驟,出标有主備的其他的主備庫都一樣。都需要執行一遍。

7.配置db_unique_name

先檢視db_unique_name    sql>show parameter db_unique_name;

主庫: sql>alter system set db_unique_name=’primary’ scope=spfile;

備庫:   sql>alter system set db_unique_name=’standby’ scope=spfile;

名字加上引号儲存的就是小寫的,不加引号會自動儲存成大寫。

8.配置fal_server

主庫:  sql>alter system set fal_server=’standby’ scope=spfile;

sql>alter system set log_archive_config=’dg_config=(primary,standby)’ scope=spfile;

備庫:  sql>alter system set fal_server=’primary’ scope=spfile;

sql>alter system set log_archive_config=’dg_config=(primary,standby)’ scope=spfile;

9.配置重做日志到備庫

主庫: sql>alter system set log_archive_dest_2=’service=standby async valid_for=(online_logfiles,primary_role) db_unique_name=standby’ scope=spfile;

備庫: sql>alter system set log_archive_dest_2=’service=primary async valid_for=(online_logfiles,primary_role) db_unique_name=primary’ scope=spfile;

10.複制主庫密碼檔案到備庫

密碼檔案位置為$ORACLE_HOME/dbs/orapweras

//生成密碼檔案(如果沒有的話)

//orapwd file=$ORACLE_HOME/dbs/orapweras password=Oracle1521

關閉主備庫

sql>shutdown immediate;

複制檔案

scp  /u01/app/oracle/product/12.1.0.2/db_1/dbs/orapweras   [email protected]:/u01/app/oracle/product/12.1.0.2/db_1/dbs

提示輸入密碼

備庫oracle使用者的密碼輸入即可

11.複制主庫standby控制檔案到備庫

備庫控制檔案在兩個地方,是以需要複制兩次

/u01/app/oracle/oradata/eras/control01.ctl

/u01/app/oracle/fast_recovery_area/eras/control02.ctl

關閉主備庫sql>shutdown immediate;

主庫

生成standby控制檔案

sql>startup mount;

sql>alter database create standby controlfile as ‘/home/oracle/standby.ctl’;

sql>shutdown immediate;

複制改檔案到備庫

scp /home/oracle/standby1.ctl [email protected]:/u01/app/oracle/oradata/eras/control01.ctl

scp  /home/oracle/standby1.ctl  [email protected]:/u01/app/oracle/fast_recovery_area/eras/control02.ctl

12.配置主備庫的listener.ora、tnsnames.ora檔案

路徑:$ORACLE_HOME/network/admin/listener.ora

(配置完後,主庫終端執行tnsping standby,備庫終端執行tnsping primary 如果都為ok則配置成功)

主庫

vim $ORACLE_HOME/network/admin/listener.ora

SID_LIST=LISTENER=

(SID_LIST=

(SID_DESC=

(

(GLOBAL_DBNAME=primary)

(ORACLE_HOME=/u01/app/oracle/product/12.1.0.2/db_1)

(SID_NAME=eras)

)

)

)

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.163.139)(PORT = 1521))

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

)

)

vim $ORACLE_HOME/network/admin/tnsnames.ora

primary=

(DESCRIPTION=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.163.139)(PORT=1521))

)

(CONNECT_DATA=

(SERVICE_NAME=primary.localdomain)

)

)

standby=

(DESCRIPTION=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.163.140)(PORT=1521))

)

(CONNECT_DATA=

(SERVICE_NAME=standby.localdomain)

)

)

備庫

vim $ORACLE_HOME/network/admin/listener.ora

SID_LIST=LISTENER=

(SID_LIST=

(SID_DESC=

(

(GLOBAL_DBNAME=standby)

(ORACLE_HOME=/u01/app/oracle/product/12.1.0.2/db_1)

(SID_NAME=eras)

)

)

)

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.163.140)(PORT = 1521))

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

)

)

vim $ORACLE_HOME/network/admin/tnsnames.ora

primary=

(DESCRIPTION=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.163.139)(PORT=1521))

)

(CONNECT_DATA=

(SERVICE_NAME=primary.localdomain)

)

)

standby=

(DESCRIPTION=

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.163.140)(PORT=1521))

)

(CONNECT_DATA=

(SERVICE_NAME=standby.localdomain)

)

)

重新開機監聽

先重新開機備庫

lsnrctl stop

lsnrctl start

後重新開機主庫

lsnrctl stop

lsnrctl start

13.複制主庫檔案到備庫(保證主備庫資料檔案一緻)

關閉主備庫sql>shutdown immediate;

主庫

scp –rp /u01/app/oracle/oradata/eras/*  [email protected]:/u01/app/oracle/oradata/eras

※複制時會把主庫的control01.ctl也複制到備庫中,這個檔案和步驟11生成的不一樣,是以仍需要在執行一次

scp /home/oracle/standby.ctl[email protected]:/u01/app/oracle/oradata/eras/control01.ctl

啟動與關閉physical standby database

  1. 啟動監聽

備庫

lsnrctl start

主庫

lsnrctl start

  1. 啟動資料庫

備庫

startup nomount;

alter databse mount standby database;

啟動redo應用

alter database recover managed standby database disconnect from session;

主庫

startup;

  1. 關閉

主庫

shutdown  immediate;

備庫

alter database recover managed standby database cancel;

shutdown immediate;

檢視資料庫狀态

select  name,open_mode,database_role,protection_mode from v$database;

檢查standby配置是否成功

1)确認主、備庫裡的歸檔目的地配置及傳送都是有效的

select dest_name,status,destination,error from v$archive_dest where dest_id<=2;

log_archive_dest_1和2狀态應該是valid

2)确認主庫重做日志是否被應用了。

select sequence#, first_time, next_time, applied, archived from v$archived_log;

如果歸檔和日志應用均正常,APPLIED 和 ARCHIVED 列都應該是 YES。如果沒有應用redo,applied應該是NO

3)檢查主庫是否有重做日志缺口

如果一切正常,應該傳回 VALID 和 NO GAP

select status, gap_status from v$archive_dest_status where dest_id = 2;

4)檢查主、備庫data guard狀态是否有錯

select * from v$dataguard_status order by timestamp;

5)測試日志序号是否正确

在主庫切換幾次日志:

alter system switch logfile;

檢視主庫日志序号:

select max(sequence#) from v$archived_log;

驗證備庫日志序号

select  max(sequence#) from v$archived_log;

備庫伺服器管理

啟動模式

  1. 啟動到管理模式

shutdown immediate;

startup nomount;

alter database mount standby database;

alter database recover managed standby database disconnect from session;

  1. 啟動到隻讀模式

shutdown immediate;

startup nomount;

alter database mount standby database;

alter database open read only;

  1. 管理恢複模式到隻讀模式(該模式是可以檢視備庫中接受的change,但redoapply不應用)

recover managed standby database cancel;

alter database open read only;

  1. 隻讀模式到管理恢複模式

recover managed standby database disconnect from session;

  1. 暫停

alter database recover managed standby database cancel;

  1. 關閉

alter database recover managed standby database cancel;

shutdown immediate;