1. 程式人生 > >ORACLE11g R2【RAC+ASM→RAC+ASM】

ORACLE11g R2【RAC+ASM→RAC+ASM】

選擇 ogg only 視圖 命令 proto 啟動數據庫 當前 sys

ORACLE11g R2【RAC+ASM→RAC+ASM】

本演示案例所用環境:RAC+ASM+OMF

primary

standby

OS Hostname

node1,node2

dgnode1,dgnode2

OS Version

RHEL6.5

RHEL6.5

DB Version

11.2.0.4

11.2.0.4

db_name

stephen

stephen

db_unique_name

stephen

standby

service_names

stephen

standby

instance_name

stephen1,stephen2

standby1,standby2

Primary database configure

1.啟用primary force logging

SQL> select force_logging from v$database;

SQL> alter database force logging;

2.配置redo傳輸認證

(1) tnsnames.ora

STEPHEN =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = stephen)

)

)

STANDBY =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = dgnode1-vip)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = dgnode2-vip)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = standby)

)

)

(2) tnsping命令解析網絡服務名,命令須返回OK.

此時,standby端未配置監聽,無法解析,可以standby配置後再測試。

$ tnsping standby

(3) 密碼文件

若無密碼文件,則在一個節點創建密碼文件並拷貝至其余節點。格式:orapw<ORACLE_SID>

cd $ORACLE_HOME/dbs

orapwd file=orapwstephen1 password=oracle ignorecase=y force=y

scp orapwstephen1 node2:$ORACLE_HOME/dbs/orapwstephen2

3.添加standby logfiles

添加standby logfile 的要求:

(1) 確保主和備數據庫上的日誌文件大小是相同的

(2) 確定備庫重做日誌文件組的適當數目

Standby logfile數 = (每個線程的logfile數+1)* 線程數

(3) 檢查create database時指定的MAXLOGFILES和MAXLOGMEMBERS參數,可以通過trace controlfile出來查看

(4) RAC環境創建standby logfile,指定thread#創建

每個thread的standby logfile數 = 每個thread的logfile數 + 1

檢查當前環境的logfile:

set lines 200 pages 300

col member for a60

select a.thread#,a.group#,b.member,b.type,a.bytes/1024/1024 MB from v$log a,v$logfile b where a.group#=b.group#

union all

select a.thread#,a.group#,b.member,b.type,a.bytes/1024/1024 MB from v$standby_log a,v$logfile b where a.group#=b.group#;

根據查詢的logfile 信息上文添加standby logfile的要求,添加合理的standby logfile,然後用上面的sql再次查看當前環境的logfile:

alter database add standby logfile thread 1

group 5 ‘+DATA‘ size 50M,

group 6 ‘+DATA‘ size 50M,

group 7 ‘+DATA‘ size 50M;

alter database add standby logfile thread 2

group 8 ‘+DATA‘ size 50M,

group 9 ‘+DATA‘ size 50M,

group 10 ‘+DATA‘ size 50M;

4.修改primary參數文件

備份spfile:

create pfile=‘/tmp/pfile.bak‘ from spfile;

修改以下參數,其中stephen,standby分別為primary,standby的db_unqiue_name/TNS-Alias,詳見參數詳解部分:

alter system set log_archive_config=‘dg_config=(stephen,standby)‘ sid=‘*‘;

alter system set log_archive_dest_1=‘location=+DATA valid_for=(all_logfiles,all_roles) db_unique_name=stephen‘ sid=‘*‘;

alter system set log_archive_dest_2=‘service=standby lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=standby‘ sid=‘*‘;

alter system set log_archive_max_processes=30 sid=‘*‘; #根據需求調整個數

--確認以下參數,若不為默認值則修改:

alter system set remote_login_passwordfile=exclusive scope=spfile sid=‘*‘;

# remote_login_passwordfile=exclusive/shared

alter system set log_archive_dest_state_1=enable sid=‘*‘;

alter system set log_archive_dest_state_2=enable sid=‘*‘;

--可修改歸檔日誌格式,與datafile區分:

alter system set log_archive_format=‘%t_%s_%r.arc‘ scope=spfile sid=‘*‘;

--備角色參數:

alter system set fal_server=standby sid=‘*‘;

alter system set standby_file_management=auto sid=‘*‘;

alter system set db_file_name_convert=‘+DATA/STANDBY‘,‘+DATA/STEPHEN‘ scope=spfile sid=‘*‘;

alter system set log_file_name_convert=‘+DATA/STANDBY‘,‘+DATA/STEPHEN‘ scope=spfile sid=‘*‘;

註:以上參數,指定spfile修改的,在實例重啟後生效。

采用OMF時,主、備庫均只能使用一個ASM磁盤組,否則禁用OMF:

alter system reset db_create_file_dest sid=‘*‘;

alter system reset db_create_online_log_dest_n sid=‘*‘; #n為數值變量

