db2資料庫基礎知識
1,db2資料庫特點
(1)具有很好的並行性(DB2把資料庫管理擴充到了並行的,多節點的環境;資料庫分割槽是資料庫的一部分,包含自己的資料,索引,配置檔案和事務日誌;
資料庫分割槽有時被稱為節點)。
(2)獲得最高認證級別的ISO標準認證。
(3)效能較高,適用於資料倉庫和線上事物處理。
(4)跨平臺,多層結構,支援ODBC,JDBC等客戶。
(5)操作簡單,同時提供GUI和命令列,在windowsNT和unix下的操作相同。
(6)在巨型企業得到廣泛的運用,向下相容性好,風險小。
(7)能夠在所有主流平臺上執行,最適於海量資料處理。
2,db2資料庫的特性
(1)完全Web使能的:可以利用HTTP來發送詢問給伺服器。
(2)高度可縮放和可靠:高負荷時可利用多處理器和大記憶體,可以跨伺服器地分佈資料庫和資料負荷;能夠以最小的資料丟失快速地恢復,提供多種備份策略。
3,實現儲存過程
儲存過程是儲存在資料庫中的一個預編譯物件。這意味著過程是預編譯的,可提供給各種應用執行。傳送查詢到伺服器、分析和編譯過程再不需要花費時間。
(1)特點:儲存過程是SQL語句和控制流語句的一個集合或批量,它在一個名稱下儲存,按獨立單元方式執行。它能幫助提高查詢的效能。
(2)好處:
提高效能(應用不必重複地編譯此過程)
減輕網路擁塞(為進行處理,應用不需要向伺服器提交多個SQL語句)
一致性較好(由於過程作為單一控制點,在過程中定義的編碼邏輯和SQL語句在所有應用中被一致地實現)
改善安全機制(使用者可以被授予許可權來執行儲存過程,儘管他們並不擁有這個過程)
(3)執行儲存過程語句:call proc_name(param,…)
(4)RETURN關鍵字:允許儲存過程把整型值返回給呼叫者。如果沒有指定值,那麼儲存過程返回預設值0或1,這依賴於儲存過程的成功執行與否。RETURN value
(5)巢狀過程:可以執行或呼叫來自另一個過程的過程。
4,觸發器
觸發器:一個觸發器是由SQL語句集組成的程式碼塊,在響應某些動作時啟用該語句集。一個觸發器也可被解釋為特定型別的儲存過程,每當動作發生時執行該過程。
每當基礎表中資料受到資料操縱語言(DML)語句——INSERT、UPDATE或DELETE的影響時,觸發器就被激發。觸發器幫助維持表中資料的一致、可靠和正確。
(1)觸發器特性:
當任何資料修改語句被髮出時,它就被自動激發。
在儲存過程的情況下,它不被顯式地呼叫和執行。
它防止了對資料的不正確、未授權的和不一致的改變。
它不能返回資料給使用者。
觸發器可最多巢狀。當一個觸發器執行對另一個觸發器初始化動作時觸發器的巢狀就產生了。
(2)觸發器和資料完整性:
觸發器可用來確保和加強業務規則和資料完整性。業務規則是指確保業務平穩運轉的組織政策。資料完整性是指資料的精確性和可靠性。
如果某種改變違反了引用完整性,那麼所有這樣的改變都被拒絕,因此所有試圖改變資料庫中的資料都被取消。
允許實施非常複雜的限制。
它可執行依賴於對錶所作修改的結果的特定的動作。
5,實現處理事務和遊標
(1)理解DB2中的上鎖
共享鎖:允許併發事務來讀取資源。如果一個資源上有任何共享鎖的話,其它的事務都不能修改該資源上的資料。一個共享鎖在資料已被事務讀取後釋放資源。
更新鎖:更新(U)鎖,在功能上避免了常見形式的死鎖發生。
互斥型鎖:排它型鎖(X),在功能上唯一地限制併發事務訪問一個資源。用排它鎖時沒有任何其它的事務可以讀取或者修改已上鎖的資料。
意向鎖:指示SQL Server要在層次結構較低的某個資源上獲得一個共享或排它鎖。
帶有各種特性的意向鎖包括意向共享(IS),意向排它(IX)和帶有意向排它的共享鎖(SIX)。
模式鎖:當任何資料定義(DDL)操作在表上執行時,SQL Server考察模式修改(Sch-M)鎖。當編譯查詢時,SQL Server考察模式穩定(Sch-S)鎖。
死鎖:DEADLOCK_PRIORITY命令可定製死鎖。把某個會話的DEADLOCK_PRIORITY設定為LOW,使得要選的某個會話變成死鎖受害者。
(2)遊標
遊標是一個在給定結果集中幫助訪問和操縱資料的資料庫物件。遊標的主要好處是你可以逐行的處理資料。結果集被定義為從SELECT語句中獲得的行的集合。
宣告遊標:DECLARE cursor_name [INSENSITIVE] [SCROLL] CURSOR FOR {select_statement} [FOR {READ ONLY | UPDATE [OF column_list]}]
INSENSITIVE:使結果集儲存在tempdb資料庫中,且不允許修改遊標的結果集。
SCROLL:指出遊標可以向前或向後定位以讀入資料。只要遊標不是用INSENSITIVE選項宣告,所有隨後的取數顯示基礎表所作的修改。
READ ONLY:防止結果集中的修改。
UPDATE [OF column_list]:定義遊標內可更新的列。如果使用OF column_list選項,只有列出可被更新的列;否則,除非遊標被定義為READ ONLY,所有列都可更新。
開啟遊標:OPEN cursor_name
取資料:FETCH [[NEXT | PRIOR | FIRST | LAST | ABSOLUTE n | RELATIVE n]] FROM cursor_name [INTO @variable_name [,…n]]
當一個FETCH語句執行時,一般認為遊標定位在已被取到行的位置。被取到的行被稱為當前行。0——成功執行了取數語句,-1——執行取數語句不成功, -2——被讀取的行丟失
關閉遊標:CLOSE cursor_name 除了遊標再開啟的情況外,不可以進行讀取和修改。
解除分配遊標:DEALLOCATE cursor_name 所有遊標持有的資源都被釋放。
6,緩衝池
(1)定義:緩衝池是從磁碟讀取表和索引資料時,資料庫管理器分配的用於快取記憶體這些表或索引資料的主儲存器區域。
(2)建立:CREATE BUFFERPOOL “BP04K_I1”
IMMEDIATE
ALL DBPARTITIONNUMS
SIZE 250
NUMBLOCKPAGES 0
PAGESIZE 32 K;
(3)修改:ALTER BUFFERPOOL SIZE
alter bufferpool IBMDEFAULTBP immediate size 100
(4)刪除:刪除緩衝池時,應確保沒有任何表空間已指定給這些緩衝池。不能刪除IBMDEFAULTBP緩衝池。
DROP BUFFERPOOL
(5)檢視:select * from SYSCAT.BUFFERPOOLS;
7,表空間
(1)定義:表空間是一種儲存結構,它包含表,索引,大物件和長型資料,表空間位於資料庫分割槽組中。空間是資料庫及儲存在該資料庫中的表之間的邏輯層。
表空間在資料庫中建立,表在表空間中建立。
(2)DB2 的表空間按管理方式分為兩種:系統管理空間(System Management Space,SMS)和資料庫管理空間(Database Management Space,DMS)。 按型別分為:規則表空間、大物件表空間、系統臨時表空間、使用者臨時表空間。
(3)好處:能夠把資料合理的分佈儲存在不同的磁碟上或者儲存在磁碟的不同位置上,有助於提高資料存取的效率。
8,db2資料庫調優
(1)在where 語句後面欄位不要用函式,這樣導致欄位不走索引
(2)一個sql語句不要寫的太長,儘量分臨時表,一步一步寫。
(3)表不要建太多的索引
(4)修改生產欄位 一定要記得 REORG ->RUNSTATS -> 否則容易產生一些莫名其妙的錯誤。
(5)遊標使用 注意commit 和rollback
(6)case when的用法 coalesce(username,’’) value(username,’’)
(7)插入或者刪除太慢,隨時記得表維護
(8)動態sql能 ,自動選擇最佳的執行計劃。
(9)資料庫優化命令:reorg、runstats 清除已delete的資料,優化資料結構
擴充套件知識:
資料倉庫(Data Warehouse):是一個面向主題的(Subject Oriented)、整合的(Integrated)、相對穩定的(Non-Volatile)、
反映歷史變化(Time Variant)的資料集合,用於支援管理決策(Decisionaking Support)。
ODS:是一個面向主題的、整合的、可變的、當前的細節資料集合,用於支援企業對於即時性的、操作性的、整合的全體資訊的需求。 區別:ods是短期的實時的資料,供產品或者運營人員日常使用,而資料倉庫是供戰略決策使用的資料;ods是可以更新的資料,資料倉庫是基本不更新的反應歷史變化的資料,還有很多,這裡就不一一列舉了。