天天看點

Oracle RAC + Data Guard 環境搭建

國慶之前就準備做這個實驗了。 後來時間不夠,就沒搞了。 6天的長假一放,都散漫的不成樣子了。懶散了很多。 今天7号。 上班也沒啥精神,但是該做的實驗還得繼續。

Oracle 高可用性的三個主要展現是: RAC, Data Guard 和 Stream.  是以熟練掌握這些技術就是評價DBA的标準一個。 RAC + Data Guard 主要用在災備或者報表伺服器上。 比如用RAC+邏輯standby 做報表,進而減輕RAC 系統的壓力。 

關于Data Guard 的一些原理知識可以參考:

       Oracle Data Guard 理論知識

       http://blog.csdn.net/xujinyang/article/details/6833263

      Oracle Data Gurad Physical Standby 相關說明

      http://blog.csdn.net/xujinyang/article/details/6829549

RAC 的知識參考:

RAC 的一些概念性和原理性的知識

http://blog.csdn.net/xujinyang/article/details/6837273

Redhat 5.4 + ASM + RAW+ Oracle 10g RAC 安裝文檔

http://blog.csdn.net/xujinyang/article/details/6837265

RAC 和 Data Guard 的組合有4種情況:

組合 Primary  Standby
1 Single Instance Single Instance
2 Single Instance RAC
3 RAC Single Instance
4 RAC RAC

在RAC + DG 平台下,重用的幾個視圖:

(1)    v$archive_dest_status: 在Standby Database 上可以在這個視圖中檢視接收的日志編号,恢複的日志編号,進而可以了解Standby Database 和 Primary Database 日志的差别。 如果standby 比Primary 滞後太多,可以考慮增加恢複程序。 該視圖中的recovery_mode 列也顯示了是否使用了實時恢複(Real-Time Apply).

(2)    v$archive_dest: 這個視圖中的error 列可以用于輔助診斷。

(3)    v$managed_standby:  這個視圖可以确認standby RAC中,哪個執行個體是執行recover 的執行個體。

下面實驗是RAC + Single standby 的模式。

一. 測試環境

1.1  RAC Primary Database 環境

RAC primary Rac1 Rac2
Public IP 10.85.10.1 10.85.10.2
Private IP 192.168.1.200 192.168.1.201
Virtual IP 10.85.10.3 10.85.10.4
Instance Orcl1 Orcl2
DB_NAME Orcl
Data,Control File, Redo File ASM

1.2  Standby Database 環境

Single Instance Standby  說明
IP 10.85.10.5
Oracle 非RAC 版本
Instance Orcl
Data,Control File,Redo File /u01

二.配置說明

1.3  switchover 之前,這時RAC是Primary Database

(1)    RAC的每個執行個體都要配置日志發送,目的地指向Standby。

(2)    确認日志發送的方法。如:LGWR

(3)    Standby 配置日志接收方法,如:standby redo log。

(4)    啟動MRP

1.4  switchover 之後,此時,rac 是standby database

如果Standby 是RAC,則日志接收和日志恢複可以是不同的Instance。 是以Oracle 在術語上把這兩種執行個體分别叫作Receive Instance 和 Recover Instance。 在這個實驗中,放在一個執行個體上進行。

(1)    Single Instance 的日志隻發送到RAC的一個執行個體。

(2)    确認RAC 的日志接收方法,如: Standby Redo Log。

(3)    在RAC的一個執行個體上啟動MRP.

三. 開始搭建

3.1 主庫歸檔模式設定

       Data Guard 用的歸檔日志來完成同步, 是以在實驗之前, 主庫必須是歸檔模式。 這裡就RAC 的歸檔。 關于RAC的歸檔參考Blog RAC 之 RMAN 備份中的1.2 節。 設定歸檔就那麼幾步, 設定好歸檔目錄,然後關閉是以節點,最後在一個節點上将模式設定為歸檔就ok了。

RAC 之 RMAN 備份

http://blog.csdn.net/xujinyang/article/details/6837226

3.2 準備備庫環境

安裝Oracle軟體,并建立執行個體的相關目錄。Linux 平台上Oracle 的安裝參考blog:

        linux平台下oracle資料庫安裝

        http://blog.csdn.net/xujinyang/article/details/6830215

在備庫建立相關目錄

