Contents ...
udn網路城邦
oracle數據庫群集技術HA高可靠性分析
2015/12/12 13:26
瀏覽367
迴響0
推薦0
引用0
不論是小公司,還是擁有全球用戶的大公司,後臺數據庫24小時可用,是至關重要的。Oracle 提供了兩種高可靠性的解決方案

n         Data Guard(又被稱作Standby)

n         RAC(Real Application Cluster)
一、RAC (Real Application Clusters)

RAC是多個單CPU機或SMP 或MPP的集群(cluster),cluster裏面的服務器使用一個或多個oracle instances 與一個database聯接.
SMP是指對稱多處理器。大多數小型機都采用這種結構。MPP是另外一種計算機系統機構,大量信息並行處理機。
主要特點
1)database所有的data files/controfile/redo log都建立raw devices上。知道數據庫在raw devices上(原是設備),可以繞過操作系統一級,直接讀寫磁盤,能夠提供磁盤的I/O能力,提高效率,尤其是有大量I/O的時候。

2)在database方面,每個instance都有自己單獨的on-line redo log file groups,因此backup和recovery是要作特殊處理。 而且在配置上比較復雜。

3)存儲方面沒有redundancy,因此media failure上還是需要RAID的支持。但集群都是共享一個磁盤陣列(磁盤櫃),而這個磁盤陣列是廠商采用相關技術,具有高可靠性。

4)為了高可靠性和高速度,共享磁盤和計算機節點之間要求使用光線連接,而不是使用一般的局域網的網線。磁盤陣列使用光纖通道磁盤陣列。

Standby數據庫

Standyby數據庫克隆生產數據庫,這兩個數據庫可以存放在不同的地域,當Production Database出現致命的不可恢復的狀況時,可以短時間內起動Standy數據庫,全面替代生產數據庫.

RAC語Standy比較

1)數據庫備份:Standby復制原始數據庫,因此原始數據庫有備份,而RAC只有一個數據庫
2)服務器數量: RAC至少雙機支持如容錯、新的安全級別、負載均衡。在特大數據庫和很多的用戶訪問的系統中,還可以增加計算機,使多個實例同時訪問數據庫。Standby運行時只有Primary Database提供服務。不能提供容錯,、負載均衡等高級功能。
3)當機時間:RAC只要有一臺服務器運行就不會當機,而Standyby數據庫切換需要一定的時間
4)費用:Standby不需要數據庫之外的許可證費用,而RAC的技術和實施相對復雜,花費更大。
5從硬件角度,RAC是比較高端的HA,所以一般都是選用專門廠商的Cluster, 如HP, SUN, AIX.使用相關的小型機系統。這種構建的系統非常穩定,也很安全。

二、 Standby 分析
此示例是在windows下說明的。 如果在Unix上只須作很小的相應的改動(如需要改動,文中作出相應標識)
A,standby的配置

在配置前,最好先重建控制文件,修改參數maxlogfiles為10。(默認為5)當然,這一步不是必要的,只有在你需要改變standby數據庫的保護模式時才用到。這裏是在最高性能模式(Max Performance Mode)。重建控制文件的具體方法可參照文章後的附錄。
1,在主數據庫啟用歸檔
SQL> archive log list;
數據庫日誌模式 非存檔模式
自動存檔 禁用
存檔終點 D:\oracle\ora92\RDBMS (在unix下,是路徑可能為/。。。/。。。/RDBMS,這個路徑是需要制定的。)
最早的概要日誌序列 22
當前日誌序列 24
下面幾步是把Primary 數據庫改為歸檔日誌的運行方式,如果數據庫已經是在歸檔日誌下運行,則跳過這幾步。
SQL> alter system set log_archive_dest_1='location=d:\oracle\arch'; (UNIX, 須改)
系統已更改。
SQL> alter system set log_archive_start=true scope=spfile;
系統已更改。
SQL> shutdown immediate
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup mount
ORACLE 例程已經啟動。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
數據庫裝載完畢。
SQL> alter database archivelog;
數據庫已更改。

