oracle數據庫高可用配置之Data Guard(DG)基礎配置

   前言:本文爲oracle高可用配置中的DG基礎搭建,網上存在很多類似文章。但是看起來都比較累,沒有一個很簡單,清晰的脈絡,不太適合剛開始接觸的同學。本文是我剛開始學習DG的實驗筆記,希望能幫助理解,快速搭建出一個DG環境。


以下是總結的步驟,先看一遍然後再做一遍,最後回頭總結。

第一階段:核心處理
主:
修改歸檔模式
修改數據庫logging模式爲force
配置log_archive_config參數爲dg_config
配置本地歸檔路徑,
開啓本地歸檔路徑
配置遠端歸檔路徑
開啓遠端歸但路徑
os層面創建本地歸檔路徑目錄
配置tnsname.ora裏面的網絡標示符
傳送口令文件和參數文件到從庫
 
 
從:
修改系統環境變量,ORACLE_SID
修改主庫的參數文件*.db_name='orcl'
參數文件中修改:
*.db_name='orcl' #主庫的
db_unique_name='aux1' #唯一名爲從庫實例名
standby_file_management=auto #從庫的文件管理方式爲auto
audit_file_dest='/u01/app/oracle/admin/aux1/adump' #診斷文件的位置
control_files='/u01/app/oracle/oradata/aux1/control01.ctl' #控制文件的位置
db_file_name_convert='/home/oracle/coldbk/','/u01/app/oracle/oradata/aux1/' #數據文件的位置,格式:主地址,從地址,主..,從...(沒有這個參數,位置按照主庫的位置放)
log_file_name_convert='/home/oracle/coldbk/','/u01/app/oracle/oradata/aux1/'#日誌文件的位置,格式:同數據文件(沒有這個參數,位置按照主庫的位置放)
log_archive_config='dg_config=(orcl,aux1)' #日誌歸檔配置,格式:主,從1,從2,...
log_archive_dest_2='location=/home/oracle/arc_aux1_dest2/ valid_for=(standby_logfiles,standby_role) db_unique_name=aux1' #日誌歸檔位置
創建參數文件的目錄
啓動實例,創建spfile,利於修改參數
將庫啓動到nomount狀態
配置本地監聽器
靜態註冊
監聽地址
 
 
 
第二階段
主:
測試網絡的連通性
以連接主從的方式進入rman。
rman target / auxiliary sys/oracle@aux1srv
利用11g性特性,複製活動庫到從庫
進入主庫,切換日誌

從:
創建standby日誌組
開啓從庫
查看standby_log中的日誌數
 



實驗步驟:(該實驗爲Oracle 11.2的基礎單向搭建,生產中基本都是雙向配置。單向有助於理解DG搭建)

主庫:

1.主庫打開歸檔模式
shutdown immediate
startup mount
alter database archivelog;
alter database open;
2.主庫打開force logging
select force_logging from v$database;
alter database force logging;
3.主庫打開dataguard開關
alter system set log_archive_config='dg_config=(主庫的唯一名,從庫1的唯一名,從庫2的唯一名...)';
4.修改主庫本地歸檔參數
mkdir -p /home/oracle/arc_orcl_dest1/
--alter system set log_archive_dest_1='location=/home/oracle/arc_orcl_dest1/ valid_for=(日誌類型,數據庫的角色) db_unique_name=orcl';
alter system set log_archive_dest_1='location=/home/oracle/arc_orcl_dest1/ valid_for=(online_logfiles,primary_role) db_unique_name=orcl';
日誌類型:all_logfiles | online_logfiles | standby_logfiles
數據庫的角色: all_roles | primary_role | standby_role
5.激活主庫本地歸檔路徑
alter system set log_archive_dest_state_1='enable';
6.主庫打開遠程歸檔
--alter system set log_archive_dest_3='service=服務命名 valid_for=(日誌類型,數據庫的角色) db_unique_name=從庫唯一名';
alter system set log_archive_dest_3='service=aux1srv valid_for=(online_logfiles,primary_role) db_unique_name=aux1';
7.激活主庫遠程歸檔路徑
alter system set log_archive_dest_state_3='enable';
8.爲從庫準備口令文件
scp $ORACLE_HOME/dbs/orapw$ORACLE_SID oracle@oracle4:$ORACLE_HOME/dbs/orapwaux1

