青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

tbwshc

tbw

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  95 Posts :: 8 Stories :: 3 Comments :: 0 Trackbacks

常用鏈接

留言簿(4)

我參與的團(tuán)隊(duì)

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

#

Oracle的內(nèi)核提供數(shù)據(jù)庫的備份和恢復(fù)機(jī)制,SQL*DBA按表空間進(jìn)行數(shù)據(jù)的備份和恢復(fù)。Oracle提供兩種方式:備份恢復(fù)和向前滾動(dòng),保證意外故障恢復(fù)數(shù)據(jù)庫的一致性和完整性。
  
  ____1. 備份恢復(fù)方式
  
  ____對(duì)數(shù)據(jù)庫的某個(gè)一致狀態(tài)建立副本,并儲(chǔ)存在介質(zhì)上脫機(jī)保存,以此作為數(shù)據(jù)庫恢復(fù)的基礎(chǔ)。現(xiàn)以O(shè)racle實(shí)用程序Export/Import來介紹備份恢復(fù)方式。
  
  ____Export/Import是Oracle提供的兩個(gè)互補(bǔ)性程序,即卸載和裝載。它們既完成數(shù)據(jù)庫與操作系統(tǒng)文件的互為轉(zhuǎn)載,同時(shí)可以有效地回收數(shù)據(jù)庫的碎片,提供不同版本間Oracle 數(shù)據(jù)傳送的手段,進(jìn)行不同用戶間的數(shù)據(jù)傳送。
  
  ____Export數(shù)據(jù)卸載,將數(shù)據(jù)從Oracle寫到指定的操作系統(tǒng)文件進(jìn)行備份。卸載的對(duì)象、內(nèi)容與數(shù)量有三種模式:TABLE MODE(表模式)、USER MODE(用戶模式)、FULL DATABASEM ODE(所有數(shù)據(jù)庫模式)。使用方式既可用交互方式,也可采用命令行方式,以"關(guān)鍵字=值" 將所需信息在命令行中逐一描述來進(jìn)行卸載。Export要求用戶具有CONNECT或DBA特權(quán)。
  
  ____Import與Export互逆,將操作系統(tǒng)文件重新裝載至Oracle數(shù)據(jù)庫中,使用方式如Expo rt。使用者要求具有CONNECT和RESOURCE特權(quán),且可選擇部分或全部裝入。
  
  ____Export/Import非常方便,系統(tǒng)開銷小,它的限制是輸出的操作系統(tǒng)文件采用專門的壓縮方式存放,僅提供給Import使用。
  
  ____也可采用SQL*PLUS和SQL*LOADER實(shí)用工具進(jìn)行備份。使用SQL*PLUS的SPOOL命令通過脫機(jī)定向輸出,使用PLUS格式化結(jié)果,形成指定格式的ASCII文件,需要時(shí)可用SQL*LOADER 進(jìn)行加載。它的方便之處是ASCII文件可以編輯,可方便地加載至其他數(shù)據(jù)庫(如FoxPro、 Sybase中)。
  
  ____2. 向前滾動(dòng)方式
  
  ____Oracle提供向前滾動(dòng)方式,使建立備份后成功的事務(wù)不會(huì)丟失。恢復(fù)的基礎(chǔ)是數(shù)據(jù)庫的某個(gè)一致性狀態(tài)(即方式1完成的備份恢復(fù)),恢復(fù)的依據(jù)是存檔的重作記錄文件。啟動(dòng)重作記錄文件方法如下:
  
  ____(1) 啟動(dòng)Oracle;
  
  ____(2) 連接Oracle:CONNECT SYSTEM/PASSWORD;
  
  ____(3) 啟動(dòng)ARCHIVE LOG。
  
  ____出現(xiàn)介質(zhì)故障時(shí),可用SQL*DBA的RECOVER命令,利用存檔的重作記錄文件恢復(fù)一個(gè)或多個(gè)表空間。RECOVER命令對(duì)DATABASE或TABLASPACE進(jìn)行恢復(fù)。前者要求SQL*DBA START UP已被排斥方式裝載且未被打開;后者對(duì)無活躍回退段的表空間執(zhí)行脫機(jī),要求數(shù)據(jù)庫已裝載且被打開。
  
  ____由于向前滾動(dòng)方式恢復(fù)的依據(jù)是存檔的重作記錄文件,因而系統(tǒng)開銷大,但恢復(fù)的是建立備份以后的成功事務(wù),所以恢復(fù)的程度更高、更完備。
  
  
  Sybase數(shù)據(jù)庫的備份
  
  ____Sybase數(shù)據(jù)庫提供兩種恢復(fù)方式:自動(dòng)恢復(fù)和非自動(dòng)恢復(fù)。自動(dòng)恢復(fù)是在軟故障下提供的一種恢復(fù)機(jī)制,非自動(dòng)恢復(fù)是發(fā)生硬故障時(shí)通過已轉(zhuǎn)儲(chǔ)的介質(zhì)裝載的一種手動(dòng)恢復(fù)機(jī)制。
  
  ____1. 軟件故障恢復(fù)機(jī)制
  
  ____SQL Server重啟時(shí)啟動(dòng)自動(dòng)恢復(fù)進(jìn)程,將故障前已提交的事務(wù)寫到數(shù)據(jù)庫設(shè)備上,未完成的事務(wù)則回滾。自動(dòng)恢復(fù)進(jìn)程先恢復(fù)系統(tǒng)數(shù)據(jù)庫,后恢復(fù)用戶數(shù)據(jù)庫。對(duì)每個(gè)數(shù)據(jù)執(zhí)行自動(dòng)恢復(fù)的依據(jù)是事務(wù)日志,即SYSLOGS表,它記載著用戶對(duì)數(shù)據(jù)庫的每一改變。
  
  ____恢復(fù)過程:掃描日志,對(duì)尚未結(jié)束的事務(wù)執(zhí)行撤銷,對(duì)已提交的事務(wù)進(jìn)行重寫。
  
  ____撤銷機(jī)制:反向掃描日志,對(duì)每一個(gè)撤銷事務(wù)的更新操作執(zhí)行反操作。
  
  ____重寫機(jī)制:正向掃描日志,對(duì)已提交的事務(wù)但尚在數(shù)據(jù)庫緩沖區(qū)中的內(nèi)容執(zhí)行物理地寫到庫設(shè)備上。
  
  ____2. 硬故障恢復(fù)機(jī)制
  
  ____硬故障一般指介質(zhì)故障,備份的基礎(chǔ)數(shù)據(jù)源來自數(shù)據(jù)庫的轉(zhuǎn)儲(chǔ)介質(zhì)。因而,它的恢復(fù)取決于轉(zhuǎn)儲(chǔ)(dump)命令的使用情況。
  
  ____現(xiàn)以250MB磁帶為例來描述轉(zhuǎn)儲(chǔ)、裝載過程。
  
  ____(1) 配置備份服務(wù)器,啟動(dòng)SQL SERVER和BACKUP SERVER。如:
  
  ____startserver -f run -sybase
  
  ____startserver -f run -syb -backup
  
  ____(2) 建立磁帶轉(zhuǎn)儲(chǔ)設(shè)備
  
  ____sp-addumpdevice "tape",mytape,"/
  
  ____dev/nrct0",6,skip
  
  ____250
  
  ____go
  
  ____其中:"/dev/nrct0"指非回卷磁帶設(shè)備名,"6"是設(shè)備控制號(hào), tape在3~8之間,skip 通知服務(wù)器忽略已存在的ANSI磁帶標(biāo)號(hào),250是磁帶的大小,以M為單位。
  
  ____建立成功后,可以查詢maser.dbo.sysdevices表中有name="mytape"的記錄描述。
  
  ____(3) 轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫
  
  ____即備份一個(gè)完整的數(shù)據(jù)庫,包括它的系統(tǒng)表,建立各種數(shù)據(jù)對(duì)象和事務(wù)日志。備份格式不同于操作系統(tǒng)文件,tar命令不可讀,它只能由SQL Server的裝載工具來識(shí)別和恢復(fù)。轉(zhuǎn)儲(chǔ)命令如下:
  
  ____dump database TRYDB to mytape with init
  
  ____go
  
  ____其中:TRYDB為庫名;with init為選項(xiàng),重新初始化磁帶卷。
  
  ____(4) 裝載數(shù)據(jù)庫
  
  ____如果數(shù)據(jù)庫受到破壞而必須刪除,則要重新初始化庫設(shè)備,tb重建數(shù)據(jù)庫并裝載最近的數(shù)據(jù)庫備份及所有事務(wù)日志。
  
  ____裝載數(shù)據(jù)庫:
  
  ____load database TRYDB from mytape
  
  ____go
  
  ____以上僅限裝載用戶數(shù)據(jù)庫,不適用于master庫。另外,也可將數(shù)據(jù)庫備份成操作系統(tǒng)文件,執(zhí)行操作系統(tǒng)備份命令將文件拷至磁帶上。恢復(fù)時(shí)先tar入磁帶上的文件,然后裝載 ,這種方式不須添加轉(zhuǎn)儲(chǔ)設(shè)備。
posted @ 2012-07-28 12:40 tbwshc 閱讀(757) | 評(píng)論 (0)編輯 收藏

1 概述
1.1 數(shù)據(jù)庫面臨的安全挑戰(zhàn)
數(shù)據(jù)庫是企業(yè)核心業(yè)務(wù)開展過程中最具有戰(zhàn)略性的資產(chǎn),通常都保存著重要的商業(yè)伙伴和客戶信息,這些信息需要被保護(hù)起來,以防止競爭者和其他非法者獲取。互聯(lián)網(wǎng)的急速發(fā)展使得企業(yè)的數(shù)據(jù)庫信息價(jià)值及可訪問性得到了提升,同時(shí),也致使數(shù)據(jù)庫信息資產(chǎn)面臨嚴(yán)峻的挑戰(zhàn),概括起來主要表現(xiàn)在以下三個(gè)層面:
管理層面:主要表現(xiàn)為人員的職責(zé)、流程有待完善,內(nèi)部員工的日常操作有待規(guī)范,第三方維護(hù)人員的操作監(jiān)控失效等等,致使安全事件發(fā)生時(shí),無法追溯并定位真實(shí)的操作者。
技術(shù)層面:現(xiàn)有的數(shù)據(jù)庫內(nèi)部操作不明,無法通過外部的任何安全工具(比如:防火墻、IDS、IPS等)來阻止內(nèi)部用戶的惡意操作、濫用資源和泄露企業(yè)機(jī)密信息等行為。
審計(jì)層面:現(xiàn)有的依賴于數(shù)據(jù)庫日志文件的審計(jì)方法,存在諸多的弊端,比如:數(shù)據(jù)庫審計(jì)功能的開啟會(huì)影響數(shù)據(jù)庫本身的性能、數(shù)據(jù)庫日志文件本身存在被篡改的風(fēng)險(xiǎn),難于體現(xiàn)審計(jì)信息的真實(shí)性。
伴隨著數(shù)據(jù)庫信息價(jià)值以及可訪問性提升,使得數(shù)據(jù)庫面對(duì)來自內(nèi)部和外部的安全風(fēng)險(xiǎn)大大增加,如違規(guī)越權(quán)操作、惡意入侵導(dǎo)致機(jī)密信息竊取泄漏,但事后卻無法有效追溯和審計(jì)。
1.2 數(shù)據(jù)庫審計(jì)的客觀需求
數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制的目的概括來說主要是三個(gè)方面:一是確保數(shù)據(jù)的完整性;二是讓管理者全面了解數(shù)據(jù)庫實(shí)際發(fā)生的情況;三是在可疑行為發(fā)生時(shí)可以自動(dòng)啟動(dòng)預(yù)先設(shè)置的告警流程,防范數(shù)據(jù)庫風(fēng)險(xiǎn)的發(fā)生。因此,如何采取一種可信賴的綜合途徑,確保數(shù)據(jù)庫活動(dòng)記錄的100%捕獲是極為重要的,任何一種遺漏關(guān)鍵活動(dòng)的行為,都會(huì)導(dǎo)致數(shù)據(jù)庫安全上的錯(cuò)誤判斷,并且干擾數(shù)據(jù)庫在運(yùn)行時(shí)的性能。只有充分理解企業(yè)對(duì)數(shù)據(jù)庫安全審計(jì)的客觀需求,才能夠給出行之有效的解決方案:
捕捉數(shù)據(jù)訪問:不論在什么時(shí)間、以什么方式、只要數(shù)據(jù)被修改或查看了就需要自動(dòng)對(duì)其進(jìn)行追蹤;
捕捉數(shù)據(jù)庫配置變化:當(dāng)“數(shù)據(jù)庫表結(jié)構(gòu)、控制數(shù)據(jù)訪問的權(quán)限和數(shù)據(jù)庫配置模式”等發(fā)生變化時(shí),需要進(jìn)行自動(dòng)追蹤;
自動(dòng)防御:當(dāng)探測到值得注意的情況時(shí),需要自動(dòng)啟動(dòng)事先設(shè)置tb的告警策略,以便數(shù)據(jù)庫安全管理員及時(shí)采取有效應(yīng)對(duì)措施,對(duì)于嚴(yán)重影響業(yè)務(wù)運(yùn)行的高風(fēng)險(xiǎn)行為甚至可以立即阻斷;
審計(jì)策略的靈活配置和管理:提供一種直截了當(dāng)?shù)姆椒▉砼渲盟心繕?biāo)服務(wù)器的審計(jì)形式、具體說明關(guān)注的活動(dòng)以及風(fēng)險(xiǎn)來臨時(shí)采取的動(dòng)作;
審計(jì)記錄的管理:將從多個(gè)層面追蹤到的信息自動(dòng)整合到一個(gè)便于管理的,長期通用的數(shù)據(jù)存儲(chǔ)中,且這些數(shù)據(jù)需要獨(dú)立于被審計(jì)數(shù)據(jù)庫本身;
靈活的報(bào)告生成:臨時(shí)和周期性地以各種格式輸出審計(jì)分析結(jié)果,用于顯示、打印和傳輸;
1.3 現(xiàn)有的數(shù)據(jù)庫審計(jì)解決方案的不足
傳統(tǒng)的審計(jì)方案,或多或少存在一些缺陷,主要表現(xiàn)在以下幾個(gè)方面:
傳統(tǒng)網(wǎng)絡(luò)安全方案:依靠傳統(tǒng)的網(wǎng)絡(luò)防火墻及入侵保護(hù)系統(tǒng)(IPS),在網(wǎng)絡(luò)中檢查并實(shí)施數(shù)據(jù)庫訪問控制策略。但是網(wǎng)絡(luò)防火墻只能實(shí)現(xiàn)對(duì)IP地址、端口及協(xié)議的訪問控制,無法識(shí)別特定用戶的具體數(shù)據(jù)庫活動(dòng)(比如:某個(gè)用戶使用數(shù)據(jù)庫客戶端刪除某張數(shù)據(jù)庫表);而IPS雖然可以依賴特征庫有限阻止數(shù)據(jù)庫軟件已知漏洞的攻擊,但他同樣無法判別具體的數(shù)據(jù)庫用戶活動(dòng),更談不上細(xì)粒度的審計(jì)。因此,無論是防火墻,還是IPS都不能解決數(shù)據(jù)庫特權(quán)濫用等問題。
基于日志收集方案:需要數(shù)據(jù)庫軟件本身開啟審計(jì)功能,通過采集數(shù)據(jù)庫系統(tǒng)日志信息的方法形成審計(jì)報(bào)告,這樣的審計(jì)方案受限于數(shù)據(jù)庫的審計(jì)日志功能和訪問控制功能,在審計(jì)深度、審計(jì)響應(yīng)的實(shí)時(shí)性方面都難以獲得很好的審計(jì)效果。同時(shí),開啟數(shù)據(jù)庫審計(jì)功能,一方面會(huì)增加數(shù)據(jù)庫服務(wù)器的資源消耗,嚴(yán)重影響數(shù)據(jù)庫性能;另一方面審計(jì)信息的真實(shí)性、完整性也無法保證。
其他諸如應(yīng)用程序修改、數(shù)據(jù)源觸發(fā)器、統(tǒng)一認(rèn)證系統(tǒng)授權(quán)等等方式,均只能記錄有限的信息,更加無法提供細(xì)料度的數(shù)據(jù)庫操作審計(jì)。
1.4 本方案解決的數(shù)據(jù)庫安全問題
為了解決企業(yè)數(shù)據(jù)庫安全領(lǐng)域的深層次、應(yīng)用及業(yè)務(wù)邏輯層面的安全問題及審計(jì)需求,杭州安恒信息技術(shù)有限公司依靠其對(duì)入侵檢測技術(shù)的深入研究及安全服務(wù)團(tuán)隊(duì)積累的數(shù)據(jù)庫安全知識(shí),研制并成功推出了全球領(lǐng)先的、面向企業(yè)核心數(shù)據(jù)庫的、集“全方位的風(fēng)險(xiǎn)評(píng)估、多視角的訪問控制、深層次的審計(jì)報(bào)告”于一體的數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制設(shè)備,即明御數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng),為企業(yè)核心數(shù)據(jù)庫提供全方位安全防護(hù)。
在企業(yè)業(yè)務(wù)支撐網(wǎng)絡(luò)中部署了明御數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng),可以實(shí)現(xiàn)企業(yè)核心數(shù)據(jù)庫的“系統(tǒng)運(yùn)行可視化、日常操作可跟蹤、安全事件可鑒定”目標(biāo),解決企業(yè)數(shù)據(jù)庫所面臨的管理層面、技術(shù)層面、審計(jì)層面的三大風(fēng)險(xiǎn),以滿足企業(yè)的不斷增長的業(yè)務(wù)需要。明御數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)對(duì)于企業(yè)數(shù)據(jù)庫的安全防護(hù)功能,概括起來體現(xiàn)在以下三個(gè)方面:
首先:明御數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)采用“網(wǎng)絡(luò)抓包、本地操作審計(jì)”組合工作模式,結(jié)合安恒專用的硬件加速卡,確保數(shù)據(jù)庫訪問的100%完整記錄,為后續(xù)的日常操作跟蹤、安全事件鑒定奠定了基礎(chǔ)。
其次:明御數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)通過專利級(jí)的雙引擎技術(shù),一方面利用數(shù)據(jù)庫安全研究團(tuán)隊(duì)多年積累的安全知識(shí)庫,防止無意的危險(xiǎn)誤操作,阻止數(shù)據(jù)庫軟件漏洞引起的惡意攻擊;另一方面,依賴智能自學(xué)習(xí)過程中動(dòng)態(tài)創(chuàng)建的安全模型與異常引擎相結(jié)合,有效控制越權(quán)操作、違規(guī)操作等異常操作行為。
再者:明御數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng) 依賴其獨(dú)特的數(shù)據(jù)庫安全策略庫,可以深入到應(yīng)用層協(xié)議(如操作命令、數(shù)據(jù)庫對(duì)象、業(yè)務(wù)操作過程)實(shí)現(xiàn)細(xì)料度的安全審計(jì),并根據(jù)事先設(shè)置的安全策略采取諸如產(chǎn)生告警記錄、發(fā)送告警郵件(或短信)、提升風(fēng)險(xiǎn)等級(jí)、加入黑名單、立即阻斷等響應(yīng)。同時(shí),明御數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)可以提供多視角的審計(jì)報(bào)告,即根據(jù)實(shí)時(shí)記錄的網(wǎng)絡(luò)訪問情況,提供多種安全審計(jì)報(bào)告,更清晰地了解系統(tǒng)的使用情況以及安全事件的發(fā)生情況,并可根據(jù)這些安全審計(jì)報(bào)告進(jìn)一步修改和完善數(shù)據(jù)庫安全策略庫。
 