alter system reset db_recovery_file_dest sid=‘*‘;

5.打開歸檔模式

首先確認當前數據庫是否是歸檔模式,如果不是,則打開歸檔模式。

archive log list;

srvctl stop database -d stephen

srvctl start database -d stephen -o mount

alter database archivelog; --在一個節點執行即可

alter database open; --各節點執行

6.備份primary database

rman target / <<EOF

run{allocate channel c1 type disk;

allocate channel c2 type disk;

backup full database format ‘/backup/full_%U.bak‘ plus archivelog;

sql ‘alter system switch logfile‘;

backup current controlfile for standby format ‘/backup/c_%U.bak‘;

release channel c1;

release channel c2;

}

EOF

Standby database configure

前期準備

首先安裝CRS,RDBMS軟件,配置ASM,netca創建監聽。

1.配置各節點環境變量

export ORACLE_BASE=/oracle/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1

export ORACLE_SID=standby1 #根據節點修改

export PATH=$ORACLE_HOME/bin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib #不同平臺變量名不一樣

2.配置redo傳輸認證

(1) tnsnames.ora

配置各節點的$ORACLE_HOME/network/admin/tnsnames.ora文件:

STEPHEN =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = stephen)

)

)

STANDBY =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = dgnode1-vip)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = dgnode2-vip)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = standby)

)

)

重載各節點監聽:

lsnrctl reload

(2) tnsping命令解析網絡服務名,命令須返回OK.

$ tnsping stephen

(3) 密碼文件

使用主庫的密碼文件:

scp $ORACLE_HOME/dbs/orapwstephen1 dgnode1:$ORACLE_HOME/dbs/orapwstandby1

scp $ORACLE_HOME/dbs/orapwstephen1 dgnode2:$ORACLE_HOME/dbs/orapwstandby2

3.創建目錄

在各節點創建相關目錄:

mkdir -p $ORACLE_BASE/admin/standby/{adump,dpdump,pfile}

創建ASM目錄:

export ORACLE_SID=+ASM1

SQL> alter diskgroup data add directory ‘+DATA/STANDBY‘;

4.參數文件

用primary的pfile加以修改,以保證某些參數與primary保持一致,註意主備庫內存的大小適當的調整內存相關參數。

scp node1:/tmp/pfile.bak $ORACLE_HOME/dbs/initstandby1.ora

修改pfile為需要的standby pfile,特別註意以下事例的參數設定:

*.audit_file_dest=‘/u01/app/oracle/admin/standby/adump‘

*.cluster_database_instances=2

*.cluster_database=true

*.db_create_file_dest=‘+DATA‘

*.db_name=‘stephen‘

*.db_unique_name=‘standby‘

*.service_names=‘standby‘

standby1.instance_name=‘standby1‘

standby2.instance_name=‘standby2‘

standby2.instance_number=2

standby1.instance_number=1

*.remote_listener=‘cluster-scan:1521‘

standby1.local_listener=‘(ADDRESS=(PROTOCOL=TCP)(HOST=dgnode1-vip)(PORT=1521))‘

standby2.local_listener=‘(ADDRESS=(PROTOCOL=TCP)(HOST=dgnode2-vip)(PORT=1521))‘

*.remote_login_passwordfile=‘exclusive‘

standby2.thread=2

standby1.thread=1

*.undo_management=‘AUTO‘

standby1.undo_tablespace=‘UNDOTBS1‘

standby2.undo_tablespace=‘UNDOTBS2‘

*.log_archive_config=‘dg_config=(stephen,standby)‘

*.log_archive_dest_1=‘location=+DATA valid_for=(all_logfiles,all_roles) db_unique_name=standby‘

*.log_archive_dest_2=‘service=stephen lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=stephen‘

*.log_archive_max_processes=30 #根據需求調整個數

*.remote_login_passwordfile=exclusive # exclusive/shared

*.log_archive_dest_state_1=enable

*.log_archive_dest_state_2=enable

*.log_archive_format=‘%t_%s_%r.arc‘

*.fal_server=stephen

*.standby_file_management=auto

*.db_file_name_convert=‘+DATA/STEPHEN‘,‘+DATA/STANDBY‘

*.log_file_name_convert=‘+DATA/STEPHEN‘,‘+DATA/STANDBY‘

以pfile啟動數據庫實例到nomount階段,只需要啟動一個實例用來做恢復即可:

SQL> startup nomount pfile=‘?/dbs/initstandby1.ora‘;

註意:以下恢復操作,只在一個節點做。

5.恢復standby controlfile

SQL> startup nomount;

RMAN> restore standby controlfile to ‘+DATA‘ from ‘/backup/c_0aqn43be_1_1.bak‘;

修改control_files參數執行controlfile位置:

alter system set control_files=‘+DATA/standby/controlfile/current.257.896669437‘ scope=spfile sid=‘*‘;

