繆娟,楊琴
(無錫職業(yè)技術學院,江蘇無錫 214000)
高校教務系統(tǒng)是全校教學運行的管理平臺,不僅包含了大量的學生信息、教師信息、課程信息等重要數(shù)據,同時也是學校管理決策的重要依據。隨著信息化程度的提高,系統(tǒng)的迭代升級必不可少,數(shù)據安全和穩(wěn)定性變得越來越重要。
閃回技術是Oracle 數(shù)據庫的一項重要功能,Oracle 數(shù)據庫閃回技術能夠回滾數(shù)據庫到任意時間點,實現(xiàn)在不破壞數(shù)據完整性的情況下迅速地回退到某個時間點,從而提高了數(shù)據庫的數(shù)據恢復能力,是一種快速恢復數(shù)據的方法。在教務系統(tǒng)的日常運行中,系統(tǒng)數(shù)據庫服務器升級維護、系統(tǒng)故障以及系統(tǒng)數(shù)據可能會出現(xiàn)誤操作、刪除、修改或者損壞等情況,使用Oracle 數(shù)據庫閃回技術能夠有效處理數(shù)據庫升級過程中的數(shù)據備份和恢復,高效解決系統(tǒng)升級過程中的數(shù)據丟失和系統(tǒng)出現(xiàn)異常等問題,還可以在系統(tǒng)故障時快速恢復數(shù)據,避免系統(tǒng)故障導致的數(shù)據錯誤,提高了系統(tǒng)的穩(wěn)定性,保障教務系統(tǒng)的正常運行。
Oracle數(shù)據庫閃回技術主要通過對數(shù)據庫進行時間軸式的管理,實現(xiàn)快速恢復數(shù)據庫到指定的時間點[1],支持不同級別的恢復,包括行、事務、表和整個數(shù)據庫。可實現(xiàn)有選擇地、有效地消除錯誤的影響,逆轉人為錯誤修改和應用程序錯誤數(shù)據的處理。
Oracle 數(shù)據庫閃回技術提高了教務系統(tǒng)的安全性。數(shù)據庫閃回技術可以將數(shù)據庫恢復到特定的時間點,這就意味著可以快速恢復到某個穩(wěn)定版本,避免了惡意攻擊、病毒侵入、數(shù)據庫崩潰等問題帶來的損失。閃回技術的特征、類型和原理如圖1所示:

圖1 閃回技術的特征、類型和原理
閃回技術主要有基于UNDO數(shù)據的閃回技術、基于FDA 閃回數(shù)據歸檔技術、基于Recyclebin 的閃回刪除技術和基于閃回數(shù)據庫日志的閃回數(shù)據庫技術四種后臺技術實現(xiàn)數(shù)據庫的恢復。
在Oracle 數(shù)據庫中,UNDO 是指當一個事務修改數(shù)據庫時,UNDO會記錄改變之前的數(shù)值,如將數(shù)據1改為100,1 被記錄在UNDO 中,利用UNDO 數(shù)據技術實現(xiàn)對之前數(shù)據的追溯查詢。UNDO 可實現(xiàn)閃回查詢(查詢一張表在過去某個時間點的數(shù)據狀態(tài))、閃回表(把一張表閃回到過去的時間點)、閃回版本查詢(一段時間多個事務操作對應表中數(shù)據狀態(tài))和閃回事務查詢(查詢事務對應的UNDO SQL,閃回數(shù)據歸檔)[2]。UNDO數(shù)據的閃回流程如圖2所示:

圖2 UNDO數(shù)據的閃回流程
UNDO 數(shù)據庫的狀態(tài)會隨著事務的提交、回滾和過期而不斷變化。在實際應用中,如需查詢一張表在過去某指定時間(T1)的數(shù)據狀態(tài),首先需確認是否可以查詢對象或將對象改回到修改之前的某個時間點,并確保T1時間點數(shù)據的UNDO未被覆蓋;其次需設置UNDO_MANAGEMENT=AUTO、設置UNDO_TABLESPACE參數(shù)和UNDO_RETNTION(單位為秒)。執(zhí)行閃回查詢的三種使用方法:
1)閃回到某精確時間點:
SELECT*FROM SH.test_tab1 AS OF TIMESTAMP
TO_TIMESTAMP('2020-12-21 08:45:00','yyyymm-dd hh24:mi:ss');
2)閃回到多久時間之前(例如:1分鐘前)
select*from tab AS OF TIMESTAMP sysdate-1/24/60;
3)閃回到指定SCN
select*from tab12 as of scn×××××××;
閃回版本查詢技術可以查詢某一個時間點的數(shù)據,使用VERSIONS 子句給BETWEEN TIMESTAMP,返回滿足條件的兩個時間點之間間隔的變化情況(即查詢某一段時間對應行的所有版本)。返回結果是行的改變歷史,且只返回已提交的行(包括刪除和重新插入的行版本),提供了一種審計表行的方式,并可以獲取改變行的事務信息,可以使用返回的事務標識符,通過LogMiner 執(zhí)行日志挖掘,或者進行閃回事務查詢。執(zhí)行閃回版本查詢技術的方法如下:
閃回表技術可以將表恢復到過去的指定時間點,因為UNDO表空間是循環(huán)覆蓋的結構,所以只能將表閃回到UNDO所允許的過去的時間點,且需要對閃回表開啟行遷移(row movement),實現(xiàn)過程為:alter table table_name enable row movement[3]。下面舉例說明執(zhí)行閃回表的三種方法:
1)將表閃回到指定時間點
2)將表閃回到n分鐘(小時)之前
3)將表閃回到指定的SCN
閃回查詢和閃回表在UNDO數(shù)據中是有限制的,只能閃回查詢或閃回到UNDO保留的期限范圍內,無法返回到時間久遠的數(shù)據,為了擴充閃回的能力,利用FDA閃回數(shù)據歸檔技術,即在UNDO數(shù)據循環(huán)覆蓋之前建立表空間,將UNDO 數(shù)據進行閃回數(shù)據歸檔,固化到表空間中,不受UNDO 的時間限制,實現(xiàn)閃回查詢和閃回表在時間上的延續(xù)。FDA 閃回數(shù)據歸檔的步驟如下:首先創(chuàng)建一個供閃回數(shù)據庫使用的表空間,在該表空間創(chuàng)建閃回數(shù)據歸檔,并限制空間大小和保留的時間;然后賦予用戶權限;最后給某些表開啟閃回數(shù)據歸檔的功能,執(zhí)行查詢來確定歸檔創(chuàng)建的對象。下面舉例說明創(chuàng)建FDA的方法:
FDA閃回數(shù)據的流程如圖3所示:

圖3 FDA閃回數(shù)據的流程
基于回收站的閃回應用面相對較窄,主要針對表刪除,是所有被刪除對象的邏輯存儲容器,對非system表空間可以使用,適用于通過drop操作和非purge的方式刪除的對象,在recycle bin 中可以閃回表及相關的object,包括相關索引、約束和觸發(fā)器。
利用Recycle bin技術,在數(shù)據庫中如果drop一個表時,該表并不會馬上被數(shù)據庫徹底刪除,刪除的表在回收站中被重新命名為系統(tǒng)盤中的名字后保存到recycle bin中。當表被誤刪時,利用recycle bin閃回技術flashback job從recycle bin中恢復重命名的表。Recycle bin閃回數(shù)據的流程如圖4所示:

圖4 Recycle bin的閃回刪除技術流程
數(shù)據庫全庫的閃回依賴于閃回日志,需要給數(shù)據庫開啟閃回,在閃回開啟后由一組后臺進程把數(shù)據的歷史變化寫到Flashback logs閃回日志里,需要恢復的時候把閃回日志的數(shù)據取出覆蓋回數(shù)據中,實現(xiàn)對數(shù)據庫整體全庫的閃回。閃回數(shù)據庫是把數(shù)據庫閃回到過去的某個時間點,是針對邏輯故障的修復或者對相同數(shù)據做循環(huán)迭代測試。例如系統(tǒng)的測試庫,對一組應用程序做反復的測試,經過第一輪測試后的數(shù)據全部變化了,如第二輪重測時是基于第一輪測試后的數(shù)據,結果則會出現(xiàn)較大的反差,針對這樣的多輪測試,可以采取在第一輪測試后閃回到測試前的時間點,經過反復地對相同的數(shù)據做循環(huán)迭代程序。閃回日志的閃回數(shù)據庫技術流程如圖5所示:

圖5 閃回日志的閃回數(shù)據庫技術流程
Oracle數(shù)據庫閃回技術是Oracle數(shù)據庫中的一種重要技術,由于高校教務系統(tǒng)需要頻繁進行數(shù)據管理和數(shù)據恢復,因此閃回技術可以幫助系統(tǒng)管理員快速地恢復數(shù)據庫中的數(shù)據,還原到某個指定的時間點。下面從閃回查詢被誤刪數(shù)據、閃回表和恢復誤刪數(shù)據、閃回數(shù)據庫分別舉例說明Oracle數(shù)據庫閃回技術在高校教務系統(tǒng)中的應用。
誤刪數(shù)據或應用程序有BUG產生了錯誤數(shù)據,可通過閃回命令查詢錯誤數(shù)據之前的數(shù)據狀態(tài),以及查看具體n 分鐘前的數(shù)據狀態(tài)n/24/60。下面舉例測試刪除了test_tab中的600行數(shù)據,查詢結果如下:
1)查看當前和n分鐘前的數(shù)據狀態(tài)
結果顯示,當前數(shù)據和1 分鐘前的數(shù)據為0,5 分鐘前的數(shù)據為138行,10分鐘前的數(shù)據為417行,15分鐘前的數(shù)據為600 行(15 分鐘為錯誤數(shù)據產生之前的時間點)。
2)精確的查看某一條數(shù)據
在教務系統(tǒng)中,有時需要查詢某個時間點的數(shù)據狀態(tài),如學生的課程成績數(shù)據被修改,需要查詢某個學生某門課程的成績,使用閃回技術,可以快速定位問題,恢復到指定時間點的數(shù)據庫狀態(tài),方便查詢分析。
閃回技術可以幫助系統(tǒng)管理員快速恢復教務系統(tǒng)中誤操作刪除的數(shù)據,縮短維護時間并提高系統(tǒng)可用性。比如,管理員可以使用閃回技術將數(shù)據庫恢復到刪除前的狀態(tài),以保證學生的成績記錄的完整性。
下面舉例說明如何通過閃回命令查詢使用之前記錄的時間點,查看該時間點時,以及該時間點后n分鐘該時刻的數(shù)據狀態(tài)。
結果顯示,'2023-05-05 05:51:51'故障發(fā)生點前的數(shù)據為600 行,故障發(fā)生點后1 分鐘的數(shù)據為558行,故障發(fā)生點后3分鐘的數(shù)據為440行,故障發(fā)生點后5分鐘的數(shù)據為321行,故障發(fā)生點后8分鐘的數(shù)據為146 行,精確到故障發(fā)生點后5 分鐘id=550 的數(shù)據仍存在。
3)閃回版本查詢
閃回版本可用于查詢兩個時間間隔之間的數(shù)據所有的變化歷史以及相應的DML操作記錄,主要包括該版本數(shù)據的創(chuàng)建時間和結束時間,操作者是誰以及每個更改的事務標識符[4]。下面舉例測試某人利用系統(tǒng)權限漏洞將學生Tom的課程名稱為ACC100的成績由D改為A+,如何追溯數(shù)據的變化。
結果顯示,舊版本“D”在“06.26.43 AM”時發(fā)生變化,新版本為“A+”,是由編碼為050015002B030000的事務將數(shù)據進行了更換。
在教務系統(tǒng)中,由于人為或者系統(tǒng)原因可能會出現(xiàn)誤操作,比如刪除了重要的數(shù)據或者修改了錯誤的數(shù)據。使用閃回技術,可以快速回滾到誤操作之前的狀態(tài),避免數(shù)據丟失或者錯誤。閃回技術可以快速地恢復數(shù)據。在教務系統(tǒng)中,數(shù)據的準確性非常重要,如果數(shù)據被修改錯誤,將會給教學管理帶來很大的影響。使用Oracle 數(shù)據庫閃回技術可以快速地還原到修改錯誤之前的狀態(tài)。
例1:先向前閃回再向后閃回
當數(shù)據第一次閃回后發(fā)現(xiàn)錯誤時,可以通過先向前閃回再向后閃回的方式返回到正確的時間點。
例2:表被誤刪或惡意刪除時的數(shù)據恢復
從數(shù)據恢復方面來看,閃回技術可以幫助數(shù)據庫管理員在數(shù)據誤操作、系統(tǒng)故障、用戶錯誤輸入等情況下快速恢復數(shù)據。比如,當數(shù)據庫中的表數(shù)據被誤刪除或數(shù)據錯誤地被覆蓋時,管理員可以通過閃回技術將數(shù)據庫恢復到刪除或覆蓋前的狀態(tài),保證數(shù)據的完整性;從數(shù)據修復方面來看,閃回技術可以幫助數(shù)據庫管理員修復一些難以解決的數(shù)據問題。比如,當一些數(shù)據被錯誤地修改或數(shù)據結構出現(xiàn)問題時,系統(tǒng)管理員通過閃回技術將數(shù)據庫恢復到正確的狀態(tài)。
結果顯示,快速閃回被刪除之前的146 行數(shù)據,recyclebin處于on的狀態(tài)。
當許多表被刪除時,需要做全庫的閃回。閃回數(shù)據庫即完全恢復,是數(shù)據庫的一個整體操作,當完全恢復時,使用完全或部分備份的數(shù)據將數(shù)據文件還原到錯誤之前的最后一次提交,而不會丟失數(shù)據[5]。
SQL>alter session set container=PDB1;//全庫閃回可以針對單個PDB級別的閃回
結果顯示,表的146行數(shù)據全部返回。
高校教務管理系統(tǒng)是教學運行能夠正常開展的保障,通過Oracle 閃回技術,可以幫助恢復教務系統(tǒng)中因系統(tǒng)故障導致的數(shù)據丟失或損壞,系統(tǒng)管理員可以實現(xiàn)快速的數(shù)據恢復和回滾,保護學生的課程記錄、成績、選課等信息的完整性,保障教務系統(tǒng)的穩(wěn)定性和可靠性。同時,閃回技術還可以用于數(shù)據查詢和性能優(yōu)化,提高教學管理的工作效率和使用過程的用戶體驗。隨著信息技術的不斷進步,Oracle 閃回技術在高校教務系統(tǒng)中的實踐應用將會更加廣泛和成熟。