2 方案總體結(jié)構(gòu)
2.1 主要功能
如下圖所示,數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)主要的功能模塊包括“靜態(tài)審計(jì)、實(shí)時(shí)監(jiān)控與風(fēng)險(xiǎn)控制、動(dòng)態(tài)審計(jì)(全方位、細(xì)粒度)、審計(jì)報(bào)表、安全事件回放、審計(jì)對(duì)象管理、系統(tǒng)配置管理管理”幾個(gè)部分。
2.1.1 數(shù)據(jù)庫靜態(tài)審計(jì)
數(shù)據(jù)庫靜態(tài)審計(jì)的目的是代替繁瑣的手工檢查,預(yù)防安全事件的發(fā)生。數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)依托其權(quán)威性的數(shù)據(jù)庫安全規(guī)則庫,自動(dòng)完成對(duì)幾百種不當(dāng)?shù)臄?shù)據(jù)庫不安全配置、潛在弱點(diǎn)、數(shù)據(jù)庫用戶弱口令、數(shù)據(jù)庫軟件補(bǔ)丁、數(shù)據(jù)庫潛藏木馬等等靜態(tài)審計(jì),通過靜態(tài)審計(jì),可以為后續(xù)的動(dòng)態(tài)防護(hù)與審計(jì)的安全策略設(shè)置提供有力的依據(jù)。
2.1.2 實(shí)時(shí)監(jiān)控與風(fēng)險(xiǎn)控制
數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)可保護(hù)業(yè)界主流的數(shù)據(jù)庫系統(tǒng),防止受到特權(quán)濫用、已知漏洞攻擊、人為失誤等等的侵害。當(dāng)用戶與數(shù)據(jù)庫進(jìn)行交互時(shí),數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)會(huì)自動(dòng)根據(jù)預(yù)設(shè)置的風(fēng)險(xiǎn)控制策略,結(jié)合對(duì)數(shù)據(jù)庫活動(dòng)的實(shí)時(shí)監(jiān)控信息,進(jìn)行特征檢測及審計(jì)規(guī)則檢測,任何嘗試的攻擊或違反審計(jì)規(guī)則的操作都會(huì)被檢測到并實(shí)時(shí)阻斷或告警。
2.1.3 數(shù)據(jù)庫動(dòng)態(tài)審計(jì)
數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)基于“數(shù)據(jù)捕獲→應(yīng)用層數(shù)據(jù)分析→監(jiān)控、審計(jì)和響應(yīng)” 的模式提供各項(xiàng)安全功能,使得它的審計(jì)功能大大優(yōu)于基于日志收集的審計(jì)系統(tǒng),通過收集一系列極其豐富的審計(jì)數(shù)據(jù),結(jié)合細(xì)粒度的審計(jì)規(guī)則、以滿足對(duì)敏感信息的特殊保護(hù)需求。
數(shù)據(jù)庫動(dòng)態(tài)審計(jì)可以徹底擺脫數(shù)據(jù)庫的黑匣子狀態(tài),提供4W(who/when/where/what)審計(jì)數(shù)據(jù)。通過實(shí)時(shí)監(jiān)測并智能地分析、還原各種數(shù)據(jù)庫操作,解析數(shù)據(jù)庫的登錄、注銷、插入、刪除、存儲(chǔ)過程的執(zhí)行等操作,還原SQL操作語句;跟蹤數(shù)據(jù)庫訪問過程中的所有細(xì)節(jié),包括用戶名、數(shù)據(jù)庫操作類型、所訪問的數(shù)據(jù)庫表名、字段名、操作執(zhí)行結(jié)果、數(shù)據(jù)庫操作的內(nèi)容取值等。
全方位的數(shù)據(jù)庫活動(dòng)審計(jì):實(shí)時(shí)監(jiān)控來自各個(gè)層面的所有數(shù)據(jù)庫活動(dòng)。如:來自應(yīng)用程序發(fā)起的數(shù)據(jù)庫操作請(qǐng)求、來自數(shù)據(jù)庫客戶端工具的操作請(qǐng)求、來自數(shù)據(jù)庫管理人員遠(yuǎn)程登錄數(shù)據(jù)庫服務(wù)器產(chǎn)生的操作請(qǐng)求等。
完整的雙向?qū)徲?jì):除可實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)庫的請(qǐng)求操作以外,還可以實(shí)時(shí)監(jiān)控所有請(qǐng)求操作后數(shù)據(jù)庫的回應(yīng)信息,如命令執(zhí)行情況,錯(cuò)誤信息等。
潛在危險(xiǎn)活動(dòng)重要審計(jì):提供對(duì)DDL類操作、DML類操作的重要審計(jì)功能,重要審計(jì)規(guī)則的審計(jì)要素可以包括:用戶、源IP地址、操作時(shí)間(任意天、一天中的時(shí)間、星期中的天數(shù)、月中的天數(shù))、使用的SQL操作類型(Select/Delete/Drop/Insert/Update)。當(dāng)某個(gè)數(shù)據(jù)庫活動(dòng)匹配了事先定義的重要審計(jì)規(guī)則時(shí),一條報(bào)警將被記錄以進(jìn)行審計(jì)。
重要審計(jì)規(guī)則設(shè)置:
重要審計(jì)結(jié)果展示:
敏感信息細(xì)粒度審計(jì):對(duì)業(yè)務(wù)系統(tǒng)的重要信息,提供完全自定義的、精確到字段及記錄內(nèi)容的細(xì)粒度審計(jì)功能。自定義的審計(jì)要素包括登錄用戶、源IP地址、數(shù)據(jù)庫對(duì)象(分為數(shù)據(jù)庫用戶、表、字段)、操作時(shí)間段(本日、本周、本月、最近三小時(shí)、最近十二小時(shí)、最近二十四小時(shí)、最近七天、最近三十天、任意時(shí)間段)、使用的SQL操作類型(select/delete/drop/insert/update/create/turncate)、記錄內(nèi)容。
根據(jù)操作類型及記錄內(nèi)容進(jìn)行細(xì)粒度審計(jì):
細(xì)粒度審計(jì)結(jié)果展示:
遠(yuǎn)程ftp操作審計(jì)與回放:對(duì)發(fā)生在數(shù)據(jù)庫服務(wù)器上的ftp命令進(jìn)行實(shí)時(shí)監(jiān)控、審計(jì)及回放。審計(jì)的要素包括:ftp用戶、ftp客戶端IP地址、命令執(zhí)行時(shí)間段(本日、本周、本月、最近三小時(shí)、最近十二小時(shí)、最近二十四小時(shí)、tb最近七天、最近三十天、任意時(shí)間段)、執(zhí)行的ftp命令(get/put/ls等等)。
 
自定義ftp操作審計(jì):
ftp審計(jì)結(jié)果展示:
ftp回放:
 
遠(yuǎn)程telnet操作審計(jì)與回放:對(duì)發(fā)生在數(shù)據(jù)庫服務(wù)器上的Telnet命令進(jìn)行實(shí)時(shí)監(jiān)控、審計(jì)及回放。審計(jì)的要素包括:telnet用戶、telnet客戶端IP地址、命令執(zhí)行時(shí)間段(本日、本周、本月、最近三小時(shí)、最近十二小時(shí)、最近二十四小時(shí)、最近七天、最近三十天、任意時(shí)間段)、telnet登錄后執(zhí)行的系統(tǒng)命令(login/pwd/root等等)。
自定義telnet操作審計(jì):
 
telnet操作審計(jì)結(jié)果展示:
會(huì)話分析與查看:單個(gè)離散的操作(Sql操作、ftp命令、telnet命令)還不足于了解用戶的真實(shí)意圖,一連串的操作所組成的一個(gè)完整會(huì)話展現(xiàn),可以更加清晰地判斷用戶的意圖(違規(guī)的\粗心的\惡意的)。
Telent操作審計(jì)會(huì)話查看:
 
2.1.4 審計(jì)報(bào)表
數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)內(nèi)嵌了功能強(qiáng)大的報(bào)表模塊,除了按安全經(jīng)驗(yàn)、行業(yè)需求分類的預(yù)定義固定格式報(bào)表外,管理員還可以利用報(bào)表自定義功能生成定制化的報(bào)告。報(bào)告模塊同時(shí)支持Word、Excel、PowerPoint、Pdf格式的數(shù)據(jù)導(dǎo)出。系統(tǒng)缺省提供以下報(bào)表:
 
數(shù)據(jù)庫攻擊源統(tǒng)計(jì)示意圖:
數(shù)據(jù)庫操作審計(jì)示意:
同時(shí)提供靈活的格式報(bào)表功能,可以方便的根據(jù)業(yè)務(wù)邏輯來動(dòng)態(tài)格式化報(bào)表元素,提供強(qiáng)大的樣式定義,對(duì)于熟悉CSS的設(shè)計(jì)人員來說,可以設(shè)計(jì)出相當(dāng)出色的報(bào)表樣式。
 
2.1.5 安全事件回放
允許安全管理員提取歷史數(shù)據(jù),對(duì)過去某一時(shí)段的事件進(jìn)行回放,真實(shí)展現(xiàn)當(dāng)時(shí)的完整操作過程,便于分析和追溯系統(tǒng)安全問題。
很多安全事件或者與之關(guān)聯(lián)的事件在發(fā)生一段時(shí)間后才引發(fā)相應(yīng)的人工處理, 這個(gè)時(shí)候, 作為獨(dú)立審計(jì)的數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)就發(fā)揮特別的作用. 因?yàn)樗械腇TP、telnet、客戶端連接等事件都保存后臺(tái)(包括相關(guān)的告警), 對(duì)相關(guān)的事件做定位查詢,縮小范圍,使得追溯變得容易;同時(shí)由于這是獨(dú)立監(jiān)控審計(jì)模式, 使得相關(guān)的證據(jù)更具有公證性。
Sql操作回放示意圖:
telnet命令回放示意圖:
2.1.6 綜合管理
數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)提供WEB-base的管理頁面,數(shù)據(jù)庫安全管理員在不需要安裝任何客戶端軟件的情況下,基于標(biāo)準(zhǔn)的瀏覽器即可完成對(duì)數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)的相關(guān)配置管理,主要包括“審計(jì)對(duì)象管理、系統(tǒng)管理、用戶管理、功能配置、風(fēng)險(xiǎn)查詢”等。
下圖為審計(jì)對(duì)象配置示意圖:
下圖為系統(tǒng)配置示意圖:
下圖為風(fēng)險(xiǎn)查詢示意圖: 
 
2.2 審計(jì)流程
明御數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)數(shù)據(jù)庫審計(jì)流程如下圖所示:
2.2.1 審計(jì)數(shù)據(jù)采集
明御數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)審計(jì)數(shù)據(jù)采集的方式包括:網(wǎng)絡(luò)抓包、本地操作審計(jì),采集的內(nèi)容主要包括:
賬號(hào)登錄行為數(shù)據(jù):采集對(duì)賬號(hào)登錄動(dòng)作的審計(jì)。具體包括:
賬號(hào)名稱、登錄成功或登錄失敗、用戶終端IP/ID、登錄時(shí)間等;
對(duì)異常動(dòng)作的審計(jì)記錄,應(yīng)記錄越權(quán)企圖、用戶終端IP/ID、登錄時(shí)間等;
賬號(hào)登錄后各種操作記錄,記錄各種操作的操作人員、操作時(shí)間、操作內(nèi)容,具體包括:
對(duì)數(shù)據(jù)庫的一般操作記錄;
對(duì)關(guān)鍵數(shù)據(jù)的操作記錄;
數(shù)據(jù)庫特殊命令的操作記錄
明御數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)對(duì)審計(jì)數(shù)據(jù)的采集大多數(shù)情況下是通過網(wǎng)絡(luò)獲取,由于其采用了專用硬件加速接口卡,可以在千兆環(huán)境下線速捕獲,因此保證了明御數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)具備交換機(jī)一樣的高吞吐量和低延時(shí)、并且確保了審計(jì)信息的不會(huì)丟失。
2.2.2 審計(jì)數(shù)據(jù)標(biāo)準(zhǔn)化
審計(jì)數(shù)據(jù)來源自多種方式采集的數(shù)據(jù),而這些數(shù)據(jù)定義的格式不盡相同。所以,審計(jì)數(shù)據(jù)的標(biāo)準(zhǔn)化就必須把這些不同格式的事件轉(zhuǎn)化成標(biāo)準(zhǔn)格式,然后寫入審計(jì)數(shù)據(jù)庫。在標(biāo)準(zhǔn)化的過程中,也需要對(duì)多種方式采集的數(shù)據(jù)進(jìn)行排重處理。
2.2.3 審計(jì)數(shù)據(jù)歸并
對(duì)于標(biāo)準(zhǔn)化處理后的審計(jì)數(shù)據(jù)必須對(duì)某些數(shù)據(jù)進(jìn)行歸并(會(huì)聚)。歸并規(guī)則,就是在什么情況下,滿足什么條件,對(duì)哪些字段進(jìn)行歸并。事件歸并功能可以對(duì)海量的審計(jì)數(shù)據(jù)依據(jù)歸并條件進(jìn)行歸并,達(dá)到簡化審計(jì)數(shù)據(jù),提高審計(jì)數(shù)據(jù)準(zhǔn)確率。
審計(jì)數(shù)據(jù)歸并規(guī)則包含以下屬性:
歸并字段:歸并處理的審計(jì)數(shù)據(jù)字段,所列字段內(nèi)容相同的審計(jì)數(shù)據(jù)才進(jìn)行歸并;
歸并時(shí)間:歸并審計(jì)數(shù)據(jù)的時(shí)間窗口,指多長時(shí)間進(jìn)行一次歸并;
歸并數(shù)目:需要?dú)w并事件的數(shù)量,指多少事件進(jìn)行一次歸并;
對(duì)被歸并審計(jì)數(shù)據(jù)的處理方式:被歸并的審計(jì)數(shù)據(jù)以何種方式進(jìn)行處理;
被歸并審計(jì)數(shù)據(jù)的處理方式:
丟棄:直接將被歸并審計(jì)數(shù)據(jù)全部丟棄,不寫入數(shù)據(jù)庫;
寫入數(shù)據(jù)庫:將被歸并審計(jì)數(shù)據(jù)全部寫入數(shù)據(jù)庫;
通過預(yù)設(shè)歸并規(guī)則的模板,方便對(duì)海量審計(jì)數(shù)據(jù)的歸并,明御數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)提供以下預(yù)設(shè)模板:
根據(jù)審計(jì)數(shù)據(jù)名稱進(jìn)行歸并分析;
根據(jù)審計(jì)數(shù)據(jù)的類型進(jìn)行歸并分析;
根據(jù)審計(jì)數(shù)據(jù)的原始時(shí)間進(jìn)行歸并分析;
根據(jù)受審計(jì)的設(shè)備類型進(jìn)行歸并分析;
 