重啟實例:

shutdown immediate;

startup nomount pfile=‘?/dbs/initstandby1.ora‘;

alter database mount standby database;

6.恢復數據文件

查詢primary database的數據文件信息:

set lines 300 pages 300

col name for a60

col member for a60

select file#,name from v$datafile

union all

select file#,name from v$tempfile;

啟動standby到mount階段,恢復數據文件:

RMAN> run{

set newname for datafile 1 to ‘+DATA‘;

set newname for datafile 2 to ‘+DATA‘;

set newname for datafile 3 to ‘+DATA‘;

set newname for datafile 4 to ‘+DATA‘;

set newname for datafile 5 to ‘+DATA‘;

set newname for tempfile 1 to ‘+DATA‘;

restore database;

switch datafile all;

switch tempfile all;

recover database;

}

查看standby database log file:

set lines 200 pages 300

col member for a60

select a.thread#,a.group#,b.member,b.type,a.bytes/1024/1024 MB from v$log a,v$logfile b where a.group#=b.group#

union all

select a.thread#,a.group#,b.member,b.type,a.bytes/1024/1024 MB from v$standby_log a,v$logfile b where a.group#=b.group#;

7.註冊OCR

註冊DB,Instance到OCR:

srvctl add database -d standby -o $ORACLE_HOME

srvctl add instance -d standby -i standby1 -n dgnode1

srvctl add instance -d standby -i standby2 -n dgnode2

查看資源狀態:

crsctl status res -t -w "TYPE = ora.database.type"

--------------------------------------------------------------------------------

NAMETARGET STATE SERVER STATE_DETAILS

--------------------------------------------------------------------------------

Cluster Resources

--------------------------------------------------------------------------------

ora.standby.db

1 OFFLINE OFFLINE

2 OFFLINE OFFLINE

啟用DB跟隨CRS啟動:

srvctl enable database -d standby

8.創建spfile

SQL> create spfile=‘+DATA‘ from pfile=‘?/dbs/initstandby1.ora‘;

關閉數據庫實例,修改各節點pfile,然後以spfile啟動數據庫:

SQL> shutdown immediate

通過asmcmd命令查看spfile的位置

asmcmd find +DATA/standby spfile*

+DATA/standby/parameterfile/spfile.256.896665481

修改各節點pfile:

cd $ORACLE_HOME/dbs

echo "spfile=‘+DATA/standby/parameterfile/spfile.256.896665481">initstandby1.ora

echo "spfile=‘+DATA/standby/parameterfile/spfile.256.896665481">initstandby2.ora

以spfile啟動實例到mount階段(Data Guard)或open read only階段(Active Data Guard):

--啟動到mount:

srvctl start database -d standby -o mount

--啟動到open read only:

srvctl start database -d standby -o ‘read only‘

查看資源狀態:

crsctl status res -t -w "TYPE = ora.database.type"

--------------------------------------------------------------------------------

NAMETARGET STATE SERVER STATE_DETAILS

--------------------------------------------------------------------------------

Cluster Resources

--------------------------------------------------------------------------------

ora.standby.db

1 OFFLINE OFFLINE dgnode 1 Open,Readonly

2 OFFLINE OFFLINE dgnode 2 Open,Readonly

如果狀態顯示為Open,此為ORACLE BUG,參考MOS DOC 1622876.1

9.應用日誌

應用日誌只需要在一個節點執行即可,日誌應用可選擇應用archive log或redo log.

應用archive log:

recover managed standby database disconnect;

實時應用redo logfile:

recover managed standby database using current logfile disconnect;

取消應用日誌:

recover managed standby database cancel;

打開數據庫至read only模式並開始實時復制:

recover managed standby database using current logfile disconnect;

10.觀察日誌傳輸

跟蹤primary,standby database的alert log,觀察是否有錯誤發生,也可以看到應用日誌的相關信息。

確認standby是否應用日誌:

--primary端多切幾次日誌,觀察alert log信息。

alter system switch logfile;

alter system switch logfile;

--觀察主備庫日誌序列號

archive log list;

--primary端查詢v$archived_log視圖,確認日誌是否被應用:

set lines 300 pages 300

col name for a20

select name,dest_id,thread#,sequence#,standby_dest,applied,registrar,completion_time from v$archived_log

where standby_dest=‘YES‘

order by thread#,sequence#;

--primary端查詢primary,standby的最大日誌序列號是否一致:

select ‘Primary :‘ "DB Role",thread#,max(sequence#)

from v$archived_log

where standby_dest=‘NO‘

group by thread#

union

select ‘Standby :‘ "DB Role",thread#,max(sequence#)

from v$archived_log

where standby_dest=‘YES‘ and applied=‘YES‘

group by thread#

order by thread#;

ORACLE11g R2【RAC+ASM→RAC+ASM】