mkdir -p  $ORACLE_BASE/oradata/orcl/datafile

mkdir -p  $ORACLE_BASE/oradata/orcl/tempfile

mkdir -p  $ORACLE_BASE/admin/orcl/adump

mkdir -p  $ORACLE_BASE/admin/orcl/bdump

mkdir -p  $ORACLE_BASE/admin/orcl/cdump

mkdir -p  $ORACLE_BASE/admin/orcl/dpdump

mkdir -p  $ORACLE_BASE/admin/orcl/hdump

mkdir -p  $ORACLE_BASE/admin/orcl/pfile

mkdir -p  $ORACLE_BASE/admin/orcl/udump

這裡要注意的地方:

       因為RAC 主庫是用ASM 來存放的,是以這裡設定的目錄,與ASM 目錄是不一緻的, 這種情況下,我們就需要在參數檔案裡用db_file_name_convert和 log_file_name_convert 參數來進行轉換。

3.3        配置主備庫的監聽,修改tnsnames.ora 和 listener.ora  檔案

主備庫的tnsnames.ora 檔案是一緻的。 修改成如下:

ORCL2 =

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcl)

      (INSTANCE_NAME = orcl2)

    )

  )

ORCL1 =

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcl)

      (INSTANCE_NAME = orcl1)

    )

  )

ORCL_ST =

  (DESCRIPTION =

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

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SID = orcl)

    )

  )

這裡要注意RAC 執行個體和單執行個體配置上的差別。 上面以用紅色标出。

用net manager 工具,在備庫建立一個監聽。 也可以手動的在listener.ora 檔案裡添加如下内容:

SID_LIST_LISTENER_RAC2 =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = PLSExtProc)

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

      (PROGRAM = extproc)

    )

   (SID_DESC =

      (SID_NAME = orcl)

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

    )

  )

LISTENER =

  (DESCRIPTION =

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

  )

注意:SID_LIST_LISTENER 配置的是靜态注冊,如果沒有該參數,而且Data Guard 啟動順序又不正确,那麼在主庫可能會報 PING[ARC1]: Heartbeat failed to connect to standby 'orcl_st'. Error is 12514. 錯誤,導緻歸檔無法完成。

Oracle Listener 動态注冊 與 靜态注冊

http://blog.csdn.net/xujinyang/article/details/6829560

3.4        在主庫上建立備庫的密碼檔案和控制檔案,并将檔案傳到備庫的相關位置

3.4.1 密碼檔案:

[[email protected] dbs]$ pwd

/u01/app/oracle/product/10.2.0/db_1/dbs

[[email protected] bin]$ orapwd file=$ORACLE_HOME/dbs/orapworcl password=oracle

[[email protected] bin]$ cd $ORACLE_HOME/dbs/

[[email protected] dbs]$ ls

ab_+ASM2.dat  init+ASM2.ora  initorcl2.ora  orapworcl1

hc_+ASM2.dat  initdw.ora     orapw+ASM2     orapworcl2

hc_orcl2.dat  init.ora       orapworcl      snapcf_orcl2.f

預設情況下,win下密碼檔案的格式是pwdsid.ora,unix下的格式是orapwSID(大小寫敏感)

參考:

Oracle OS認證 密碼檔案 密碼丢失處理

http://blog.csdn.net/xujinyang/article/details/6830312

傳送檔案:

[[email protected] dbs]$ scp orapworcl 10.85.10.5://u01/app/oracle/product/10.2.0/db_1/dbs

orapworcl                                     100% 1536     1.5KB/s   00:00

[[email protected] dbs]$

3.4.2 控制檔案

[[email protected] admin]$ export ORACLE_SID=orcl1

[[email protected] admin]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Fri Oct 8 03:39:00 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> conn system/oracle;

Connected.

SQL> alter database create standby controlfile as '/u01/control01.ctl';

Database altered.

SQL>

--判斷一個資料庫是Primary還是Standby,就是通過控制檔案來判斷的。

傳送檔案:

[[email protected] u01]$ scp control01.ctl 10.85.10.5://u01/app/oracle/oradata/orcl/datafile

control01.ctl                                 100%   15MB   1.4MB/s   00:11

在備庫上将控制檔案複制2份,并命名為control02.ctl, control03.ctl

[[email protected] orcl]$ cp control01.ctl control02.ctl