2.2.4 安全事件關(guān)聯(lián)
通過安全事件關(guān)聯(lián)功能,來深度挖掘安全隱患、判斷審計(jì)數(shù)據(jù)的嚴(yán)重程度,包括關(guān)聯(lián)分析的類型和關(guān)聯(lián)分析規(guī)則的內(nèi)容。
基于時(shí)序關(guān)聯(lián)規(guī)則:將賬號(hào)的登錄行為和賬號(hào)各種業(yè)務(wù)操作行為根據(jù)時(shí)序進(jìn)行關(guān)聯(lián)。通過時(shí)序關(guān)聯(lián),形成某一個(gè)賬號(hào)連續(xù)的登錄行為和操作行為,根據(jù)制定審計(jì)策略判斷其是否業(yè)務(wù)操作習(xí)慣;根據(jù)時(shí)序關(guān)聯(lián)判斷執(zhí)行每個(gè)業(yè)務(wù)操作的賬號(hào)是否具有正常的登錄記錄等;
基于賬號(hào)與重要操作行為的關(guān)聯(lián):將對(duì)數(shù)據(jù)庫系統(tǒng)的重要業(yè)務(wù)操作時(shí)所使用的賬號(hào)信息進(jìn)行關(guān)聯(lián),用來判斷該賬號(hào)是否正常使用;判斷該賬號(hào)是否具有該項(xiàng)權(quán)限所對(duì)應(yīng)的權(quán)限范圍,是否為合法用戶等等。
基于賬號(hào)與權(quán)限關(guān)聯(lián):將賬號(hào)應(yīng)該對(duì)應(yīng)的權(quán)限與實(shí)際系統(tǒng)中賦予的權(quán)限進(jìn)行關(guān)聯(lián),用來審計(jì)賬號(hào)的訪問權(quán)限是否合理;查詢資源的授權(quán)訪問者,權(quán)限的分配時(shí)間、分配者等是否和審批的一致。
2.2.5 審計(jì)結(jié)果呈現(xiàn)
審計(jì)數(shù)據(jù)的呈現(xiàn)與安全風(fēng)險(xiǎn)管理是密切相關(guān)的。明御數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)提供對(duì)審計(jì)數(shù)據(jù)進(jìn)行實(shí)時(shí)監(jiān)控和實(shí)時(shí)展現(xiàn)。在審計(jì)數(shù)據(jù)的展現(xiàn)或響應(yīng)中,可以支持郵件、彈出窗口、syslog、SNMP Trap、手機(jī)信息、聲音報(bào)警等多種方式。
2.2.6 靈活的報(bào)告展現(xiàn)
明御數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)內(nèi)嵌了功能強(qiáng)大的報(bào)表模塊,除了按安全經(jīng)驗(yàn)、行業(yè)需求分類的預(yù)定義固定格式報(bào)表外,管理員還可以利用報(bào)表自定義功能生成定制化的報(bào)告。報(bào)告模塊同時(shí)支持Word、Excel、PowerPoint、Pdf、Html、Postscript格式的數(shù)據(jù)導(dǎo)出。支持兩種報(bào)表生成模式,即預(yù)置固定格式的報(bào)表、用戶自定義報(bào)表:
通過預(yù)置固定格式的報(bào)表:可快速查看安全告警、SOX審計(jì)、設(shè)備性能以及應(yīng)用系統(tǒng)受攻擊情況。
靈活的條件格式定義,可以方便的根據(jù)業(yè)務(wù)邏輯來動(dòng)態(tài)格式化報(bào)表元素,同時(shí)提供強(qiáng)大的樣式定義,對(duì)于熟悉CSS的設(shè)計(jì)人員來說,可以設(shè)計(jì)出相當(dāng)出色的報(bào)表樣式。
全部查詢:
指定用戶查詢:
 
2.3 系統(tǒng)優(yōu)勢(shì)
2.3.1 零風(fēng)險(xiǎn)、多種方式部署
明御數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)可靈活支持直連、旁路的模式部署到網(wǎng)絡(luò)中,因此,部署時(shí)不需要對(duì)現(xiàn)有的網(wǎng)絡(luò)體系結(jié)構(gòu)(包括:路由器、防火墻、應(yīng)用層負(fù)載均衡設(shè)備、應(yīng)用服務(wù)器等)進(jìn)行調(diào)整。同時(shí),依靠“安恒”自主研發(fā)的雙引擎技術(shù),檢測過程中無需對(duì)應(yīng)用程序進(jìn)行修改,實(shí)現(xiàn)應(yīng)用層的零風(fēng)險(xiǎn)部署。
2.3.2 不影響數(shù)據(jù)庫業(yè)務(wù)本身
明御數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)主要是通過網(wǎng)絡(luò)抓包進(jìn)行數(shù)據(jù)采集 ,因此并不影響數(shù)據(jù)庫保護(hù)對(duì)象本身的運(yùn)行與性能,主要體現(xiàn)在以下幾個(gè)方面:
不需要對(duì)數(shù)據(jù)庫軟件進(jìn)行更改;
不占用數(shù)據(jù)庫本身的資源,比如:CPU資源、內(nèi)存資源、磁盤資源等;
無需數(shù)據(jù)庫的管理權(quán)限;
2.3.3 高可用性
明御數(shù)據(jù)庫審計(jì)與風(fēng)險(xiǎn)控制系統(tǒng)全方位確保設(shè)備本身的高可用性,包括但不限于:
物理保護(hù):關(guān)鍵部件采用冗余配置(如:冗余電源、內(nèi)置硬盤RAID等);
掉電保護(hù):設(shè)備掉電(如電源被不慎碰掉)時(shí),網(wǎng)絡(luò)流量將會(huì)直接貫通;
系統(tǒng)故障保護(hù):內(nèi)置監(jiān)測模塊準(zhǔn)實(shí)時(shí)地監(jiān)測設(shè)備自身的健康狀況;
不間斷的管理保護(hù):在進(jìn)行策略配置情況下,能保持網(wǎng)絡(luò)的連接和保護(hù);
不丟包:基于硬件加速的接口卡,在1G、2.5G、10G環(huán)境下實(shí)現(xiàn)100%數(shù)據(jù)包捕獲;

冗余部署:在具備冗余體系結(jié)構(gòu)的環(huán)境中,支持Active-Active或Active-Standby部署配置

posted @ 2012-07-22 14:01 tbwshc| 編輯 收藏

了解如何安裝、設(shè)置和配置 Oracle GoldenGate 以輕松實(shí)現(xiàn) Oracle Database 10g 和 11g 之間數(shù)據(jù)的無縫復(fù)制。

作者:Porus Homi Havewala

2010 年 4 月發(fā)布

Oracle GoldenGate 用于在各種企業(yè)系統(tǒng)間以亞秒級(jí)速度復(fù)制和集成事務(wù)數(shù)據(jù),是同類最佳的、易于部署的產(chǎn)品。Oracle GoldenGate 可以靈活地在同類和異類系統(tǒng)(包括不同版本的 Oracle Database、不同的硬件平臺(tái))tb之間以及 Oracle 數(shù)據(jù)庫和非 Oracle 數(shù)據(jù)庫(包括 Microsoft SQL Server、用于開放系統(tǒng)和 z/OS 的 IBM DB2、Sybase 等等)之間移動(dòng)數(shù)據(jù)。

本文演示如何安裝、設(shè)置和配置此產(chǎn)品以輕松實(shí)現(xiàn) Oracle Database 10g 和 11g 之間數(shù)據(jù)的無縫復(fù)制,還介紹了此產(chǎn)品的加速能力。

Oracle 于 2009 年收購了 GoldenGate,我們可以看到在全球各行業(yè)超過 4,000 個(gè)解決方案中實(shí)施了 Oracle GoldenGate。該軟件執(zhí)行實(shí)時(shí)的、基于日志的更改數(shù)據(jù)捕獲 (CDC),能夠在異構(gòu)數(shù)據(jù)庫間以極低的延遲和很小的空間移動(dòng)大量事務(wù)數(shù)據(jù)。

通常,您部署 GoldenGate 捕獲、數(shù)據(jù)泵和交付進(jìn)程,并且可將這些進(jìn)程部署在許多不同的操作系統(tǒng)和數(shù)據(jù)庫上。可根據(jù)目標(biāo)數(shù)據(jù)庫的需要,復(fù)制所有數(shù)據(jù)或部分?jǐn)?shù)據(jù)。當(dāng) Oracle GoldenGate 用于 Oracle 數(shù)據(jù)庫時(shí),可以復(fù)制數(shù)據(jù)操作語言 (DML) 和數(shù)據(jù)定義語言 (DDL) 操作。(目前只能在同類(不能在異類的)Oracle 版本間復(fù)制 DDL 操作。)

Oracle GoldenGate 官方支持 Oracle9i 第 2 版到 Oracle Database 11g 第 2 版,并且對(duì)所有這些版本提供 DML/DDL 支持。該產(chǎn)品可用于 Oracle Database 的企業(yè)版和標(biāo)準(zhǔn)版。

如上所述,可以在所支持的同類或異類 Oracle Database 版本間移動(dòng)數(shù)據(jù),也可以在 Oracle 數(shù)據(jù)庫和非 Oracle 數(shù)據(jù)庫間移動(dòng)數(shù)據(jù)。大多數(shù)情況下,可對(duì)數(shù)據(jù)進(jìn)行篩選、映射和轉(zhuǎn)換。注意,如果啟用了 DDL 支持(換言之,如果使用 GoldenGate 進(jìn)行同類 Oracle Database 版本之間的 DDL 復(fù)制),則不支持?jǐn)?shù)據(jù)篩選、映射和轉(zhuǎn)換。

Oracle GoldenGate 是以 DBA 為中心的,因此 DBA 很容易學(xué)會(huì)如何使用它。其實(shí)現(xiàn)時(shí)間也是最少的 — 一些站點(diǎn)只用一個(gè)月的時(shí)間就完全付諸實(shí)現(xiàn)。

可獲得什么

Oracle GoldenGate 產(chǎn)品系列包括:

  • Oracle GoldenGate
  • Management Pack for Oracle GoldenGate(也稱為 Oracle GoldenGate Director)
  • Oracle GoldenGate Veridata
  • Oracle GoldenGate Application Adapters
  • Oracle GoldenGate for Mainframe

為使增值服務(wù)造福客戶,Oracle GoldenGate 核心許可包括 Oracle Active Data Guard 的全權(quán)使用許可和 Oracle Database 中 XStream 的全權(quán)使用許可。XStream 是與 Oracle Streams 接口的 API。Oracle Active Data Guard 支持主動(dòng)打開備用數(shù)據(jù)庫以提供報(bào)表服務(wù),甚至在應(yīng)用重做數(shù)據(jù)的同時(shí)也如此。這個(gè)特性非常棒,可將生產(chǎn)報(bào)表和查詢工作分流到備用數(shù)據(jù)庫上。

一直以來,Oracle Streams 只用于在 Oracle 數(shù)據(jù)庫間復(fù)制數(shù)據(jù)。Oracle GoldenGate 還可以在非 Oracle 數(shù)據(jù)庫間復(fù)制數(shù)據(jù),并且這種復(fù)制易于建立。

我們應(yīng)注意到,已發(fā)布的 Oracle — GoldenGate 發(fā)展方向聲明 中指出,“由于 Oracle GoldenGate 的戰(zhàn)略性,將繼續(xù)支持 Oracle Streams,但不會(huì)對(duì)其進(jìn)行主動(dòng)增強(qiáng)。而是對(duì) Oracle Streams 中最好的內(nèi)容行評(píng)估以確定是否將其并入 Oracle GoldenGate 中。”

此演示的目的

為了進(jìn)行此次演示,您應(yīng)在一臺(tái) Microsoft Windows 服務(wù)器上有三個(gè)數(shù)據(jù)庫。這三個(gè)數(shù)據(jù)庫是 HRPRD1、HRPRD2 和 HRPRD3。其數(shù)據(jù)庫版本分別為 Oracle Database 11g、 Oracle Database 10g 和 Oracle Database 10g

這三個(gè)數(shù)據(jù)庫的 SYS 和 SYSTEM 口令已設(shè)置為 hrpassword1,用于測試目的。稍后可更改此口令。

此演示的目的是在 HRPRD2 和 HRPRD3 這兩個(gè) Oracle 10g 數(shù)據(jù)庫的 HR.EMPLOYEES 表之間建立單向復(fù)制。對(duì)第一個(gè)數(shù)據(jù)庫中此表的 DML 更改應(yīng)傳給第二個(gè)數(shù)據(jù)庫。然后,我們將對(duì)這一復(fù)制進(jìn)行增強(qiáng),可以將更改同時(shí)復(fù)制到 Oracle 11g 數(shù)據(jù)庫 HRPRD1 中。其結(jié)果是,對(duì) HRPRD2 中該表的任何更新、插入和刪除不僅將會(huì)成功更新 HRPRD3,也會(huì)成功更新 HRPRD1。

這種從 Oracle Database 10g 到 Oracle Database 10g 然后再到 Oracle Database 11g 的復(fù)制策略常用于升級(jí)情況,進(jìn)行升級(jí)時(shí),需要先復(fù)制數(shù)據(jù),然后方可切換到升級(jí)后的數(shù)據(jù)庫版本。Oracle GoldenGate 提供了簡單的解決方案。

注意,針對(duì) Oracle 數(shù)據(jù)庫時(shí),您 需要使用 Microsoft ODBC 數(shù)據(jù)源管理器為這些數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)源名稱 (DSN)。Oracle GoldenGate 復(fù)制將使用監(jiān)聽器直接連接到 Oracle 數(shù)據(jù)庫。

需要下載的內(nèi)容

首先,對(duì)于 Windows 系統(tǒng),需要從 Microsoft 下載中心下載 Microsoft Visual C ++ 2005 SP1 Redistributable Package,然后進(jìn)行安裝。如果計(jì)算機(jī)上未安裝 Visual C++,這用于安裝運(yùn)行本應(yīng)用程序時(shí)所需的 Visual C++ 庫的運(yùn)行時(shí)組件。

接下來,需要從 Oracle 技術(shù)網(wǎng) 下載 Oracle GoldenGate 軟件。截至本文撰寫時(shí),OTN 只支持 Windows 平臺(tái) 64 位版本:適用于 Windows 2000、XP 和 2003(64 位)上的 Oracle 10g 的 Oracle GoldenGate 10.4.0.x 版 (8 MB)。要下載 32 位 Windows 版本,您必須使用 Oracle E-Delivery 網(wǎng)站。(請(qǐng)注意,E-Delivery 下載有一個(gè)為期 30 天的試用產(chǎn)品許可,而非 OTN 開發(fā)人員許可。)登錄此網(wǎng)站后,搜索適用于 Microsoft Windows(32 位)平臺(tái)的“Oracle Fusion Middleware Product Pack”(因?yàn)?Oracle GoldenGate 被視作一個(gè) Oracle 融合中間件產(chǎn)品,而非 Oracle Database 產(chǎn)品),然后單擊 Go

此時(shí)會(huì)出現(xiàn)介質(zhì)包列表。在此列表中,先選擇 Oracle GoldenGate on Oracle Media Pack for Microsoft Windows (32-bit)

此介質(zhì)包中包含:

適用于 Windows 2000、XP 和 2003 上的 Oracle 10g 的 Oracle GoldenGate 10.4.0.x 版

V18162-01

大小:8.4 MB

適用于 Windows 2000、XP 和 2003 上的 Oracle 11g 的 Oracle GoldenGate 10.4.0.x 版

V18164-01

大小:8.4 MB

Oracle GoldenGate 文檔

V18423-01

大小:20 MB

下載這三個(gè) zip 文件,因?yàn)槟枰m用于 Oracle 10g 和 Oracle 11g 的 Oracle GoldenGate。
然后,返回到 Oracle 融合中間件的介質(zhì)包列表,從中tb選擇 Management Pack for Oracle GoldenGate (v2.0.0.2) Media Pack for Microsoft Windows
該管理包介質(zhì)包中包含:

適用于 Windows 的 Oracle GoldenGate Director V2.0.0.x Server

V18127-01

大小:228 MB

適用于 Windows 的 Oracle GoldenGate Director V2.0.0.x Client

V18128-01

大小:55 MB

Oracle GoldenGate Director 文檔

V18129-01

大小:952 KB

如果您想安裝管理包,下載所有這些文件。該管理包是一個(gè)安裝您 Windows 服務(wù)器上的獨(dú)立產(chǎn)品,。該產(chǎn)品原名為 Oracle GoldenGate Director,它包含一個(gè)多層的客戶端-服務(wù)器應(yīng)用程序,使組織可以輕松監(jiān)視和管理其 Oracle GoldenGate 部署。

使用 Oracle GoldenGate Director 的 GUI 界面,可以集中設(shè)計(jì)和配置 Oracle GoldenGate,還可以管理和監(jiān)視為了在公司各服務(wù)器間復(fù)制數(shù)據(jù)而建立的各種 Oracle GoldenGate 進(jìn)程。

介質(zhì)包的主列表中還有其他一些介質(zhì)包,如 Oracle GoldenGate Veridata Media Pack for Microsoft Windows。

Oracle GoldenGate Veridata 軟件作為服務(wù)器進(jìn)行安裝,在不同平臺(tái)上具有代理,它負(fù)責(zé)將一組數(shù)據(jù)與另一組數(shù)據(jù)進(jìn)行對(duì)比以識(shí)別不同步的數(shù)據(jù),對(duì)比時(shí)無需停機(jī)。此對(duì)比可全天候進(jìn)行,可與大流量的復(fù)制同時(shí)進(jìn)行。還可在不同平臺(tái)間進(jìn)行數(shù)據(jù)對(duì)比。

除了上述主要介質(zhì)包外,列表中還顯示了其他 Oracle GoldenGate 包。這些軟件包適用于非 Oracle 數(shù)據(jù)庫,如 Sybase、SQL Server、IBM DB2、Teradata,還有 JMS 和平面文件,這反映了 Oracle GoldenGate 支持異構(gòu)的性質(zhì)。

安裝步驟

您下載的 Oracle GoldenGate 文檔 zip 文件 (V18423-01.zip) 中包含 Oracle GoldenGate Oracle Installation and Setup Guide Version 10.4 (gg_ora_inst_v104.pdf),其中描述了適用于 Linux、UNIX 和 Windows 上的 Oracle 數(shù)據(jù)庫的 Oracle GoldenGate 的安裝步驟。

注意,還有其他一些安裝文檔,它們針對(duì)適用于 Sybase、SQL Server、DB2、MySQL、Teradata 等的 Oracle GoldenGate。