從庫:
9.爲從庫準備參數文件
在主庫生成pfile,修改:
create pfile='/home/oracle/p.ora' from spfile;
vi $ORACLE_HOME/dbs/initaux1.ora
---------------------------------------------------------------------------
*.aq_tm_processes=1
*.compatible='11.2.0.4.0'
*.db_block_size=8192
*.db_domain='example.com'
*.db_name='orcl'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4385144832
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.job_queue_processes=100
*.memory_max_target=943718400
*.memory_target=843055104
*.open_cursors=500
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
*.utl_file_dir='/home/oracle'
log_archive_config='dg_config=(orcl,aux1)'
db_unique_name='aux1'
audit_file_dest='/u01/app/oracle/admin/aux1/adump'
control_files='/u01/app/oracle/oradata/aux1/control01.ctl'
standby_file_management=auto
log_archive_dest_2='location=/home/oracle/arc_aux1_dest2/ valid_for=(standby_logfiles,standby_role) db_unique_name=aux1'
db_file_name_convert='/home/oracle/coldbk/','/u01/app/oracle/oradata/aux1/'
log_file_name_convert='/home/oracle/coldbk/','/u01/app/oracle/oradata/aux1/'
---------------------------------------------------------------------------
10.從庫中準備相關目錄
mkdir -p /u01/app/oracle/fast_recovery_area
mkdir -p /u01/app/oracle/admin/aux1/adump
mkdir -p /u01/app/oracle/oradata/aux1
mkdir -p /home/oracle/arc_aux1_dest2
11.啓動從庫實例
export ORACLE_SID=aux1
sqlplus / as sysdba
create spfile from pfile;
startup nomount
12.在從庫配置並啓動監聽程序:
lsnrctl stop
vi $ORACLE_HOME/network/admin/listener.ora
------------------------------------------------------------------
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = aux1.example.com)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = aux1)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.0.11)(PORT = 1521))
)
------------------------------------------------------------------
lsnrctl start

主庫:
13.在主庫配置服務命名
vi $ORACLE_HOME/network/admin/tnsnames.ora
------------------------------------------------------------------
aux1srv =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.0.11)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = aux1.example.com)
)
)
------------------------------------------------------------------
14.在主庫使用網絡連接從庫(測試)
sqlplus sys/oracle@aux1srv as sysdba
15.在主庫啓動rman複製從庫
rman target / auxiliary sys/oracle@aux1srv
RMAN> duplicate target database for standby from active database;
如果數據庫文件的目錄和主庫一樣
RMAN> duplicate target database for standby from active database nofilenamecheck;

10g 模式克隆安裝:
rman target /
備份全庫:
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
backup database format '/home/oracle/rmanbak/FULL_%U.bak';
backup archivelog all format '/home/oracle/rmanbak/ARC_%U.bak';
release channel c1;
release channel c2;
release channel c3;
release channel c4;
}
創建從庫控制文件:
rman target /
backup device type disk format '/home/oracle/rmanbak/standby_%U.ctl' current controlfile for standby;

sqlplus / as sysdba
alter database create standby controlfile as '/rmanbak/standbyctl.ctl';

rman備庫恢復:
控制文件恢復,將數據庫開到mount
restore standby controlfile from '/home/oracle/rmanbak/standby_0jsceqp2_1_1.ctl';
恢復數據庫:
catalog start with '/home/oracle/rmanbak'
run{
set newname for datafile 1 to '備份片' ;
……
switch datafile all;
switch tempfile all;
restore database ;
}
16.查看主庫歸檔序列:
select sequence#,name from v$archived_log;
17.在主庫切換日誌查看從庫是否得到新的日誌
alter system switch logfile;
ll /home/oracle/arc_aux1_dest2/
在主庫查看遠程歸檔有什麼錯誤
select error from v$archive_dest where dest_id=3;
激活主庫遠程歸檔路徑,再看歸檔錯誤
alter system set log_archive_dest_state_3='enable';
18.查看主庫連機日誌大小
select * from v$log;
19.按照主庫連機日誌的大小在從庫創建standby log
alter database add standby logfile '/u01/app/oracle/oradata/aux1/redo04.log' size 52428800;
alter database add standby logfile '/u01/app/oracle/oradata/aux1/redo05.log' size 52428800;
alter database add standby logfile '/u01/app/oracle/oradata/aux1/redo06.log' size 52428800;

從庫:

20.打開從庫
alter database open;
select name,database_role,open_mode,protection_mode,protection_level from v$database;
21.如果需要,可以在從庫起用管理恢復(MRP0)進程
查看從庫日誌應用情況
select sequence#,applied from v$archived_log;
從庫使用歸檔日誌recover
alter database recover managed standby database disconnect from session;
SQL> select DEST_ID,RECOVERY_MODE from v$archive_dest_status where dest_id=2;
DEST_ID RECOVERY_MODE
---------- -----------------------
2 MANAGED
select ASYNC_BLOCKS,AFFIRM from v$archive_dest where dest_id=3;
ASYNC_BLOCKS AFF
------------ ---
61440 NO


調整同步顆粒:

調整日誌傳輸的精細程度:
alter system set log_archive_dest_3='service=aux1srv sync affirm valid_for=(online_logfiles,primary_role) db_unique_name=aux1';
主庫查看
SYS> select cpods from x$kcccp;

從庫查看
SQL> select SEQUENCE#,LAST_CHANGE# from v$standby_log;
從庫使用standby log recover:
alter database recover managed standby database using current logfile disconnect from session;
SQL> select DEST_ID,RECOVERY_MODE from v$archive_dest_status where dest_id=2;
DEST_ID RECOVERY_MODE
---------- -----------------------
2 MANAGED REAL TIME APPLY
停止管理恢復進程:
SQL> alter database recover managed standby database cancel;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章