本書首先綜合介紹了內存計算的發展趨勢, 內存計算的基本概念和場景的內存計算產品和架構。然后從深度上詳細介紹了Oracle內存數據庫TimesTen,由淺入深, 配合實際的操作腳本和源程序, 包括TimesTen的基本原理和架構, 如何安裝和配置, 內存數據庫緩存的架構和配置, 高可用性的架構和配置, 與Oracle數據庫之間的數據遷移, TimesTen應用程序的開發, TimesTen架構最佳實踐。
本書首先綜合介紹了內存計算的發展趨勢、內存計算的基本概念、內存計算產品和架構。然后從深度上詳細介紹了Oracle內存數據庫TimesTen,由淺入深,配合實際的操作腳本和源程序,促進和加深讀者對TimesTen內存計算架構和特性的理解,并迅速掌握TimesTen內存計算的精髓。
第一次接觸TimesTen是在2001年左右,當時我的領導從Sybase公司拿回一本TimesTen技術手冊讓我研究,由于沒有具體項目需求,因此這本書很快就被遺忘在故紙堆中。2005年,TimesTen被Oracle公司收購,隨后是閃存存儲的普及,x86架構逐漸成為標準,云計算和大數據時代的到來。在所有這些技術趨勢中,內存計算是其中不可忽略的一種。內存計算并非一種新技術,但直到2010年后才逐漸成為主流,這其中包括TimesTen、HANA、Coherence和Redis等內存計算產品,一方面是由于軟硬件發展條件已經成熟,另一方面也源于云計算大數據時代不斷涌現的新型業務需求。2011年我加入Oracle公司,有了深入接觸TimesTen的機會,同時在大量客戶接觸中,發現內存計算可應用的場景越來越豐富,使用范圍也越來越廣泛。雖然TimesTen有大量英文手冊,卻缺乏一本系統講述TimesTen基本概念與核心精髓的入門和指導型書籍,因此我決定撰寫一本介紹TimesTen內存計算架構的專著。
本書適用于不同類型的讀者。如果你是數據庫管理員,可以學習TimesTen數據庫的內部結構,TimesTen內存數據庫與傳統關系型數據庫的異同,如何進行內存數據庫的管理、運維、監控和調優。如果你是架構師,可以了解如何利用新型的內存計算技術簡化整體架構設計,釋放后端傳統磁盤數據庫壓力,滿足大數據時代應用性能和可擴展性需求。如果你是應用開發人員,可以學習如何使用標準的ODBC/JDBC接口和流行的Java、C#和C/C++語言進行TimesTen內存數據庫應用開發。
我希望本書能幫助讀者編寫出更高效的應用,設計出更敏捷的架構。閱讀本書的唯一先決條件是對關系型數據庫有基礎的了解,包括數據庫事務概念、表和索引對象、SQL操作等。如果讀者具備Oracle數據庫管理、關系型數據庫應用開發或系統架構設計能力中的一種,對于理解本書內容也大有裨益。
本書全部內容分為10章,每一章各討論TimesTen內存數據庫的一個重要方面。本書目錄結構的設計是從基礎概念和架構開始,逐步深入到日常管理和操作、應用層數據庫緩存和數據庫高可用性等TimesTen高級特性。本書建議的閱讀方式是從第1章開始逐章閱讀,并結合動手實驗,對于TimesTen有一定了解的讀者也可以直接閱讀感興趣的章節。
第1章首先簡要介紹了內存計算的發展歷史,以及推動內存計算發展的軟硬件技術和新型企業應用需求; 然后對內存計算技術的概念和分類進行了闡述; 最后簡要介紹了當前主流的內存數據管理產品,以使讀者對內存計算技術發展概況有一個基本的了解。
由于本書的特點是基礎理論和動手實踐相結合,并且后續章節大部分概念的講述都配備有實際操作示例,因此第2章詳細介紹了如何搭建TimesTen內存數據庫操作環境,包括準備工作、安裝TimesTen服務器和客戶端軟件、創建TimesTen數據庫,以及安裝目錄結構的簡要說明。最后列舉了常用的TimesTen學習資源,以便讀者進行持續和深入的學習。
無論是開發者、數據庫管理員還是架構師,對于數據庫基本概念和架構的了解都是必須的。盡管TimesTen是標準的關系型數據庫,但基于內存的架構使其與傳統基于磁盤的數據庫有顯著不同。第3章介紹了TimesTen內存數據庫最基礎也是最重要的概念,包括TimesTen數據庫實例架構、TimesTen事務管理、TimesTen數據庫生命周期管理,即數據庫從創建、加載、卸載到銷毀的整個過程。最后介紹了TimesTen數據庫最典型的三種部署模式。
第4章進入TimesTen數據庫的實際操作,本章涉及的內容包括TimesTen數據庫關鍵特性概覽,TimesTen數據源概念,如何啟動、連接和關閉TimesTen數據庫,操作系統和數據庫層面的訪問控制,以及如何操作數據庫中的表、索引、視圖和PL/SQL等對象。
工欲善其事,必先利其器。第5章全面介紹了TimesTen數據庫常用管理工具,包括交互式SQL工具ttIsql、TimesTen內置過程和TimesTen實用程序。性能是內存數據庫的優勢,同時也是用戶關注的重點,本章介紹的TimesTen Benchmark工具和TimesTen建議器可以為用戶建立性能基線,進行性能測量和提供性能調優建議。SQL Developer和Oracle企業管理器是傳統的Oracle數據庫管理工具,同時也支持TimesTen數據庫的管理,本章也簡要介紹了這兩種管理工具與TimesTen的結合。公有云是未來IT發展的趨勢,本章最后介紹了如何使用新型的Oracle日志分析云服務進行TimesTen日志模式查詢,關聯分析,以加速問題定位和解決過程。
TimesTen可作為獨立數據庫運行,也可以作為Oracle數據庫的內存緩存,前者需要將關系型數據庫中數據遷移到TimesTen,后者通常也需要遷移數據以驗證TimesTen的性能。第6章介紹了多種實現數據遷移的TimesTen工具,包括傳統的SQL Developer工具、文本導入導出工具以及TimesTen特有的命令、實用程序和緩存導入方式,并重點講述了TimesTen在整數和變長字符串類型實現方式上與Oracle數據庫數據類型的區別。此外,本章的另一個主題是介紹TimesTen數據庫內存容量監控和規劃,以保證TimesTen有足夠的內存空間并可以應對未來內存容量的增長。
作為Oracle數據庫的應用層數據緩存是TimesTen最重要的特性之一,也是TimesTen區別于其他內存計算產品的主要特點。第7章全面介紹了TimesTen緩存組的基本概念、緩存組數據操作和緩存組分類,并使用大量示例說明如何配置只讀、AWT、SWT、用戶自管理和全局緩存組以及它們的特點與區別。在此基礎上,本章深入介紹了緩存組的應用模式,包括滑動時間窗和數據分片。最后介紹了TimesTen特有的透傳模式以及如何選擇合適的緩存架構。
高可用性是關鍵業務系統最重要的非功能性需求之一。TimesTen內存數據庫不僅提供極致性能,同時也可以確保關鍵應用的業務連續性。第8章介紹了TimesTen豐富的高可用實現技術手段和拓撲形式,包括傳統復制、ASP主從模式和Oracle Clusterware集群模式,并結合大量示例說明如何構建和管理各種復制模式,以及在服務器端和客戶端兩個層面的錯誤切換和恢復過程,最后介紹了對TimesTen復制環境進行監控的多種方式。
數據備份是實現數據保護最基本和最重要的手段,第9章介紹了多種TimesTen數據庫備份和恢復工具和方式,包括物理和邏輯備份、全量和增量備份等,以及如何利用數據備份與恢復實現數據庫的變更和數據庫的同平臺或跨平臺遷移。最后介紹了多種TimesTen數據庫的升級方法,包括離線升級、就地升級以及結合復制實現業務最高可用性的在線升級。
日趨復雜和不斷變化的業務需求不僅需要穩定和高效的系統支撐,同時也要求更高的應用開發效率。TimesTen作為Oracle公司旗下產品,同時也是標準的關系型數據庫,在應用開發上與Oracle數據庫有許多相似之處,開發人員從Oracle數據庫應用開發轉向TimesTen時,可以充分利用已有知識,輕松實現應用的快速開發。第10章對TimesTen數據庫應用開發進行了專門介紹,并給出了Java、Pro*C、OCI和.NET四種常用開發語言連接TimesTen數據庫的示例。最后介紹了TimesTen應用開發最佳實踐,包括數據庫應用開發通用建議以及TimesTen數據庫應用開發特定建議。
附錄A為TimesTen中英文術語對照表。由于本書是第一本系統闡述TimesTen內存數據庫的中文專著,并且TimesTen的官方幫助文檔和知識庫均只有英文版,在閱讀此書的過程中需要經常參照這些資源; 因此附錄A試圖為TimesTen英文術語的中譯建立標準,形成讀者之間相互溝通的共同語言,并方便中文讀者在查閱英文文檔時有清晰的概念對應。
本書的一大特色是理論與動手實踐相結合,在計算機旁閱讀此書是最佳的方式,可以對書中的概念進行驗證和探索。全書附帶大量腳本和代碼,以加深讀者對產品特性和基本概念的理解,所有腳本和代碼均按章節組織,可以從清華大學出版社相關頁面下載。
我衷心感謝在出書過程中給予幫助與指導的所有朋友和同事。感謝清華大學出版社的王芳編輯,通過CSDN聯系到我并促成了此書的出版。感謝Oracle公司的同事馬文鋒、劉曉宇、張軍華、梁銘豪、劉凱斌,TimesTen中國區產品經理Jason Yang,Oracle公司總部TimesTen產品經理Chris Jenkins,TimesTen架構師Sam Drake和TimesTen開發總監ChihPing Wang,以及Paul Tuck,Rajesh Pradhan,James Healy,Doug Hood,Jeremy Palmer等人,感謝他們通過Oracle TimesTen內部論壇、電話、郵件及現場對我提出問題的耐心指導和答疑,這本書的出版也有他們的功勞。最后,我想對我的父母說: “這本書是獻給你們的,我終于完成了你們希望我出一本書的心愿,謝謝你們!”
蕭宇
2017年2月24日于北京
蕭宇, 本科畢業于西南交通大學自動控制專業,研究生畢業于西南交通大學計算機應用專業,畢業后進入中國鐵道科學研究院工作,參與鐵路客票系統核心應用的開發,此后歷經系統集成商,Dell中國,目前任職于Oracle(中國)軟件系統有限公司,負責交通運輸行業架構與解決方案設計。
具有20年的IT實踐經驗,參與過全球*的鐵路售票系統-中國鐵路客票系統核心應用開發,國內規模*的彩票系統- 廣東電腦福利彩票系統架構設計和核心系統開發,翡翠航空存儲虛擬化與災備項目,凱德置地中國數據中心服務器,備份,桌面與存儲全虛擬化項目。目前專注于云計算和內存計算技術。
第1章內存計算概述
1.1內存計算的興起
1.1.1硬件的發展
1.1.2軟件的發展
1.1.3企業應用的需求
1.2內存計算技術分類
1.2.1內存數據庫
1.2.2內存數據網格
1.2.3主流內存數據管理產品
第2章準備TimesTen內存數據庫操作環境
2.1TimesTen內存數據庫操作環境支持
2.2TimesTen實驗操作環境及介質準備
2.3安裝TimesTen服務器軟件
2.4安裝TimesTen客戶端軟件
2.5創建第一個TimesTen數據庫
2.6探索TimesTen服務器安裝目錄結構
2.7搭建云中的TimesTen操作環境
2.8TimesTen學習資源
第3章TimesTen內存數據庫基本概念
3.1TimesTen實例架構
3.1.1連接驅動
3.1.2主守護進程
3.1.3數據庫守護進程
3.1.4服務器守護進程
3.1.5TimesTen內存數據庫
3.1.6緩存代理
3.1.7復制代理
3.1.8管理程序
3.1.9TimesTen實例重要進程列表
3.1.10為什么TimesTen比傳統數據庫緩存要快
3.2TimesTen事務管理
3.2.1TimesTen數據庫的原子性
3.2.2TimesTen數據庫的一致性和持久性
3.2.3TimesTen數據庫的隔離性
3.3TimesTen數據庫生命周期管理
3.3.1內存加載/卸載策略
3.3.2數據庫恢復過程
3.3.3數據庫生命周期
3.4TimesTen數據庫部署模式
3.4.1獨立部署
3.4.2應用層緩存
3.4.3Exalytics嵌入模式
第4章熟悉TimesTen數據庫操作環境
4.1TimesTen數據庫特性概覽
4.1.1ODBC與JDBC支持
4.1.2SQL與PL/SQL支持
4.1.3訪問控制
4.1.4數據庫連接
4.1.5分布式事務支持
4.1.6事件通知機制
4.1.7數據可用性和一致性
4.1.8并行訪問
4.1.9應用層緩存
4.2TimesTen數據源
4.2.1TimesTen數據源定義文件和類型
4.2.2定義TimesTen服務器DSN
4.2.3定義TimesTen客戶端DSN
4.2.4數據源連接屬性
4.3啟動和關閉TimesTen數據庫
4.3.1啟動TimesTen數據庫
4.3.2關閉TimesTen數據庫
4.4連接TimesTen數據庫
4.4.1使用ttIsql連接數據庫
4.4.2使用SQL Developer連接數據庫
4.4.3使用應用服務器連接數據庫
4.5TimesTen訪問控制
4.5.1TimesTen用戶認證
4.5.2TimesTen權限管理
4.6操作數據庫中對象
4.6.1表
4.6.2索引
4.6.3鎖
4.6.4視圖
4.6.5物化視圖
4.6.6序列
4.6.7同義詞
4.6.8PL/SQL
4.7與Oracle數據庫的兼容性
第5章TimesTen內存數據庫管理工具
5.1SQL Developer圖形化管理工具
5.2交互式SQL工具ttIsql
5.2.1ttIsql命令行選項
5.2.2在線幫助
5.2.3命令歷史
5.2.4命令行編輯
5.2.5數據庫對象列表和描述
5.2.6執行操作系統命令
5.2.7設置和顯示ttIsql屬性
5.2.8事務操作
5.2.9標準ODBC調用
5.2.10動態SQL
5.2.11更新統計信息
5.2.12多連接支持
5.2.13數據庫監控
5.3TimesTen內置過程
5.4TimesTen實用程序
5.5TimesTen輔助實用程序
5.6Benchmark工具
5.6.1tptbmOCI事務吞吐量基準測量工具
5.6.2wiscbm性能基準測量工具
5.7TimesTen建議器
5.7.1索引建議器
5.7.2緩存建議器
5.8Oracle企業管理器
5.9Oracle日志分析云服務
5.9.1設置正確的日志時間格式
5.9.2創建TimesTen日志解析器
5.9.3創建TimesTen日志源
5.9.4上傳TimesTen日志文件
5.9.5TimesTen日志分析
第6章TimesTen數據遷移與容量規劃
6.1從Oracle數據庫向TimesTen遷移
6.1.1設置TimesTen與Oracle數據庫的連通性
6.1.2利用緩存組實現數據導入
6.1.3ttIsql命令Createandloadfromoraquery
6.1.4ttIsql內置過程ttLoadFromOracle
6.1.5ttImportFromOracle數據遷移工具
6.1.6SQL Developer圖形化管理工具
6.1.7ttBulkCp實用程序
6.2TimesTen數據庫容量監控與規劃
6.2.1數據庫空間監控工具dssize
6.2.2表空間監控工具tablesize
6.2.3表空間規劃工具ttSize
6.2.4表空間監控工具dsmap
6.2.5ttSizeOra容量規劃工具
第5章TimesTen內存數據庫管理工具
5.1SQL Developer圖形化管理工具
SQL Developer是Oracle提供的免費圖形化管理工具,可提高數據庫管理效率并簡化數據庫開發。SQL Developer不僅可以管理Oracle和MySQL數據庫,同時也支持TimesTen數據庫。必須在SQL Developer所在主機上安裝TimesTen客戶端,在界面中才會出現TimesTen數據庫管理菜單和頁面。如圖51所示,如果SQL Developer成功識別到TimesTen客戶端中的驅動,在About Oracle SQL Developer菜單中即可顯示TimesTen插件的信息。SQL Developer既可以安裝在開發管理人員的客戶端主機,也可以安裝在TimesTen服務器端,在TimesTen服務器軟件中,通常已包含了TimesTen客戶端軟件。
圖51SQL Developer關于菜單中TimesTen插件信息
在TimesTen服務器軟件安裝完成后,SQL Developer往往是用戶使用的第一個與TimesTen數據庫交互的軟件,這源于其直觀友好的圖形化界面,以及與管理Oracle數據庫類似的操作習慣。
使用SQL Developer管理TimesTen數據庫的第一步是配置數據庫連接,在4.4.2節詳細介紹了三種連接TimesTen數據庫的配置方法。連接到TimesTen數據庫后,即可操作TimesTen數據庫對象,執行特定的TimesTen數據庫的管理任務。
盡管大部分SQL Developer中的操作都可以通過命令行完成,但圖形化和基于向導的界面使一些任務通過SQL Developer完成更加簡捷,并且是命令行無法替代的。以下為建議使用SQL Developer完成的任務。
1. 緩存組配置和管理
緩存組是TimesTen最重要和獨有的特性之一,詳細的介紹請參見第7章: TimesTen應用層數據庫緩存。由于緩存組配置和屬性組合比較復雜,通過圖形化管理比命令行更直觀,效率更高,且不易出錯。
2. SQL Worksheet
SQL Worksheet又稱SQL工作臺,是圖形化的交互式SQL執行工具。如圖52所示,此界面在連接到數據庫后自動出現,也可以在Tools菜單下打開。在此界面中可以方便地編輯和執行SQL語句,既可以執行整個腳本,也可選擇其中部分語句執行。SQL執行輸出中包括執行狀態和執行耗時。所有執行的SQL語句均保存在SQL歷史中,方便重復調用和修改。
SQL Worksheet中整合了索引建議器功能,另外其可以直觀地顯示SQL執行計劃,方便進行SQL語句的調優。
圖52SQL Developer中的SQL Worksheet
3. 從Oracle數據庫加載數據到TimesTen表對象
可實現Oracle數據到TimesTen的遷移,一般用于數據初始化或性能測試與對比。詳細介紹可參見6.1.6節: SQL Developer圖形化管理工具。
4. 瀏覽和操作數據庫對象
由于TimesTen是標準的關系型數據庫,因此在SQL Developer中大部分的操作與Oracle類似,例如對于最常用的表對象,可以通過SQL標簽頁得到表的定義,或通過Model標簽頁進行數據庫建模。比較重要的區別是TimesTen可以為普通表定義緩存屬性以及整數和變長字符串數據類型的內部實現方式。瀏覽和操作TimesTen數據庫對象如圖53所示。
圖53瀏覽和操作TimesTen數據庫對象
5. 索引建議器
對于TimesTen 11.2.2.4及以上版本,索引建議器支持從連接或數據庫層面評估SQL工作負載,并生成索引建議,這是一個非常有用的性能調優工具,詳細介紹請參見5.7.1節: 索引建議器(Index Advisor)。
6. 數據導入導出
數據導入導出支持在相同或不同數據庫之間導入和導出數據庫對象或對象中數據,可實現數據庫間數據遷移和數據邏輯備份。在SQL Developer中有多處可實現數據導入導出,包括View菜單下的收藏車(Cart),Tools菜單下的數據庫導出向導和數據庫遷移向導等,詳細介紹請參見6.1.6節: SQL Developer圖形化管理工具。
7. TimesTen性能分析報告
TimesTen 11.2.2.5及以上版本支持生成性能分析報告,此功能類似Oracle數據庫的AWR報告,通過建立兩個時間點的性能快照并比較,從而生成涉及事務、SQL、鎖、緩存組及復制等方面的性能分析報告。通過右鍵單擊TimesTen數據庫連接,選擇TimesTen Performance Metrics菜單即可使用此功能。
以下為生成性能分析報告的簡要步驟,生成報告如圖54所示。
(1) 為執行性能分析報告的用戶賦權。
由于性能分析報告通過調用TT_STATS PL/SQL包實現,因此必須對用戶賦予此PL/SQL包的權限:
Command>grant all on TT_STATS to ttuser。
(2) 通過Create Snapshot...子菜單創建第一個時間點性能快照。
(3) 運行工作負載。
(4) 通過Create Snapshot...子菜單創建第二個時間點性能快照。
(5) 在Report子菜單中選擇兩個快照并生成報告。
圖54SQL Developer中的性能分析報告
8. TimesTen預定義和自定義報告
在SQL Developer中的Reports頁面,包含了大量數據庫和對象層面預定義報告,包括數據字典報告、數據庫及對象報告、緩存組報告和性能及安全報告等,對于了解TimesTen數據庫的整體結構和概貌非常有用。用戶也可以通過SQL腳本生成自定義報告,例如,圖55是使用4.6.2節中SQL腳本生成的索引報告。
圖55TimesTen預定義和自定義報表
總之,SQL Developer功能豐富強大,是管理TimesTen數據庫不可或缺的工具,以上只簡要介紹其中比較重要的功能,更詳細的說明參見Oracle SQL DeveloperTimesTen數據庫支持用戶手冊https://docs.oracle.com/cd/E39885_01/doc.40/e39882.pdf。
5.2交互式SQL工具ttIsql
ttIsql是TimesTen提供的交互式SQL工具,類似于Oracle數據庫的SQL*Plus或Sybase數據庫的Isql。通過ttIsql,不僅可以執行標準的SQL命令,還可以執行TimesTen內置過程來執行數據庫的管理、運維和監控任務。ttIsql可以完成的典型任務包括:
(1) 執行SQL和PL/SQL,包括DDL、DML語句和過程及函數。利用DDL語句創建表、索引、存儲過程和序列對象,后續修改表的定義等。利用DML語句執行事務,對表中的數據進行增刪改查等操作。ttIsql同時對標準SQL進行了擴展,包括設置透傳模式,從Oracle數據庫中遷移數據等。
(2) 執行內置過程,進行數據庫的管理和維護,包括數據庫進程監控、數據庫空間監控、緩存管理和監控、復制管理和監控、更新表的統計信息、優化查詢計劃。
ttIsql有兩個編譯版本,其中ttIsql使用直連驅動,適用于ttIsql程序與數據庫位于同一主機的情形。如果數據庫位于遠端服務器,則必須使用客戶端驅動的ttIsqlCS訪問。
5.2.1ttIsql命令行選項
通過ttIsql h可以顯示ttIsql幫助以及ttIsql所支持的命令行選項,例如:
……