[[email protected] orcl]$ cp control01.ctl control03.ctl

[[email protected] orcl]$ ls

control01.ctl  control02.ctl  control03.ctl

3.5 參數檔案

3.5.1 主庫的參數檔案

先用spfile 來建立pfile 檔案。 這裡要注意的,不要直接用create pfile from spfile來建立。 至于為什麼參考Blog:

        RAC 修改 spfile 參數

        http://blog.csdn.net/xujinyang/article/details/6837210

[[email protected] u01]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Fri Oct 8 04:33:51 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> conn / as sysdba

Connected.

SQL> create pfile='/u01/tmp.ora' from spfile;

File created.

SQL> !

[[email protected] u01]$ cd /u01

[[email protected] u01]$ ls

app               dave.log                    RAC_hot_database_backup.sh.out

backup            dave.ora                    tianlesoftware.dmp

control01.ctl     impdp.log                   tmp.ora

dave_2010929.dmp  RAC_hot_database_backup.sh

[[email protected] u01]$ more tmp.ora

通過more 指令,我們就可以看到rac pfile 參數的内容,對于RAC 主庫,我們不需要做什麼修改,隻需要添加如下内容:

*.log_archive_config='dg_config=(orcl,orcl_st)'

*.log_archive_dest_3='service=orcl_st VALID_FOR=(ALL_LOGFILES,ALL_ROLES) db_unique_name=orcl_st'

*.db_file_name_convert=' /u01/app/oracle/oradata/orcl/datafile','+DATA/orcl/datafile',

' /u01/app/oracle/oradata/orcl/tempfile','+DATA/orcl/tempfile'

*.log_file_name_convert=' /u01/app/oracle/oradata/orcl/datafile', '+DATA/orcl/datafile'

*.standby_file_management=auto

*.fal_server='orcl_st'

orcl1.fal_client='orcl1'

orcl2.fal_client='orcl2'

這裡要注意的地方:如果之前配置了執行個體之間歸檔檔案的互相傳送,那麼這裡需要加上db_unique_name 參數:

orcl2.log_archive_dest_2='service=orcl1 db_unique_name=orcl'

orcl1.log_archive_dest_2='service=orcl2 db_unique_name=orcl'

不然在啟動時會報如下錯誤:

BAD PARAM ORA-16052: DB_UNIQUE_NAME attribute is required

查詢Data Guard 的db_unique_name 可以通過v$dagatuard_config視圖:

SQL> select * from v$dataguard_config;

DB_UNIQUE_NAME

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

orcl

orcl_st

如果之前沒有添加,可以通過修改pfile,在用pfile 建立spfile,或者用SQL, 如:

SQL> alter system set log_archive_dest_2='service=orcl1 db_unique_name=orcl' sid='orcl2';

關于這些參數的意義,可以參考:

Oracle Data Guard 理論知識

http://blog.csdn.net/xujinyang/article/details/6833263

一些說明:

(1)    使用ASM 作存儲時,datafile 和tempfile 是分别放在兩個目錄下的,是以在standby 上也單獨建立一個tempdata 目錄,并在db_file_convert 中作相應的設定。

(2)    在使用ASM的RAC中,注意不要修改db_unique_name 的參數值,因為ASM 存放檔案的規則,是按照+diskgroup_name/database_unique_name/file_type/tag_name.file_number.incarnation 這樣一個規則存放的,但是第二項database_unique_name 并不是db_name; 如果改變了db_unique_name,則之後建立的資料檔案會放到新的目錄下,會導緻db_file_convert的失敗,這一點需要特别注意。

(3)    如果RAC中使用db_create_online_dest_n 系列的參數,要相應調整standby 上的log_file_name_convert 參數。

第一點裡提到ASM 分開存放檔案,我們可以用asmcmd 指令連上ASM 驗證一下:

[[email protected] +ASM]$ export ORACLE_SID=+ASM2

[[email protected] +ASM]$ asmcmd

ASMCMD> ls

DATA/

FLASH_RECOVERY_AREA/

ASMCMD> cd DATA

ASMCMD> ls

ORCL/

ASMCMD> cd ORCL/

ASMCMD> ls

CONTROLFILE/

DATAFILE/

ONLINELOG/

PARAMETERFILE/

TEMPFILE/

spfileorcl.ora

ASMCMD> cd TEMPFILE