首先,將 Oracle GoldenGate for Oracle 10g (V18162-01.zip) 解壓縮到一個(gè)新的 Oracle GoldenGate 軟件目錄中,目錄名中不含任何空格。例如,您可以使用 C:\OGG10G 作為 Oracle GoldenGate 目錄。此目錄中的軟件代碼將用于建立第一個(gè)和第二個(gè) Oracle 10g 數(shù)據(jù)庫之間的復(fù)制。

由于您的第三個(gè)數(shù)據(jù)庫是 Oracle Database 11g 版 ,您還需要解壓縮 Oracle GoldenGate for Oracle 11g (V18164-01.zip)。對(duì)于此版本的 Oracle GoldenGate,您需要使用一個(gè)單獨(dú)的目錄,C:\OGG11G。此目錄中的軟件代碼將用于控制到第三個(gè) Oracle Database 11g 數(shù)據(jù)庫的復(fù)制。

如果您有 Oracle9i 數(shù)據(jù)庫并且想從其復(fù)制數(shù)據(jù)或向其復(fù)制數(shù)據(jù),需要另一個(gè)適用于 Oracle9i 的 Oracle GoldenGate 軟件。不過,您不能通過 Oracle 網(wǎng)站下載 Oracle GoldenGate 的 Oracle9i 版本。如果您需要此版本,可能需要通過 My Oracle Support 發(fā)出一個(gè)系統(tǒng)請(qǐng)求 (SR)。

在命令提示符處輸入以下命令

mkdir C:\OGG10G
cd C:\OGG10G
unzip c:\V18162-01.zip

mkdir C:\OGG11G
cd C:\OGG11G
unzip C:\V18164-01.zip

# start the 10g
 databases if not already started
net start OracleServiceHRPRD2
net start OracleServiceHRPRD3

# start the 11g
 database if not already started
net start OracleServiceHRPRD1
  

設(shè)置環(huán)境變量

現(xiàn)在,您可以打開兩個(gè)命令窗口(開始..運(yùn)行..Cmd) ,針對(duì) Oracle Database 10g 和 Oracle Database 11g 將相應(yīng)的環(huán)境變量(如 ORACLE_HOME、ORACLE_SID、LD_LIBRARY_PATH 等)設(shè)置為相應(yīng)的值。

為了在兩個(gè) Oracle 10g 數(shù)據(jù)庫間建立復(fù)制,將這些變量進(jìn)行如下設(shè)置:

set  ORACLE_HOME=C:\Oracle\product\10.2.0\db_1
set ORACLE_SID=HRPRD2
set  PATH=%ORACLE_HOME%\bin;%PATH%
set  LD_LIBRARY_PATH=C:\OGG10G; %ORACLE_HOME%\LIB; 
%ORACLE_HOME%\jdbc\lib
set  CLASSPATH=;C:\Program 
Files\Java\jre6\lib\ext\QTJava.zip;%ORACLE_HOME%\jdbc\lib
  

ORACLE_SID 可設(shè)置為 HRPRD2 或 HRPRD3,兩者都是 Oracle 10g 數(shù)據(jù)庫。請(qǐng)注意 PATH、LD_LIBRARY_PATH 和 CLASSPATH 的值。

另一種方法是用系統(tǒng)變量進(jìn)行這些設(shè)置,為此您可以在 Windows XP Professional 中使用:我的電腦..屬性..高級(jí)..環(huán)境變量..系統(tǒng)變量。在這里添加新的系統(tǒng)變量并按如上所述更改路徑。

在此例中,在一臺(tái)服務(wù)器上運(yùn)行兩個(gè)數(shù)據(jù)庫版本的缺點(diǎn)是,每次啟動(dòng) Oracle GoldenGate for Oracle 10g 或 Oracle GoldenGate for Oracle 11g 的 Manager 服務(wù)時(shí),都必須更改系統(tǒng)變量。您可能要添加與 Oracle Database 11g 有關(guān)的系統(tǒng)變量,然后啟動(dòng) Oracle GoldenGate for Oracle 11g Manager 服務(wù)。這之后,您可能要更改這些系統(tǒng)變量,使其適合于 Oracle Database 10g ,然后啟動(dòng) Oracle GoldenGate for Oracle 10g Manager 服務(wù)。由于這是一個(gè)測試系統(tǒng),這么做可能沒有問題。但在生產(chǎn)環(huán)境下,您需要采取一種更自動(dòng)化的方法(如采用腳本化的方法)在腳本中設(shè)置這些變量并啟動(dòng) Manager 服務(wù)。

GGSCI 命令解釋程序

在命令窗口或“我的電腦”級(jí)別設(shè)置環(huán)境變量之后,轉(zhuǎn)到 Oracle GoldenGate 的文件夾下,通過命令行(見圖 1)或 Windows 資源管理器運(yùn)行 Oracle GoldenGate Command Interpreter for Oracle (GGSCI) 程序。


圖 1 Oracle GoldenGate Command Interpreter

現(xiàn)在,您可在 GGSCI 中執(zhí)行 CREATE SUBDIRS 命令來創(chuàng)建 Oracle GoldenGate 的工作子目錄。參見圖 2,其中列出了所創(chuàng)建的重要目錄。


圖 2 創(chuàng)建工作子目錄

將 Oracle GoldenGate Manager 作為本地程序運(yùn)行

您可以將 Oracle GoldenGate Manager 當(dāng)作一個(gè)本地程序在命令窗口中運(yùn)行,也可以將它作為一個(gè) Windows 服務(wù)安裝以便在 Windows 啟動(dòng)時(shí)自動(dòng)啟動(dòng)。我們建議使用后面這種方法。

如果您希望將其作為一個(gè)本地命令運(yùn)行,只需調(diào)用目錄中的 Manager 執(zhí)行文件(調(diào)用時(shí)帶著一個(gè)參數(shù)文件)即可。命令語法為:

C:\OGG10G>mgr
Usage:  MGR PARAMFILE <param file> [REPORTFILE <report file>]
              [PID <process id>] [PORT  <port number>]
              [USESUBDIRS] [NOUSESUBDIRS]
              [PAUSEATEND] [NOPAUSEATEND]
              [CD <directory>]

PARAMFILE 是必需的參數(shù)。因此,您必須在 GGSCI 中創(chuàng)建一個(gè)參數(shù)文件:

GGSCI (HaviPori) 1> edit params mgr

此命令將在 C:\OGG10G\dirprm 目錄中創(chuàng)建一個(gè)新的 mgr.prm 文件。在該文件中鍵入將用于運(yùn)行 manager 進(jìn)程的端口號(hào),然后保存該文件。

PORT 7809

默認(rèn)端口號(hào)為 7809。無論您選擇哪個(gè)端口號(hào),請(qǐng)確保該端口號(hào)未被任何其他程序所使用并且沒有任何防火墻限制。因?yàn)?PORT 是 Manager 唯一需要的參數(shù),所以必須指定該參數(shù)。GGSCI 使用該端口將請(qǐng)求發(fā)送給 Manager 以啟動(dòng)進(jìn)程,并且 Extract 進(jìn)程也使用該端口進(jìn)行各種操作。

創(chuàng)建該參數(shù)文件之后,就可以在 Windows 命令提示符下啟動(dòng) Manager 了,如下所示:

C:\OGG10G>mgr paramfile c:\OGG10G\dirprm\mgr.prm

該命令啟動(dòng) Manager,并且顯示圖 3 所示的消息:


圖 3 在 Windows 命令提示符處啟動(dòng) Manager

必須保持此窗口為打開狀態(tài),以保持 Manager 運(yùn)行。如果您注銷,該窗口將關(guān)閉,Manager 將停止運(yùn)行。

將 Manager 作為 Windows 服務(wù)進(jìn)行安裝

上文描述了手動(dòng)啟動(dòng) Manager 的方法,還有一種啟動(dòng)方法,那就是將 Manager 作為自動(dòng)啟動(dòng)的 Windows 服務(wù)來安裝。

在 Windows 集群環(huán)境下必須使用后面這種方法,因?yàn)槌霈F(xiàn)故障時(shí)只有服務(wù)可以自動(dòng)切換到備用服務(wù)器上。在非集群系統(tǒng)中,將 Manager 作為服務(wù)來安裝是可選的方法但也是強(qiáng)烈建議的方法。

在 Windows 中作為服務(wù)創(chuàng)建 Manager 進(jìn)程時(shí),該服務(wù)的默認(rèn)名稱為 GGSMGR。您可以為此服務(wù)指定自定義的名稱。如果您在同一臺(tái)服務(wù)器上需要不止一個(gè) Oracle GoldenGate Manager 服務(wù),比如一個(gè)針對(duì) Oracle GoldenGate for Oracle 10g 的服務(wù)和另一個(gè)針對(duì) Oracle GoldenGate for Oracle 11g 的服務(wù),則指定名稱是很重要的。如果您打算運(yùn)行 Oracle GoldenGate Veridata,還需要一個(gè) Manager 服務(wù)。

用以下方法為 Manager 服務(wù)指定一個(gè)不同的名稱。在 GGSCI 命令提示符處執(zhí)行以下命令:

EDIT PARAMS ./GLOBALS

在出現(xiàn)的記事本編輯器中,選擇新建一個(gè)文件(如果是首次這么做),然后輸入以下代碼并保存該 GLOBALS 文件:

MGRSERVNAME OracleGGSMGR1

根據(jù) Windows 上的 Oracle 服務(wù)一般帶有 Oracle 前綴(如 OracleDBConsole<instancename>、OracleJobScheduler<instancename> 服務(wù))的慣例,使用名稱 OracleGGSMGR1。

通過 C:\OGG10G 目錄中的 Install 程序可輕松創(chuàng)建 Manager 服務(wù)。使用 install addservice 命令,如圖 4 所示:


圖 4 創(chuàng)建 Manager 服務(wù)

新服務(wù)在 Windows 服務(wù)列表中顯示為一個(gè)自動(dòng)啟動(dòng)的服務(wù)(見圖 5):


圖 5 Manager 服務(wù)屬性

Manager 服務(wù)以本地系統(tǒng)帳戶運(yùn)行,也可配置為以特定帳戶(使用用戶名和口令選項(xiàng))運(yùn)行,該用戶名和口令可由 addservice 命令指定。現(xiàn)在可通過以下命令啟動(dòng)該服務(wù):

GGSCI (HaviPori) 1> start manager

Starting Manager as service ('OracleGGSMGR1')...
Service started.
  

安裝 Windows 事件消息

還可使用 Install 程序?qū)⑹录惭b到 Windows 注冊(cè)表中,這樣它們可通過 Windows Event Manager 顯示。使用以下命令可完成此操作:

C:\OGG10G>install addevents
Oracle GoldenGate messages installed successfully.
Install program terminated normally.
  

還可將 category.dll 和 ggsmsg.dll 文件從 C:\OGG10G 目錄復(fù)制到 C:\WINDOWS\system32 目錄,從而生成具體的而不是一般性的錯(cuò)誤。

建立復(fù)制 — 在 HRPRD2 上建立 Extract 進(jìn)程

Oracle GoldenGate Manager 進(jìn)程已啟動(dòng)并運(yùn)行。下一步要建立數(shù)據(jù)庫之間的復(fù)制。

為此,您至少需要?jiǎng)?chuàng)建和配置一個(gè) Extract 和 Replicat 組。在這些組中指定您想捕獲和復(fù)制的數(shù)據(jù)。

Extract 進(jìn)程捕獲發(fā)生的數(shù)據(jù)更改并將這些更改發(fā)送給目標(biāo)服務(wù)器上的一個(gè)“線索”。在目標(biāo)服務(wù)器上啟動(dòng) Replicat 進(jìn)程,該進(jìn)程負(fù)責(zé)進(jìn)行實(shí)際的復(fù)制,它從線索中獲取數(shù)據(jù)更改,然后將這些更改應(yīng)用到目標(biāo)數(shù)據(jù)庫中。

您還需要為 Oracle GoldenGate Replication 準(zhǔn)備數(shù)據(jù)庫:在數(shù)據(jù)庫級(jí)打開追加日志 功能。為此,在以 SYSDBA 身份登錄到數(shù)據(jù)庫后使用以下命令:

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
Database altered.

SQL> alter system switch logfile;
System altered

現(xiàn)在可以添加 Extract 組了。

GGSCI (HaviPori) 1> ADD EXTRACT emp_ext, TRANLOG, BEGIN NOW
EXTRACT added.
  

您在這里指定了 TRANLOG,這意味著事務(wù)(重做)日志成為數(shù)據(jù)源。BEGIN 后面可以是該日志中的一個(gè)時(shí)間戳以便從該時(shí)刻開始進(jìn)行處理,也可以是 NOW 以便立即開始處理。TRANLOG 還可以帶有 EXTSEQNO 選項(xiàng)(某個(gè) Oracle 重做日志的序列號(hào),從該日志開始)和 EXTRBA 選項(xiàng)(該日志中的相對(duì)字節(jié)地址)。

注意,Extract 組的名稱只能有八位字符。如果進(jìn)行以下指定,則可獲得完全幫助。

GGSCI (HaviPori) 1> help add extract

接下來,我們要添加一個(gè) RMTTRAIL 或 EXTTRAIL。前者用于遠(yuǎn)程計(jì)算機(jī),如果您在同一臺(tái)本地計(jì)算機(jī)上建立復(fù)制,則建議使用后者。我們將使用 EXTTRAIL,通過以下命令來創(chuàng)建它:

GGSCI (HaviPori) 1> ADD EXTTRAIL C:\OGG10G\dirdat\et, EXTRACT emp_ext
EXTTRAIL added.
  

EXTTRAIL 被指定為服務(wù)器上的一個(gè)物理子目錄 — 最好在 dirdat 子目錄下,dirdat 是為 Oracle GoldenGate 復(fù)制而創(chuàng)建的工作目錄之一。

指定的文件名只能是兩位字符,因?yàn)樵趧?chuàng)建實(shí)際文件時(shí),會(huì)在這兩個(gè)指定的字符后追加一個(gè)數(shù)字后綴以產(chǎn)生實(shí)際文件名。例如,當(dāng) EXTRACT 進(jìn)程啟動(dòng)并且發(fā)生數(shù)據(jù)更改時(shí),會(huì)創(chuàng)建一個(gè) C:\OGG10G\dirdat\et000001 文件作為提取文件。

RMTTRAIL 的命令語法與之相同,如果您要使用 RMTTRAIL,只需用 RMTTRAIL 代替 EXTTRAIL。主要差別體現(xiàn)在 extract 的參數(shù)文件中 — 下一步將創(chuàng)建此參數(shù)文件。使用 RMTTRAIL 時(shí),該參數(shù)文件將有更多參數(shù)用于描述遠(yuǎn)程主機(jī)和遠(yuǎn)程管理器端口號(hào)。

現(xiàn)在,我們來為 Extract 組 emp_ext 創(chuàng)建參數(shù)文件,如下所示:

GGSCI (HaviPori) 1> EDIT PARAM emp_ext

在此文件中,鍵入以下代碼行:

EXTRACT emp_ext
USERID system@localhost:1521/HRPRD2, PASSWORD hrpassword1
EXTTRAIL C:\OGG10G\dirdat\et
TABLE hr.employees;

您指定了在這個(gè) Extract 組中,對(duì)第一個(gè) Oracle 10g 數(shù)據(jù)庫(即 HRPRD2)中的表 HR.EMPLOYEES 進(jìn)行提取。

如果您使用了 RMTTRAIL,則只需按下列行進(jìn)行更改:

RMTHOST <remote host>, MGRPORT <remote manager port number> 
RMTTRAIL C:\<remote GoldennGate Directory>\dirdat\rt
  

現(xiàn)在,可使用以下命令啟動(dòng) extract:

GGSCI (HaviPori) 1> START EXTRACT EMP_EXT
Sending START request to MANAGER ('OracleGGSMGR1') ...
EXTRACT EMP_EXT starting
  

該進(jìn)程的狀態(tài)和有關(guān)信息如下所示:

GGSCI (HaviPori) 2> STATUS EXTRACT EMP_EXT
EXTRACT EMP_EXT: RUNNING

GGSCI (HaviPori) 3> INFO EXTRACT EMP_EXT
EXTRACT    EMP_EXT   Last Started 2009-12-08 13:04   Status RUNNING
Checkpoint Lag       00:00:00 (updated 00:00:00 ago)
Log Read Checkpoint  Oracle Redo Logs
                     2009-12-08 13:05:58  Seqno 11, RBA 578560
  

還可查看有關(guān)該進(jìn)程的詳細(xì)信息:

GGSCI (HaviPori) 4> INFO EXTRACT EMP_EXT detail
EXTRACT    EMP_EXT   Last Started 2009-12-08 13:04   Status RUNNING
Checkpoint Lag       00:00:00 (updated 00:00:00 ago)
Log Read Checkpoint  Oracle Redo Logs
                     2009-12-08 13:07:19  Seqno 11, RBA 596992

  Target Extract Trails:
  Remote Trail Name                                Seqno        RBA     Max MB
  C:\OGG10G\dirprm\et                                  0        923         10
  Extract Source                          Begin             End
  D:\ORADATA\HRPRD2\REDO01.LOG         2009-12-08 12:59  2009-12-08 13:07
  Not Available                           * Initialized *   2009-12-08 12:59

Current directory     C:\OGG10G
Report file                C:\OGG10G\dirrpt\EMP_EXT.rpt
Parameter file         C:\OGG10G\dirprm\EMP_EXT.prm
Checkpoint file        C:\OGG10G\dirchk\EMP_EXT.cpe
Process file             C:\OGG10G\dirpcs\EMP_EXT.pce
Error log                C:\OGG10G \ggserr.log
  

診斷 Extract

