出版時間:2009-5 出版社:清華大學(xué) 作者:牛新莊 頁數(shù):653
Tag標簽:無
內(nèi)容概要
《循序漸進DB2:DBA系統(tǒng)管理、運維與應(yīng)用案例》DB2數(shù)據(jù)庫是IBM公司關(guān)系型數(shù)據(jù)庫核心產(chǎn)品,在國內(nèi)以及全球有著廣泛的應(yīng)用。針對DB2初學(xué)者,本書循序漸進地把DB2所涉及的眾多概念介紹給大家??蛻舳诉B通性、實例、數(shù)據(jù)庫、表空間和緩沖池、數(shù)據(jù)移動、備份恢復(fù)、故障診斷、鎖與并發(fā),以及數(shù)據(jù)庫安全都是本書關(guān)注的重點。在介紹這些DB2對象和概念的同時,作者盡可能從DBA日常工作的角度探究DB2數(shù)據(jù)庫常規(guī)維護工作。本書同時還就表、索引、序列、觸發(fā)器等數(shù)據(jù)庫對象從應(yīng)用設(shè)計的角度進行了介紹。本書適合DB2的初學(xué)者、DB2開發(fā)人員、準備參加DB2認證考試的讀者以及DB2數(shù)據(jù)庫管理人員學(xué)習(xí)和閱讀。
作者簡介
牛新莊博士(數(shù)據(jù)庫維護、優(yōu)化和架構(gòu)專家)擁有DB2 V5、V6、V7、V8和V9全部認證,同時他還擁有OCP、AIX、HP-UX、MQ、TSM和WebSphere等20多項國際認證?! ∨P虑f博士是IBM官方資深培訓(xùn)講師(培訓(xùn)DB2、AIX、MQ、WebSphere、TSM和CICS),是中信銀行、山東農(nóng)信、青島海爾等公司的資深技術(shù)顧問,曾經(jīng)幫助工農(nóng)商建招交六大行、聯(lián)想集團、青島海爾、云南紅塔、江蘇電力公司等國內(nèi)很多企業(yè)做過問題診斷、性能調(diào)優(yōu)和技術(shù)支持,具有豐富的理論和實踐結(jié)合經(jīng)驗。2004年和2005年分別在上海北京成立咨詢顧問公司,2008年以年薪217萬被中國建設(shè)銀行總行外聘為資深技術(shù)專家。 牛新莊博士擁有的獎項有:國內(nèi)數(shù)據(jù)庫領(lǐng)域最高榮譽的“2006年中國首屆杰出數(shù)據(jù)庫工程師”獎,首屆IBM杰出軟件專家獎,“2006年IT 168技術(shù)卓越”獎。
書籍目錄
第1章 DB2安裝配置 11.1 DB2數(shù)據(jù)庫概述 11.1.1 DB2發(fā)展歷史 11.1.2 DB2版本和平臺支持 71.1.3 DB2產(chǎn)品組件和功能 101.2 DB2數(shù)據(jù)庫安裝配置 131.2.1 DB2在Windows上的安裝 141.2.2 DB2在Linux/UNIX上的安裝 211.3 DB2數(shù)據(jù)庫體系結(jié)構(gòu) 23第2章 創(chuàng)建實例和管理服務(wù)器 312.1 實例 312.1.1 實例概念 312.1.2 創(chuàng)建實例 322.1.3 實例目錄 352.1.4 實例相關(guān)命令 392.1.5 DB2INSTANCE變量介紹 432.1.6 刪除實例 442.1.7 配置實例 452.2 管理服務(wù)器 452.2.1 管理服務(wù)器概念 452.2.2 創(chuàng)建管理服務(wù)器 472.2.3 管理服務(wù)器相關(guān)命令 482.2.4 刪除DB2管理服務(wù)器 492.2.5 配置管理服務(wù)器 49第3章 創(chuàng)建數(shù)據(jù)庫和表空間 513.1 創(chuàng)建數(shù)據(jù)庫 513.1.1 DB2數(shù)據(jù)庫存儲模型 533.1.2 表空間管理類型 553.1.3 創(chuàng)建數(shù)據(jù)庫 583.1.4 數(shù)據(jù)庫目錄 703.2 表空間設(shè)計 733.2.1 創(chuàng)建表空間 733.2.2 表空間維護 763.2.3 表空間設(shè)計注意事項 833.2.4 prefechsize大小選擇 893.2.5 文件系統(tǒng)(CIO/DIO)和裸設(shè)備 903.2.6 OVERHEAD和TRANSFERRATE設(shè)置 933.2.7 優(yōu)化RAID設(shè)備上表空間性能 933.2.8 合理設(shè)置系統(tǒng)臨時表空間 953.3 緩沖池 963.3.1 緩沖池的使用方法 973.3.2 緩沖池和表空間之間關(guān)系 973.3.3 緩沖池維護 983.3.4 緩沖池設(shè)計原則 1013.4 本章小結(jié) 104第4章 訪問數(shù)據(jù)庫 1054.1 訪問DB2 1054.2 DB2圖形化操作環(huán)境 1064.3 DB2 CLP處理程序 1154.3.1 DB2 CLP簡介 1154.3.2 DB2 CLP設(shè)計 1154.3.3 DB2 CLP命令選項 1174.3.4 設(shè)置DB2_CLPPROMPT定制DB2 CLP 1214.4 配置DB2服務(wù)器的TCP/IP通信 1264.4.1 在服務(wù)器上更新services文件 1274.4.2 在服務(wù)器上更新數(shù)據(jù)庫管理器配置文件 1274.4.3 設(shè)置DB2服務(wù)器的通信協(xié)議 1284.4.4 查看服務(wù)器通信端口狀態(tài) 1284.4.5 使用控制中心配置DB2服務(wù)器通信 1294.5 配置客戶機至服務(wù)器通信 1304.5.1 客戶機至服務(wù)器通信概述 1304.5.2 使用控制中心配置客戶端通信 1304.5.3 使用CA配置客戶機到服務(wù)器通信 1314.5.4 深入了解DB2節(jié)點目錄、數(shù)據(jù)庫目錄 1374.5.5 使用CLP配置客戶機到服務(wù)器通信案例 1434.6 本章小結(jié) 147第5章 創(chuàng)建數(shù)據(jù)庫對象 1495.1 模式 1495.1.1 模式概念 1495.1.2 系統(tǒng)模式 1515.1.3 設(shè)置和獲得當前模式 1515.1.4 模式和用戶的區(qū)別 1525.2 表設(shè)計考慮 1535.2.1 選擇合適的數(shù)據(jù)類型 1535.2.2 選擇合適的約束類型 1565.2.3 使用not null with default 1595.2.4 生成列及應(yīng)用案例 1595.2.5 自動編號和標識列應(yīng)用案例 1605.2.6 使用not logged initially特性 1615.2.7 使用append on特性 1625.2.8 數(shù)據(jù)、索引和大對象分開存放 1625.2.9 設(shè)置pctfree 1635.2.10 表的locksize 1635.2.11 表的volatile特性 1635.2.12 創(chuàng)建帶XML列的表 1645.2.13 表維護相關(guān)命令 1655.2.14 表設(shè)計高級選項 1695.3 索引設(shè)計 1735.3.1 索引優(yōu)點 1735.3.2 索引類型 1745.3.3 索引結(jié)構(gòu) 1775.3.4 理解索引訪問機制 1805.3.5 創(chuàng)建集群索引 1825.3.6 創(chuàng)建雙向索引 1835.3.7 完全索引訪問(index access only) 1845.3.8 創(chuàng)建索引示例 1855.3.9 索引總結(jié) 1915.4 使用序列提高性能 1945.4.1 應(yīng)用程序性能和序列 1945.4.2 設(shè)計序列原則 1955.4.3 序列維護 1965.4.4 比較序列與標識列 2005.5 視圖 2025.5.1 視圖類型 2025.5.2 創(chuàng)建with check option視圖 2065.5.3 視圖維護 2075.6 表表達式 2085.6.1 嵌套的表表達式 2085.6.2 公用表表達式 2095.7 觸發(fā)器設(shè)計 2105.7.1 觸發(fā)器的類型 2105.7.2 創(chuàng)建觸發(fā)器示例 2125.7.3 觸發(fā)器設(shè)計總結(jié) 2145.8 本章小結(jié) 216第6章 數(shù)據(jù)移動 2176.1 數(shù)據(jù)移動格式 2176.1.1 定界ASCII文件格式 2186.1.2 非定界ASCII文件格式 2186.1.3 PC/IXF文件格式 2196.1.4 工作表文件格式 2196.1.5 游標 2196.2 EXPORT 2206.2.1 EXPORT概述 2206.2.2 導(dǎo)出數(shù)據(jù) 2206.2.3 導(dǎo)出數(shù)據(jù)示例 2236.3 IMPORT 2246.3.1 IMPORT概述 2246.3.2 導(dǎo)入數(shù)據(jù) 2246.3.3 導(dǎo)入數(shù)據(jù)示例 2296.4 LOAD 2316.4.1 LOAD概述 2316.4.2 裝入數(shù)據(jù) 2326.4.3 裝入示例 2406.4.4 在線LOAD 2446.4.5 監(jiān)控LOAD進度 2476.4.6 LOAD期間和之后的表空間狀態(tài) 2486.4.7 使用CURSOR文件類型來移動數(shù)據(jù) 2526.4.8 提高LOAD性能 2536.4.9 LOAD失敗恢復(fù) 2586.4.10 LOAD和IMPORT比較 2606.5 數(shù)據(jù)移動性能問題 2626.6 DB2MOVE和DB2LOOK 2636.6.1 數(shù)據(jù)庫移動工具—— DB2MOVE 2636.6.2 DB2 DDL提取工具(DB2LOOK) 2656.6.3 利用DB2MOVE和DB2LOOK移動數(shù)據(jù)案例 2666.6.4 帶COPY操作的DB2MOVE實用程序 2696.7 本章小結(jié) 275第7章 數(shù)據(jù)庫備份與恢復(fù) 2777.1 恢復(fù)概念 2777.1.1 崩潰恢復(fù) 2817.1.2 災(zāi)難恢復(fù) 2827.1.3 版本恢復(fù) 2827.1.4 前滾恢復(fù) 2837.2 DB2日志 2857.2.1 日志文件的使用 2857.2.2 日志類型 2877.2.3 日志相關(guān)配置參數(shù) 2907.2.4 數(shù)據(jù)庫日志總結(jié) 2917.3 數(shù)據(jù)庫和表空間備份 2937.3.1 數(shù)據(jù)庫備份 2937.3.2 表空間備份 2957.3.3 增量備份 2957.3.4 檢查備份完整性—— db2ckbkp 2987.4 數(shù)據(jù)庫和表空間恢復(fù) 3007.4.1 數(shù)據(jù)庫恢復(fù) 3007.4.2 表空間恢復(fù) 3027.4.3 增量恢復(fù) 3037.4.4 增量恢復(fù)檢查—— db2ckrst 3047.4.5 重定向恢復(fù) 3057.4.6 恢復(fù)已drop的表 3097.5 數(shù)據(jù)庫和表空間前滾 3127.5.1 數(shù)據(jù)庫前滾 3127.5.2 表空間前滾 3147.6 RECOVER實用程序 3177.7 恢復(fù)歷史文件 3217.8 數(shù)據(jù)庫重建 3247.8.1 數(shù)據(jù)庫重建概念 3247.8.2 使用表空間備份重建可恢復(fù)數(shù)據(jù)庫 3247.8.3 只使用部分表空間備份重建可恢復(fù)數(shù)據(jù)庫 3277.8.4 使用包含日志文件的在線備份重建數(shù)據(jù)庫 3297.8.5 使用增量備份鏡像重建可恢復(fù)數(shù)據(jù)庫 3307.8.6 使用重定向選項重建可恢復(fù)數(shù)據(jù)庫 3307.8.7 重建不可恢復(fù)數(shù)據(jù)庫 3317.8.8 數(shù)據(jù)庫重建的限制 3317.9 監(jiān)控備份、復(fù)原和恢復(fù)進度 3327.10 備份、恢復(fù)和復(fù)原期間表空間狀態(tài) 3337.11 優(yōu)化備份、復(fù)原和恢復(fù)性能 3337.12 備份恢復(fù)最佳實踐 335第8章 DB2故障診斷 3378.1 DB2故障診斷機制 3378.1.1 故障診斷相關(guān)文件 3378.1.2 收集故障診斷信息 3428.1.3 設(shè)置故障診斷級別 3438.2 深入講解故障診斷文件 3458.2.1 解釋管理通知日志文件條目 3458.2.2 解釋診斷日志文件條目 3468.3 故障診斷工具 3498.3.1 使用db2support收集環(huán)境信息 3498.3.2 db2ls和db2level 3508.3.3 使用db2diag分析db2diag.log文件 3518.3.4 db2pd 3548.3.5 DB2內(nèi)部返回碼 3558.4 故障診斷分析流程 3568.4.1 故障診斷流程 3568.4.2 結(jié)合系統(tǒng)事件判斷 3598.4.3 結(jié)合系統(tǒng)運行狀況診斷 3608.5 本章小結(jié) 361第9章 DB2性能監(jiān)控 3639.1 監(jiān)控工具概述 3639.2 快照監(jiān)視器 3659.2.1 快照監(jiān)視器概述 3659.2.2 利用表函數(shù)監(jiān)控 3709.2.3 性能管理視圖 3739.3 快照監(jiān)視器案例 3749.3.1 監(jiān)控案例1—動態(tài)SQL語句 3749.3.2 監(jiān)控案例2—通過表函數(shù)監(jiān)控 3769.3.3 編寫快照監(jiān)控腳本 3789.4 db2pd及監(jiān)控案例 3809.5 事件監(jiān)視器及監(jiān)控案例 3909.6 db2mtrk及監(jiān)控案例 3959.7 活動監(jiān)視器 3979.8 DB2性能監(jiān)控總結(jié) 398第10章 鎖和并發(fā) 39910.1 鎖的概念 39910.1.1 數(shù)據(jù)一致性 39910.1.2 事務(wù)和事務(wù)邊界 40010.1.3 鎖的概念 40210.2 鎖的屬性、策略及模式 40710.2.1 鎖的屬性 40710.2.2 加鎖策略 40710.2.3 鎖的模式 40810.2.4 如何獲取鎖 41010.2.5 鎖的兼容性 41210.3 隔離級別(Isolation Levels) 41310.3.1 可重復(fù)讀(RR—Repeatable Read) 41310.3.2 讀穩(wěn)定性(RS—Read Stability) 41410.3.3 游標穩(wěn)定性(CS—Cursor Stability) 41610.3.4 未提交讀(UR—Uncommitted Read) 41710.3.5 隔離級別的摘要 41910.4 鎖轉(zhuǎn)換、鎖等待、鎖升級和死鎖 42110.4.1 鎖轉(zhuǎn)換及調(diào)整案例 42110.4.2 鎖升級及調(diào)整案例 42310.4.3 鎖等待及調(diào)整案例 42610.4.4 死鎖及調(diào)整案例 42910.5 鎖相關(guān)的性能問題總結(jié) 43210.6 鎖與應(yīng)用程序設(shè)計 43410.7 鎖監(jiān)控工具 43710.8 最大化并發(fā)性 44110.8.1 選擇合適的隔離級別 44110.8.2 盡量避免鎖等待、鎖升級和死鎖 44210.8.3 設(shè)置合理的注冊變量 44210.9 鎖和并發(fā)總結(jié) 450第11章 數(shù)據(jù)庫運行維護 45111.1 統(tǒng)計信息更新 45111.1.1 統(tǒng)計信息的重要性 45111.1.2 使用RUNSTATS 收集統(tǒng)計信息的原則 45511.1.3 減小RUNSTATS對系統(tǒng)性能影響的策略 45711.1.4 DB2自動統(tǒng)計信息收集 45811.2 Runstats更新舉例 46111.2.1 RUNSTATS更新示例 46111.2.2 收集分布式統(tǒng)計信息 46211.2.3 包含頻率和分位數(shù)統(tǒng)計信息的RUNSTATS 46311.2.4 包含列組統(tǒng)計信息的RUNSTATS 46511.2.5 包含LIKE STATISTICS的RUNSTATS 46511.2.6 包含統(tǒng)計信息配置文件的RUNSTATS 46611.2.7 帶有抽樣的RUNSTATS 46711.2.8 帶有系統(tǒng)頁級抽樣的RUNSTATS 46711.2.9 收集統(tǒng)計信息的其他可供選擇的方法 46811.2.10 RUNSTATS總結(jié) 46911.3 表和索引碎片整理 47011.3.1 表重組(REORG) 47011.3.2 索引重組 47811.3.3 確定何時重組表和索引 48011.3.4 重組表和索引的成本 48411.3.5 合理設(shè)計以減少碎片生成 48511.3.6 啟用表和索引的自動重組 48611.4 碎片整理案例 48711.4.1 執(zhí)行表、索引檢查是否需要做REORG 48711.4.2 表和索引碎片整理 48811.5 案例:生成碎片檢查、統(tǒng)計信息更新、碎片整理和REBIND腳本 48911.6 重新綁定程序包 49011.7 數(shù)據(jù)庫運行維護總結(jié) 491第12章 數(shù)據(jù)庫常用工具 49312.1 解釋工具 49312.1.1 Visual Explain(可視化解釋) 49312.1.2 db2expln 50112.1.3 db2exfmt 50312.1.4 各種解釋工具比較 50512.1.5 如何從解釋信息中獲取有價值的建議 50512.2 索引設(shè)計工具(db2advis) 50612.2.1 DB2 Design Advisor(db2advis) 50612.2.2 DB2 Design Advisor(db2advis)案例講解 50812.3 基準測試工具db2batch 51012.3.1 db2batch 51012.3.2 db2batch基準程序測試分析示例 51212.4 數(shù)據(jù)一致性檢查工具 51312.4.1 db2dart及案例 51312.4.2 inspect及案例 51412.5 db2look 51612.5.1 db2look概述 51612.5.2 利用db2look構(gòu)建模擬測試數(shù)據(jù)庫 51712.6 其他工具 51912.6.1 db2bfd 51912.6.2 db2_kill和db2nkill 52012.6.3 db2tbst 52112.7 本章小結(jié) 521第13章 數(shù)據(jù)庫安全 52313.1 DB2安全機制概述 52413.2 認證(authentication) 52713.2.1 什么時候進行DB2身份認證 52713.2.2 DB2身份認證類型 52813.3 權(quán)限(authorization) 53513.3.1 權(quán)限層次 53513.3.2 授予/撤銷實例級權(quán)限 53913.3.3 授予/撤銷數(shù)據(jù)庫級權(quán)限 54213.4 特權(quán) 54313.4.1 特權(quán)層次結(jié)構(gòu) 54313.4.2 授予特權(quán) 54713.4.3 撤銷特權(quán) 54913.4.4 顯式特權(quán)/隱式特權(quán)/間接特權(quán) 55113.4.5 靜態(tài)和動態(tài)SQL特權(quán)考慮因素 55513.4.6 維護特權(quán)/權(quán)限 55713.5 某銀行安全規(guī)劃案例 56013.6 執(zhí)行安全審計(db2audit) 56213.7 基于標簽的訪問控制(LBAC)及案例 56613.8 本章小結(jié) 573第14章 DBA日常維護 57514.1 DB2健康檢查 57514.1.1 查看是否有僵尸實例進程 57514.1.2 inspect數(shù)據(jù)庫是否一致 57614.1.3 查找診斷日志判斷是否有異常 57614.1.4 檢查數(shù)據(jù)庫備份完整性、日志歸檔是否正常 57714.1.5 維護實例目錄和數(shù)據(jù)庫目錄權(quán)限 57914.1.6 查看磁盤空間 57914.2 數(shù)據(jù)庫監(jiān)控 58014.2.1 監(jiān)控工具 58114.2.2 監(jiān)控緩沖池命中率 58214.2.3 監(jiān)控執(zhí)行成本最高的SQL語句 58214.2.4 監(jiān)控運行最長的SQL語句 58214.2.5 監(jiān)控SQL準備和預(yù)編譯時間最長的SQL語句 58314.2.6 監(jiān)控執(zhí)行次數(shù)最多的SQL語句 58314.2.7 監(jiān)控排序次數(shù)最多的SQL語句 58414.2.8 監(jiān)控引起鎖等待的SQL語句 58414.3 日常維護 58414.3.1 查找創(chuàng)建的新對象 58414.3.2 查找無效對象 58514.3.3 檢查表空間狀態(tài) 58514.3.4 檢查表狀態(tài) 58514.3.5 查找需要REORG的表和索引 58514.3.6 查找需要RUNSTATS的表和索引 58614.3.7 定期清理db2diag.log文件 58714.3.8 查找異常增長的表空間和表 587第15章 DB2常見問題總結(jié) 58915.1 實例常見問題和診斷案例 58915.1.1 實例無法啟動問題總結(jié) 58915.1.2 實例無法正常終止 59015.1.3 實例啟動報SQL1042C錯誤 59015.1.4 實例目錄誤刪除 59115.1.5 實例崩潰問題 59215.2 數(shù)據(jù)庫常見問題總結(jié) 59215.2.1 數(shù)據(jù)庫日志空間滿—— SQL0964C錯誤 59215.2.2 數(shù)據(jù)庫時區(qū)和時間 59415.2.3 中文亂碼和代碼頁轉(zhuǎn)換 59415.2.4 通信錯誤—— SQL30081N 59715.2.5 數(shù)據(jù)庫備份、前滾暫掛 59715.2.6 數(shù)據(jù)庫活動日志刪除 59815.2.7 數(shù)據(jù)庫損壞(數(shù)據(jù)頁、索引頁)—— SQL1043C 59815.2.8 索引重新構(gòu)建問題 60015.2.9 DB2實用程序不可用 60115.2.10 快速清空表數(shù)據(jù) 60115.2.11 表和索引統(tǒng)計信息不一致 60215.3 表空間狀態(tài) 60315.3.1 Backup Pending 60415.3.2 脫機 60415.3.3 Quiesced Exclusive|Share|Update 60515.3.4 Restore Pending和Storage Must be Defined 60515.3.5 Roll Forward Pending 60615.3.6 表空間狀態(tài)總結(jié) 60615.4 LOAD期間表狀態(tài)總結(jié) 60715.4.1 Check Pending 60715.4.2 Load Pending 60815.4.3 Load in Progress 60815.4.4 Not Load Restartable 60915.4.5 Read Access Only 60915.4.6 Unavailable 61015.5 鎖相關(guān)問題 61115.5.1 鎖升級 61115.5.2 鎖等待問題解決流程 61115.5.3 死鎖 61115.6 內(nèi)存常見問題 61215.6.1 bufferpool設(shè)置過大數(shù)據(jù)庫無法啟動 61215.6.2 排序溢出 61215.6.3 鎖內(nèi)存不足 61215.7 備份恢復(fù)常見問題 61315.8 數(shù)據(jù)移動常見問題總結(jié) 61315.8.1 標識列 61415.8.2 生成列 61715.8.3 大對象 62115.8.4 空值處理 62215.8.5 定界符注意問題 62515.8.6 PC/IXF注意問題 62815.8.7 代碼頁不同注意事項 63015.8.8 日期格式 63115.8.9 XML問題 63315.9 安全常見問題總結(jié) 63515.9.1 從PUBLIC撤銷隱式的權(quán)限和特權(quán) 63615.9.2 保護系統(tǒng)編目視圖 63815.9.3 創(chuàng)建實例用戶顯式指定組 63915.9.4 為SYSxxx_GROUP參數(shù)使用顯式值 64015.9.5 跟蹤隱式的特權(quán) 64015.9.6 不授予不必要的特權(quán) 64215.9.7 使用加密的AUTHENTICATION模式 64215.9.8 使用獨立ID創(chuàng)建和擁有對象 64415.9.9 使用視圖控制數(shù)據(jù)訪問 64515.9.10 使用存儲過程控制數(shù)據(jù)訪問 64615.9.11 使用LBAC控制數(shù)據(jù)訪問 64715.9.12 對重要敏感數(shù)據(jù)加密 64815.10 SQL0805和SQL0818錯誤 650
章節(jié)摘錄
創(chuàng)建數(shù)據(jù)庫對象 在數(shù)據(jù)庫創(chuàng)建后,我們可以根據(jù)我們的業(yè)務(wù)需求來設(shè)計和創(chuàng)建數(shù)據(jù)庫對象了??梢栽贒B2數(shù)據(jù)庫中創(chuàng)建下列數(shù)據(jù)庫對象: ● 模式 ● 表 ● 索引 ● 序列 ● 視圖 ● 觸發(fā)器 我們可以使用圖形用戶界面或通過顯式執(zhí)行SQL語句來創(chuàng)建這些數(shù)據(jù)庫對象。用于創(chuàng)建這些數(shù)據(jù)庫對象的語句稱為“數(shù)據(jù)定義語言(DDL)”,它們通常以關(guān)鍵字CREATE或ALTER作為前綴?! ?.1 模式 5.1.1 模式概念 數(shù)據(jù)庫中的大多數(shù)對象指定一個由兩部分組成的唯一名稱,如圖5-1所示。第一部分(最左邊的)稱為限定詞或模式,而第二部分(最右邊的)稱為簡單(或未限定)名稱。從句法上來說,這兩部分并置成用句點分隔的單個字符串。第一次創(chuàng)建可以由模式名限定的任何對象(例如表、索引、視圖、用戶定義的數(shù)據(jù)類型、用戶定義的函數(shù)、昵稱、程序包或觸發(fā)器)時,會根據(jù)對象名稱中的限定詞將該對象指定給一個特定模式。 圖5-1 數(shù)據(jù)庫對象名的組成 例如,圖5-2說明在創(chuàng)建表的過程中如何將該表指定給一個特定模式?! B2中的模式(schema)是一個已命名對象的集合,它提供一種方法來按邏輯分組這些對象。這些對象包括表、視圖、索引、觸發(fā)器、函數(shù)和包。模式提供了數(shù)據(jù)庫中對象的邏輯類別。模式也是名稱限定詞;它提供一種方法來對幾個對象使用相同名稱,并防止對這些對象進行二義性引用。例如,使用模式名“PROD”和“DEV”很容易區(qū)分兩個不同的SALES表(PROD.SALES和DEV.SALES)。模式名的最大長度為30字節(jié),它用作分兩部分的對象名的第一部分。例如,名稱 CITIC.CUSTOMER。在這個示例中,CUSTOMER表的完全限定名包含模式名:CITIC,這可以在系統(tǒng)編目中將它與其他名為CUSTOMER的表區(qū)分開。可以把模式想象為特定對象的創(chuàng)建者、生成者和主人。 圖5-2 創(chuàng)建表并將其指定給一個特定格式 如果創(chuàng)建對象而沒有指定模式,那么對象使用您的用戶名與一個隱式模式相關(guān)聯(lián)(假設(shè)用戶或組具有IMPLICIT_SCHEMA數(shù)據(jù)庫權(quán)限,IMPLICIT_SCHEMA權(quán)限簡單來說就是假設(shè)一個用戶創(chuàng)建一個對象的時候沒有使用模式,那么數(shù)據(jù)庫就隱含地創(chuàng)建一個和用戶名一樣的模式,關(guān)于這個權(quán)限在13章中有詳細講解)。當SQL語句引用對象時,如果沒有指定模式名,那么也會隱式地加上調(diào)用者的用戶名?! ?.1.2 系統(tǒng)模式 對于每個數(shù)據(jù)庫,都創(chuàng)建和維護一組系統(tǒng)編目表。這些表包含關(guān)于數(shù)據(jù)庫對象(例如表、視圖、索引和包)的定義的信息以及關(guān)于用戶對這些對象的訪問類型的安全信息。這些表存儲在SYSCATSPACE表空間中,并采用保留的系統(tǒng)模式名: ● SYSIBM、SYSFUN和SYSPROC:一組例程,包括函數(shù)和存儲過程,其中的SYSIBM 是基本系統(tǒng)編目的模式(不建議直接訪問它)?! 瘛YSCAT:一組只讀的系統(tǒng)編目表視圖,記錄數(shù)據(jù)庫對象的結(jié)構(gòu)信息?! 瘛YSSTAT:一組可更新的編目視圖。這些可更新的視圖允許更新某些統(tǒng)計信息,從而模擬和測試數(shù)據(jù)庫的性能,或者更新統(tǒng)計信息而不使用RUNSTATS實用程序。 ● SYSIBMADM:一組動態(tài)性能視圖,可以從該組視圖中獲取數(shù)據(jù)庫的性能運行信息。在本書“第9章:DB2性能監(jiān)控”中有關(guān)于性能視圖的詳細講解和案例?! ?.1.3 設(shè)置和獲得當前模式 在客戶端連接實例或數(shù)據(jù)庫時,會話的特殊寄存器CURRENT SCHEMA包含默認的限定符,用于對特定DB2連接中發(fā)出的動態(tài)SQL語句所引用的未限定對象進行限定。它的初始值等于特殊寄存器USER中的值(運行時用戶)。靜態(tài)SQL語句(在默認情況下)由綁定應(yīng)用程序的用戶的授權(quán)ID進行限定。用戶可以使用SET CURRENT SCHEMA語句修改特殊寄存器CURRENT SCHEMA的值?! 】梢杂肰ALUES CURRENTSCHEMA或SELECT CURRENT SCHEMA FROM SYSIBM.SYSDUMMY1命令獲得當前的模式名。下面我們看兩個使用模式的示例: 例5-1 用戶= HRUSER01,具有IMPLICIT_SCHEMA權(quán)限?! ∶?結(jié)果 CREATE TABLE TEST1(ID INT, NAME VARCHAR(25)) Table HRUSER01.TEST1 created CREATE TABLE CITIC.TEST1(ID INT, NAME VARCHAR(25)) Table CITIC.TEST1 created SET CURRENT SCHEMA=CITIC CURRENT SCHEMA special register set to CITIC INSERT INTO TEST1 VALUES(1,John Doe) Data inserted into table CITIC.TEST1 例5-2 用戶= HRUSER01,沒有IMPLICIT_SCHEMA權(quán)限?! ∶?結(jié)果 CREATE TABLE TEST1(ID INT, NAME VARCHAR(25)) SQL0552N "HRUSER01" does not have the privilege to perform operation "IMPLICIT CREATE SCHEMA". SQLSTATE=42502 CREATE TABLE HRUSER01.TEST1 (ID INT, NAME VARCHAR(25)) SQL0552N "HRUSER01" does not have the privilege to perform operation "IMPLICIT CREATE SCHEMA". SQLSTATE=42502 CREATE SCHEMA HRUSER01 AUTHORIZATION HRUSER01 Schema HRUSER01 created CREATE TABLE TEST1(ID INT, NAME VARCHAR(25)) Table HRUSER01.TEST1 created 5.1.4 模式和用戶的區(qū)別 我們要把模式和用戶區(qū)分開,默認情況下一個用戶(用戶擁有IMPLICIT_SCHEMA權(quán)限)有一個和它同名的模式,您也可以根據(jù)需要創(chuàng)建模式授權(quán)給某個用戶。模式創(chuàng)建有隱式創(chuàng)建和顯式創(chuàng)建兩種方式?! ‰[式創(chuàng)建 如果您具有IMPLICIT_SCHEMA權(quán)限,那么可以隱式創(chuàng)建模式。只要具有此權(quán)限,無論您何時使用不存在的模式名創(chuàng)建對象,都會隱式創(chuàng)建一個模式。只要創(chuàng)建對象的用戶擁有 IMPLICIT_SCHEMA權(quán)限,通常會在第一次創(chuàng)建模式中的數(shù)據(jù)對象時隱式創(chuàng)建模式?! ★@式創(chuàng)建 使用CREATE SCHEMA語句來創(chuàng)建模式。有關(guān)模式的信息保存在連接的數(shù)據(jù)庫的系統(tǒng)目錄表中。 要創(chuàng)建模式并讓另一個用戶成為該模式的所有者(后一個操作是可選的),您需要 SYSADM或DBADM權(quán)限。即使您不具有這兩種權(quán)限中的任何一種,您也可以使用您自己的授權(quán)標識來創(chuàng)建模式。作為CREATE SCHEMA語句的一部分創(chuàng)建的任何對象的定義者是模式所有者。此所有者可以授予和撤銷其他用戶的模式特權(quán)?! ∫ㄟ^命令行來創(chuàng)建模式,請輸入以下語句: CREATE SCHEMA [ AUTHORIZATION ] 其中是模式的名稱。此名稱在目錄中已記錄的模式內(nèi)必須唯一,并且不能以SYS 開頭。如果指定了可選的AUTHORIZATION子句,那么將成為模式所有者。如果未指定此子句,那么發(fā)出此命令的授權(quán)標識將成為模式所有者?! ±?-3 下面的示例創(chuàng)建了agent模式并且把agent授權(quán)給db2inst1用戶所有?! REATE SCHEMA agent AUTHORIZATION db2inst1 刪除模式 在刪除模式之前,必須刪除該模式中的所有對象或?qū)⑺鼈円浦亮硪粋€模式。當嘗試 DROP語句時,該模式名必須在語句中;否則會返回錯誤?! ∫褂妹钚衼韯h除模式,請輸入: DROP SCHEMA RESTRICT 在以下示例中,刪除了模式“agent”: DROP SCHEMA agent RESTRICT 5.2 表設(shè)計考慮 所有數(shù)據(jù)都存儲在數(shù)據(jù)庫的表中。表由不同數(shù)據(jù)類型的一列或多列組成。數(shù)據(jù)存儲在行(或稱為記錄)中。本節(jié)我不會過多地講CREATE TABLE、ALTER TABLE或DROP TABLE之類的命令。這些命令您可以查SQL參考手冊,本節(jié)主要講一些和表設(shè)計相關(guān)的考慮事項,因為很多時候如果我們在建表的時候沒有注意到這些,一旦系統(tǒng)上線,后期的調(diào)整往往非常麻煩,所以在建表之前,我們要作好規(guī)劃設(shè)計?! ?.2.1 選擇合適的數(shù)據(jù)類型 定義列時,需要對列進行命名,定義這些列中將包含的數(shù)據(jù)的類型(稱為數(shù)據(jù)類型),并定義要創(chuàng)建的表中每列的數(shù)據(jù)長度。DB2提供了一套豐富且靈活的數(shù)據(jù)類型。DB2附帶 INTEGER、CHAR、DATE和大對象等基本數(shù)據(jù)類型。它還提供了創(chuàng)建用戶定義的數(shù)據(jù)類型(UDT)的工具,使用戶能夠創(chuàng)建復(fù)雜的非傳統(tǒng)的數(shù)據(jù)類型,從而適應(yīng)當今復(fù)雜的編程環(huán)境。在給定的情況下,選用哪種數(shù)據(jù)類型取決于列中存儲的信息的類型和范圍?! ?nèi)置的數(shù)據(jù)類型分為5類:數(shù)字、字符串、大對象、日期時間和XML?! ∮脩舳x的數(shù)據(jù)類型分為:單值類型、結(jié)構(gòu)化類型和引用類型(一般不用)?! B2內(nèi)置的數(shù)據(jù)類型如圖5-3所示?! D5-3 DB2內(nèi)置的數(shù)據(jù)類型 其中,XML數(shù)據(jù)類型是DB2 V9以后版本提供的數(shù)據(jù)類型。DB2提供了XML數(shù)據(jù)類型來存儲格式良好的XML文檔。XML數(shù)據(jù)類型用于定義表中存儲XML值的列,這些列中存儲的所有XML值必須是結(jié)構(gòu)良好的XML文檔。引入此本機XML數(shù)據(jù)類型能夠?qū)⒔Y(jié)構(gòu)良好的XML文檔以其本機分層格式存儲在數(shù)據(jù)庫中其他關(guān)系數(shù)據(jù)旁邊。 XML列中的值存儲為與字符串數(shù)據(jù)類型不同的內(nèi)部表示。要在XML數(shù)據(jù)類型的列中存儲XML數(shù)據(jù),需要使用XMLPARSE函數(shù)對數(shù)據(jù)進行轉(zhuǎn)換??梢允褂肵MLSERIALIZE函數(shù)將XML數(shù)據(jù)類型的值轉(zhuǎn)換為XML文檔的串行化字符串值。DB2還提供了許多其他的內(nèi)置函數(shù)來操縱XML數(shù)據(jù)類型?! ∥覀冊趧?chuàng)建表時為列選擇數(shù)據(jù)類型時一定要注意下面幾點: ● 要根據(jù)業(yè)務(wù)需求選擇合適的數(shù)據(jù)類型,避免出現(xiàn)數(shù)據(jù)類型轉(zhuǎn)換。例如,我曾經(jīng)看到有的客戶使用字符來存放日期、時間戳,最后我們還要在程序中使用日期轉(zhuǎn)換函數(shù)to_date作數(shù)據(jù)類型轉(zhuǎn)換,這會對應(yīng)用程序帶來性能影響?! 瘛「鶕?jù)需求選擇合適的長度。例如,用一個字段empno來存儲員工號,用SMALL INT就可以滿足,但是如果我們用INT就會造成兩個字節(jié)的浪費?! 瘛∪绻硞€字段的內(nèi)容都是數(shù)字,建議大家選用整數(shù)而不要選用CHAR。一個占用4字節(jié)的INT類型字段就可以表達到4294967295,如果使用CHAR型則至少需要10個字節(jié)。一個占用8字節(jié)LONG INT類型字段就可以表達到18446744073709551615,如果使用CHAR型至少需要20個字節(jié)?! 瘛HAR和VARCHAR的選擇,如果一列的數(shù)據(jù)有變化,但是變化不大時,而我們又追求性能,建議使用CHAR類型,因為VARCHAR的讀取性能要分兩個步驟,先讀長度再讀數(shù)據(jù)比CHAR的性能要弱些?! 瘛ONG VARCHAR、BLOB、CLOB和CBLOB數(shù)據(jù)類型的選擇,這些大對象數(shù)據(jù)類型的讀取是不經(jīng)過內(nèi)存而直接讀取的,所以可根據(jù)情況看是否能夠用VARCHAR字段代替?! 瘛∪绻褂么髮ο髷?shù)據(jù)類型,考慮是否對該大對象列記錄日志NOT LOGGED。 ● 考慮把大對象數(shù)據(jù)列單獨存放在獨立的表空間,和索引數(shù)據(jù)分隔存放?! ∠旅孀屛覀兛纯戳性诖疟P上是如何布局的。如果您創(chuàng)建了一個只有定長列的表,將嚴格按照 CREATE語句中指定的順序安排它們,如圖5-4所示?! REATE TABLE TESTORD(COL1 INT, COL2 CHAR(5), COL3 DEC(10,2), COL4 FLOAT) 圖5-4 定長列的表在磁盤上布局 如果表擁有變長列(如VARCHAR),列仍然按照CREATE TABLE語句中指定的順序排序,但可變數(shù)據(jù)本身在行的末尾,如圖5-5所示。 CREATE TABLE TESTORD(COL1 INT, COL2 VARCHAR(5), COL3 DEC(10,2)) 圖5-5 擁有變長列的表在磁盤上的布局 如果表有長字段,它將不隨每行直接插入。因為行的長度受頁大小限制(4KB到32KB),所以行只有一個指向長字段的指針,而將長字段與行分開放置在數(shù)據(jù)庫頁中,如圖5-6所示?! REATE TABLE TESTORD(COL1 INT, COL2 CLOB(100 K), COL3 DEC(10,2)) 圖5-6 擁有長字段的表在磁盤上的布局 5.2.2 選擇合適的約束類型 在任何業(yè)務(wù)中,數(shù)據(jù)通常必須符合特定限制或業(yè)務(wù)規(guī)則。例如,職員編號、銀行支票號必須是唯一的。數(shù)據(jù)庫管理器提供了約束作為強制實施這種規(guī)則的方法。約束是用于業(yè)務(wù)需求的規(guī)則。DB2提供了下列5種類型的約束: NOT NULL約束 NOT NULL約束防止在列中輸入空值。NOT NULL約束是這樣一種規(guī)則,它防止在表的一列或多列中輸入空值。數(shù)據(jù)庫中使用空值來表示未知狀態(tài)。默認情況下,隨數(shù)據(jù)庫管理器一起提供的所有內(nèi)置數(shù)據(jù)類型都支持空值的存在。但是,一些業(yè)務(wù)規(guī)則可能要求必須始終提供值(例如,乘飛機時必須提供緊急聯(lián)系人信息)。NOT NULL約束用于確保決不會為給定表列指定空值。為特定列定義NOT NULL約束后,嘗試在該列中放入空值的任何插入或更新操作將失敗?! ∥ㄒ患s束 唯一約束確保一組列中的值對于表中的所有行都是唯一的,且不為空。在唯一約束中指定的列必須定義為NOT NULL。唯一約束(也稱為唯一鍵約束)是這樣一種規(guī)則,它禁止表的一列或多列中出現(xiàn)重復(fù)值。唯一鍵和主鍵是受支持的唯一約束。例如,可對供應(yīng)商表中的供應(yīng)商標識定義唯一約束以確保不會對兩個供應(yīng)商指定同一供應(yīng)商標識。唯一約束確保一組列中的值對于表中的所有行都是唯一的,且不為空。在唯一約束中指定的列必須定義為NOT NULL。數(shù)據(jù)庫管理器使用唯一索引在對唯一約束的各列進行更改時強制鍵的唯一性。例如,DEPARTMENT表中的典型唯一約束可以是:部門號是唯一的,且不為空?! D5-7顯示了當表存在唯一約束時,阻止將重復(fù)的記錄添加到該表?! ?shù)據(jù)庫管理器在插入和更新操作期間強制執(zhí)行此約束,以確保數(shù)據(jù)完整性。表可以有任意數(shù)目的唯一約束,但最多將一個唯一約束定義為主鍵。對于同一組列,表不能有多個唯一約束。
編輯推薦
本書主要特色: ◆ 本書有豐富的DB2運行維護實踐案例,讀者可以通過這些案例加深對DB2認識和理解。 ◆ 面對眾多DB2的特點、特性,作者精心選擇了與DBA日常工作關(guān)系最密切的部分,由易入難逐步講解?! ?本書中包含了大量的提示點等,這些都是作者對DB2維護工作總結(jié)后得到的經(jīng)驗?! ?本書總結(jié)了DB2常見問題總結(jié)和解決方法,對DBA的日常維護非常有參考價值?! ∽x者對象 數(shù)據(jù)庫管理人員、數(shù)據(jù)庫開發(fā)人員、系統(tǒng)維護人員、數(shù)據(jù)庫初學(xué)者及其他數(shù)據(jù)庫從業(yè)人員,也可以作為各大中專院校相關(guān)專業(yè)師生的參考用書和相培訓(xùn)機構(gòu)的培訓(xùn)教材。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載