SQL> archive log list;
數據庫日誌模式 存檔模式
自動存檔 啟用
存檔終點 d:\oracle\arch
最早的概要日誌序列 22
下一個存檔日誌序列 24
當前日誌序列 24
2,在standby數據庫創建相應的目錄結構
D:\oracle\admin\my_standby\bdump
D:\oracle\admin\my_standby\cdump
D:\oracle\admin\my_standby\udump
D:\oracle\admin\my_standby\pfile
D:\arch
D:\oracle\oradata\my_standby
3,設置primary強制logging
SQL> alter database force logging;
數據庫已更改。
4,關閉數據庫,拷貝所有數據文件及在線重做日誌到standby數據庫的對應位置
SQL> shutdown immediate
ORA-01109: 數據庫未打開
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL>
5,創建standby控制文件並拷貝到standby數據庫,並更改成和primary數據庫一樣的名稱。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
數據庫裝載完畢。

數據庫已經打開。
SQL> alter database create standby controlfile as 'd:\oracle\oradata\my_standby\standb
y.ctl';
數據庫已更改。
SQL>
6,生成初始化文件並拷貝到standby數據庫
SQL> create pfile='d:\oracle\admin\my_standby\pfile\standby.ora' from spfile;
文件已創建。
SQL>
7,修改standby數據庫初始化參數
*.standby_archive_dest='d:\oracle\arch'
*.fal_server='primary'
*.fal_client='standby'
*.standby_file_management=auto
*.remote_archive_enable=TRUE
8, 修改Primary和Standby的lisener.ora和tnsnames.ora文件
Primary和standby的tnsnames.ora
#TNSNAMES.ORA Network Configuration File: D:\oracle\ora92\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.
STANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.199)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = my_standby)
)
)
PRIMARY =
(DESCRIPTION =

(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.32)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = my_standby)
)
)
Primary的listener.ora
# LISTENER.ORA Network Configuration File: D:\oracle\ora92\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.11.32)(PORT = 1521))
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = my_standby)
(SID_NAME = my_standby)
)
)
Standby的listener.ora
# LISTENER.ORA Network Configuration File: D:\oracle\ora92\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.199)(PORT = 1521))
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = my_standby)
(SID_NAME = my_standby)
)

)
9,創建standby數據庫實例
$oradim –NEW –SID my_standby
啟動listener,並啟動數據庫到nomount狀態
C:\Documents and Settings\hp>set oracle_sid=my_standby
C:\Documents and Settings\hp>sqlplus
SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 1月 12 11:51:01 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
請輸入用戶名: / as sysdba
已連接到空閑例程。
SQL> startup nomount pfile='d:\oracle\admin\my_standby\pfile\standby.ora';
ORACLE 例程已經啟動。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL>create spfile from pfile='d:\oracle\admin\my_standby\pfile\standby.ora';
10,啟動standby數據庫
SQL>startup nomount;
SQL>alter database mount standby database;
SQL>alter database recover managed standby database disconnect;
11,設置primary的遠程歸檔路徑
SQL> alter system set log_archive_dest_2='SERVICE=standby reopen=60';
系統已更改。

SQL> alter system set log_archive_dest_state_2=enable;
系統已更改。
12,測試文件是否已傳到standby
在primary機上執行:
SQL> alter system switch logfile;
系統已更改。
SQL> select status,error from v$archive_dest;
STATUS ERROR
--------- ------------------------------------
VALID
VALID
INACTIVE
INACTIVE
INACTIVE
INACTIVE
INACTIVE
INACTIVE
INACTIVE
INACTIVE
已選擇10行。
SQL>
查詢standby數據庫
SQL> col name format a30 SQL> select sequence#,name,applied from archived_log; SEQUENCE# NAME APP ---------- ------------------------------ --- 27 D:\ORACLE\ARCH\ARC00027.001 YES 24 D:\ORACLE\ARCH\ARC00024.001 YES 25 D:\ORACLE\ARCH\ARC00025.001 YES 26 D:\ORACLE\ARCH\ARC00026.001 YES SQL>
可以看到歸檔文件都傳過來,而且都應用了(APP=YES)。
至此,standby安裝完畢。

B,standby的切換

Oracle DataGuard提供了兩種的故障撤換方式,分別為SWITCHOVER和FAILOVER。
1、SWITCHOVER