只要有錯(cuò)誤,extract 進(jìn)程就會(huì)顯示為 STOPPED 狀態(tài)。這種情況下需要進(jìn)行錯(cuò)誤分析。

首先,查看報(bào)告文件 C:\OGG10G\dirrpt\EMP_EXT.rpt,上面的詳細(xì)信息中提到了該報(bào)告。

然后,查看日志文件 ggserr.log 和 sqlnet.log 中是否有任何說明性的消息,這兩個(gè)文件位于 C:\OGG10G 主目錄中。

ggserr.log 文件包含事件信息,例如:

2009-12-02  14:53:26  GGS INFO        301   Oracle GoldenGate
Manager for Oracle, mgr.prm:  Command received from GGSCI on host 10.10.10.10 (START EXTRACT  EMP_EXT ).
2009-12-02  14:53:26  GGS INFO        302   Oracle GoldenGate Manager for Oracle, mgr.prm:  
EXTRACT EMP_EXT starting.

也可通過以下方法查看這些事件:

GGSCI (HaviPori) 1> VIEW GGSEVT
…
….
2009-12-02 15:09:34  GGS INFO        302  Oracle GoldenGate Manager for Oracle,
mgr.prm:  EXTRACT EMP_EXT starting.
2009-12-02 15:13:26  GGS INFO        399  Oracle GoldenGate Command Interpreter
for Oracle:  GGSCI command (HaviPoriH): EDIT PARAM emp_ext.
  

sqlnet.log 可顯示錯(cuò)誤,例如:

TNS-12557: TNS:protocol adapter not loadable

這個(gè)特定錯(cuò)誤指明存在數(shù)據(jù)庫連接問題,您需要在監(jiān)聽器級(jí)進(jìn)行分析。確保 Path 環(huán)境變量在最開始處包含了 Oracle Home bin 子目錄。可能有其他的 TNS 錯(cuò)誤,它們可能會(huì)指明其他解決方法。

EMP_EXT.rpt 可顯示如下所示的錯(cuò)誤:

2009-12-08 13:01:27  GGS ERROR       182  OCI Error beginning
 session (status = 28009-ORA-28009: connection as SYS should be as SYSDBA or SYSOPER).
2009-12-08 13:01:27  GGS ERROR       190  PROCESS ABENDING.
  

這指明 Extract 進(jìn)程正在嘗試以 sys 而不是 SYSDBA 身份登錄。只需在 Extract 的參數(shù)文件中將登錄參數(shù)改為“system”即可。

在這里我們應(yīng)注意,在 Extract 參數(shù)文件中 login 行的末尾指定 SYSDBA 是不起作用的,盡管這么做對(duì)于 GGSCI 中的 DBLOGIN 命令(在下文中可看到此命令)確實(shí)會(huì)起作用。

ggserr.log 文件可顯示類似錯(cuò)誤:

2009-12-03 00:43:16  GGS INFO        399  Oracle GoldenGate 
Command Interpreter for Oracle:  GGSCI command (HaviPoriH): start manager.
2009-12-03 00:43:25  GGS ERROR       182  Oracle GoldenGate 
Manager for Oracle, mgr.prm:  OCI Error during OCIServerAttach 
(status = 12154-ORA-12154: TNS:could not resolve the connect identifier specified).
2009-12-03 00:43:25  GGS ERROR       190  Oracle GoldenGate 
Manager for Oracle, mgr.prm:  PROCESS ABENDING.
  

這指明 Manager 的參數(shù)文件 mgr.prm 中所提供的登錄憑證可能存在問題。其結(jié)果是 Manager 沒有啟動(dòng)。

您還可能在 Extract 的報(bào)告文件中看到另一個(gè)錯(cuò)誤。例如,EMP_EXT.rpt 可能會(huì)有此類錯(cuò)誤:

2009-12-07 16:40:08  GGS ERROR       190  No minimum supplemental
 logging is enabled. This may cause extract process to handle key 
update incorrectly if key column is not in first row piece.
2009-12-07 16:40:08  GGS ERROR       190  PROCESS ABENDING.
  

問題的解決方法顯然是在數(shù)據(jù)庫級(jí)啟用追加日志功能。由于該功能已啟用,在本例中將不會(huì)看到此錯(cuò)誤。

在 HRPRD3 上建立 Replicat 進(jìn)程

現(xiàn)在轉(zhuǎn)到目標(biāo)數(shù)據(jù)庫 HRPRD3,在本例中該數(shù)據(jù)庫位于同一服務(wù)器上。由于這也是一個(gè) Oracle 10g 數(shù)據(jù)庫,您可以使用同一 Oracle GoldenGate for Oracle 10g 安裝軟件(在 C:\OGG10G 子目錄中)和同一 Manager 服務(wù)。如果這個(gè)數(shù)據(jù)庫位于另一臺(tái)服務(wù)器上,您需要在該服務(wù)器上安裝適用于該數(shù)據(jù)庫版本的相應(yīng) Oracle GoldenGate 軟件然后配置一個(gè)新的 Manager 服務(wù)。

首先,使用 GGSCI 的 DBLOGIN 命令連接到該數(shù)據(jù)庫,這樣以后發(fā)出的其他命令將在此數(shù)據(jù)庫上運(yùn)行。

注意,DBLOGIN 正常運(yùn)行,如下所示:

GGSCI (HaviPori) 1> 
DBLOGIN USERID system@localhost:1521/HRPRD3 PASSWORD hrpassword1
Successfully logged into database.
  

在 GGSCI help 中可以看到還有兩個(gè)參數(shù):SOURCEDB 和 TARGETDB。這兩個(gè)參數(shù)只用于非 Oracle 數(shù)據(jù)庫。

現(xiàn)在,需要為要復(fù)制的 employees 表添加一個(gè)檢查點(diǎn)表:

GGSCI (HaviPori) 2> ADD CHECKPOINTTABLE HR.EMPLOYEES_CHKPT
Successfully created checkpoint table HR.EMPLOYEES_CHKPT.
  

此表中保存的檢查點(diǎn)指示 Replicat 進(jìn)程的當(dāng)前讀寫位置。這用于在進(jìn)程需要重啟時(shí)或者在服務(wù)器出現(xiàn)任何故障或網(wǎng)絡(luò)停頓時(shí)防止數(shù)據(jù)丟失。如果沒有這一機(jī)制,將導(dǎo)致數(shù)據(jù)丟失。另一個(gè)好處是,通過使用檢查點(diǎn),多個(gè) Extract 或 Replicat 進(jìn)程可通過相同的一組線索進(jìn)行讀取。

對(duì)于以批處理模式運(yùn)行的 Extract 和 Replicat 進(jìn)程,檢查點(diǎn)不是必需的,因?yàn)檫@樣的進(jìn)程總是可以重啟。然而,在 Extract 和 Replicat 進(jìn)程連續(xù)工作的情況下,檢查點(diǎn)是必需的。檢查點(diǎn)通常保存在 dirchk 子目錄的文件中,但是對(duì)于 Replicat,可以選擇在數(shù)據(jù)庫的檢查點(diǎn)表中保存檢查點(diǎn)。

如果您在 GLOBALS 參數(shù)文件中指定檢查點(diǎn)表,則上面的命令可使用該文件中的規(guī)定。這種情況下,只需這樣來使用該命令:

GGSCI (HaviPori) 3> ADD CHECKPOINTTABLE
No checkpoint table specified, using GLOBALS specification (hr.employees_chkpt).
Successfully created checkpoint table HR.EMPLOYEES_CHKPT.
  

現(xiàn)在可以添加 Replicat 組了, 具體如下所示,其中指定的 EXTTRAIL 正是在第一個(gè)數(shù)據(jù)庫中建立 Extract 組時(shí)所使用的 EXTTRAIL。這樣,該 Replicat 組將以 Extract 組創(chuàng)建的線索為數(shù)據(jù)源,即使用相同的線索:

GGSCI (HaviPori) 4> ADD REPLICAT emp_rep, EXTTRAIL C:\OGG10G\dirdat\et, CHECKPOINTTABLE hr.employees_chkpt, 
REPLICAT added.
  

編輯此 Replicat 組的參數(shù)文件,具體如下:

GGSCI (HaviPori) 5> EDIT PARAM emp_rep

在新文件中輸入以下內(nèi)容:

REPLICAT emp_rep
USERID system@localhost:1521/HRPRD3, PASSWORD hrpassword1
ASSUMETARGETDEFS
MAP hr.employees, TARGET hr.employees;
  

由于各表具有完全相同的 DDL 結(jié)構(gòu),您使用 ASSUMETARGETDEFS 參數(shù)。

現(xiàn)在可以啟動(dòng) Replicat 組:

GGSCI (HaviPori) 6> start REPLICAT emp_rep
Sending START request to MANAGER ('GGSMGR') ...
REPLICAT EMP_REP starting

稍候片刻再查看其狀態(tài),如果立即查看,其狀態(tài)可能顯示為“stopped”。看到狀態(tài)為 “running”后,查看詳細(xì)信息,執(zhí)行 info all 命令顯示所有正在運(yùn)行的進(jìn)程:

GGSCI (HaviPori) 7> status REPLICAT emp_rep
REPLICAT EMP_REP: STOPPED

GGSCI (HaviPori) 8> status REPLICAT emp_rep
REPLICAT EMP_REP: RUNNING

GGSCI (HaviPori) 11> info REPLICAT emp_rep detail
REPLICAT   EMP_REP   Last Started 2009-12-08 13:35   Status RUNNING
Checkpoint Lag       00:00:00 (updated 00:00:01 ago)
Log Read Checkpoint  File C:\OGG10G\dirdat\et000001
                     2009-12-08 13:33:24.000000  RBA 985

  Extract Source                          Begin             End
  C:\OGG10G\dirdat\et000001               2009-12-08 13:33  2009-12-08 13:33
  C:\OGG10G\dirdat\et000000               * Initialized *   2009-12-08 13:33

Current directory    C:\OGG10G
Report file          C:\OGG10G\dirrpt\EMP_REP.rpt
Parameter file       C:\OGG10G\dirprm\EMP_REP.prm
Checkpoint file      C:\OGG10G\dirchk\EMP_REP.cpr
Checkpoint table     HR.EMPLOYEES_CHKPT
Process file         C:\OGG10G\dirpcs\EMP_REP.pcr
Error log            C:\OGG10G\ggserr.log

GGSCI (HaviPori) 12> info all
Program     Status      Group       Lag           Time Since Chkpt
MANAGER     RUNNING
EXTRACT     RUNNING     EMP_EXT     00:00:00      00:00:03
REPLICAT    RUNNING     EMP_REP     00:00:00      00:00:06
  

此時(shí)可對(duì)兩個(gè) Oracle Database 10g 數(shù)據(jù)庫 HRPRD2 和 HRPRD3 之間的復(fù)制進(jìn)行測試。但我們決定等到建立好到 Oracle 11g 數(shù)據(jù)庫 HRPRD1 的復(fù)制之后再進(jìn)行測試。下面我們將建立該復(fù)制。

在 HRPRD1 上建立 Replicat 進(jìn)程

您的 Oracle 11g 數(shù)據(jù)庫 HRPRD1 也在同一服務(wù)器上。由于它是一個(gè) 11g 數(shù)據(jù)庫版本,您需要使用本文開始時(shí)解壓縮到 C:\OGG11G 目錄中的 Oracle GoldenGate for Oracle 11g 軟件。

對(duì)于 Oracle 11g 數(shù)據(jù)庫 home,按如下所示設(shè)置環(huán)境變量:

set ORACLE_HOME=C:\app\havipori\product\11.1.0\db_1
set ORACLE_SID=HRPRD1
set PATH=%ORACLE_HOME%\bin;%PATH%
set LD_LIBRARY_PATH=C:\OGG11G; %ORACLE_HOME%\LIB; %ORACLE_HOME%\jdbc\lib
set CLASSPATH=;C:\Program Files\Java\jre6\lib\ext\QTJava.zip;%ORACLE_HOME%\jdbc\lib
  

按照與 Oracle GoldenGate for Oracle 10g 安裝軟件類似的步驟進(jìn)行操作,創(chuàng)建一個(gè)名為 OracleGGSMGR2 的 Manager 服務(wù)并啟動(dòng)它。創(chuàng)建工作子目錄和 mgr.prm 文件。這些步驟如下所示:

C:\OGG11G>ggsci 
GGSCI (HaviPori) 1> EDIT PARAMS ./GLOBALS
  

在該文件中鍵入 MGRSERVNAME OracleGGSMGR2,然后保存。

C:\OGG11G>install addservice
Service 'OracleGGSMGR2' created.
Install program terminated normally.

GGSCI (HaviPori) 1>create subdirs
Creating subdirectories under current directory C:\OGG11G

Parameter files                C:\OGG11G\dirprm: created
Report files                   C:\OGG11G\dirrpt: created
Checkpoint files               C:\OGG11G\dirchk: created
Process status files           C:\OGG11G\dirpcs: created
SQL script files               C:\OGG11G\dirsql: created
Database definitions files     C:\OGG11G\dirdef: created
Extract data files             C:\OGG11G\dirdat: created
Temporary files                C:\OGG11G\dirtmp: created
Veridata files                 C:\OGG11G\dirver: created
Veridata Lock files            C:\OGG11G\dirver\lock: created
Veridata Out-Of-Sync files     C:\OGG11G\dirver\oos: created
Veridata Out-Of-Sync XML files C:\OGG11G\dirver\oosxml: created
Veridata Parameter files       C:\OGG11G\dirver\params: created
Veridata Report files          C:\OGG11G\dirver\report: created
Veridata Status files          C:\OGG11G\dirver\status: created
Veridata Trace files           C:\OGG11G\dirver\trace: created
Stdout files                   C:\OGG11G\dirout: created

GGSCI (HaviPori) 2>  EDIT PARAMS mgr
  

在該文件中鍵入以下代碼行,然后保存該文件。注意,這里使用了不同的端口號(hào)并且 Manager 現(xiàn)在登錄到 HRPRD1 上。

PORT 7810
USERID system@localhost:1521/HRPRD1 PASSWORD hrpassword1
  

現(xiàn)在可以啟動(dòng) Manager 了。下一步是使用 DBLOGIN 登錄到 Oracle 11g 數(shù)據(jù)庫,然后在此數(shù)據(jù)庫中創(chuàng)建檢查點(diǎn)表。

GGSCI (HaviPori) 3> start manager
Starting Manager as service ('OracleGGSMGR2')...
Service started.

GGSCI (HaviPori) 4> DBLOGIN USERID system@localhost:1521/HRPRD1 PASSWORD hrpassword1
Successfully logged into database.

GGSCI (HaviPori) 5> ADD CHECKPOINTTABLE HR.EMPLOYEES_CHKPT
Successfully created checkpoint table HR.EMPLOYEES_CHKPT.
  

現(xiàn)在,可以在數(shù)據(jù)庫 HRPRD1 中創(chuàng)建第二個(gè) Replicat 組了。注意,我們將使用和前面數(shù)據(jù)庫 HRPRD3 所使用的完全相同的線索。

這樣,HRPRD2 的數(shù)據(jù)所寫入到的同一個(gè)線索同時(shí)為兩個(gè)數(shù)據(jù)庫(HRPRD3 和 HRPRD1)、兩個(gè) Replicat 組所使用。這相當(dāng)棒。

如果在 ADD REPLICAT 命令中不使用 BEGIN NOW,則 Replicat 進(jìn)程會(huì)在跟蹤開始時(shí)就啟動(dòng),這也不錯(cuò)。

GGSCI (HaviPori) 6> ADD REPLICAT emp_rep, EXTTRAIL C:\OGG10G\dirdat\et, CHECKPOINTTABLE hr.employees_chkpt,

REPLICAT added.

GGSCI (HaviPori) 7> EDIT PARAM emp_rep
  

在此文件中輸入以下幾行內(nèi)容:

REPLICAT emp_rep
USERID system@localhost:1521/HRPRD1, PASSWORD hrpassword1
ASSUMETARGETDEFS
HANDLECOLLISIONS
DISCARDFILE c:\OGG11G\dirrpt\emp_ext.dsc, purge
MAP hr.employees, TARGET hr.employees;
  

注意該文件中額外的參數(shù),如 HANDLECOLLISIONS 和 DISCARDFILE。這是為了對(duì)表中記錄重復(fù)之類的錯(cuò)誤進(jìn)行處理。我們已將這些參數(shù)作為選項(xiàng)放入此文件中,也可以將它們放入第一個(gè) Replicat 組的參數(shù)文件中。

HANDLECOLLISIONS 在源數(shù)據(jù)庫活動(dòng)時(shí)對(duì)初始數(shù)據(jù)加載進(jìn)行自動(dòng)錯(cuò)誤處理。確保在初始加載完成后刪除此參數(shù)。DISCARDFILE 參數(shù)指示被刪除的記錄將保存在哪個(gè)文件中。

現(xiàn)在啟動(dòng)該 Replicat 組并查看其狀態(tài):

GGSCI (HaviPori) 8> start REPLICAT emp_rep
Sending START request to MANAGER ('GGSMGR2') ...
REPLICAT EMP_REP starting

GGSCI (HaviPori) 9> status REPLICAT emp_rep
REPLICAT EMP_REP: STOPPED
  

其狀態(tài)顯示為 stopped,但 C:\OGG11G 目錄下的任何日志文件中都沒有錯(cuò)誤指示。

迫使錯(cuò)誤顯示出來的唯一方法是從命令提示符處運(yùn)行 Replicat。這可用于調(diào)試目的 — 錯(cuò)誤(如果有的話)會(huì)顯示在屏幕上而不是寫入報(bào)告文件中。但在 Oracle GoldenGate for Oracle 11g 版本中,看上去需要通過這種方法來使 Replicat 運(yùn)行起來,雖然我們認(rèn)為這可能是測試服務(wù)器上的環(huán)境問題造成的。使用的命令為:

