• <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>

            tbwshc

            tbw

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

            常用鏈接

            留言簿(4)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            #

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

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

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

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

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

            作者:Porus Homi Havewala

            2010 年 4 月發(fā)布

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

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

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

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

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

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

            Oracle GoldenGate 是以 DBA 為中心的,因此 DBA 很容易學(xué)會如何使用它。其實現(xiàn)時間也是最少的 — 一些站點只用一個月的時間就完全付諸實現(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 支持主動打開備用數(shù)據(jù)庫以提供報表服務(wù),甚至在應(yīng)用重做數(shù)據(jù)的同時也如此。這個特性非常棒,可將生產(chǎn)報表和查詢工作分流到備用數(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,但不會對其進行主動增強。而是對 Oracle Streams 中最好的內(nèi)容行評估以確定是否將其并入 Oracle GoldenGate 中。”

            此演示的目的

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

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

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

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

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

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

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

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

            此時會出現(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

            大?。?.4 MB

            Oracle GoldenGate 文檔

            V18423-01

            大?。?0 MB

            下載這三個 zip 文件,因為您需要適用于 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

            大?。?28 MB

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

            V18128-01

            大?。?5 MB

            Oracle GoldenGate Director 文檔

            V18129-01

            大小:952 KB

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

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

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

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

            除了上述主要介質(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 的安裝步驟。

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

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

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

            如果您有 Oracle9i 數(shù)據(jù)庫并且想從其復(fù)制數(shù)據(jù)或向其復(fù)制數(shù)據(jù),需要另一個適用于 Oracle9i 的 Oracle GoldenGate 軟件。不過,您不能通過 Oracle 網(wǎng)站下載 Oracle GoldenGate 的 Oracle9i 版本。如果您需要此版本,可能需要通過 My Oracle Support 發(fā)出一個系統(tǒ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)在,您可以打開兩個命令窗口(開始..運行..Cmd) ,針對 Oracle Database 10g 和 Oracle Database 11g 將相應(yīng)的環(huán)境變量(如 ORACLE_HOME、ORACLE_SID、LD_LIBRARY_PATH 等)設(shè)置為相應(yīng)的值。

            為了在兩個 Oracle 10g 數(shù)據(jù)庫間建立復(fù)制,將這些變量進行如下設(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ù)庫。請注意 PATH、LD_LIBRARY_PATH 和 CLASSPATH 的值。

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

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

            GGSCI 命令解釋程序

            在命令窗口或“我的電腦”級別設(shè)置環(huán)境變量之后,轉(zhuǎn)到 Oracle GoldenGate 的文件夾下,通過命令行(見圖 1)或 Windows 資源管理器運行 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 作為本地程序運行

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

            如果您希望將其作為一個本地命令運行,只需調(diào)用目錄中的 Manager 執(zhí)行文件(調(diào)用時帶著一個參數(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)建一個參數(shù)文件:

            GGSCI (HaviPori) 1> edit params mgr

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

            PORT 7809

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

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

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

            該命令啟動 Manager,并且顯示圖 3 所示的消息:


            圖 3 在 Windows 命令提示符處啟動 Manager

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

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

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

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

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

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

            EDIT PARAMS ./GLOBALS

            在出現(xiàn)的記事本編輯器中,選擇新建一個文件(如果是首次這么做),然后輸入以下代碼并保存該 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ù)列表中顯示為一個自動啟動的服務(wù)(見圖 5):


            圖 5 Manager 服務(wù)屬性

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

            GGSCI (HaviPori) 1> start manager
            
            Starting Manager as service ('OracleGGSMGR1')...
            Service started.
              

            安裝 Windows 事件消息

            還可使用 Install 程序?qū)⑹录惭b到 Windows 注冊表中,這樣它們可通過 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 目錄,從而生成具體的而不是一般性的錯誤。

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

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

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

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

            您還需要為 Oracle GoldenGate Replication 準(zhǔn)備數(shù)據(jù)庫:在數(shù)據(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 后面可以是該日志中的一個時間戳以便從該時刻開始進行處理,也可以是 NOW 以便立即開始處理。TRANLOG 還可以帶有 EXTSEQNO 選項(某個 Oracle 重做日志的序列號,從該日志開始)和 EXTRBA 選項(該日志中的相對字節(jié)地址)。

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

            GGSCI (HaviPori) 1> help add extract

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

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

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

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

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

            現(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;

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

            如果您使用了 RMTTRAIL,則只需按下列行進行更改:

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

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

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

            該進程的狀態(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)該進程的詳細(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

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

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

            然后,查看日志文件 ggserr.log 和 sqlnet.log 中是否有任何說明性的消息,這兩個文件位于 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 可顯示錯誤,例如:

            TNS-12557: TNS:protocol adapter not loadable

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

            EMP_EXT.rpt 可顯示如下所示的錯誤:

            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 進程正在嘗試以 sys 而不是 SYSDBA 身份登錄。只需在 Extract 的參數(shù)文件中將登錄參數(shù)改為“system”即可。

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

            ggserr.log 文件可顯示類似錯誤:

            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 沒有啟動。

            您還可能在 Extract 的報告文件中看到另一個錯誤。例如,EMP_EXT.rpt 可能會有此類錯誤:

            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ù)庫級啟用追加日志功能。由于該功能已啟用,在本例中將不會看到此錯誤。

            在 HRPRD3 上建立 Replicat 進程

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

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

            注意,DBLOGIN 正常運行,如下所示:

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

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

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

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

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

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

            如果您在 GLOBALS 參數(shù)文件中指定檢查點表,則上面的命令可使用該文件中的規(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 正是在第一個數(shù)據(jù)庫中建立 Extract 組時所使用的 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)在可以啟動 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 命令顯示所有正在運行的進程:

            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
              

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

            在 HRPRD1 上建立 Replicat 進程

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

            對于 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 安裝軟件類似的步驟進行操作,創(chuàng)建一個名為 OracleGGSMGR2 的 Manager 服務(wù)并啟動它。創(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
              

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

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

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

            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)建第二個 Replicat 組了。注意,我們將使用和前面數(shù)據(jù)庫 HRPRD3 所使用的完全相同的線索。

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

            如果在 ADD REPLICAT 命令中不使用 BEGIN NOW,則 Replicat 進程會在跟蹤開始時就啟動,這也不錯。

            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。這是為了對表中記錄重復(fù)之類的錯誤進行處理。我們已將這些參數(shù)作為選項放入此文件中,也可以將它們放入第一個 Replicat 組的參數(shù)文件中。

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

            現(xiàn)在啟動該 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 目錄下的任何日志文件中都沒有錯誤指示。

            迫使錯誤顯示出來的唯一方法是從命令提示符處運行 Replicat。這可用于調(diào)試目的 — 錯誤(如果有的話)會顯示在屏幕上而不是寫入報告文件中。但在 Oracle GoldenGate for Oracle 11g 版本中,看上去需要通過這種方法來使 Replicat 運行起來,雖然我們認(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.
              

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

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

            通過進一步的分析發(fā)現(xiàn),某個用戶在 Oracle 11g 目標(biāo)數(shù)據(jù)庫中手動插入了記錄,而手動插入的數(shù)據(jù)與啟動 Oracle GoldenGate 復(fù)制進程之后 插入到 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 進程。DISCARDFILE 在出現(xiàn)被刪除的記錄時可提供更多信息。在命令提示符處啟動運行 Replicat 進程后,等待直到其通過線索完成運行并根據(jù)需要刪除記錄。

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

            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 進程。由于記錄重復(fù)問題已得到解決,該進程現(xiàn)在可以正常工作,以后對源數(shù)據(jù)庫進行任何更改時,該進程都可將這些更改復(fù)制過來。

            對復(fù)制進行測試

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


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

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


            圖 7 插入到 HRPRD2 的員工表中

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

            功能、資源需求和影響

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

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

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

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

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

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

            Oracle GoldenGate Director

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

            這些客戶端全部連接到集中安裝的 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ù)先安裝并運行。

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

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

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

            總結(jié)及其他信息

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

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

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

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

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

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

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

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

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

            //

            #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 閱讀(1123) | 評論 (0)編輯 收藏

            哎!

            慘……

            最近接連維護兩個很煩人的項目,我的第一想法就是重寫!可是上頭的意思是說我的想法太瘋狂。

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

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

            回正題

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

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

            然后進去就

            int* pxx = (int*)pData;

             pxx= XXX(sss);

            pData += sizeof int;

            SH_XXX* pshxx = (SH_XXX*)pData;

            Mxxxk(pshxx,xxxixx);

            sss;

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

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

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

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

            Code;

            DoubleCode : Code;

            ThreeCode : DoubleCode;

            SessionCode : TreeCode;

            StreamCode : SessionCode;

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

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

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

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

            boost::tuple 類

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

            第一個使用元組的程序

            清單 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)。請注意,<< 運算符重載 std::ostream,以便通過轉(zhuǎn)儲每個單獨 的 tuple 元素來輸出元組。

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

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

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

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

            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 閱讀(1355) | 評論 (1)編輯 收藏

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

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

            字長固定的整型類型

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

            int8_t   int16_t   int32_t   int64_t

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

            uint8_t   uint16_t   uint32_t   uint64_t

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

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

            字長最小的快速整型類型

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

            int_fast8_t  int_fast16_t  int_fast32_t  int_fast64_t

            對應(yīng)的無符號整型類型有:

            uint_fast8_t  uint_fast16_t  uint_fast32_t  uint_fast64_t

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

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

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


             

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

            SQL Server 2008中對匯總有明顯的增強,有點像Oracle的語法了。請看下面四個例子:

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

            基本表如下:

            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
             

             

            改進查詢:

            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,還有更加靈活強大的自定義集合匯總--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)識匯總行(http://technet.microsoft.com/zh-cn/library/ms178544.aspx)

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

            /*********使用Grouping標(biāo)識匯總行***************/   /********* 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é)果:

             

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

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


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

             

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

            僅列出標(biāo)題
            共10頁: First 2 3 4 5 6 7 8 9 10 
            久久亚洲熟女cc98cm| 99久久夜色精品国产网站| 久久久久久无码Av成人影院| 99久久精品免费看国产一区二区三区| 精品国产99久久久久久麻豆| 久久99国产综合精品女同| 一本伊大人香蕉久久网手机| 亚洲国产成人精品久久久国产成人一区二区三区综| 国产亚洲色婷婷久久99精品91| 久久国产成人| 久久精品国产亚洲AV无码娇色 | 中文字幕精品无码久久久久久3D日动漫| 99久久做夜夜爱天天做精品| 久久99久久99精品免视看动漫| 久久久久噜噜噜亚洲熟女综合 | 国产亚洲美女精品久久久2020| 大伊人青草狠狠久久| 三级片免费观看久久| 久久久久久亚洲精品成人| 久久精品视频91| 久久国产精品77777| 国产精品久久久久久久久软件| 亚洲欧美日韩精品久久| 亚洲中文字幕无码久久2020| 国产99久久久国产精品~~牛 | 无码人妻少妇久久中文字幕蜜桃| 91性高湖久久久久| 91精品国产高清91久久久久久| 久久久久亚洲精品日久生情| 久久精品国产72国产精福利| 99久久国产主播综合精品| 99久久精品国产高清一区二区| 久久精品国产亚洲AV不卡| 亚洲午夜精品久久久久久app| 99热成人精品免费久久| 热久久这里只有精品| 72种姿势欧美久久久久大黄蕉 | 香蕉久久夜色精品国产小说| 国产精品一区二区久久国产| 国产精品99久久99久久久| 日本久久久久亚洲中字幕|