standby Database
2024-07-21 02:38:15
供稿:網友
前言
當chao_ping提議我開一個STANDBY DATABASE技術專題討論的時候,我本來是想專門就STANDBY DATABASE的技術方面進行討論的。 看罷三十余篇的跟貼,實在感到有必要在深入技術問題之前,先說一些題外的話,雖然這些是與技術無關的話題,但對于從業IT界的打工者來說,卻是一個首先應該考慮的問題。
我們是做技術的人員,意思就是說,在企業的治理上,我們最多能做的,我們所說的,對治理者來說,只能是參考的意見,決策并不在于我們。很多IT的技術員,非凡是很多初出茅廬的年輕朋友,都覺得,技術人員是一個企業中,最重要的。假如我的技術好,天下就是我的了。這里面有很多的誤區。打個比方來說,技術人員對公司將用什么服務器,用什么database server做后臺,有多少控制的能力呢?現在有很多公司把Oracle數據平臺,定在IBM的AIX UNIX 服務器,這是一個有道理的選擇嗎?在眾多UNIX 平臺上面,眾所周知是,AIX并不是Oracle首選推薦的操作系統,Oracle在AIX平臺上的許多bugs,這兩個公司相互推諉,用戶根本不能及時得到patch解決存在的問題,但是公司的決策如此,做技術的人員能決定多少,公司治理階層也許有他們的道理,譬如說,公司層決定所有服務器象某一個公司購買,可以得到更大的折扣,減少技術上面打交到的支持廠商,等等,我們只能接受公司的選擇。在這一點上,我們與公司其他的職員沒有什么兩樣的,假如抱著“惟我獨尊”的思想,首先在人際上就得不到贊同。
提到了人際關系,許多人會講,中國的人際關系很復雜,國外也許好多了。實際上呢,全世界那里都是一樣,在中國處理不好,出了國也一樣處理不好。我們都有在看論壇的帖子,有人貼出來,也有人反彈,諸如低手不宜,或諷刺別人的程序不好等等,我不想用古人曰,三人行,必有我師之類來論證一番,從最低之處感念,你有問題,有人愿意幫助你,無論幫上了或沒幫上你,都應心存感激之心,不是嗎。
回歸到STANDBY DATABASE的討論上,許多帖子提到是否應該選用STANDBY DATABASE的問題。其實,這個問題,也并不僅僅是一個技術上面的問題。這就是我上面說了一堆題外話的原因。
當某一個DATEBASE需要非凡的功能的時候,譬如HIGH AVAILABLE,DISASTER RECOVERY,SCALABILITY等等,做為技術人員,我們首先要做的是,看看市面相關的產品中,那樣能提供我們所要的功能,各類產品,各有千秋。在我們所需要的功能,那個最能滿足要求,不要第一個念頭就問別人,沒有人比你自己更了解你需要什么。做了研究之后,不確定的話,可以請向資深的人咨詢一下,不過基本觀點就是,別人的提議只是你的參考,我還要說,因為沒有人比你自己更了解你需要什么。
技術人員確實要從技術上了解那個產品最適合技術要求,但這并不能保證最后選用的產品是最適合技術要求的產品,最后的選擇,與很多方面的條件有關。舉個例子來說,我有一個DATABASE需要HIGH AVAILABLE, SCALABILITY,這樣子看下來OPS是最適合的,可是接下來的問題是,OPS需要額外的LICENSING FEE,我們目前有的硬件不能支持OPS,需要訂購新的,訂購新設備的到達之前,DATABASE就必須進入生產模式。再復雜一點呢,我們技術部門的老板要用OPS,可是項目治理部門的老板要用STANDBY DATABASE,因為現有硬件支持,又不需要購買額外軟件,他們兩個一個管技術,一個管錢,兩個人都懂一些Oracle技術,又都不是專家。憑良心講OPS和STANDBY都能應付目前的需求,長遠來講OPS好一些,究竟用的是client/server式的前臺軟件,用戶以后也許有增加的趨勢。不過這些內容也超過了技術人員的職責范圍,我只管按照最后的決定做就是了。因為我沒有最后選擇和決定的權利。
最后我希望能談一下IT從業人員的職業道德問題。做為某一領域的專家,也許很多時候會被請教與專業相關的問題。有項目會請你推薦運行平臺或后臺選用那個公司的DATABASE支持。雖然很多新技術很具吸引力,但IT的技術人員不能因為自己想學,想用某一產品,而推薦并不適合該項目的產品。一、Standby Database 的工作原理
1. Oracle 與 High Availability, Disaster Recovery 及 Data Duplicate 相關功能的產品概述
Oracle 的 High Availability 功能,Oracle 是從下面幾個方面來詮釋的:
(1) system faults and crashes
(2) application and middleware failures
(3) network failures
(4) media failures
(5) Human Error
(6) Disasters and extended outages
(7) Planned downtime, maintenance and management tasks
上述第六項就包含了disaster recovery 在內。因此 disaster recovery 應該算做 high availability 的一個方面了。
總的來說,除了以Oracle database 本身參數進行性能調解外,Oracle 提供支持high availability 相關產品主要有下面幾種:
(1) Oracle Fail Safe on NT
(2) Oracle Parallel Server
(3) Oracle Parallel Fail Safe
(4) Oracle Advanced Quening
(5) Oralce Advanced Replication
(6) Oracle Standby Database
在Duplication data 方面主要有用于distribited data 功能的Advanced Replication 和我們討論過 standby database。
從參與討論的帖子來看,相關的問題是集中在OPS,standby database 和 Advanced Replication 的選擇,因此我就先將這三種產品做一下比較。
OPS (Oracle Parallel Sever)
OPS 最原始的設計初衷就是system/application high availability。與其他產品相比較:
OPS 是多個單CUP機或SMP(Symmetric Multi-PRocessing system) 的cluster (MPP Massively Parallel Processing) 。cluster 里面不同的 node 使用一個(一般是一個)或多個oracle instances 與一個database 連接。
主要的技術特點:
(1) database 所有的data files 是建立在 raw devices 上面的,因此在技術方面對OS 的設置有很高的依靠性,很多方面取決于OS的對設置是否支持。
(2) 在database 方面,每個node都有自己單獨的 on-line redo log file groups,因此在做backup 和recovery 的時候,需要非凡的處理。
(3) OPS 的data files 方面并沒有redundance,因此 media failure 方面,要依靠RAID (redundant array of ineXPensive disk) subsystem.
Oracle 從8i 開始在OPS的基礎上,逐步在不同的OS平臺上,增加了Fail Safe/Failover 的功能,這里不盡具體描述。
Advanced Replication
Replication 的設計初是分散異地的application access database locally。這種技術可以將一個database 中的Tables,Indexes,Views,Packages and Package Bodies,Procedures and Functions,Triggers,Sequences,Synonyms復制到另一database中。假如是全部database 的復制,也可用于high availability。
一個范例,yahoo在美國的東岸和西岸,各有一個鏡像database,是采用的 replication 的技術。東西兩岸的用戶是連到最近的database,從而提高訪問的速度。假如一個database出了問題,用戶自動轉入與另一個相連,實現網站的high availability。這種high availability 對用戶來說,是透明的。
其他的范例,在公司中的應用,例如,HR database中雇員資料,在accounting database 中需要除去薪資等的其他資料,可以在HR中建立一個view,以replication 技術復制到 accounting database 中。
因為大多 replicas 都是在異地,從而在異地建立了redundance data。Replication 是對于database 來說的 high availability。
2. standby database 的工作原理
寫了這么多,現在才開始真正要討論的題目。
從設計原理上來講,standby database 是為 primary database 建立的備份,因此具有 redundance data,也是相對于 database 來說的 high availability。
standby database 為 primary database 做的備份,是通過 primary database 不斷產生出的archived log files 來實現的。primary database 處于 archive mode 的狀態,持續送出 archived log files 給 standby database,而 standby database 則處于 recovery mode,持續apply primary database 的 archived log files.
為了完成上述過程,必須具備以下的條件:
(1) 假如primary database 和 standby database 是運行在不同的服務器上面,那么這兩臺服務器必須有相同version 和 release 的操作系統;必須有相同 version, release 和 patch 的 oracle RDBMS 系統。
(2) Oracle 是答應 primary 和 standby database 在同一個服務器上面運行的。假如是這種情形,建議這兩個databases 要分布在不同的physical disk drives 上面。并且不是所有的操作系統都支持mount 兩個instances 連接兩個同名的databases。
(3) Primary database 必需處于archive log mode。
(4) Oracle 從 version 7.3才開始支持 standby database。7.3.x – 8.0.x 需要手工copy 所有的archived log files 從 primary server 到 standby server,并且,需要手工 recovery archived log files (當然這些可以通過 OS shell scripts, sql scripts 等等方法來實現) ;并且standby database 只能夠處于close/nomount/mount 的狀態。
(5) Oracle 從version 8i (8.1.5以后) 開始支持 primary database 可以將 arhived log files 自動送到最多一個remote site (一般即standby database server) ,本地則可多達七個地點。
并且,standby database 在mount 的狀態