C:\OGG11G> replicat paramfile c:\OGG11G\dirprm\emp_rep.prm

***********************************************************************
                 Oracle GoldenGate Delivery for Oracle
                      Version 10.4.0.19 Build 002
        Windows (optimized), Oracle 11 on Sep 18 2009 16:44:02
Copyright (C) 1995, 2009, Oracle and/or its affiliates.  All rights reserved.

                    Starting at 2009-12-09 11:46:28
***********************************************************************
Operating System Version:
Microsoft Windows XP Professional, on x86
Version 5.1 (Build 2600: Service Pack 2)

Process id: 1504
Description:
***********************************************************************
**            Running with the following parameters                  **
***********************************************************************
REPLICAT emp_rep
USERID system@localhost:1521/HRPRD1, PASSWORD ***********
ASSUMETARGETDEFS
HANdlecollisions
Discardfile c:\OGG11G\dirrpt\emp_ext.dsc, purge
MAP hr.employees, TARGET hr.employees;

CACHEMGR virtual memory values (may have been adjusted)
CACHEBUFFERSIZE:                         64K
CACHESIZE:                              512M
CACHEBUFFERSIZE (soft max):               4M
CACHEPAGEOUTSIZE (normal):                4M
PROCESS VM AVAIL FROM OS (min):           1G
CACHESIZEMAX (strict force to disk):    881M

Database Version:
Oracle Database 11g
 Enterprise Edition Release 11.1.0.6.0 - Production
PL/SQL Release 11.1.0.6.0 - Production
CORE    11.1.0.6.0      Production
TNS for 32-bit Windows: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production

Database Language and Character Set:
NLS_LANG environment variable not set, using default value AMERICAN_AMERICA.WE8M
SWIN1252.
NLS_LANGUAGE     = "AMERICAN"
NLS_TERRITORY    = "AMERICA"
NLS_CHARACTERSET = "WE8MSWIN1252"

Warning: NLS_LANG is not set. Please refer to user manual for more information.

***********************************************************************
**                     Run Time Messages                             **
***********************************************************************
Opened trail file C:\OGG10G\dirdat\et000001 at 2009-12-09 11:46:35

MAP resolved (entry HR.EMPLOYEES):
  MAP HR.EMPLOYEES, TARGET hr.employees;
Using following columns in default map by name:
  EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE,
  JOB_ID, SALARY, COMMISSION_PCT, MANAGER_ID, DEPARTMENT_ID

Using the following key columns for target table HR.EMPLOYEES: EMPLOYEE_ID.
  

此時(shí),Replicat 進(jìn)程已準(zhǔn)備就緒,我們可在屏幕上查看其狀態(tài)。如果您打開一個(gè)新的命令窗口、啟動(dòng) GGSCI 并查看其狀態(tài),Replicat 進(jìn)程會(huì)顯示為 RUNNING。這樣,通過這種方式,Oracle Database 11g 中的復(fù)制開始工作。

文件中額外的參數(shù)(如 HANDLECOLLISIONS 和 DISCARDFILE)是特意添加的,這是因?yàn)橥ㄟ^命令行運(yùn)行 Replicat 進(jìn)程時(shí)屏幕上曾顯示出記錄重復(fù)錯(cuò)誤。從下面的輸出結(jié)果中可以看到這些錯(cuò)誤,這些錯(cuò)誤指示初始加載時(shí)出現(xiàn)的問題與重復(fù)的記錄有關(guān)。

通過進(jìn)一步的分析發(fā)現(xiàn),某個(gè)用戶在 Oracle 11g 目標(biāo)數(shù)據(jù)庫中手動(dòng)插入了記錄,而手動(dòng)插入的數(shù)據(jù)與啟動(dòng) Oracle GoldenGate 復(fù)制進(jìn)程之后 插入到 Oracle 10g 源數(shù)據(jù)庫中的數(shù)據(jù)相同。這就引發(fā)了記錄重復(fù),從而導(dǎo)致重復(fù)問題。

…
***********************************************************************
**                     Run Time Messages                             **
***********************************************************************
Opened trail file C:\OGG10G\dirdat\et000000 at 2009-12-09 11:17:51

Switching to next trail file C:\OGG10G\dirdat\et000001 at 2009-12-09 11:17:51 du
e to EOF, with current RBA 923
Opened trail file C:\OGG10G\dirdat\et000001 at 2009-12-09 11:17:51

Processed extract process graceful restart record at seq 1, rba 923.

MAP resolved (entry HR.EMPLOYEES):
  MAP HR.EMPLOYEES, TARGET hr.employees;
Using following columns in default map by name:
  EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE,
  JOB_ID, SALARY, COMMISSION_PCT, MANAGER_ID, DEPARTMENT_ID

Using the following key columns for target table HR.EMPLOYEES: EMPLOYEE_ID.

2009-12-09 11:17:54  GGS WARNING     218  Aborted grouped transaction on 'HR.EMP
LOYEES', Database error 1 (ORA-00001: unique constraint (HR.EMP_EMAIL_UK) violat
ed).

2009-12-09 11:17:54  GGS WARNING     218  Repositioning to rba 985 in seqno 1.

2009-12-09 11:17:54  GGS WARNING     218  SQL error 1 mapping HR.EMPLOYEES to HR
.EMPLOYEES OCI Error ORA-00001: unique constraint (HR.EMP_EMAIL_UK) violated (st
atus = 1), SQL <INSERT INTO "HR"."EMPLOYEES" ("EMPLOYEE_ID","FIRST_NAME","LAST_N
AME","EMAIL","PHONE_NUMBER","HIRE_DATE","JOB_ID","SALARY","COMMISSION_PCT","MANA
GER_ID","DEPARTMENT_ID") VALUES (:a0,:a1,:a2,:a3,:a4,:a5>.

2009-12-09 11:17:54  GGS WARNING     218  Repositioning to rba 985 in seqno 1.
….
  

解決此問題的辦法是使用 HANDLECOLLISIONS 和 DISCARDFILE 參數(shù),然后重啟該 Replicat 進(jìn)程。DISCARDFILE 在出現(xiàn)被刪除的記錄時(shí)可提供更多信息。在命令提示符處啟動(dòng)運(yùn)行 Replicat 進(jìn)程后,等待直到其通過線索完成運(yùn)行并根據(jù)需要?jiǎng)h除記錄。

然后在命令窗口按 Ctrl-C 停止該 Replicat 進(jìn)程。這將顯示:

Enter X to exit or C to continue: X
***********************************************************************
*                   ** Run Time Statistics **                         *
***********************************************************************
Last record for the last committed transaction is the following:
___________________________________________________________________
Trail name :  C:\OGG10G\dirdat\et000001
Hdr-Ind    :     E  (x45)     Partition  :     .  (x04)
UndoFlag   :     .  (x00)     BeforeAfter:     A  (x41)
RecLength  :   196 (x00c4)    IO Time    : 2009-12-08 13:43:36.000000
IOType     :     5  (x05)     OrigNode   :   255  (xff)
TransInd   :     .  (x03)     FormatType :     R  (x52)
SyskeyLen  :     0  (x00)     Incomplete :     .  (x00)
AuditRBA   :         11       AuditPos   : 1188880
Continued  :     N  (x00)     RecCount   :     1  (x01)

2009-12-08 13:43:36.000000 Insert             Len   196 RBA 1295
Name: HR.EMPLOYEES
___________________________________________________________________

Reading C:\OGG10G\dirdat\et000001, current RBA 1604, 2 records
Report at 2009-12-09 11:47:56 (activity since 2009-12-09 11:46:35)

From Table HR.EMPLOYEES to HR.EMPLOYEES:
       #                   inserts:         2
       #                   updates:         0
       #                   deletes:         0
       #                  discards:         0
       #         insert collisions:         2

Last log location read:
     FILE:      C:\OGG10G\dirdat\et000001
     SEQNO:     1
     RBA:       1604
     TIMESTAMP: Not Available
     EOF:       YES
     READERR:   400
  

現(xiàn)在可以取消 HANDLECOLLISIONS 參數(shù)了,可在該參數(shù)行之前添加“—”將其注釋掉。然后在命令行重啟該 Replicat 進(jìn)程。由于記錄重復(fù)問題已得到解決,該進(jìn)程現(xiàn)在可以正常工作,以后對(duì)源數(shù)據(jù)庫進(jìn)行任何更改時(shí),該進(jìn)程都可將這些更改復(fù)制過來。

對(duì)復(fù)制進(jìn)行測試

從圖 6 的命令行窗口中可以看到 HRPRD1、HRPRD2 和 HRPRD3 這三個(gè)數(shù)據(jù)庫的 HR.EMPLOYEES 表中的記錄。這三個(gè)數(shù)據(jù)庫都正好有 107 條記錄。在第三個(gè)窗口中可看到使用的 SELECT 命令。


圖 6 三個(gè)數(shù)據(jù)庫中的員工記錄

現(xiàn)在可以在源數(shù)據(jù)庫 HRPRD2 的 HR.EMPLOYEES 表中 INSERT 和 COMMIT 一些行,然后查看這些行是否被復(fù)制到目標(biāo)數(shù)據(jù)庫 HRPRD3 和 HRPRD1 中。從圖 7 中可以看到這些 INSERT 操作。


圖 7 插入到 HRPRD2 的員工表中

對(duì)所有三個(gè)數(shù)據(jù)庫再次運(yùn)行 SELECT,其結(jié)果顯示,即刻發(fā)生了到目標(biāo)數(shù)據(jù)庫的復(fù)制,所有數(shù)據(jù)庫現(xiàn)在都有 109 條記錄(如圖 8 所示)。這樣,使用 Oracle GoldenGate 到 Oracle 10g 和 Oracle 11g 的復(fù)制成功。


圖 8 即刻復(fù)制到其他數(shù)據(jù)庫

您已看到,從 Oracle Database 10g 到 10g 數(shù)據(jù)庫的復(fù)制可正常進(jìn)行。從 Oracle Database 10g 到 11g 數(shù)據(jù)庫的復(fù)制也可正常進(jìn)行,但是只有在命令提示符處啟動(dòng) Replicat 進(jìn)程(例如使用“replicat paramfile c:\OGG11G\dirprm\emp_rep.prm”)才會(huì)如此。而從 GGSCI 啟動(dòng) Replicat 進(jìn)程仍會(huì)使其滯留于 stopped 狀態(tài)。這可能是由于我們的測試服務(wù)器存在環(huán)境錯(cuò)誤。我們應(yīng)記住,如果從命令提示符處啟動(dòng)就不會(huì)有錯(cuò)誤,進(jìn)程會(huì)正常運(yùn)行。

功能、資源需求和影響

您已看到,Oracle GoldenGate 的 Extract 和 Replicat 進(jìn)程已生效。每個(gè)實(shí)例(即一個(gè) Manager 進(jìn)程)可通過 GGSCI 命令接口支持多達(dá) 300 個(gè)并發(fā)的 Extract 和 Replicat 進(jìn)程,這個(gè)數(shù)量相當(dāng)大。

然而,隨著此類進(jìn)程數(shù)量的增加,對(duì)內(nèi)存的占用也會(huì)增加 — 每個(gè) Extract 和 Replicat 進(jìn)程需要大約 25 至 55 MB 內(nèi)存。對(duì)內(nèi)存的占用實(shí)際上可能更高,這取決于并發(fā)事務(wù)的數(shù)量和事務(wù)大小。這始終是個(gè)問題。

Oracle GoldenGate Replication 還對(duì)源系統(tǒng)有 3% 到 5% 的 CPU 影響,這取決于生成的重做日志的數(shù)量。

我們?cè)谶@里建立的是單向復(fù)制。還可以建立雙向多主復(fù)制(對(duì)多站點(diǎn)更新的復(fù)制)。在這樣的安裝環(huán)境中,Oracle GoldenGate 通過研究和了解兩個(gè)站點(diǎn)何時(shí)更新相同的記錄來解決沖突。您可以設(shè)置一些沖突解決規(guī)則(如時(shí)間戳,或者哪一方始終優(yōu)先等等),您也可以就如何解決沖突設(shè)置用戶退出機(jī)制。

即使目標(biāo)數(shù)據(jù)庫的表中沒有唯一鍵時(shí),Oracle GoldenGate 也能復(fù)制數(shù)據(jù)。這對(duì)所有支持的數(shù)據(jù)庫都是可行的,條件是您能夠指定那些是唯一的列或者使用整行作為一個(gè)鍵 — 因?yàn)槿魏蝿h除或更新操作都需要某種唯一性。

目前,Oracle GoldenGate 不能復(fù)制雙字節(jié)數(shù)據(jù),但計(jì)劃在未來的版本中支持這種復(fù)制。現(xiàn)在,對(duì)雙字節(jié)數(shù)據(jù)的處理可傳遞給一個(gè)備用數(shù)據(jù)庫以用于災(zāi)難恢復(fù)。

Oracle GoldenGate Director

Oracle GoldenGate 中的這一產(chǎn)品現(xiàn)在名為 Oracle Management Pack for GoldenGate。這是一個(gè)多層的客戶端-服務(wù)器應(yīng)用程序,通過一個(gè) GUI 界面監(jiān)視和管理 Oracle GoldenGate 的部署。如果多臺(tái)主機(jī)上安裝了 Oracle GoldenGate Director 的遠(yuǎn)程客戶端,您可以對(duì)這些主機(jī)上運(yùn)行的多個(gè) Oracle GoldenGate 實(shí)例(Manager 進(jìn)程)進(jìn)行管理。

這些客戶端全部連接到集中安裝的 Oracle GoldenGate Director 服務(wù)器,該服務(wù)器使用 Oracle WebLogic Server 11g (10.3.1) 作為功能應(yīng)用服務(wù)器。以前,較早的 JBoss Application Server 3.2.7 附帶 Oracle GoldenGate Director。現(xiàn)在它為 Oracle WebLogic Server 所取代,但要注意后者必須在安裝 Oracle GoldenGate Director 服務(wù)器之前在系統(tǒng)上預(yù)先安裝并運(yùn)行。

Oracle GoldenGate Director 服務(wù)器有一個(gè) Web 界面并且需要在現(xiàn)有 Oracle 數(shù)據(jù)庫中擁有自己的數(shù)據(jù)庫信息庫(至少 200 MB),您也可以對(duì)該信息庫使用 MySql 或 Microsoft SQL Server 。作為一項(xiàng)安全措施,Oracle GoldenGate Director 的安裝要求該信息庫所使用的數(shù)據(jù)庫口令必須至少為八位字符,其中至少包含一個(gè)數(shù)字和一個(gè)字母數(shù)字字符。

如果在 GGSCI 中定義一個(gè)進(jìn)程,您可以通過 Oracle GoldenGate Director 配置、監(jiān)視和控制該進(jìn)程。從操作系統(tǒng)命令行執(zhí)行的其他獨(dú)立進(jìn)程(如 DDLGEN 進(jìn)程)不能通過 Oracle GoldenGate Director 監(jiān)視。

在 Windows、UNIX 和 NonStop 平臺(tái)上,Extract 進(jìn)程、Replicat 進(jìn)程、Manager 進(jìn)程、線索(本地或遠(yuǎn)程)、文件(本地或遠(yuǎn)程)以及 Extract 和 Replicat 任務(wù)均可通過 Oracle GoldenGate Director 來配置、監(jiān)視和控制。

總結(jié)及其他信息

在 Oracle GoldenGate Manager 參數(shù)文件中可以指定其他參數(shù),可通過這些參數(shù)來允許動(dòng)態(tài)端口分配、在 Manager 啟動(dòng)時(shí)自動(dòng)啟動(dòng)復(fù)制進(jìn)程(如 Extract 和 Replicat)、建立對(duì)所有線索的集中維護(hù)(清除)。

The Oracle GoldenGate Administration Guide Version 10.4 詳細(xì)介紹了這些高級(jí) Manager 參數(shù)。該指南還介紹了如何以不同的方法配置 Extract 和 Replicat 進(jìn)程、如何將 Oracle GoldenGate Replication 用于實(shí)時(shí)報(bào)表、實(shí)時(shí)數(shù)據(jù)分布、實(shí)時(shí)數(shù)據(jù)倉儲(chǔ)、維護(hù)實(shí)時(shí)備用數(shù)據(jù)庫和主-主高可用性等各種目的,以及如何配置 DDL 同步。在某個(gè)數(shù)據(jù)庫要升級(jí),但要求停機(jī)時(shí)間幾乎為零的情況下,Oracle GoldenGate 也非常有用 — 您只需建立從舊的數(shù)據(jù)庫版本到新的數(shù)據(jù)庫版本之間的 Oracle GoldenGate 復(fù)制,然后在切換時(shí)將您的所有客戶端切換為指向新數(shù)據(jù)庫即可。這會(huì)是一個(gè)極好的選擇,例如,如果您準(zhǔn)備將現(xiàn)有數(shù)據(jù)庫移到 Oracle Exadata V2 數(shù)據(jù)庫機(jī)上,以便將您的所有數(shù)據(jù)庫整合到世界上最快的數(shù)據(jù)庫機(jī)。

有關(guān) Oracle GoldenGate 的另一個(gè)有用的參考資料是 Oracle GoldenGate Troubleshooting and Tuning Guide Version 10.4 。在本文開始時(shí)下載的文檔 zip 文件中包含了這個(gè)參考資料和管理指南

我們想感謝 Oracle 融合中間件和 Oracle GoldenGate 的各位 Oracle 產(chǎn)品經(jīng)理,本文所述建立 Oracle GoldenGate 復(fù)制的過程得到了他們的欣然幫助(真正的 Oracle 精神)。我們期待著計(jì)劃之中的 Oracle GoldenGate Director 與 Oracle Enterprise Manager Grid Control 的集成。

