db2日志記錄 1. 日志的意義: 主要在于數(shù)據(jù)恢復(fù)。Db2實施了提前寫日志存檔模式,當(dāng)發(fā)出刪除、插入或更新數(shù)據(jù)庫中某一數(shù)據(jù)的SQL調(diào)用時,所作出的數(shù)據(jù)變更首先要寫到日志中去。當(dāng)發(fā)出一條SQL提交確認(rèn)命令時,DB2首先要把redo所需要的日志寫入磁盤。如果斷電的話,所有被提交的事務(wù)都會重新做一遍,而未提交的則會rollback。 事務(wù):為了保證數(shù)據(jù)的可恢復(fù)性和一致性引入的概念。比如執(zhí)行了兩條sql語句,但是他們是為了完成同一件事,因此他們會被當(dāng)做一個整體。當(dāng)發(fā)生意外情況時,如果已經(jīng)commit,但是未寫到磁盤,就要執(zhí)行redo重新執(zhí)行一遍。如果還沒有commit,就要全部回滾。 日志作用:比如昨天晚上進(jìn)行了數(shù)據(jù)庫備份,但是今天中午數(shù)據(jù)庫出現(xiàn)了問題(如存儲介質(zhì)損壞)需要恢復(fù),那么只能恢復(fù)到昨天晚上的狀態(tài),今天上午的數(shù)據(jù)都沒法恢復(fù),這時如果數(shù)據(jù)庫日志沒有損壞,就可以通過日記把這段時間的操作重新執(zhí)行一遍。 2. 日志分為循環(huán)日志和歸檔日志: 日志中只記錄DML操作(insert,update和delete操作),當(dāng)我們前臺執(zhí)行了一條insert,update或delete語句,日志中就會相應(yīng)的記錄這條SQL語句的redo操作和undo操作 幾種操作類型: DDL(Data Definition Language 數(shù)據(jù)定義語言),用于操作對象和對象的屬性(數(shù)據(jù)庫,表,視圖等)。具體表現(xiàn)在Create,Drop和Alter操作上。不會對具體的數(shù)據(jù)進(jìn)行操作,而是對對象進(jìn)行操作。 像主鍵約束、唯一約束、非空約束、外鍵約束、核查約束和缺省約束這些操作都是使表具有某些特性,所以在這里我認(rèn)為他們都是表的屬性,也屬于DDL操作。 DML(Data Manipulation Language 數(shù)據(jù)操控語言)用于操作數(shù)據(jù)庫對象中包含的數(shù)據(jù),也就是說操作的單位是記錄。主要表現(xiàn)在Insert,Delete和Update等操作上。操作對象是記錄。 DCL(Data Control Language 數(shù)據(jù)控制語句)的操作是數(shù)據(jù)庫對象的權(quán)限,這些操作的確定使數(shù)據(jù)更加的安全。主要表現(xiàn)在Grant和Revoke語句。操作對象是用戶。 2.1 循環(huán)日志 分主日志和輔助日志,數(shù)目分別是由參數(shù)LOGPrimary和LOGSecond來控制。當(dāng)主日志不夠用時,分配輔助日志(如默認(rèn)配置了4個主日志文件,但是某個事務(wù)需要橫跨5個日志,這時DB2將會分配一個輔助日志文件)。 為什么叫循環(huán)日志?如分配了4個日志,標(biāo)號為1,2,3,4,當(dāng)日志4用完后將使用日志1。但如果日志扔是活動的,則不能被重用(未活動的日志:只要這個日志包含已提交且已寫到數(shù)據(jù)庫上的操作就可以被重用)。 主要作用:僅能恢復(fù)到曾經(jīng)做過備份的點,備份點之后的操作都將丟失。因此適用于只提供查詢的數(shù)據(jù)庫。 2.2 歸檔日志 不會像循環(huán)日志那樣被重用,DB2不會覆蓋已經(jīng)成為歸檔日志的日志。 活動日志:特別重要,如果活動日志丟失,則數(shù)據(jù)庫無法啟動。 滿足:1.包含尚未提交或回滾的事務(wù)信息;2.包含已經(jīng)提交但是更改尚未寫到磁盤上的事務(wù)信息。以上兩個條件中任意一個都屬于活動日志。 1) 在線歸檔日志:非活動日志,但是與活動日志放在相同的目錄。 2) 離線歸檔日志:已經(jīng)從活動日志的目錄轉(zhuǎn)移到其他地方(其他目錄或媒介)。 參數(shù):LOGArchmenth1 1) OFF(默認(rèn))時,歸檔日志禁用,循環(huán)日志啟用; 2) LOGRetain 日志文件保留在活動日志目錄(在線歸檔); 3) USERExit 日志的歸檔和檢索是由用戶提供的用戶出口程序自動執(zhí)行的,且此出口程序必須由db2uext2調(diào)用。該程序將在線歸檔日志轉(zhuǎn)移到與活動日志不同的目錄或媒介上。該程序也可以將離線歸檔日志取出到活動日志目錄中。在Windows下,db2uext2必須存儲在sqllib\bin目錄下,在UNIX下,db2uext2必須存儲在sqllib\adm目錄中。 4) DISK:directory_name 不調(diào)用用戶出口程序,自動將日志文件歸檔到指定目錄; 5) TSM:[management class name] 日志被歸檔到本地Tivoli Storage Manager(TSM)服務(wù)器上。參數(shù)可選,為指定則使用默認(rèn)管理類; 6) VENDOR:library_name 日志使用指定供應(yīng)商的庫來歸檔。 2.3 無限日志記錄 當(dāng)一個日志被填滿時,DB2立刻歸檔這個日志,而不是等到日志中所有事物都已經(jīng)提交并且寫到磁盤的時候才歸檔日志。這樣可以保證活動日志目錄永遠(yuǎn)不被填滿。 一般不建議使用無限日志記錄,因為它可能延遲緊急事故恢復(fù)時間,因為它需要從歸檔站點檢索活動日志。 啟用無限日志記錄: 1) 將LOGSecond參數(shù)設(shè)置為-1; 2) 啟用歸檔日志記錄 循環(huán)日志記錄只支持崩潰恢復(fù)和版本恢復(fù),而歸檔日志記錄則支持所有類型的恢復(fù):崩潰恢復(fù)、版本恢復(fù)和前滾恢復(fù)。 3. 日志相關(guān)配置參數(shù) DB2的日志存檔進(jìn)程涉及到一些參數(shù),當(dāng)用戶需要改變這些參數(shù)時,必須先停止該實例(db2stop),然后再重新啟動(db2start),以便使得配置生效。 LOGPRIMARY 表明要分配的主日志文件的數(shù)量; LOGSECOND 表面可有分配的輔助日志文件的最多數(shù)量; LOGFILESIZ 用于指定一個日志文件的大?。?/span>4KB頁的個數(shù)) LOGBUFSZ 日志緩沖區(qū)大小,該參數(shù)決定分配多少內(nèi)存空間來做為緩沖區(qū),把日志記錄寫到磁盤之前暫時將他們保留在日志緩沖區(qū)。同樣是4KB頁的個數(shù)。 NEWLOGPATH 日志文件默認(rèn)的子目錄定義在數(shù)據(jù)庫目錄的子目錄SQLLOGDIR中。出于恢復(fù)目的的考慮,最好把日志文件存放到與數(shù)據(jù)庫文件不同的物理磁盤中去。這一參數(shù)標(biāo)識日志文件存放的新路徑。 SOFTMAX 軟檢查點,是個百分?jǐn)?shù),例如50表示日志文件寫滿50%是,數(shù)據(jù)庫執(zhí)行checkpoint操作,把內(nèi)存中的已經(jīng)提交的數(shù)據(jù)(臟頁)寫到磁盤上。 MINCOMMIT 組提交數(shù),默認(rèn)是1,表示每次提交都寫日志。假設(shè)設(shè)置為5,表示累計5次提交才寫一次日志文件。如果沒有累計到5次,那么每隔1秒寫一次日志文件。 MIRRORLOGPATH 鏡像日志路徑; TRACKMOD 啟用增量備份; 4. DB2診斷日志db2diag.log 日志文件的位置: Db2diag.log是用來記錄DB2數(shù)據(jù)庫運行中的信息的文件。可以通過此文件查看DB2數(shù)據(jù)庫詳細(xì)的錯誤信息。此文件是不斷增大的,需要定期進(jìn)行清理。 可以通過查看實例的配置參數(shù)DIAGPATH來確定db2diag.log的存放目錄:db2 get dbm cfg 如果DIAGPATH=/home/db2inst1/sqllib/db2dump,則此文件是放在/home/db2inst1/sqllib/db2dump目錄下的。 當(dāng)文件系統(tǒng)/home的使用率達(dá)到80%-90%左右時,應(yīng)及時刪除db2diag.log文件。 步驟如下: 1) 確認(rèn)應(yīng)用、DB2已經(jīng)停止; 2) 將原db2diag.log文件備份到其他目錄; 3) 刪除db2diag.log文件,傳出后,DB2會自動創(chuàng)建一個新的文件。 也可以通過DB2提供的自動歸檔命令:db2diag –a自動歸檔,自動歸檔的文件會以日期時間來命名。 日志中關(guān)鍵字的含義: 1) Timestamp 時間戳 2) Instance 數(shù)據(jù)庫實例 3) Partition number 分區(qū)號 4) Process and database 進(jìn)程和數(shù)據(jù)庫 5) Thread Id 線程ID 6) Application ID 應(yīng)用程序ID 7) Component 組件 8) Function 函數(shù) 9) Internal error point 內(nèi)部錯誤指針 10) Database 數(shù)據(jù)庫 了解這些基本含義有助于分析和診斷DB2的相關(guān)問題。 篩選日志中的相關(guān)信息: db2diag –time 2014-01-02-11.00.907665-360 顯示時間戳“2014-01-02-11.00.907665-360”之后的所有信息; db2diag –rc FFFFBEE 可以了解十六進(jìn)制所提示的信息; db2 “? Sql1042” 獲得關(guān)于這個錯誤的具體解釋; db2diag –gi “l(fā)evel=severe” 顯示db2diag.log中所記錄的嚴(yán)重錯誤; 如果實例中有若干數(shù)據(jù)庫,并且只希望顯示與數(shù)據(jù)庫“SAMPLE”有關(guān)的消息,那么可以用-g過濾 db2diag 日志文件: db2diag -g db=SAMPLE 將僅顯示包含“DB: SAMPLE”的 db2diag 日志文件記錄; 顯示進(jìn)程標(biāo)識(PID)為 2200,并且在分區(qū) 0、1、2 或分區(qū) 3 上運行的進(jìn)程生成的所有嚴(yán)重錯誤消息: db2diag -g level=Severe,pid=2200 -n 0,1,2,3 也可寫成 db2diag -l severe -pid 2200 -n 0,1,2,3 注:-g 選項指定區(qū)分大小寫的搜索,所以此處“Severe”會起作用,但如果使用了“severe”則會失敗。 合并兩個診斷日志文件并按時間戳記對記錄進(jìn)行排序,執(zhí)行以下命令: db2diag -merge db2diag.0.log db2diag.1.log -fmt %{ts} -level error 時間戳計被合并,并且按時間順序排序。 要輸出 db2diag 日志文件列表中所有文件的記錄,可運行以下命令: db2diag -global |
|