ASMCMD> ls

TEMP.283.730181265

3.5.2 備庫的參數檔案

       備庫的初始化檔案,在主庫的基礎上修改一下,把不用的删除掉就可以了。 對于設計到Data Guard的參數,修改一下參數的值就可以了。 最終備庫的參數如下:

[[email protected] dbs]$ more initorcl.ora

*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'

*.background_dump_dest='/u01/app/oracle/admin/orcl/bdump'

*.compatible='10.2.0.1.0'

*.control_files='/u01/app/oracle/oradata/orcl/datafile/control01.ctl','/u01/app/oracle/oradata/orcl/

datafile/control02.ctl','/u01/app/oracle/oradata/orcl/datafile/control03.ctl'

*.core_dump_dest='/u01/app/oracle/admin/orcl/cdump'

*.db_block_size=8192

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='orcl'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'

*.job_queue_processes=10

*.log_archive_dest_1='LOCATION=/u01/arch'

*.log_archive_dest_state_2='ENABLE'

*.open_cursors=300

*.pga_aggregate_target=59768832

*.processes=150

*.remote_login_passwordfile='exclusive'

*.sga_target=179306496

*.undo_management='AUTO'

*.undo_tablespace='UNDOTBS1'

*.user_dump_dest='/u01/app/oracle/admin/orcl/udump'

*.db_unique_name=orcl_st  -- 注意,這個值要和主庫參log_archive_dest_n裡設定的一緻,不然會報錯誤:ORA-16047: DGID mismatch between destination

*.log_archive_config='dg_config=(orcl,orcl_st)'

*.log_archive_dest_2='service=orcl1 VALID_FOR=(ALL_LOGFILES,ALL_ROLES) db_unique_name=orcl1'

*.db_file_name_convert='+DATA/orcl/datafile','/u01/app/oracle/oradata/orcl/datafile','+DATA/orcl/tem

pfile','/u01/app/oracle/oradata/orcl/tempfile'

*.log_file_name_convert='+DATA/orcl/onlinelog','/u01/app/oracle/oradata/orcl/datafile',

'+FLASH_RECOVERY_AREA/orcl/onlinelog','/u01/app/oracle/oradata/orcl/datafile'

*.standby_file_management=auto

*.standby_archive_dest='/u01/arch'

*.fal_server='orcl1','orcl2'

*.fal_client='orcl2'

這裡面關于log_file_name_conver 參數:

先從主庫檢視v$logfile:

SQL>Select * from v$logfile;

   GROUP# STATUS  TYPE    MEMBER

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

         2         ONLINE  +DATA/orcl/onlinelog/group_2.282.730181191

         2         ONLINE  +FLASH_RECOVERY_AREA/orcl/onlinelog/group_2.262.73018

         1         ONLINE  +DATA/orcl/onlinelog/group_1.281.730181173

         1         ONLINE  +FLASH_RECOVERY_AREA/orcl/onlinelog/group_1.261.73018

         3         ONLINE  +DATA/orcl/onlinelog/group_3.285.730181443

         3         ONLINE  +FLASH_RECOVERY_AREA/orcl/onlinelog/group_3.263.73018

         4         ONLINE  +DATA/orcl/onlinelog/group_4.286.730181451

         4         ONLINE  +FLASH_RECOVERY_AREA/orcl/onlinelog/group_4.264.73018

如果這裡除了+DATA,還有+FLASH_RECOVERY_AREA, 那麼這些redo 都需要在參數裡指定進行轉換。 不然通過rman ,這些路徑也會被複制過去,但是standby上是無法通路這些路徑的,是以在做switchover 切換的時候,就會報錯。 這點是要注意的地方。

3.6  RMAN 備份主庫并将備份檔案傳到standby上

這裡用的是RMAN 複制的方法來搭建standby 環境。 可以參考我的Blog:

        用RMAN複制 搭建 實體 Data Gurad 環境

        http://blog.csdn.net/xujinyang/article/details/6833249

備份檔案,放在/u01/rmanback 目錄下,我們在rac1節點進行備份。 在standby 節點也需要建同樣的目錄,還需要把備份檔案copy到這個目錄下。

[[email protected] bin]$ rman target /

Recovery Manager: Release 10.2.0.1.0 - Production on Fri Oct 8 12:13:07 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