Oracle Enterprise Manager Grid Control 是 Oracle 的一個(gè)強(qiáng)大的企業(yè)管理產(chǎn)品。如果您想了解如何對(duì)您環(huán)境中所有的 Oracle RAC 或非 Oracle RAC 數(shù)據(jù)庫、Oracle 自動(dòng)存儲(chǔ)管理 (ASM) 實(shí)例和 Oracle Clusterware 自動(dòng)打補(bǔ)丁,請(qǐng)閱讀作者的一篇題為“使用 Oracle Enterprise Manager Grid Control 修補(bǔ)數(shù)千個(gè)數(shù)據(jù)庫” 的文章。有關(guān)如何使用 Oracle Enterprise Manager Grid Control 為您公司的數(shù)據(jù)庫輕松建立 Oracle Recovery Manager (Oracle RMAN) 備份的信息,請(qǐng)閱讀“Oracle RMAN 備份:提供簡單方式 ”。

另外,要了解使用 Oracle Enterprise Manager Grid Control 進(jìn)行 Oracle Data Guard 的安裝、管理(包括倒換和故障切換)和監(jiān)視如何能夠節(jié)省大量的時(shí)間和資源,請(qǐng)閱讀作者最近發(fā)表的另一篇文章“使用 Grid Control 輕松預(yù)防生產(chǎn)災(zāi)難 ”。

posted @ 2012-07-22 14:00 tbwshc| 編輯 收藏

---- 容災(zāi)首先是一個(gè)概念,要認(rèn)識(shí)到為什么做容災(zāi),才能做好容災(zāi)。世界上沒有賣后悔藥的,當(dāng)災(zāi)難降臨了,如果沒有行之有效的數(shù)據(jù)保護(hù)、數(shù)據(jù)恢復(fù)的容災(zāi)措施,帶來不可預(yù)估的損失將是無法避免的。類似電信行業(yè)、金融行業(yè),證券行業(yè)也是如此,動(dòng)輒涉及數(shù)以百億計(jì)的資金、涉及龐大的客戶量,在系統(tǒng)數(shù)據(jù)的準(zhǔn)確、業(yè)務(wù)的連續(xù)、關(guān)鍵業(yè)務(wù)的不中斷等方面更是不容出現(xiàn)任何的差錯(cuò)。
 
----目前,業(yè)界具有容災(zāi)功能的常用解決方案主要包括以下幾類:磁盤陣列復(fù)制技術(shù),主要由一些磁盤陣列廠商提供,如EMC SRDFIBM PPRC HP BusinessCopyHDS TrueCopy等;存儲(chǔ)卷復(fù)制技術(shù),tb由一些卷管理軟件廠商提供,如VERITAS VVR;數(shù)據(jù)庫復(fù)制技術(shù),由數(shù)據(jù)庫廠商以及一些第三方廠商提供,如DSG RealSyncQuest SharePlex等;應(yīng)用層復(fù)制技術(shù),由各系統(tǒng)的應(yīng)用廠商自己提供。
 
----磁盤陣列復(fù)制技術(shù)主要適用于數(shù)據(jù)中心級(jí)的海量數(shù)據(jù)復(fù)制,此技術(shù)用戶必需采用支持該功能的磁盤陣列型號(hào),而這些陣列大都為高端陣列,投資非常昂貴。并且,由于政府行業(yè)用戶的帶寬有限,而磁盤陣列復(fù)制技術(shù)對(duì)帶寬的要求又相對(duì)很高,動(dòng)輒需要上GB的帶寬。此外,采用磁盤陣列復(fù)制技術(shù),其目標(biāo)端無法提供實(shí)時(shí)數(shù)據(jù)查詢,由于目標(biāo)端數(shù)據(jù)庫在復(fù)制過程中不能被打開,難于實(shí)現(xiàn)交易與查詢的分離,同時(shí)也造成大量投資浪費(fèi)。因此,磁盤陣列復(fù)制技術(shù)無法滿足某些行業(yè)集中交易系統(tǒng)的容災(zāi)需求,使得這些用戶難以選擇此種解決方案。
 
----存儲(chǔ)卷復(fù)制技術(shù)主要適用于工作組級(jí)的數(shù)據(jù)復(fù)制,它對(duì)CPU資源占用高。同樣由于目標(biāo)端數(shù)據(jù)無法提供實(shí)時(shí)數(shù)據(jù)查詢和對(duì)帶寬的要求高,使得證券等行業(yè)用戶也難以選擇。
 
----而應(yīng)用層復(fù)制技術(shù)只適合那些在應(yīng)用中提供了該技術(shù)的應(yīng)用,由于它的非標(biāo)準(zhǔn)化、開發(fā)和維護(hù)工作量大,使得其應(yīng)用不成熟也不普遍。關(guān)鍵行業(yè)對(duì)數(shù)據(jù)的可靠性要求又非常之高,使得關(guān)鍵行業(yè)用戶也不敢冒然選擇此種復(fù)制技術(shù)。
 
----DSG RealSync屬于數(shù)據(jù)庫復(fù)制技術(shù),它適用于從工作組級(jí)、企業(yè)級(jí)到數(shù)據(jù)中心級(jí)的復(fù)制需求,無論系統(tǒng)采用什么樣的服務(wù)器平臺(tái)、什么樣的存儲(chǔ)平臺(tái),只要是ORACLE系統(tǒng)之間的復(fù)制即可適用。采用DSG RealSync復(fù)制技術(shù),其目標(biāo)端數(shù)據(jù)庫在復(fù)制過程中處于可用狀態(tài),幫助關(guān)鍵行業(yè)用戶實(shí)現(xiàn)生產(chǎn)系統(tǒng)與查詢統(tǒng)計(jì)報(bào)表系統(tǒng)的分離;其源端系統(tǒng)和目標(biāo)端系統(tǒng)可以采用異構(gòu)的操作系統(tǒng)平臺(tái)、存儲(chǔ)平臺(tái);支持選擇性復(fù)制,即支持只復(fù)制指定的user、指定的Table、指定的行和列,從而節(jié)省存儲(chǔ)空間,提高應(yīng)用靈活性;支持1對(duì)多,多對(duì)1的復(fù)制結(jié)構(gòu),即:能夠?qū)⒍鄠€(gè)數(shù)據(jù)庫中的數(shù)據(jù)復(fù)制到一個(gè)數(shù)據(jù)庫中,能夠?qū)⒁粋€(gè)數(shù)據(jù)庫中的不同數(shù)據(jù)分發(fā)到不同的數(shù)據(jù)庫中;也節(jié)約帶寬和網(wǎng)絡(luò)資源,其所需帶寬一般在幾Mbps,幾十Mbps
 
----隨著用戶容災(zāi)意識(shí)的逐漸增強(qiáng),關(guān)鍵行業(yè)也提出了建設(shè)一套高效、可靠、投資回收比高的災(zāi)難備份系統(tǒng)的需求,以確保系統(tǒng)的數(shù)據(jù)安全和災(zāi)難發(fā)生時(shí)數(shù)據(jù)的快速恢復(fù)。   
posted @ 2012-07-22 13:58 tbwshc| 編輯 收藏

// MultiThread.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。

//

#include "stbdafx.h"
#include <windows.h>
#include <iostream>

using namespace std;
int tickets = 100;
HANDLE hMutex;

DWORD WINAPI Fun1Proc(LPVOID lp);
DWORD WINAPI Fun2Proc(LPVOID lp);

int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hThread1,hThread2;
hThread1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2 = CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
hMutex = CreateMutex(NULL,FALSE,NULL);

Sleep(2000);
system("pause");
return 0;
}

DWORD WINAPI Fun1Proc(LPVOID lp)
{
while(1)
{
 WaitForSingleObject(hMutex,INFINITE);
 if(tickets > 0)
 {
 Sleep(10);
 cout << "thread1 sell ticket." << tickets-- <<endl;
 }
 else
 break;
 ReleaseMutex(hMutex);
}
return 0;
}

DWORD WINAPI Fun2Proc(LPVOID lp)
{
while(1)
{
 WaitForSingleObject(hMutex,INFINITE);
 if(tickets > 0)
 cout << "thread2 sell ticket." << tickets-- <<endl;
 else
 break;
 ReleaseMutex(hMutex);
}
return 0;
}


 

posted @ 2012-07-21 11:57 tbwshc 閱讀(1131) | 評(píng)論 (0)編輯 收藏

哎!

慘……

最近接連維護(hù)兩個(gè)很煩人的項(xiàng)目,我的第一想法就是重寫!可是上頭的意思是說我的想法太瘋狂。

可每次有這種情況我都感覺還是重寫劃算點(diǎn)……

之前的之前一個(gè)東東重寫也就一周時(shí)間,而上頭還是決定用著,對(duì)那東東很麻煩怕新寫的別人不適應(yīng) 以及穩(wěn)定性的擔(dān)心。而結(jié)果就沒重寫,接下來的幾個(gè)月我都被那玩意煩。哎

回正題

這兩個(gè)項(xiàng)目一個(gè)是C++的,一個(gè)是C#的,兩個(gè)都是關(guān)于網(wǎng)絡(luò)的。都是非常有各自語言的特色

C++的那個(gè)項(xiàng)目是所有要處理消息的函數(shù)都是統(tǒng)一的 void xxxx(void* pData);

然后進(jìn)去就

int* pxx = (int*)pData;

 pxx= XXX(sss);

pData += sizeof int;

SH_XXX* pshxx = (SH_XXX*)pData;

Mxxxk(pshxx,xxxixx);

sss;

Send(g_Buf);//所有處理函數(shù)的最后都是這一句

寫的是行云流水,酣暢淋漓啊。慢慢看也明白,但是人都容易馬虎的,很多時(shí)候調(diào)的時(shí)候一不小心, 就不知道跑哪兒去了。

所有函數(shù)使用同一個(gè)全局緩沖區(qū),讀和寫是同時(shí)進(jìn)行的。tb有可能讀了一些東西,偏移一段后進(jìn)入某個(gè) 函數(shù)又退回一段距離開始寫東西。前前后后,讀讀寫寫。哎,煩啊

至于C#的那個(gè),導(dǎo)出是委托,每一個(gè)東西都有一個(gè)父類。比如

Code;

DoubleCode : Code;

ThreeCode : DoubleCode;

SessionCode : TreeCode;

StreamCode : SessionCode;

posted @ 2012-07-21 11:55 tbwshc 閱讀(166) | 評(píng)論 (0)編輯 收藏

簡介:實(shí)用工具類開發(fā)和維護(hù)會(huì)耗費(fèi)程序員的時(shí)間。Boost 通過提供幾個(gè)高質(zhì)量的庫,從而簡化了此 過程,您可以將這些庫輕松集成到現(xiàn)有的代碼庫中。本文簡單概述一些較流行的 Boost 實(shí)用工具類,并 幫助您了解如何將它們投入使用。

實(shí)用工具類(utility classes)在幾乎任何適當(dāng)規(guī)模的 C++ 項(xiàng)目中都是必需的,但是不存在滿足此 需求的標(biāo)準(zhǔn)方法。通常,團(tuán)隊(duì)根據(jù)他們的需求編寫實(shí)用工具類代碼,但是由于缺少重要的接口信息,使得 相同組織中的其他項(xiàng)目團(tuán)隊(duì)無法重用那些類。建議的標(biāo)準(zhǔn)模板庫(Standard Template Library,STL)只 具有諸如 hash、stack 和 vector 等少數(shù)基本類,因此無法有效地用于取代遺留實(shí)用工具庫。

本文將介紹幾個(gè) Boost 實(shí)用工具類,包括 tuple、static_assert、pool、random 和 program_options。您需要對(duì)標(biāo)準(zhǔn) STL 具備一定的了解才能充分理解本文的內(nèi)容。本文中的所有代碼都已 使用 Boostb 1.35 來進(jìn)行了測試并使用 gcc-3.4.4 來進(jìn)行了編譯。

boost::tuple 類

有時(shí),您希望 C++ 函數(shù)返回多個(gè)不相關(guān)的值。在推出 STL 之前,實(shí)現(xiàn)此目的的方法是創(chuàng)建所有不相 關(guān)變量的結(jié)構(gòu),并以指針或引用的形式返回它們或作為參數(shù)傳遞給函數(shù)——但是任一種方法都不是表達(dá)程 序員意圖的方法。STL 引入了 pair,可將其用于聚合不相關(guān)的數(shù)據(jù)部分,但它一次只能處理兩個(gè)數(shù)據(jù)對(duì) 象。為了使用 int、char 和 float 的元組(tuple ),您可以按如下方式返回 pair:

make_pair<int, pair<char, float> > (3, make_pair<char, float> ('a', 0.9));

隨著您添加更多的元素,創(chuàng)建元組結(jié)構(gòu)將變得越來越困難。Boost tuple 類型派上了用場。要使用 boost::tuple,您必須包括頭文件 tuple.hpp。要執(zhí)行元組比較和元組 I/O,您需要分別包括 tuple_comparison.hpp 和 tuple_io.hpp。

第一個(gè)使用元組的程序

清單 1 使用 int、char 和 float 的元組并打印內(nèi)容。

清單 1. 創(chuàng)建 Boost 元組并打印內(nèi)容

#include <iostream>
#include <tuple.hpp>
#include <tuple_comparison.hpp>
#include <tuple_io.hpp>
using namespace boost;
int main ( )
 {
 tuple<int, char, float> t(2, 'a', 0.9);
  std::cout << t << std::endl;
 return 0;
 }

此代碼的輸出為 (2 a 0.9)。請(qǐng)注意,<< 運(yùn)算符重載 std::ostream,以便通過轉(zhuǎn)儲(chǔ)每個(gè)單獨(dú) 的 tuple 元素來輸出元組。

posted @ 2012-07-21 11:54 tbwshc 閱讀(1116) | 評(píng)論 (0)編輯 收藏

最近才知道struct和class的靜態(tài)構(gòu)造函數(shù)的觸發(fā)規(guī)則是不同的,不像class在第一次使用類的時(shí)候觸 發(fā)靜態(tài)構(gòu)造函數(shù)。如果只訪問struct實(shí)例的字段是不會(huì)觸發(fā)靜態(tài)構(gòu)造函數(shù)調(diào)用的。通過測試發(fā)現(xiàn)當(dāng)訪問靜 態(tài)字段,struct本身的函數(shù)(靜態(tài)和實(shí)例)和帶參數(shù)的構(gòu)造函數(shù)就會(huì)引起靜態(tài)構(gòu)造函數(shù)的執(zhí)行。而調(diào)用默 認(rèn)構(gòu)造和未覆寫的基類虛函數(shù)是不會(huì)的。為什么呢?

讓我們先來看看class和struct在調(diào)用構(gòu)造函數(shù)時(shí)的區(qū)別。class使用newobj指令而struct使用initobj 指令來構(gòu)造對(duì)象。newobj在堆上申請(qǐng)一塊內(nèi)存并調(diào)用相應(yīng)的構(gòu)造函數(shù)進(jìn)行初始化,然后將對(duì)象地址返回給 計(jì)算棧。initbobj則是從本地變量表中載入已經(jīng)分配出來的struct實(shí)例然后初始化struct的各字段。這個(gè) 初始化過程是CLR內(nèi)部執(zhí)行的,而不像class編譯器會(huì)給class添加一個(gè)默認(rèn)構(gòu)造函數(shù)(這就是為什么 struct不能給字段添加默認(rèn)值的原因。但在類中如果給字段添加了默認(rèn)值編譯器就會(huì)自動(dòng)在構(gòu)造函數(shù)中添 加字段賦值操作)。如果給struct中定義了一個(gè)有參數(shù)的構(gòu)造函數(shù),那么系統(tǒng)就不會(huì)使用initobj指令, 而是直接用call指令調(diào)用帶參數(shù)的構(gòu)造函數(shù)。

我們最常見最常用的調(diào)用函數(shù)的指令是call和callvirt。對(duì)于靜態(tài)函數(shù)使用call指令,對(duì)于class使用 callvirt指令(不論class中的函數(shù)是不是虛的)。只有子類調(diào)用父類的函數(shù)的時(shí)候(避免遞歸調(diào)用)以 及構(gòu)造函數(shù)中(由編譯器添加保證父類字段被初始化)使用call指令。而對(duì)于struct我們發(fā)現(xiàn)只要調(diào)用的 函數(shù)是struct本身定義的都是使用call指令。call和callvirt指令的差別在于,call會(huì)把調(diào)用的函數(shù)當(dāng)作 靜態(tài)函數(shù)看待,而不會(huì)關(guān)心調(diào)用當(dāng)前函數(shù)時(shí)實(shí)例指針(this)是否為空。這就是struct調(diào)用函數(shù)時(shí)為什么 都是call因?yàn)閟truct實(shí)例是不可能被置為null的。實(shí)際上class在調(diào)用非虛函數(shù)時(shí)實(shí)際上也是使用call的 只是多做了一步驗(yàn)證——this是否為空,讓我們來驗(yàn)證一下。

class Class_Test{  public void Test1() {}  public virtual void Test2()

{}  public static void Test3() {}  public override string ToString()  

{    return base.ToString();  }}Class_Test c = new Class_Test

();c.Test1();c.Test2();Class_Test.Test3();string str = c.ToString();

posted @ 2012-07-21 11:54 tbwshc 閱讀(1367) | 評(píng)論 (1)編輯 收藏

在C/C++中,整型的長度跟編譯器相關(guān),編譯器的實(shí)現(xiàn)取決于CPU。 比如TC++是DOS16下的應(yīng)用程序,DOS16是16位的操作系統(tǒng),所以TC++中sizeof(int)==16;同理win32中sizeof(int)==32。