SWITCHOVER是將主數據庫和後備數據庫的角色進行調換。這裏介紹的是手工切換的方法,也可以用DataGuard Broker實現,在這裏就不詳述了。
首先,在primary及standby數據庫中分別創建名為primary及standby的兩套初始化參數文件,方便以後進行切換用。
SQL> create pfile='d:\oracle\admin\my_standby\pfile\standby.ora' from spfile;
文件已創建。
SQL>
加上如下參數
*.standby_archive_dest='d:\oracle\arch'
*.fal_server='standby'
*.fal_client='primary'
*.standby_file_management=auto
*.remote_archive_enable=TRUE
同理,在standby數據庫創建名為primary的pfile,加上如下參數
*.log_archive_dest_2='SERVICE=primary reopen=60'
*.log_archive_dest_state_2=enable
( 1 ) 將主數據庫撤換為standby數據庫
在open狀態下
SQL> alter database commit to switchover to standby;
數據庫已更改。
SQL> shutdown immediate
ORA-01507: ??????
ORACLE 例程已經關閉。

SQL> startup nomount pfile='d:\oracle\admin\my_standby\pfile\standby.ora';
ORACLE 例程已經啟動。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> alter database mount standby database;
數據庫已更改。
SQL> alter database recover managed standby database disconnect;
數據庫已更改。
SQL> create spfile from pfile='d:\oracle\admin\my_standby\pfile\standby.ora';
文件已創建。
SQL>
( 2 ),將standby數據庫撤換為主數據庫
SQL>alter database recover managed standby database finish;
SQL>alter database commit to switchover to primary;
SQL>shutdown immediate;
SQL>startup nomount pfile=’d:\oracle\admin\my_standby\pfile\primary.ora’ from spfile;
SQL>alter database mount;
SQL>alter database open;
SQL> create spfile from pfile='d:\oracle\admin\my_standby\pfile\primary.ora';
SQL> alter system archive log current;
測試歸檔是否已經傳過去並成功應用。
2、FAILOVER

Failover是在主數據庫出現故障後,將後備數據庫切換為主數據庫的一種方法。同樣的,也可以手工或使用DataGuard Broker實現。
有一點要註意的是,在failover後要重做後備數據庫!

SQL> alter database recover managed standby database finish;
數據庫已更改。
SQL> alter database activate standby database;
數據庫已更改。
SQL> shutdown immediate
ORA-01507: ??????
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 101784276 bytes
Fixed Size 453332 bytes
Variable Size 75497472 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL>
3、控制文件的重建

1,生成控制文件
SQL> alter database backup controlfile to trace;
數據庫已更改。
SQL>
在udump目錄下可找到最新的trc文件,此文件就包含了當前控制文件的參數及生成語法。
2,提取語句另生成文件cre_ctl.sql。並修改maxlogfiles值為10。
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "MY_STANDBY" RESETLOGS FORCE

LOGGING ARCHIVELOG
-- SET STANDBY TO MAXIMIZE PERFORMANCE
MAXLOGFILES 10
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 226
LOGFILE
GROUP 1 'D:\ORACLE\ORADATA\MY_STANDBY\REDO01.LOG' SIZE 10M,
GROUP 2 'D:\ORACLE\ORADATA\MY_STANDBY\REDO02.LOG' SIZE 10M,
GROUP 3 'D:\ORACLE\ORADATA\MY_STANDBY\REDO03.LOG' SIZE 10M
-- STANDBY LOGFILE
DATAFILE
'D:\ORACLE\ORADATA\MY_STANDBY\SYSTEM01.DBF',
'D:\ORACLE\ORADATA\MY_STANDBY\UNDOTBS01.DBF',
'D:\ORACLE\ORADATA\MY_STANDBY\USERS01.DBF'
CHARACTER SET ZHS16GBK
;
ALTER DATABASE OPEN RESETLOGS;
ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\ORADATA\MY_STANDBY\TEMP01.DBF'
SIZE 41943040 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
3,執行腳本
SQL>shutdown immediate;
SQL>@c:\cre_ctl.sql
全站分類:知識學習 科學百科
自訂分類:不分類
上一則: slub源码分析
下一則: 存储要实现快速可持续发展

限會員,要發表迴響,請先登入