connected to target database: ORCL (DBID=1257961898)

RMAN> RUN {

allocate channel c1 type disk;

allocate channel c2 type disk;

sql 'alter system archive log current';

backup current controlfile for standby format='/u01/rmanbackup/control_%U';

BACKUP FORMAT '/u01/rmanbackup/orcl_%U_%T' skip inaccessible filesperset 5 DATABASE ;

sql 'alter system archive log current';

BACKUP FORMAT '/u01/rmanbackup/arch_%U_%T' skip inaccessible filesperset 5 ARCHIVELOG ALL DELETE INPUT;

release channel c2;

release channel c1;

}

SCP 拷貝到 standby 上:

[[email protected] rmanbackup]$ scp * 10.85.10.5://u01/rmanbackup/

RMAN備份有一些注意事項,具體參考我的blog:

       RAC 之 RMAN 備份

       http://blog.csdn.net/xujinyang/article/details/6837226

3.7用之前建立的初始化參數檔案将備庫啟動到nomount 狀态:

啟動監聽:

[[email protected] admin]$ lsnrctl start

LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 08-OCT-2010 12:41:43

Copyright (c) 1991, 2005, Oracle.  All rights reserved.

Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 10.2.0.1.0 - Production

System parameter file is /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.85.10.5)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.85.10.5)(PORT=1521)))

STATUS of the LISTENER

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

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production

Start Date                08-OCT-2010 12:41:43

Uptime                    0 days 0 hr. 0 min. 0 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

Listener Log File         /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.85.10.5)(PORT=1521)))

The listener supports no services

The command completed successfully

啟動資料庫:

[[email protected] u01]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Fri Oct 8 12:37:08 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> conn / as sysdba

Connected to an idle instance.

SQL> startup nomount pfile=?/dbs/initorcl.ora

ORACLE instance started.

Total System Global Area  180355072 bytes

Fixed Size                  1218388 bytes

Variable Size              62916780 bytes

Database Buffers          113246208 bytes

Redo Buffers                2973696 bytes

SQL>

3.8 rman還原資料庫:

[[email protected] admin]$ rman target / auxiliary sys/[email protected]_st

Recovery Manager: Release 10.2.0.1.0 - Production on Fri Oct 8 13:25:31 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

connected to target database: ORCL (DBID=1257961898)

connected to auxiliary database: ORCL (not mounted)

RMAN> duplicate target database for standby;

Finished Duplicate Db at 09-OCT-10

3.9 檢查standby 資料庫

SQL> select status from v$instance;

STATUS

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

MOUNTED

SQL> select name from v$datafile;

NAME

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

/u01/app/oracle/oradata/orcl/datafile/system.276.730181051

/u01/app/oracle/oradata/orcl/datafile/undotbs1.278.730181053

/u01/app/oracle/oradata/orcl/datafile/sysaux.277.730181053

/u01/app/oracle/oradata/orcl/datafile/users.279.730181053

/u01/app/oracle/oradata/orcl/datafile/undotbs2.284.730181347

/u01/app/oracle/oradata/orcl/datafile/tianlesoftware.dbf

/u01/app/oracle/oradata/orcl/datafile/anhuianqing.dbf

7 rows selected.

SQL> select name from v$tempfile;

NAME

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

/u01/app/oracle/oradata/orcl/tempfile/temp.283.730181265

将備庫啟動到mount standby 狀态,并啟動MRP 程序:

SQL> startup nomount;

ORACLE instance started.

Total System Global Area  180355072 bytes

Fixed Size                  1218388 bytes

Variable Size              62916780 bytes

Database Buffers          113246208 bytes

Redo Buffers                2973696 bytes

SQL> alter database mount standby database;

Database altered.

SQL> recover managed standby database disconnect from session;

Media recovery complete.

SQL>

3.10 添加standby redo log 日志

       RAC 每個Redo Thread 都需要建立對應的Standby Redo Log。 建立原則和單執行個體一樣,包括日志檔案大小相等,日志組數量要多1組。

在RAC裡檢視聯機日志:

[[email protected] rmanbackup]$ export ORACLE_SID=orcl2

[[email protected] rmanbackup]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Oct 9 03:49:49 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> conn  / as sysdba;

Connected.

SQL> select thread#,group#,bytes/1024/1024 from v$log;

   THREAD#     GROUP# BYTES/1024/1024

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

         1          1              50

         1          2              50

         2          3              50

         2          4              50