C99標(biāo)準(zhǔn)定義一個(gè)叫著<stdint.h>的頭文件,該頭文件定義了一系列各種類別的整數(shù)類型typedef名字。盡管速多C++工具支持該頭文件已經(jīng)有一段時(shí)間了,但它尚未正式收錄于C++標(biāo)準(zhǔn),因此,在使用該頭文件之前,你應(yīng)該先閱讀你的編譯器文檔,看看它是否支持該文件。在某些C++ 的編譯器中,如GNC,為了能使用C99標(biāo)準(zhǔn)的這些新特性,就在<inttypes.h>頭文件中引入了這個(gè)文件< stdint.h>.

字長固定的整型類型

C99標(biāo)準(zhǔn)在<stdint.h>這個(gè)頭文件的類型定義中,有一套是字長固定的整型類型:

int8_t   int16_t   int32_t   int64_t

與其對(duì)應(yīng)的字長固定的無符號(hào)型整型類型有:

uint8_t   uint16_t   uint32_t   uint64_t

它們的名字非常直觀。例如,int8_t是長度固定為8比特的有符號(hào)整型類型,tb而uint8_t則是字長固定為8比特的無符號(hào)型整型類型。當(dāng)你需要確保在不同的平臺(tái)上,整型數(shù)據(jù)的字長固定不變,那么你就可以使用這些typedef名字。允許對(duì)期望的性質(zhì)進(jìn)行更為詳細(xì)的描述。例如,有的類型的名字是 int_least8_t,它至少有 8 位,還有 int32_t,它恰好是 32 位。

C99標(biāo)準(zhǔn)標(biāo)準(zhǔn)保證至少可以訪問 8 位、16 位、32 位和 64 位類型。沒有保證會(huì)提供精確寬度類型。不要使用這種類型,除非您肯定是實(shí)在不能接受更大的類型。另一個(gè)可選的類型是新的 intptr_t 類型,它是一個(gè)足夠大的可以容納一個(gè)指針的整數(shù)。并不是所有的系統(tǒng)都提供這樣一種類型(盡管當(dāng)前所有的 Linux 和 BSD 實(shí)現(xiàn)都提供)。

字長最小的快速整型類型

該頭文件還定義了另外一套typedef名字,即“最小指定長度的快速整數(shù)類型”。這套typedef名字中的每一種都表示一種整數(shù)類型,它滿足在長度不小于某個(gè)指定長度的前提下,擁有最快的處理速度。這些整數(shù)類型的名字為int_fastX_t(有符號(hào))或者uint_fastX_t(無符號(hào)),其中“X”表示最小指定長度。例如,int_fast32_t指得是字長至少為32比特的快速有符號(hào)整型類型。最小字長快速整型類型有:

int_fast8_t  int_fast16_t  int_fast32_t  int_fast64_t

對(duì)應(yīng)的無符號(hào)整型類型有:

uint_fast8_t  uint_fast16_t  uint_fast32_t  uint_fast64_t

什么情況下使用這些typedef名字?

假設(shè)你需要一個(gè)字長不少于16比特的循環(huán)計(jì)數(shù)器,那么你會(huì)希望該計(jì)數(shù)器的類型總是當(dāng)前計(jì)算機(jī)CPU最佳操作的整型類型,而int_fast16_t可以保證任何平臺(tái)上的編譯器總是選擇字長不少于16比特的最快整型類型。

#include <inttypes.h>
for (int_fast16_t n=0; n<30000; ++n)
{
//.. do something
}


 

posted @ 2012-07-21 11:53 tbwshc 閱讀(1058) | 評(píng)論 (0)編輯 收藏

SQL Server 2008中對(duì)匯總有明顯的增強(qiáng),有點(diǎn)像Oracle的語法了。請(qǐng)看下面四個(gè)例子:

假定場景如下:某幾位員工在不同時(shí)間參加了不同的項(xiàng)目,獲取了相應(yīng)的收入,現(xiàn)在需要按各種分類進(jìn)行統(tǒng)計(jì)。

基本表如下:

USE testDb2  GO   IF NOT OBJECT_ID('tb_Income') IS NULL DROP TABLE [tb_Income]   /****** Object: Table [dbo].[tb_Income] Script Date: 2012/4/5 8:19:21 ******/   CREATE TABLE [dbo].[tb_Income](  [TeamID] int not null,  [PName] [Nvarchar](20) NOT NULL,  [CYear] Smallint NOT NULL,  [CMonth] TinyInt NOT NULL,  [CMoney] Decimal (10,2) Not Null  )   GO  INSERT [dbo].[tb_Income]  SELECT 1,'胡一刀',2011,2,5600  union ALL SELECT 1,'胡一刀',2011,1,5678  union ALL SELECT 1,'胡一刀',2011,3,6798  union ALL SELECT 2,'胡一刀',2011,4,7800  union ALL SELECT 2,'胡一刀',2011,5,8899  union ALL SELECT 3,'胡一刀',2012,8,8877   union ALL SELECT 1,'苗人鳳',2011,1,3455  union ALL SELECT 1,'苗人鳳',2011,2,4567  union ALL SELECT 2,'苗人鳳',2011,3,5676  union ALL SELECT 3,'苗人鳳',2011,4,5600  union ALL SELECT 2,'苗人鳳',2011,5,6788  union ALL SELECT 2,'苗人鳳',2012,6,5679  union ALL SELECT 2,'苗人鳳',2012,7,6785   union ALL SELECT 2,'張無忌',2011,2,5600  union ALL SELECT 2,'張無忌',2011,3,2345  union ALL SELECT 2,'張無忌',2011,5,12000  union ALL SELECT 3,'張無忌',2011,4,23456  union ALL SELECT 3,'張無忌',2011,6,4567  union ALL SELECT 1,'張無忌',2012,7,6789  union ALL SELECT 1,'張無忌',2012,8,9998   union ALL SELECT 3,'趙半山',2011,7,6798  union ALL SELECT 3,'趙半山',2011,10,10000  union ALL SELECT 3,'趙半山',2011,9,12021  union ALL SELECT 2,'趙半山',2012,11,8799  union ALL SELECT 1,'趙半山',2012,12,10002   union ALL SELECT 3,'令狐沖',2011,8,7896  union ALL SELECT 3,'令狐沖',2011,9,7890  union ALL SELECT 2,'令狐沖',2011,10,7799  union ALL SELECT 2,'令狐沖',2011,11,9988  union ALL SELECT 2,'令狐沖',2012,9,34567  union ALL SELECT 3,'令狐沖',2012,12,5609   GO 數(shù)據(jù)如下:

SELECT * FROM tb_Income   /*   TeamID PName CYear CMonth CMoney   胡一刀 2011 2 5600.00   胡一刀 2011 1 5678.00   胡一刀 2011 3 6798.00   胡一刀 2011 4 7800.00   胡一刀 2011 5 8899.00   胡一刀 2012 8 8877.00   苗人鳳 2011 1 3455.00   苗人鳳 2011 2 4567.00   苗人鳳 2011 3 5676.00   苗人鳳 2011 4 5600.00   苗人鳳 2011 5 6788.00   苗人鳳 2012 6 5679.00   苗人鳳 2012 7 6785.00   張無忌 2011 2 5600.00   張無忌 2011 3 2345.00   張無忌 2011 5 12000.00   張無忌 2011 4 23456.00   張無忌 2011 6 4567.00   張無忌 2012 7 6789.00   張無忌 2012 8 9998.00   趙半山 2011 7 6798.00   趙半山 2011 10 10000.00   趙半山 2011 9 12021.00   趙半山 2012 11 8799.00   趙半山 2012 12 10002.00   令狐沖 2011 8 7896.00   令狐沖 2011 9 7890.00   令狐沖 2011 10 7799.00   令狐沖 2011 11 9988.00   令狐沖 2012 9 34567.00   令狐沖 2012 12 5609.00  */ 一、使用CUBE匯總數(shù)據(jù)(http://msdn.microsoft.com/en-us/library/bb522495%28v=sql.105%29.aspx)

小試牛刀,

/*********使用CUBE匯總數(shù)據(jù)***************/   /********* 3w@live.cn 邀月***************/  SELECT TeamID as 小組ID,  SUM(CMoney) 總收入  FROM tb_Income  GROUP BY CUBE (TeamID)  ----ORDER BY TeamID desc
 

 

改進(jìn)查詢:

SELECT TeamID as 小組ID,PName as 姓名,  SUM(CMoney) 總收入  FROM tb_Income  GROUP BY CUBE (TeamID,PName)


二、使用ROLLUP匯總數(shù)據(jù)(http://msdn.microsoft.com/en-us/library/bb522495%28v=sql.105%29.aspx)

/*********使用ROLLUP匯總數(shù)據(jù)***************/   /********* 3w@live.cn 邀月***************/   SELECT TeamID as 小組ID,PName as 姓名,  SUM(CMoney) 總收入  FROM tb_Income  GROUP BY ROLLUP (TeamID,PName)


注意:使用Rollup與指定的聚合列的順序有關(guān)。

 

三、使用Grouping Sets創(chuàng)建自定義匯總數(shù)據(jù)(http://msdn.microsoft.com/en-us/library/bb522495%28v=sql.105%29.aspx)

除了Cube和Rollup,還有更加靈活強(qiáng)大的自定義集合匯總--Grouping Sets

/*********使用Grouping Sets創(chuàng)建自定義匯總數(shù)據(jù)***************/   /********* 3w@live.cn 邀月***************/   SELECT TeamID as 小組ID,PName as 姓名,CYear as 年份,----min(CMonth) as 月份,  SUM(CMoney) 總收入  FROM tb_Income  Where CMonth=2  GROUP BY grouping SETS ((TeamID),(TeamID,PName),(CYear,PName))


四、使用Grouping標(biāo)識(shí)匯總行(http://technet.microsoft.com/zh-cn/library/ms178544.aspx)

細(xì)心的朋友可能會(huì)注意到,如果Cube后有兩個(gè)以上的匯總列時(shí),可能會(huì)有一些列是Null,那么這些Null值究竟tb本身就是Null,還是由于聚合產(chǎn)生的Null呢,此時(shí),GroupingID函數(shù)大顯身手的機(jī)會(huì)來了。

/*********使用Grouping標(biāo)識(shí)匯總行***************/   /********* 3w@live.cn 邀月***************/  SELECT TeamID as 小組ID,CYear as 年份,  CASE WHEN grouping(TeamID)=0 AND grouping(CYear)=1 THEN '小組匯總' WHEN grouping(TeamID)=1 AND grouping(CYear)=0 THEN '年份匯總' WHEN grouping(TeamID)=1 AND grouping(CYear)=1 THEN '所有匯總' else '正常行' END as 行類別,  SUM(CMoney) 總收入  FROM tb_Income  GROUP BY CUBE (TeamID,CYear) 結(jié)果:

 

其實(shí),還有更復(fù)雜的Grouping_ID,不過,一般情況下用不到,需要的同學(xué),請(qǐng)看MSDN:

http://technet.microsoft.com/zh-cn/library/bb510624.aspx


小結(jié):帶有Cube,Rollup,grouping Sets的Group By函數(shù)在統(tǒng)計(jì)與分析中有著廣泛的應(yīng)用,相信它的高效簡捷,在特定的場合會(huì)令人你愛不釋手!

 

posted @ 2012-07-15 17:16 tbwshc 閱讀(811) | 評(píng)論 (0)編輯 收藏

僅列出標(biāo)題
共10頁: First 2 3 4 5 6 7 8 9 10 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久五月激情| 亚洲欧美自拍偷拍| 性18欧美另类| 午夜精品偷拍| 欧美性开放视频| 欧美日本二区| 国产精品国产馆在线真实露脸| 欧美日韩一区三区| 国产精品久久综合| 韩国三级电影一区二区| 亚洲国产精品日韩| 亚洲午夜高清视频| 久久久九九九九| 亚洲电影免费观看高清完整版在线| 欧美1区2区| 亚洲日韩欧美视频| 午夜精品免费在线| 欧美成人精品在线播放| 欧美性感一类影片在线播放| 国产一区二区三区在线免费观看 | 国产精品国产三级国产aⅴ无密码| 国产精品国产一区二区 | 蜜臀99久久精品久久久久久软件| 欧美aⅴ99久久黑人专区| 欧美日韩综合在线| 国内精品视频666| 一区二区三区 在线观看视频 | 欧美一区二区三区视频免费| 欧美国产高清| 久久成人久久爱| 国产精品久久9| 亚洲精选一区| 欧美福利视频网站| 性欧美大战久久久久久久免费观看| 麻豆精品91| 韩国精品主播一区二区在线观看| 亚洲一区二区三区在线| 欧美激情国产高清| 久久激情一区| 国产老肥熟一区二区三区| 99pao成人国产永久免费视频| 久久久精品日韩欧美| 一区二区三区日韩精品视频| 欧美国产在线电影| 亚洲国产精品一区二区第一页| 欧美在线观看视频在线 | 另类春色校园亚洲| 午夜精品久久久久影视| 国产精品电影在线观看| 99精品热视频| 亚洲黄色尤物视频| 老司机精品久久| 极品尤物一区二区三区| 久久成人这里只有精品| 99视频国产精品免费观看| 欧美成人免费视频| 欧美激情亚洲| 亚洲国产影院| 亚洲国产精品久久久久秋霞蜜臀 | 亚洲电影毛片| 麻豆国产精品777777在线| 在线观看日韩av电影| 久久久久国产精品麻豆ai换脸| 中文在线不卡视频| 欧美视频一区二区三区…| 一区二区三区视频观看| 亚洲精品久久久久| 欧美日韩国产三级| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲精品美女在线| 欧美日韩免费观看中文| 亚洲视频一起| 亚洲你懂的在线视频| 国产欧美视频一区二区| 久久激情网站| 久久精品日韩欧美| 亚洲成人直播| 日韩亚洲国产欧美| 国产久一道中文一区| 久久只有精品| 欧美成人xxx| 亚洲欧美韩国| 久久精品在线观看| 亚洲人成小说网站色在线| 99精品国产99久久久久久福利| 国产精品久久久久aaaa| 久久精品日韩欧美| 欧美a级片一区| 午夜在线一区| 美脚丝袜一区二区三区在线观看| 日韩亚洲欧美中文三级| 亚洲一区在线视频| 亚洲国产欧美一区二区三区同亚洲| 亚洲精品乱码久久久久久日本蜜臀 | 国产在线欧美日韩| 亚洲丶国产丶欧美一区二区三区 | 国产精品久久久91| 久久午夜精品| 欧美日韩免费一区| 久久综合国产精品台湾中文娱乐网| 欧美激情亚洲精品| 久久久久99精品国产片| 欧美日韩福利| 欧美99在线视频观看| 国产精品视频观看| 亚洲国产裸拍裸体视频在线观看乱了中文 | 免费观看久久久4p| 午夜精品国产更新| 男女av一区三区二区色多| 亚洲女同在线| 日韩视频免费| 狠狠操狠狠色综合网| 一区二区三区四区精品| 亚洲电影在线看| 午夜精品久久久久久久99黑人| 一本色道久久综合狠狠躁篇怎么玩| 欧美一区二区| 午夜精品久久久久影视| 欧美粗暴jizz性欧美20| 美女露胸一区二区三区| 国产在线精品成人一区二区三区| 在线一区亚洲| 亚洲素人一区二区| 欧美日产国产成人免费图片| 欧美激情在线有限公司| 在线观看一区二区视频| 久久久www成人免费无遮挡大片| 香蕉国产精品偷在线观看不卡| 欧美日韩午夜激情| 亚洲乱亚洲高清| 亚洲乱码国产乱码精品精可以看 | 国产亚洲精品久久久久久| 亚洲免费精品| 亚洲图片欧美日产| 欧美日韩另类丝袜其他| 亚洲国内精品| 99riav国产精品| 欧美日韩精品一区视频| 亚洲经典一区| 99热在线精品观看| 欧美日韩久久久久久| 一区二区欧美国产| 欧美一级黄色网| 国产在线不卡精品| 久久在线免费视频| 亚洲国产三级| 亚洲午夜免费福利视频| 欧美午夜精品久久久久久超碰| 999亚洲国产精| 午夜日韩视频| 经典三级久久| 欧美劲爆第一页| 亚洲午夜成aⅴ人片| 久久国产精品99国产精| 加勒比av一区二区| 欧美激情一区在线| 亚洲视频第一页| 久久久久免费视频| 亚洲国产影院| 国产精品久久一区主播| 欧美一区二区三区在线观看视频| 久久午夜影视| av成人手机在线| 国产人成精品一区二区三| 久久久久久9999| 一本色道久久综合亚洲精品按摩 | 日韩香蕉视频| 久久久久久亚洲精品中文字幕| 亚洲国产欧美久久| 欧美性一二三区| 欧美在线视频免费| 亚洲国产日韩欧美在线图片| 亚洲专区在线视频| 亚洲电影在线观看| 国产精品第三页| 久久综合九色综合欧美就去吻 | 欧美视频在线观看视频极品| 亚洲午夜精品久久久久久app| 久久久久久亚洲综合影院红桃 | 亚洲激情电影中文字幕| 亚洲一区二区精品在线| 国产真实久久| 欧美四级在线观看| 老司机精品久久| 欧美亚洲免费高清在线观看| 亚洲国产成人一区| 久久激情五月婷婷| 一区二区三区 在线观看视| 狠狠色丁香久久综合频道| 欧美日韩三区四区| 麻豆精品91| 久久精品视频网| 亚洲欧美日韩国产综合| 亚洲免费成人av| 欧美激情第六页| 久久综合久久综合久久综合| 欧美亚洲综合久久| 午夜一级在线看亚洲| 中文精品99久久国产香蕉| 悠悠资源网亚洲青|