故障檢查最棘手的問題之一是訪問同一數(shù)據(jù)的應(yīng)用程序間的交互作用。雖然從本質(zhì)上來說,每個應(yīng)用程序都循規(guī)蹈矩,但是各個應(yīng)用程序可能會對數(shù)據(jù)做出不同的假定。因此,行就可能出現(xiàn),發(fā)生變化,并在你最不期望它的時候消失。
過去,解決這類問題的方法是在運(yùn)行兩個程序以追蹤所發(fā)生的事情時,將數(shù)據(jù)丟棄。log miner的出現(xiàn)使執(zhí)行這一任務(wù)變得更為容易,但它使用起來較為麻煩。現(xiàn)在,在oracle 10g中,有一個與log miner同樣功能的工具,但執(zhí)行起來更為方便。
這個工具稱之為回溯版本查詢,它依靠自動撤消管理特性與撤消表空間自始至終提供行圖像。位于“from表名”之后,表別名之前,回溯版本查詢語法通過指示哪些行版本要包括在select內(nèi),從而證明表名的資格。其語法為:
versions between { scn | timestamp}
{exp | minvalue} and {exp | maxvalue}
因?yàn)樗C明了表的資格,查詢中的每個對象可在不同的時間點(diǎn)呈現(xiàn)。但是,你最遠(yuǎn)只能返回指定的undo_retention參數(shù),或最近的ddl命令(create/alter/drop),不管哪個在前面。
假設(shè)兩個員工正在就parts表的一個部分描述打“編輯戰(zhàn)”。每個人認(rèn)為他或她的改變沒有被數(shù)據(jù)庫保存。實(shí)際上,每個人正將值改“回”到他們認(rèn)為適當(dāng)?shù)牡胤健D憧梢酝ㄟ^提取那個行的版本歷史來了解發(fā)生的內(nèi)容。列表a顯示了查詢及其結(jié)果。
幾個新的偽列為你提供影響行的事務(wù)信息。versions_starttime和versions_startscn讓你了解歷史記錄的第一行內(nèi)容。還有一個versions_xid列(未顯示)指明事務(wù)id;你可以應(yīng)用它來研究其它行——甚至是在其它表中的其它行——所同時發(fā)生的變化。
由于發(fā)生了多次更新,你可查詢數(shù)據(jù)庫找出行的唯一rowid。然后你可以使用一個相關(guān)的特性——回溯事務(wù)查詢——來了解哪些用戶做出過改變,他們以何種順序提交數(shù)據(jù)。列表b顯示了該查詢及其結(jié)果。
這里要注意的是row_id列,它與rowid偽列不同(見下劃線部分)。它只是flashback_transaction_query視圖中一個簡單的列。
現(xiàn)在你可以告訴這兩個用戶停止修改雙方的工作。
bob watkins(ocp, mcdba, mcse, mct)是一個有著25年經(jīng)驗(yàn)的計(jì)算機(jī)專業(yè)人士,曾做過技術(shù)培訓(xùn)師、顧問與數(shù)據(jù)庫管理員。訪問bob的網(wǎng)站。
新聞熱點(diǎn)
疑難解答
圖片精選