從上面的結果看出, RAC 有兩個Redo Thread,每個Thread 有兩個日志組,每個日志檔案大小有50MB,是以要針對每個thread 需要建立3組 Standby Redo Log,大小為50MB。

Alter database add standby logfile thread 1 group 5 ('/u01/app/oracle/oradata/orcl/datafile/redo_st_05.log') size 50m;

Alter database add standby logfile thread 1 group 6 ('/u01/app/oracle/oradata/orcl/datafile/redo_st_06.log') size 50m;

Alter database add standby logfile thread 1 group 7 ('/u01/app/oracle/oradata/orcl/datafile/redo_st_07.log') size 50m;

Alter database add standby logfile thread 2 group 8 ('/u01/app/oracle/oradata/orcl/datafile/redo_st_08.log') size 50m;

Alter database add standby logfile thread 2 group 9 ('/u01/app/oracle/oradata/orcl/datafile/redo_st_09.log') size 50m;

Alter database add standby logfile thread 2 group 10 ('/u01/app/oracle/oradata/orcl/datafile/redo_st_10.log') size 50m;

添加完可以用: select * from v$logfile 檢視日志情況。

3.11 先停止RAC 執行個體,然後用之前建立的pfile 啟動rac 執行個體。

[[email protected] u01]$ cd /u01/app/oracle/product/crs/bin/

[[email protected] bin]$ srvctl stop database -d orcl

[[email protected] bin]$ crs_stat -t

Name           Type           Target    State     Host

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

ora.orcl.db    application    OFFLINE   OFFLINE

ora....oltp.cs application    OFFLINE   OFFLINE

ora....cl1.srv application    OFFLINE   OFFLINE

ora....cl2.srv application    OFFLINE   OFFLINE

ora....l1.inst application    OFFLINE   OFFLINE

ora....l2.inst application    OFFLINE   OFFLINE

ora....SM1.asm application    ONLINE    ONLINE    rac1

ora....C1.lsnr application    ONLINE    ONLINE    rac1

ora.rac1.gsd   application    ONLINE    ONLINE    rac1

ora.rac1.ons   application    ONLINE    ONLINE    rac1

ora.rac1.vip   application    ONLINE    ONLINE    rac1

ora....SM2.asm application    ONLINE    ONLINE    rac2

ora....C2.lsnr application    ONLINE    ONLINE    rac2

ora.rac2.gsd   application    ONLINE    ONLINE    rac2

ora.rac2.ons   application    ONLINE    ONLINE    rac2

ora.rac2.vip   application    ONLINE    ONLINE    rac2

[[email protected] bin]$ export ORACLE_SID=orcl1

[[email protected] bin]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Oct 9 05:27:55 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> conn / as sysdba;

Connected to an idle instance.

SQL> create spfile from pfile='/u01/tmp.ora';

File created.

啟動所有節點:

SQL> startup

ORACLE instance started.

Total System Global Area  180355072 bytes

Fixed Size                  1218388 bytes

Variable Size             109054124 bytes

Database Buffers           67108864 bytes

Redo Buffers                2973696 bytes

Database mounted.

Database opened.

這裡有遇到了點麻煩,參考:

ORA-01677 standby file name convert parameters differ from other instance 錯誤

http://blog.csdn.net/xujinyang/article/details/6836783

3.12 在主庫檢視日志傳送情況

SQL> Select dest_name,status,error from v$archive_dest;

DEST_NAME            STATUS    ERROR

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

LOG_ARCHIVE_DEST_1   VALID

LOG_ARCHIVE_DEST_2   VALID

LOG_ARCHIVE_DEST_3   VALID

LOG_ARCHIVE_DEST_4   INACTIVE

LOG_ARCHIVE_DEST_5   INACTIVE

LOG_ARCHIVE_DEST_6   INACTIVE

LOG_ARCHIVE_DEST_7   INACTIVE

LOG_ARCHIVE_DEST_8   INACTIVE

LOG_ARCHIVE_DEST_9   INACTIVE

LOG_ARCHIVE_DEST_10  INACTIVE

10 rows selected.

兩個節點都正常。

3.13 驗證同步情況

在主備庫分别切換日志:

SQL> alter system switch logfile;

System altered.

