ORACLE RAC ASM環境下DATAGUARD搭建步驟
1、準備工作
Host IP DB_NAME DB_UNIQUE_NAME Net Service Name
主庫xxxxxxxxx wechatqa wechatqa wechatqa , wechatqa1, wechatqa2
備庫xxxxxxxxx wechatqa wchtqadg wchtqadg, wchtqadg1, wchtqadg2
保護模式:預設最大效能模式
注意DataGuard正常啟動順序:
啟動順序: 先standby ,後primary;
關閉順序: 先primary ,後standby;
資料庫版本:11.2.0.4.0
1.1、[主庫]備份資料庫、引數檔案、控制檔案
備份引數檔案:
SQL>create pfile=’/tmp/pfile’ from spfile;
備份控制檔案:
cp 備份,手工複製, alter database backup controlfile to trace;
備份資料庫:
$ rman target /
RMAN> backup full database format '/backup/backup_%T_%s_%p.bak';
1.2、[主庫]檢查資料庫是否支援Data Guard,是否歸檔模式,Enable force logging
$ sqlplus '/as sysdba'
確認主庫處於歸檔模式
SQL> archive log list (先檢查是否歸檔模式,不是則修改)
startup mount
alter database archivelog;
alter database open;
將primary資料庫置為FORCE LOGGING模式
SQL> alter database force logging; (強制產生日誌)
SQL> select force_logging from v$database;
1.3、[主庫]如果主庫沒有密碼檔案則建立密碼檔案,從而可以OS驗證的方式登陸
$ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=5
若主庫存在密碼檔案,則需要將檔案拷貝到備庫$ORACLE_HOME/dbs
1.4、[主庫]設定主庫初始化引數
$ sqlplus '/as sysdba'
修改主庫引數
alter system set log_archive_config='dg_config=(wechatqa, wchtqadg)' scope=both;
alter system set LOG_ARCHIVE_DEST_1='LOCATION=+DATA VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=wechatqa';
alter system set log_archive_dest_2='service=wchtqadg lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=wchtqadg';
alter system set log_archive_dest_state_1=enable scope=both;
alter system set log_archive_dest_state_2=enable scope=both;
alter system set fal_server= 'wchtqadg1','wchtqadg2' scope=both;
alter system set FAL_CLIENT= wechatqa1 scope=both sid='wchtqadg1';
alter system set FAL_CLIENT= wechatqa2 scope=both sid='wchtqadg2';
alter system set db_file_name_convert='+DATADG/wchtqadg/datafile/','+DATA/wechatqa/datafile/','wchtqadg','wechatqa','+datadg','+data' scope=spfile ;
alter system set log_file_name_convert='+DATADG/wchtqadg/onlinelog/','+DATA/wechatqa/onlinelog/','+DATADG','+DATA' scope=spfile ;
alter system set standby_file_management='AUTO' scope=both;
新增standby日誌
點選(此處)摺疊或開啟
- ALTER DATABASE ADD STANDBY LOGFILE thread 1 ('+DATA/wechatqa/onlinelog/stdredo01a.log','+DATA/wechatqa/onlinelog/stdredo01b.log') SIZE 250M;
- ALTER DATABASE ADD STANDBY LOGFILE thread 2 ('+DATA/wechatqa/onlinelog/stdredo02a.log','+DATA/wechatqa/onlinelog/stdredo02b.log') SIZE 250M;
- ALTER DATABASE ADD STANDBY LOGFILE thread 1 ('+DATA/wechatqa/onlinelog/stdredo03a.log','+DATA/wechatqa/onlinelog/stdredo03b.log') SIZE 250M;
- ALTER DATABASE ADD STANDBY LOGFILE thread 2 ('+DATA/wechatqa/onlinelog/stdredo04a.log','+DATA/wechatqa/onlinelog/stdredo04b.log') SIZE 250M;
- ALTER DATABASE ADD STANDBY LOGFILE thread 1 ('+DATA/wechatqa/onlinelog/stdredo05a.log','+DATA/wechatqa/onlinelog/stdredo05b.log') SIZE 250M;
- ALTER DATABASE ADD STANDBY LOGFILE thread 2 ('+DATA/wechatqa/onlinelog/stdredo06a.log','+DATA/wechatqa/onlinelog/stdredo06b.log') SIZE 250M;
- ALTER DATABASE ADD STANDBY LOGFILE thread 1 ('+DATA/wechatqa/onlinelog/stdredo07a.log','+DATA/wechatqa/onlinelog/stdredo07b.log') SIZE 250M;
- ALTER DATABASE ADD STANDBY LOGFILE thread 2 ('+DATA/wechatqa/onlinelog/stdredo08a.log','+DATA/wechatqa/onlinelog/stdredo08b.log') SIZE 250M;
然後重啟資料庫:
SQL> shutdown immediate
SQL> startup;
1.5、[主/備庫]上修改配置listener.ora檔案,新增靜態監聽
備庫1:
[email protected]:/grid/product/11.2.0.4/network/admin >vi listener.ora
- SID_LIST_LISTENER =
- (SID_LIST =
- (SID_DESC =
- (GLOBAL_DBNAME = wchtqadg)
- (ORACLE_HOME = /oracle/oracle/11.2.0/db_1)
- (SID_NAME = wchtqadg1)
- )
- )
--重啟監聽
lsrnctl reload
備庫2
[email protected]:/grid/product/11.2.0.4/network/admin >vi listener.ora
- SID_LIST_LISTENER =
- (SID_LIST =
- (SID_DESC =
- (GLOBAL_DBNAME = wchtqadg)
- (ORACLE_HOME = /oracle/oracle/11.2.0/db_1)
- (SID_NAME = wchtqadg2)
- )
- )
--重啟監聽
lsrnctl reload
主庫1:
cd /oracle/11.2.0/grid/network/admin
vi listener.ora
- SID_LIST_LISTENER =
- (SID_LIST =
- (SID_DESC =
- (GLOBAL_DBNAME = wechatqa)
- (ORACLE_HOME = /oracle/oracle/11.2.0/db_1)
- (SID_NAME = wechatqa1)
- )
- )
主庫2:
cd /oracle/11.2.0/grid/network/admin
vi listener.ora
- SID_LIST_LISTENER =
- (SID_LIST =
- (SID_DESC =
- (GLOBAL_DBNAME = wechatqa)
- (ORACLE_HOME = /oracle/oracle/11.2.0/db_1)
- (SID_NAME = wechatqa2)
- )
- )
1.6、[主/備庫]上修改配置tnsname.ora檔案
--$ORACLE_HOME/network/admin 修改ORACLE_HOME目錄下的tnasnames.ora
/oracle/oracle/11.2.0/db_1/network/admin/tnsnames.ora
- WECHATQA1 =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 10.143.169.105)(PORT = 1521))
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = wechatqa)
- )
- )
- WECHATQA2 =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 10.143.169.106)(PORT = 1521))
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = wechatqa)
- )
- )
- wchtqadg1 =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 10.184.131.80)(PORT = 1521))
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = wchtqadg)
- )
- )
- wchtqadg2 =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 10.184.131.81)(PORT = 1521))
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = wchtqadg)
- )
- )
- wchtqadg =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 10.184.131.80)(PORT = 1521))
- (ADDRESS = (PROTOCOL = TCP)(HOST = 10.184.131.81)(PORT = 1521))
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = wchtqadg)
- )
- )
- WECHATQA =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 10.143.169.105)(PORT = 1521))
- (ADDRESS = (PROTOCOL = TCP)(HOST = 10.143.169.106)(PORT = 1521))
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = wechatqa)
- )
- )
主備庫雙節點測試服務名連通性:
tnsping <tnsname>
1.7、[備庫]檢查備庫oracle使用者profile
儘量與主庫oracle使用者profile一致
vi .bash_profile
export ORACLE_BASE=/oracle/oracle
export ORACLE_HOME=/oracle/oracle/11.2.0/db_1
export ORACLE_SID=wchtqadg1
1.8、[備庫]建立11g資料庫基本目錄
# su - oracle
mkdir -p $ORACLE_BASE/admin/wchtqadg/adump
mkdir -p $ORACLE_BASE/admin/wchtqadg/dpdump
mkdir -p $ORACLE_BASE/admin/wchtqadg/pfile
建立ASM中controlfile, datafile, archivelog路徑
1.9、[備庫]拷貝主庫口令檔案並改名
--配置oratab
$ echo 'wchtqadg1: /oracle/oracle/11.2.0/db_1:N ' >> /etc/oratab
--拷貝密碼檔案
將主庫檔案orapwwechatqa1 拷貝到備庫兩節點$ORACLE_HOME/dbs
$ mv orapwwechatqa1 orapwwchtqadg1
測試遠端登入
$ sqlplus sys/[email protected] wechatqa as sysdba;
$ sqlplus sys/[email protected] as sysdba;
2、建立備庫, RMAN duplicate 方式建立standby資料庫
2.1、備庫啟動到nomount狀態
建立init引數檔案
$ vi $ORACLE_HOME/dbs/initwchtqadg1.ora
DB_NAME=wechatqa
DB_UNIQUE_NAME=wchtqadg
DB_BLOCK_SIZE=8192
啟動資料庫到nomount狀態
$ sqlplus /nolog
SQL> conn / as sysdba
SQL> startup nomount pfile=’ initwchtqadg1.ora’;
2.2、RMAN同時連線主庫與備庫
備庫一節點進入RMAN
rman target sys/[email protected] auxiliary sys/[email protected]
2.3、開始duplicate standby資料庫
點選(此處)摺疊或開啟
- run {
- allocate channel c1 type disk;
- allocate channel c2 type disk;
- allocate auxiliary channel stby type disk;
- duplicate target database for standby from active database
- spfile
- parameter_value_convert 'wechatqa','wchtqadg','WECHATQA','WCHTQADG','+DATA','+DATADG'
- set db_unique_name='wchtqadg'
- set db_file_name_convert='+DATA/wechatqa/datafile/','+DATADG/wchtqadg/datafile/','wechatqa','wchtqadg','+DATA','+DATADG'
- set log_file_name_convert='+DATA/wechatqa/onlinelog/','+DATADG/wchtqadg/onlinelog/','+DATA','+DATADG'
- set control_files='+DATADG/wchtqadg/controlfile/control01.ctl','+DATADG/wchtqadg/controlfile/control02.ctl'
- set log_archive_max_processes='20'
- set fal_client='wchtqadg'
- set fal_server='wechatqa1','wechatqa2'
- set remote_listener='gclx0006-scan.intranet.local:1521'
- set standby_file_management='AUTO'
- reset local_listener
- set instance_number='1'
- set log_archive_config='dg_config=(wechatqa,wchtqadg)'
- set log_archive_dest_2='service=wechatqa LGWR ASYNC NOAFFIRM valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=wechatqa'
- set log_archive_dest_1='location=+DATADG valid_for=(all_logfiles,all_roles) db_unique_name=wchtqadg'
- set db_create_file_dest='+DATADG'
- ;
- release channel c1;
- release channel c2;
- release channel stby;
- }
- RMAN> quit
恢復管理器完成。
2.4、檢視備庫狀態
說明:duplicate資料庫之後,備庫只是處於mount狀態,檢視備庫狀態。
$ sqlplus / as sysdba
# 檢視備庫狀態
SQL>select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
MOUNTED PHYSICAL STANDBY wchtqadg
2.5、將備庫切換至READ ONLY WITH APPLY、實時應用模式
SQL> alter database open read only;
Database altered.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
Database altered.
檢查當前備庫上的日誌應用情況
SQL>select name,thread#,sequence#,applied,archived,deleted from v$archived_log
NAME THREAD# SEQUENCE# APPLIED ARC DEL
---------------------------------------------------- ---------- --------- --- ---
/ora_arch1/arch/2_60_795973725.dbf 2 60 YES YES NO
/ora_arch1/arch/1_66_795973725.dbf 1 66 YES YES NO
/ora_arch1/arch/1_67_795973725.dbf 1 67 YES YES NO
/ora_arch1/arch/2_61_795973725.dbf 2 61 YES YES NO
/ora_arch1/arch/2_62_795973725.dbf 2 62 YES YES NO
/ora_arch1/arch/2_63_795973725.dbf 2 63 YES YES NO
/ora_arch1/arch/1_69_795973725.dbf 1 69 YES YES NO
/ora_arch1/arch/1_68_795973725.dbf 1 68 YES YES NO
/ora_arch1/arch/1_70_795973725.dbf 1 70 IN-MEMORY YES NO