Oracle 兼容性面面觀
1. 漫談兼容性問題
數(shù)據(jù)庫產(chǎn)品,是否被大規(guī)模使用?一方面是產(chǎn)品自身功能,另一方面是產(chǎn)品生態(tài)問題。如果產(chǎn)品有著繁榮生態(tài),無疑對使用者來講會大大降低使用成本和風險。在這其中,Oracle 無疑是數(shù)據(jù)庫領(lǐng)域的領(lǐng)導(dǎo)者。在過去數(shù)十年時間里,Oracle 公司產(chǎn)品取得了巨大的成功,在國內(nèi)有著海量的用戶。當面臨上面談到的遷移工作時,兼容 Oracle 無疑對用戶來講好處多多。確實,我們也看到國內(nèi)很多數(shù)據(jù)庫廠商將兼容 Oracle 作為產(chǎn)品的核心能力之一。下文將對這一能力做對比說。在這之前,我們先談?wù)劶嫒菪缘膸讉€問題。
? 不存在完美兼容
產(chǎn)品間是必然存在差異的,不存在完全兼容的兩個產(chǎn)品。也就是說,不要追求完美兼容,它只是降低使用新產(chǎn)品的一種手段,可能也不是最優(yōu)的方案。這點要有清醒的認識。百分百兼容是不可能的事情,務(wù)實的態(tài)度是實現(xiàn)核心功能的兼容。
? 聚焦核心兼容能力
Oracle 的產(chǎn)品功能非常龐大,大量的功能意味著兼容工作量的巨大。同時,前者還在不斷演進發(fā)展中,作為模仿者的兼容壓力也會與日俱增。這里要強調(diào)盡量收斂兼容范圍,將其主流的、使用最多的功能作為重點兼容目標,而不是追大求全。
? 兼容在形,也在神
所謂形似神似,兼容不僅僅是功能表面的使用方式一致,更重要的是結(jié)果的一致。小到一個計算精度、排序方式、錯誤碼提示,大到隔離級、SQL 支持、存儲過程等。往往形式的遷移通過工具轉(zhuǎn)換、人工改寫很容易完成,而后者需對比執(zhí)行結(jié)果,相對困難很多。
? 兼容有層次,等價亦可行
能做到完全兼容,代碼完全不改固然是好的;但是很多情況是只能提供等價實現(xiàn),這也是一種選擇。雖然需要修改代碼才能適配,但只要明確改寫方式并提供輔助工具完成,也不失為一種方法。后文在兼容能力對比上,也區(qū)分為兼容支持和等價改寫支持。
? 前瞻設(shè)計,兼容標準而非產(chǎn)品
最高的境界是不做兼容式產(chǎn)品,大家都遵循一種標準。這樣當用戶替換產(chǎn)品時,是不需要考慮改造問題的。這點是比較理想化的,但作為用戶在前期選擇產(chǎn)品時,可將標準開放性作為一個要素去考慮,同時對數(shù)據(jù)庫的使用上也盡量使用標準化功能,而非個性功能。
2. 國內(nèi)主流產(chǎn)品兼容度
隨著近些年來數(shù)據(jù)庫替換趨勢愈演愈烈,國內(nèi)很多數(shù)據(jù)庫廠商將Oracle兼容度作為產(chǎn)品核心能力之一。下文收集了國內(nèi)部分廠商的兼容情況,從替換中的核心功能點加以對比說明。以下內(nèi)容是根據(jù)各家產(chǎn)品對外的官方文檔內(nèi)容整理而得,因文檔化差異及收集范圍有限,可能存在較大偏差,僅供參考。其中:色塊多少代表支持程度(1~5),綠色代表兼容支持,紅色代表等價支持;缺失部分為未查詢到明確信息(不代表不支持)。
1).產(chǎn)品介紹
? OceanBase
OceanBase 企業(yè)版是一款完全自研的企業(yè)級原生分布式數(shù)據(jù)庫,在普通硬件上實現(xiàn)金融級高可用,首創(chuàng)“三地五中心”城市級故障自動無損容災(zāi)新標準,刷新 TPC-C 標準測試,單集群規(guī)模超過 1500 節(jié)點,具有云原生、強一致性、高度兼容 Oracle/MySQL 等特性。
? PolarDB-O
云原生關(guān)系型數(shù)據(jù)庫 PolarDB O 引擎(兼容Oracle語法)是由阿里巴巴自主研發(fā)的,高度兼容 Oracle 的高性能企業(yè)級數(shù)據(jù)庫?;谠圃鎯τ嬎惴蛛x架構(gòu)實現(xiàn)高容量存儲及分鐘級彈性擴縮容能力。專注解決企業(yè)數(shù)字化轉(zhuǎn)型中數(shù)據(jù)庫系統(tǒng)的平滑遷移、安全合規(guī)和成本優(yōu)化等問題。
? KingbaseES
KingbaseES 是一款面向大規(guī)模并發(fā)交易處理的企業(yè)級關(guān)系型數(shù)據(jù)庫。該產(chǎn)品支持嚴格的ACID特性、結(jié)合多核架構(gòu)的極致性能、行業(yè)最高的安全標準,以及完備的高可用方案,并提供可覆蓋遷移、開發(fā)及運維管理全使用周期的智能便捷工具。產(chǎn)品融合了人大金倉在數(shù)據(jù)庫領(lǐng)域幾十年的產(chǎn)品研發(fā)和企業(yè)級應(yīng)用經(jīng)驗,可滿足各行業(yè)用戶多種場景的數(shù)據(jù)處理需求。
? DM
DM8 是達夢公司在總結(jié) DM 系列產(chǎn)品研發(fā)與應(yīng)用經(jīng)驗的基礎(chǔ)上,堅持開放創(chuàng)新、簡潔實用的理念,推出的新一代自研數(shù)據(jù)庫。DM8 吸收借鑒當前先進新技術(shù)思想與主流數(shù)據(jù)庫產(chǎn)品的優(yōu)點,融合了分布式、彈性計算與云計算的優(yōu)勢,對靈活性、易用性、可靠性、高安全性等方面進行了大規(guī)模改進,多樣化架構(gòu)充分滿足不同場景需求,支持超大規(guī)模并發(fā)事務(wù)處理和事務(wù)-分析混合型業(yè)務(wù)處理,動態(tài)分配計算資源,實現(xiàn)更精細化的資源利用、更低成本的投入。
2).兼容列表