SQL> select sequence# from v$archived_log;

SEQUENCE#

----------

        15

        16

SQL> alter system switch logfile;

System altered.

SQL> select sequence# from v$archived_log;

SEQUENCE#

----------

        17

        18

在備庫進行驗證:

SQL> select sequence#,applied from v$archived_log;

 SEQUENCE# APP

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

        13 YES

         4 NO

        14 YES

        15 YES

        16 YES

        18 NO

        16 YES

        17 YES

        18 YES

        19 YES

同步成功。 至此RAC 為主庫的,備庫為單執行個體的 Oracle 的Data Guard 環境已經搭建完成。

四. Switchover 切換

之前blog上的一篇單執行個體間切換的例子:

Oracle Data Guard Switchover 切換

http://blog.csdn.net/xujinyang/article/details/6833235

RAC 環境下,切換Primary 和 Standby 時,隻能有一個執行個體是活動的, 其他執行個體必須關閉。

這裡我們關閉rac2節點。

SQL> select instance_name from v$instance;

INSTANCE_NAME

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

orcl2

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL>

在RAC1 節點将主庫切換到備庫:

SQL> select instance_name from v$instance;

INSTANCE_NAME

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

orcl1

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS

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

SESSIONS ACTIVE

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

Database altered.

SQL> shutdown immediate;

将備庫切換成主庫:

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS

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

TO PRIMARY

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY with session shutdown;

SQL> shutdown immediate;

在rac1(原來的主庫)節點上建立standby redo log file:

SQL> select thread#,group#,bytes/1024/1024 from v$log;

   THREAD#     GROUP# BYTES/1024/1024

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

         1          1              50

         1          2              50

         2          3              50

         2          4              50

SQL> alter database add standby logfile thread 1 group 5 size 50m;

SQL> alter database add standby logfile thread 1 group 6 size 50m;

SQL> alter database add standby logfile thread 1 group 7 size 50m;

SQL> alter database add standby logfile thread 2 group 8 size 50m;

SQL> alter database add standby logfile thread 2 group 9 size 50m;

SQL> alter database add standby logfile thread 2 group 10 size 50m;

添加之後可以通過v$logfile 視圖檢視:

SQL> select * from v$logfile;

rows will be truncated

    GROUP# STATUS  TYPE    MEMBER

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

         2         ONLINE  +DATA/orcl/onlinelog/group_2.282.730181191

         2         ONLINE  +FLASH_RECOVERY_AREA/orcl/onlinelog/group_2.262.73018

         1         ONLINE  +DATA/orcl/onlinelog/group_1.281.730181173

         1         ONLINE  +FLASH_RECOVERY_AREA/orcl/onlinelog/group_1.261.73018

         3         ONLINE  +DATA/orcl/onlinelog/group_3.285.730181443

         3         ONLINE  +FLASH_RECOVERY_AREA/orcl/onlinelog/group_3.263.73018

         4         ONLINE  +DATA/orcl/onlinelog/group_4.286.730181451

         4         ONLINE  +FLASH_RECOVERY_AREA/orcl/onlinelog/group_4.264.73018

         5         STANDBY +DATA/orcl/onlinelog/group_5.292.731930683

         5         STANDBY +FLASH_RECOVERY_AREA/orcl/onlinelog/group_5.268.73193

Standby 日志添加完之後,就可以啟動執行個體了。 同樣要注意的是, 如果standby 是RAC 環境, MRP 隻能在一個執行個體上執行,這和RAC的恢複操作一樣,而其他執行個體隻能運作RFS。

這種切換的意義并不大,RAC 本身就是一個高可用性的系統,它有多個節點可以規避當機的風險。 RAC + 邏輯standby 這種用法還是比較常見。 我們公司目前也是用這種搭配方法,邏輯standby 用來做報表資料庫。

       這個實驗搗鼓了3天的時間,從十一放假回來就開始搗鼓。 本本上跑了三個虛拟機,4G 的記憶體也是很吃緊, RAC 在家裡跑不起來,啟動之後總有一個節點會當機,看了log也是和網絡有點什麼關系。 隻能在公司裡才能正常使用。 是以都是上班時間去公司搗鼓這些東西。 今天下班之前總算折騰完了。 

結束語: 路漫漫其修遠兮,吾将上下而求索!

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

上一篇: pb筆記2