? 用戶角色
用戶及角色部分,是使用數(shù)據(jù)庫第一步。這部分功能相對簡單,各家基本也都完成等價實現(xiàn)。針對數(shù)據(jù)庫替換場景,這部分的工作量相對不大。
? 數(shù)據(jù)類型
數(shù)據(jù)類型部分,情況則相對復(fù)雜。Oracle 支持的數(shù)據(jù)類型范圍較廣,國內(nèi)產(chǎn)品大部分實現(xiàn)兼容或等價支持,基本可滿足替換要求。不支持的部分主要是部分使用場景較少或Oracle即將廢棄的數(shù)據(jù)類型。但這里需要注意的是,雖然國內(nèi)產(chǎn)品支持大部分數(shù)據(jù)類型,但在處理精度、存儲空間等方面與Oracle還是有所區(qū)別。很多情況下,不能簡單照搬原有的數(shù)據(jù)結(jié)構(gòu)定義,還需要有所甄別調(diào)整。很多廠商也提供了遷移工具,方便完成數(shù)據(jù)類型的對應(yīng)轉(zhuǎn)換。
? 字符集及排序
字符集方面,常見的中文字符集(gbk、gb18030)及utf8系列字符集是支持重點。各廠商產(chǎn)品基本支持這些字符集,可滿足需要。針對字符集排序方面,各家支持力度不同,有的提供多樣的排序方式,有的則支持較少。
? 數(shù)據(jù)庫對象
在數(shù)據(jù)庫對象方面,Oracle 支持非常豐富的對象類型,包括但不限于表、索引、分區(qū)、視圖、序列、同義詞、觸發(fā)器、DB Link等等。針對上述類型對象,國內(nèi)產(chǎn)品都做了一定程度的兼容。但需要指出的是,Oracle 在這些對象上的功能是比較強大的,國內(nèi)產(chǎn)品在支持上通常也只完成其基本功能的兼容,其大量復(fù)雜功能仍然是不具備的。不能說遷移完成即可,還需分析其原有使用的功能范圍,畢竟遷移后功能無法完全覆蓋。很多廠商提供的遷移工具,可方便完成數(shù)據(jù)庫對象的遷移工作。
? 函數(shù)
函數(shù)部分,Oracle支持數(shù)百種函數(shù),可以說極大豐富了數(shù)據(jù)庫處理數(shù)據(jù)的能力。各廠商產(chǎn)品也都做了大量函數(shù)部分的工作。針對主要的函數(shù),基本都可實現(xiàn)兼容或等價實現(xiàn)。這里需要注意的是,因為函數(shù)在大量應(yīng)用邏輯中使用,因而采用兼容模式會大幅降低代碼改造的工作量,當然有些公司提供的遷移工具中可實現(xiàn)代碼邏輯的函數(shù)轉(zhuǎn)換工作。
? SQL語法
SQL 語法部分,是 Oracle 頗為復(fù)雜的部分,很多基于 Oracle 開發(fā)的系統(tǒng)大量使用了 Oracle 的復(fù)雜 SQL。這些也成為后續(xù)改造遷移工作的重點和難點。各廠商都完成了大量 SQL 語法方面的兼容支持工作。但這部分的覆蓋范圍非常廣,目前各廠商對外文檔中對這些的能力描述還都較少。也有部分廠商提供遷移工具,可實現(xiàn) SQL 語法的轉(zhuǎn)換能力,可以減少遷移改造工作量。此外,這部分還需要關(guān)注一點是兼容 SQL 語法不僅是語句可執(zhí)行,其語義也應(yīng)是等價的,即執(zhí)行結(jié)果是完全一致的。這方面還需要大量用戶改造后的比對驗證工作,也希望各廠商能提供此功能方便用戶做好遷移工作。
? 過程化語言
過程化語言,是指在數(shù)據(jù)庫端處理數(shù)據(jù)的一種語言。作為近存儲端處理數(shù)據(jù)的一種手段,其處理是比較高效的。當然這種方式會依賴于數(shù)據(jù)庫實現(xiàn),且從代碼管理角度看不是很好維護。Oracle 支持非常豐富的過程化語言支持,各廠商都在一定程度做了支持,但相對而言還有限。部分廠商提供的遷移工具,也支持將過程化語言轉(zhuǎn)化為外部程序處理方式來解決。從長期角度來講,過程化語言還是建議逐步減少使用,盡量減少依賴于數(shù)據(jù)庫實現(xiàn)。此外,在分布式架構(gòu)下,過程化語言的支持更為困難,不同產(chǎn)品差異更大;很多分布式數(shù)據(jù)庫產(chǎn)品都不支持過程化語言。
? 數(shù)據(jù)字典/系統(tǒng)視圖
數(shù)據(jù)字典,是元數(shù)據(jù)的存儲。系統(tǒng)視圖,是反映系統(tǒng)運行狀態(tài)的一個窗口。通過它們可以快速了解系統(tǒng)的多方面情況。Oracle 數(shù)據(jù)庫提供了非常多的數(shù)據(jù)字典和系統(tǒng)視圖。很多用戶也會基于這些字典和視圖,去構(gòu)建自己的監(jiān)控、DEVOPS系統(tǒng)等。因此,兼容原數(shù)據(jù)庫的字典和視圖對用戶來說很有意義。目前各廠商都在一定程度上做了支持,但差異還比較明顯。
? SQL引擎
SQL 引擎部分,是 Oracle 內(nèi)核最為強大的組件,提供如查詢改寫、預(yù)編譯、CBO、執(zhí)行計劃(展示、緩存、綁定、管理)、自適應(yīng)游標、提示等非常豐富的能力,可對 SQL 語句及執(zhí)行做到全方位的管理。這方面國產(chǎn)數(shù)據(jù)庫的差距還比較明顯,經(jīng)常能聽到這樣的聲音"在 Oracle 數(shù)據(jù)庫跑的很好的SQL,在國產(chǎn)庫上執(zhí)行很慢",這大多都是 SQL 引擎差異造成的。
? 安全特性
在安全能力上,Oracle 提供了權(quán)限、鑒權(quán)、加密、審計、標簽、SSL、防火墻、VPD、Wallet 等諸多安全功能。這方面國內(nèi)廠商產(chǎn)品較 Oracle 還有不小的差距。一方面各家還在持續(xù)增強安全能力,一方面通過數(shù)據(jù)庫與生態(tài)產(chǎn)品合作,解決企業(yè)安全問題。
? 備份恢復(fù)
備份恢復(fù),是保障數(shù)據(jù)安全的底線。Oracle 提供了完善的備份恢復(fù)能力,這方面國內(nèi)廠商產(chǎn)品也基本覆蓋了常規(guī)的備份恢復(fù)需求。但針對更高的需求,如備份集壓縮、檢驗、租戶備份等,還是有一定差距。
? 高可用
在高可用方面,Oracle 提供了RAC、ADG等多種架構(gòu)選擇;同時還支持例如閃回等能力。通過多種方式保證系統(tǒng)可用性。國內(nèi)廠商產(chǎn)品有的在架構(gòu)層面仿照 Oracle 做了實現(xiàn),提供多種架構(gòu)方案;有的則通過分布式架構(gòu)下的多副本機制,提供較 Oracle 更為靈活及保障性更高的實現(xiàn)。
? 訪問接口
Oracle 可通過很多的數(shù)據(jù)訪問接口,如常見的JDBC、OLE DB、ODBC、.NET、Python、Go、PHP、OCI、Pro*C等等,幾乎面對不同訪問語言都有對應(yīng)的訪問接口可用。特別是很多傳統(tǒng)應(yīng)用基于C、COBOL、ADA等開發(fā),也提供了對應(yīng)接口。這方面,國內(nèi)廠商產(chǎn)品大多完成對主流訪問接口的支持,部分小眾化的語言還不支持。
? 生態(tài)兼容
Oracle 具備龐大的生態(tài),上下游有大量的生態(tài)企業(yè)支持,組成了龐大的生態(tài)圈。但因其私有通信協(xié)議及較為封閉的環(huán)境,在生態(tài)兼容上國內(nèi)廠商很難去共享其已有生態(tài)。這點與 MySQL 等開源產(chǎn)品不同,后者的開放性保證其生態(tài)繁榮發(fā)展。
? 異構(gòu)遷移
最后談到的就是在 Oracle 向國產(chǎn)數(shù)據(jù)庫遷移中,能提供的相關(guān)能力。這里主要包括結(jié)構(gòu)、數(shù)據(jù)、過程遷移能力以及研發(fā)測試階段能提供的相關(guān)輔助能力(如回放等)。這方面各廠商都提供外部工具輔助用戶完成遷移動作。




















