專利名稱::基于數(shù)據內容的三維空間數(shù)據自適應日志管理方法
技術領域:
:本發(fā)明涉及地學信息工程
技術領域:
,尤其涉及一種基于數(shù)據內容的三維空間數(shù)據自適應日志管理方法。
背景技術:
:三維空間數(shù)據具有多源、多類、多維、多量、多時態(tài)和多主題等重要特征,因此在數(shù)據庫中確保三維空間數(shù)據的安全性和完整性,有效管理三維空間數(shù)據對空間信息系統(tǒng)建設和應用具有重要作用。目前在三維空間數(shù)據的管理系統(tǒng)中,極少有關于日志模塊的高效設計和管理。因此一旦用戶無意或蓄意破壞空間數(shù)據,則很難恢復到破壞前的數(shù)據狀態(tài)。同時由于三維空間數(shù)據的海量特性,如果采用Oracle、DB2等大型數(shù)據庫系統(tǒng)的恢復技術將整個數(shù)據庫恢復到破壞前的正確狀態(tài)將耗費大量的資源和時間,也將影響數(shù)據庫的整體性能°哦日志主要記錄系統(tǒng)的運行情況,即用戶對系統(tǒng)的各個詳細操作,包括外部請求及內部響應過程中各個對象對應表的創(chuàng)建、刪除、提取等。一方面記錄空間數(shù)據庫的內部的操作(包括INSERT、DELETE、UPDATE等),另一方面記錄存儲空間對象與數(shù)據庫系統(tǒng)的對應操作(包括CREATE、DROP、ALTER等),做到可查詢完成每個外部請求操作和相應內部的處理過程。并根據記錄情況對空間數(shù)據的操作進行恢復,保障空間數(shù)據庫的安全。在開發(fā)階段,日志主要用來作為軟件測試的手段之一。在運行階段,日志作為開發(fā)人員定位和修改故障的主要依據,日志可以為審計和監(jiān)測數(shù)據庫提供數(shù)據。系統(tǒng)管理員根據日志來評價安全程序的效率并確定引起安全破壞或系統(tǒng)功能失效的原因。同時可以根據日志內容將因為意外改變或意外刪除的數(shù)據恢復為原貌,能重構完整的數(shù)據庫。日志管理模塊將軟件系統(tǒng)中記錄日志的操作提取出來形成獨立的模塊,降低系統(tǒng)的耦合度,提高復用性。通過日志系統(tǒng)對保證數(shù)據庫一致性起著重要作用,同時為數(shù)據庫的數(shù)據安全提供了保障。在開發(fā)數(shù)據庫系統(tǒng)軟件時,傳統(tǒng)的日志管理模塊一股有兩種方法獲取日志信息。一是在客戶端(C/S)或者應用服務器(B/S)上對每個功能模塊編寫日志的處理子模塊;二是在創(chuàng)建數(shù)據表后對需要觸發(fā)器的表分別創(chuàng)建,將日志管理全部或部分轉換到數(shù)據庫中。這兩種方法都有弊端,如果采用對每個功能模塊編寫日志的方法,則程序開發(fā)人員的編程量大,開發(fā)效率低,同時在前臺程序中處理日志將占用內存資源,影響用戶操作;后一種方法有所進步,但是創(chuàng)建觸發(fā)器與觸發(fā)事件存在時間差,并且不能動態(tài)的為新建的表建立觸發(fā)器。特別是在對重要數(shù)據和大量數(shù)據庫表創(chuàng)建觸發(fā)器時,傳統(tǒng)方法的安全性和效率都將大大降低。因此有必要提出一種新型實用的日志管理方法,特別是在應用三維空間信息系統(tǒng)以及管理三維空間數(shù)據的情況下,需要對這些數(shù)據進行重要維護和管理并進行相應功能的研究,以奠定不同于傳統(tǒng)而是基于三維空間數(shù)據和大型數(shù)據庫系統(tǒng)的三維空間數(shù)據自適應日志管理系統(tǒng)的基礎。
發(fā)明內容針對上述存在的技術問題,本發(fā)明的目的是提供一種基于數(shù)據內容的三維空間數(shù)據自適應日志管理方法,從而在三維空間數(shù)據維護和管理的應用中,提高系統(tǒng)的安全性和效率。為達到上述目的,本發(fā)明采用如下的詳細技術方案①用戶調用系統(tǒng)程序包自動創(chuàng)建結構相異的三維空間數(shù)據表、日志表及其相應表的觸發(fā)器;②在客戶端程序中用戶需要存儲要素對象的數(shù)據時,調用用戶程序包動態(tài)創(chuàng)建基本結構相同的三維空間要素對象表、要素對象的L0D信息表和對應表的觸發(fā)器,并通過觸發(fā)器獲取詳細的日志信息;③當用戶暫時不處理部分數(shù)據表時,在服務器端通過設置觸發(fā)器開關,及時釋放數(shù)據庫資源;④數(shù)據庫日志信息被破壞需要恢復時,利用程序備份的TXT日志信息文件,將其加載到數(shù)據庫端,實現(xiàn)日志的快速恢復。在所述步驟①之前還包括以下步驟分析存儲在數(shù)據庫中的三維空間數(shù)據的特性和需要記錄的日志信息類型,將需要在新建用戶時創(chuàng)建的數(shù)據表和日志表以及相應觸發(fā)器的SQL語句程序塊記錄在系統(tǒng)程序包中;動態(tài)存儲要素對象時用于創(chuàng)建要素對象表、要素對象L0D信息表和觸發(fā)器的SQL語句程序塊記錄在用戶程序包里;系統(tǒng)程序包在新建數(shù)據庫用戶前加載到數(shù)據庫服務器端,用戶程序包在新建數(shù)據庫時隨程序一起加載到新建的用戶方案。所述步驟①中,根據三維空間數(shù)據的結構和類型特性,在創(chuàng)建新的數(shù)據庫用戶時自動調用數(shù)據庫管理系統(tǒng)的存儲函數(shù)實現(xiàn)自動創(chuàng)建結構相異的數(shù)據庫表、日志表和表觸發(fā)器的功能。所述步驟②中,當管理員向數(shù)據庫中存儲要素對象時,利用數(shù)據庫用戶程序包內的存儲過程和函數(shù)動態(tài)創(chuàng)建基本結構相同的三維空間要素對象表、要素對象L0D信息表及其表觸發(fā)器,進而向數(shù)據庫中存入三維空間數(shù)據要素對象。程序調用程序包中的存儲過程,數(shù)據管理員可以禁用部分暫時不使用的觸發(fā)器,釋放數(shù)據庫資源,需要時則選擇觸發(fā)器對其進行啟用。監(jiān)控的數(shù)據為存儲在數(shù)據庫中的三維空間數(shù)據,監(jiān)控記錄的內容來源于所述步驟①中創(chuàng)建的觸發(fā)器獲取的各種日志。所述步驟①中,創(chuàng)建的所述三維空間數(shù)據表包括三維空間數(shù)據的工程表、圖層表、要素類表、紋理表、材質表、拓撲信息表、索引表;所述步驟①中,創(chuàng)建的所述日志表包括系統(tǒng)日志表、用戶登錄日志表和數(shù)據庫更新日志表。所述步驟④包括以下子步驟將日志數(shù)據備份到本地的TXT文本,當日志數(shù)據被破壞時將TXT文件導入數(shù)據庫重載日志數(shù)據;利用所述表觸發(fā)器記錄的日志內容,選擇某個具體時刻的數(shù)據進行恢復,利用日志記錄的詳細操作內容在數(shù)據庫中進行恢復操作。本發(fā)明具有以下優(yōu)點和積極效果1)本發(fā)明利用存儲過程自動創(chuàng)建數(shù)據庫表和觸發(fā)器,相比在建庫結束后創(chuàng)建表要省時省力;2)本發(fā)明的三維空間數(shù)據表是動態(tài)創(chuàng)建的,相比傳統(tǒng)方法本發(fā)明利用數(shù)據庫用戶內的程序包在程序中由用戶在存儲三維空間要素對象時自動創(chuàng)建要素對象表和觸發(fā)器,省略了編寫重復代碼的繁瑣工作;3)本發(fā)明采用觸發(fā)器開關機制,對于暫時不需要記錄用戶操作的數(shù)據表,可通過傳入觸發(fā)器名調用存儲過程將其禁用,從而釋放資源,優(yōu)化數(shù)據庫性能;4)本發(fā)明根據備份的日志記錄文件,快速恢復完整的日志信息。程序將日志表的信息備份為TXT文件,當日志信息表遭受無意或蓄意破壞時,管理員能將備份數(shù)據重新加載到數(shù)據庫中。當三維空間數(shù)據被破壞時,用戶根據完備日志信息查找到破壞的數(shù)據和機器IP,進而啟動數(shù)據管理系統(tǒng)中的三維空間數(shù)據恢復功能,實現(xiàn)三維空間數(shù)據的完備性;5)本發(fā)明合理有效的利用數(shù)據庫的相關技術,能有效利用數(shù)據庫的各個功能,節(jié)省開發(fā)時間提高開發(fā)效率,相比傳統(tǒng)的建立日志管理處理子模塊或者僅使用觸發(fā)器開發(fā)的系統(tǒng),大大的提高了數(shù)據庫的性能,提高程序開發(fā)的效率。圖1是本發(fā)明提供的基于數(shù)據內容的三維空間數(shù)據自適應日志管理方法的流程圖。具體實施例方式本發(fā)明提供了一種基于數(shù)據內容的三維空間數(shù)據自適應日志管理方法,利用Oracle數(shù)據庫存儲過程和觸發(fā)器等PL/SQL程序塊來綜合管理,同時兼顧三維空間數(shù)據的特性設計創(chuàng)建空間數(shù)據表、日志表和觸發(fā)器的程序塊。利用程序將日志信息表的內容備份到本地TXT文件中,一旦數(shù)據日志表被破壞時利用TXT文件將日志信息重新導入數(shù)據庫。當三維空間數(shù)據被破壞時,利用日志信息查找到被破壞數(shù)據的破壞時間和具體信息,利用系統(tǒng)中的備份恢復表方案進而恢復到破壞前的三維數(shù)據表,實現(xiàn)日志數(shù)據和三維空間數(shù)據的完整性,同時根據數(shù)據庫詳細的日志記錄實現(xiàn)三維空間數(shù)據的恢復保證三維空間數(shù)據的完備性。1)利用程序包內的存儲過程和存儲函數(shù)實現(xiàn)自動化創(chuàng)建。將創(chuàng)建的表結構及其觸發(fā)器內容寫在數(shù)據庫服務器端的系統(tǒng)程序包里面,表結構的設計根據三維空間數(shù)據的特性來確定并動態(tài)創(chuàng)建。當管理員在前臺程序中創(chuàng)建新的數(shù)據庫用戶時,調用程序包可實現(xiàn)自動建表和觸發(fā)器的功能,一旦數(shù)據庫用戶創(chuàng)建成功,不僅將所需要的表和觸發(fā)器創(chuàng)建成功,同時還將該數(shù)據庫用戶的程序包和自定義類型等創(chuàng)建并加載到數(shù)據庫用戶下以備后續(xù)之用。程序員將創(chuàng)建要素對象表和觸發(fā)器的程序塊存放在數(shù)據庫用戶的程序包里面,并且在創(chuàng)建新的數(shù)據庫用戶時將程序包加載到新建的數(shù)據庫用戶下。當數(shù)據管理員向數(shù)據庫存儲空間數(shù)據時系統(tǒng)會調用程序包的存儲函數(shù)實現(xiàn)要素對象表和表觸發(fā)器的自動創(chuàng)建,進而將三維空間數(shù)據存入數(shù)據庫。2)利用觸發(fā)器獲取所有日志信息。通過創(chuàng)建的觸發(fā)器,通過觸發(fā)器機制和控制內容可以實現(xiàn)任何時刻獲取用戶對數(shù)據庫表內三維空間數(shù)據更新的具體操作,與傳統(tǒng)技術相比大大提高數(shù)據的安全性管理。3)利用備份數(shù)據快速恢復日志信息。利用程序將日志記錄表內的詳細操作內容備份為TXT文件并存入本地。數(shù)據庫中具有加載TXT文件的功能,利用重新加載的文件能快速恢復日志表的內容。日志表記錄了詳細的用戶操作內容,一旦三維空間數(shù)據遭到無意或蓄意破壞,數(shù)據管理系統(tǒng)能根據完整的日志信息和備份數(shù)據恢復到破壞前的三維空間數(shù)據。4)利用觸發(fā)器機制控制觸發(fā)功能。利用觸發(fā)器的可用或不可用的人為控制功能,在存儲函數(shù)中傳入觸發(fā)器名,實現(xiàn)人為控制觸發(fā)器的狀態(tài)。一旦數(shù)據庫資源不足即可關閉暫時不能更新的表格所對應的觸發(fā)器,從而釋放資源提高數(shù)據庫的操作性能。需要時則開啟觸發(fā)開關使其可用。本發(fā)明提供了自動創(chuàng)建數(shù)據庫表及其表觸發(fā)器的功能,將創(chuàng)建的表結構及其觸發(fā)器內容寫在數(shù)據庫服務器端的系統(tǒng)程序包里面,表結構的設計根據三維空間數(shù)據的特性來確定并動態(tài)創(chuàng)建。當管理員在前臺程序中創(chuàng)建新的數(shù)據庫用戶時,調用程序包可實現(xiàn)自動建表和觸發(fā)器的功能,一旦數(shù)據庫用戶創(chuàng)建成功,不僅將所需要的表和觸發(fā)器創(chuàng)建成功,同時還將該數(shù)據庫用戶的程序包和自定義類型等創(chuàng)建并加載到數(shù)據庫用戶下以備后續(xù)之用。此過程中創(chuàng)建的表包括三維空間數(shù)據的工程表、圖層表、要素類表、紋理表、材質表、拓撲信息表、索引表等表結構相異的基本三維空間數(shù)據表和系統(tǒng)日志表、用戶登錄日志表和數(shù)據庫更新日志表。本發(fā)明提供了在程序中存儲三維空間要素對象數(shù)據時動態(tài)創(chuàng)建相關要素對象表、要素對象L0D信息表及其觸發(fā)器,程序員將創(chuàng)建要素對象表和觸發(fā)器的程序塊存放在數(shù)據庫用戶的程序包里面,并且在創(chuàng)建新的數(shù)據庫用戶時將程序包加載到新建的數(shù)據庫用戶下,當數(shù)據管理員向數(shù)據庫存儲數(shù)據時系統(tǒng)首先調用程序包的存儲函數(shù)實現(xiàn)要素對象表和表觸發(fā)器的自動創(chuàng)建,進而將三維空間數(shù)據存入數(shù)據庫。通過創(chuàng)建的觸發(fā)器可以實現(xiàn)任何時刻獲取用戶對數(shù)據庫表內三維空間數(shù)據更新的具體操作,與傳統(tǒng)技術相比大大提高數(shù)據的安全性管理。本發(fā)明提供了日志記錄的快速恢復功能。日志信息被破壞后將備份的日志信息(TXT文件)重新加載到數(shù)據庫中。利用日志記錄的詳細操作內容快速恢復三維空間數(shù)據,日志表記錄了詳細的用戶操作內容,一旦空間數(shù)據遭到無意或蓄意破壞,根據數(shù)據管理系統(tǒng)中的備份方案恢復到破壞前的狀態(tài)。數(shù)據的恢復能保障日志數(shù)據和三維空間數(shù)據的完整性和安全性。本發(fā)明提供了自動管理觸發(fā)器的功能,其實質是利用觸發(fā)器的可用或不可用的人為控制功能,在存儲函數(shù)中傳入觸發(fā)器名,實現(xiàn)人為控制觸發(fā)器的狀態(tài)。一旦數(shù)據庫資源不足即可關閉暫時不能更新的表格所對應的觸發(fā)器,從而釋放資源提高數(shù)據庫的操作性能。需要時則開啟觸發(fā)開關使其可用。本發(fā)明提供了一種基于數(shù)據內容的三維空間數(shù)據自適應日志管理方法,該方法是針對三維空間數(shù)據的數(shù)據內容等特點,利用大型數(shù)據庫管理系統(tǒng)(以Oracle數(shù)據庫為例)中的程序包等可存儲程序來管理三維空間數(shù)據的自適應日志管理。在三維空間數(shù)據日志管理系統(tǒng)中,根據三維空間數(shù)據的不同數(shù)據類型將數(shù)據表、日志表及其觸發(fā)器的創(chuàng)建分為兩類一類是在新建數(shù)據庫用戶時隨用戶的創(chuàng)建同時創(chuàng)建(其中包括工程表、圖層表、要素類表、紋理表、材質表、拓撲信息表、索引表、系統(tǒng)日志表、用戶登錄日志表和數(shù)據庫更新日志表等三維空間數(shù)據基本表,系統(tǒng)觸發(fā)器、用戶登錄觸發(fā)器和上述數(shù)據庫表觸發(fā)器),各表的結構相異而且所存儲的數(shù)據表只需一個即可實現(xiàn);另一種是在數(shù)據管理員存儲三維空間要素對象時由程序動態(tài)創(chuàng)建(包括三維要素對象表、要素對象L0D信息表、DEM金字塔管理表和上述表的觸發(fā)器),每種類型的基本結構相同而且需要創(chuàng)建的表格數(shù)量較多。兩類數(shù)據的分別創(chuàng)建實現(xiàn)了自適應的應用需求。利用存儲過程和觸發(fā)器不僅能在數(shù)據管理員新建數(shù)據庫用戶時自動創(chuàng)建固定結構的數(shù)據庫表和觸發(fā)器,同時在存儲三維要素對象數(shù)據時能動態(tài)創(chuàng)建三維空間要素對象表、要素對象L0D信息表和對應表的觸發(fā)器,省去程序員對創(chuàng)建類似表和觸發(fā)器編寫重復代碼的繁瑣工作。在Oracle服務器端為觸發(fā)器編寫存儲過程用于創(chuàng)建觸發(fā)開關,適時禁用或啟用部分觸發(fā)器釋放資源。系統(tǒng)提供的快速恢復功能能根據詳細的日志記錄內容將破壞的數(shù)據恢復到破壞前的狀態(tài)值,從而確保三維空間數(shù)據的完整和正確。該日志管理系統(tǒng)是三維空間數(shù)據管理系統(tǒng)的基礎,滿足了三維空間數(shù)據管理的應用需求。本發(fā)明是一個以三維空間數(shù)據為核心的多種技術聯(lián)合應用、大型數(shù)據庫系統(tǒng)相關技術集成的高新技術系統(tǒng)。系統(tǒng)的開發(fā)立足于解決三維地理信息系統(tǒng)的空間數(shù)據管理問題,突破大規(guī)模地上地下、室外室內三維空間數(shù)據一體化管理,研發(fā)高性能三維空間數(shù)據管理系統(tǒng)。體現(xiàn)了以大型數(shù)據庫系統(tǒng)為基礎,以空間信息和屬性信息為核心,確保三維空間數(shù)據安全為目標的設計思路。該系統(tǒng)以數(shù)據庫表為單位,其中要素對象表記錄三維空間數(shù)據,日志表記錄用戶對數(shù)據庫的各項操作,包括用戶對系統(tǒng)的DDL(CREATE、DROP、ALTER)操作,用戶的登錄信息(LOGON、LOGOFF)和用戶對數(shù)據庫表的DML(INSERT、DELETE、UPDATE)操作,記錄內容具體全面。該日志管理系統(tǒng)采用存儲過程語言、標準的代碼體系、規(guī)范的表結構和通用的軟件接口,有較高的專業(yè)化特點。為三維空間數(shù)據的安全有效管理打下良好的基礎。下面結合圖1的流程圖,詳細描述本發(fā)明的具體實施步驟步驟1編寫創(chuàng)建數(shù)據庫表和觸發(fā)器的系統(tǒng)程序包和用戶程序包。分析存儲在數(shù)據庫中的三維空間數(shù)據的特性和需要記錄的日志信息類型,將需要在新建用戶時創(chuàng)建的數(shù)據表和日志表以及相應觸發(fā)器的SQL語句程序塊記錄在系統(tǒng)程序包中;動態(tài)存儲要素對象時用于創(chuàng)建要素對象表、要素對象L0D信息表和觸發(fā)器的SQL語句程序塊記錄在用戶程序包里。兩個程序包的SQL程序塊分別以后綴為sql的類文本方式存儲在客戶端。系統(tǒng)程序包在新建數(shù)據庫用戶前加載到數(shù)據庫服務器端,用戶程序包在新建數(shù)據庫時隨程序一起加載到新建的用戶方案。以下是創(chuàng)建系統(tǒng)日志表的部分SQL語句代碼procedurecreate_g3d_all_syslog(v_uservarchar2)assql_statementvarchar2(255);beginsql_statement:=,createtable,||v_user||,G3D_ALL_SYSL0G(datestampvarchar(20),一操作日期timesvarchar(20),一操作時間usernamevarchar(20),一用戶名ipaddrvarchar(30),-連接機器IP地址object_ownervarchar(30),-操作程序名statementvarchar(4000)),;一具體操作內容executeimmediatesql_statement;endcreate_g3d_all_syslog;步驟2創(chuàng)建數(shù)據庫用戶和數(shù)據庫表。程序初始運行時,服務器端的數(shù)據庫為空,里面的數(shù)據庫由客戶端調用具體的數(shù)據引擎接口實現(xiàn)。在數(shù)據庫中創(chuàng)建新的數(shù)據庫用戶,調用系統(tǒng)程序包內存儲過程創(chuàng)建用于記錄三維空間數(shù)據的基本表和日志表,同時程序加載數(shù)據庫用戶的程序包,用來完成后續(xù)的相關操作,其中三維空間數(shù)據日志管理系統(tǒng)中各類日志記錄表的詳細表結構設計如下表表1、表2、表3所示表1系統(tǒng)日志輸出表結構〔0063〕表2用戶登陸日志輸出表結構表3數(shù)據庫更新日志輸出表結構步驟3創(chuàng)建系統(tǒng)觸發(fā)器、用戶登錄觸發(fā)器和數(shù)據庫表觸發(fā)器。在服務器端創(chuàng)建數(shù)據庫用戶時,客戶端會通過三維空間數(shù)據引擎調用數(shù)據庫服務器端的系統(tǒng)程序包創(chuàng)建固定表,建表完成后數(shù)據引擎會自動調用數(shù)據庫服務器端的存儲函數(shù),為三維空間數(shù)據庫已創(chuàng)建的數(shù)據表創(chuàng)建各類觸發(fā)器。觸發(fā)器成功創(chuàng)建后一旦用戶操作數(shù)據庫,觸發(fā)器被觸發(fā)并獲取用戶對數(shù)據庫和數(shù)據庫表的詳細操作,創(chuàng)建某數(shù)據表觸發(fā)器的部分SQL語句代碼如下procedurecreate_trigger(p_idinnumber)asv_sqlvarchar2(4000):=null;一執(zhí)行語句v_table_namevarchar2(4000):=null;一需要創(chuàng)建觸發(fā)器的數(shù)據表名sql_statementvarchar2(4000):=null;一執(zhí)行語句v_idnumber(20,0);一傳入的參數(shù),表名IDBEGINv_id:=p_id;v_table_name:=‘G3D_FSET_'|to_char(v_id);v_sql:='createorreplacetriggerG3D_TRIG_‘to—char(v—id)|‘afterinsertordeleteorupdateon‘v—table—name||‘foreachrow‘||‘declare‘||‘v_idnumber(20,0);‘||'v—namevarchar2(200);'......executeimmediatev_sql;—執(zhí)行代碼ENDcreate_trigger;步驟4創(chuàng)建觸發(fā)器開關。觸發(fā)器的使用占用較多資源,大量使用容易造成數(shù)據庫性能的下降。因此在管理員管理數(shù)據時可以有選擇性的禁用或啟用觸發(fā)器,以便釋放內存資源空間從而提高數(shù)據庫的性能和效率。將控制觸發(fā)器開關的SQL代碼寫入存儲過程,由管理員在前臺程序中選擇需要關閉的觸發(fā)器名,數(shù)據引擎通過輸入的參數(shù)調用存儲過程進而實現(xiàn)關觸發(fā)器的關閉。一旦需要啟用觸發(fā)器,在前臺程序中選擇相應名稱,數(shù)據引擎調用存儲過程使其觸發(fā)器可用即可開啟。創(chuàng)建啟用觸發(fā)器的存儲過程的代碼如下所示proceduretrig_switchon(trignameinvarchar2)asv_sqlvarchar2(4000);beginv_sql:=‘altertrigger^||trigname||‘enable,;—執(zhí)行語句executeimmediatev_sql;endtrig—switchon;步驟5應用程序動態(tài)創(chuàng)建三維空間數(shù)據要素對象表。數(shù)據管理員需要向數(shù)據庫裝載三維空間數(shù)據前,首先創(chuàng)建三維空間要素對象表。利用三維空間數(shù)據管理工具,創(chuàng)建表之前三維空間數(shù)據引擎調用存儲在數(shù)據庫用戶內程序包的存儲函數(shù)實現(xiàn)動態(tài)創(chuàng)建,進而向服務器端的數(shù)據庫裝載三維空間數(shù)據,動態(tài)創(chuàng)建數(shù)據表的存儲過程部分代碼如下/*創(chuàng)建表空間*/......v_tabspace:='G3D_FSET_'|TO_CHAR(v_featureclass_id);iftablespace_exists(v_tabspace)=falsethenselectsys.DBA_DATA_FILES.file_nameintov_datafilefromsys.DBA_DATA_FILESwheresys.DBA_DATA_FILES.tablespace_name=upper('SYSTEM');v_datafile:=REPLACE(v_datafile,'SYSTEM',v_tabspace);sql_statement:=‘CREATEBIGFILETABLESPACE‘|v_tabspace||'LOGGINGDATAFILE'|CHR(39)||v_datafile||CHR(39)|'SIZE500MREUSEAUT0EXTENDONNEXT100MMAXSIZEUNLIMITEDEXTENTMANAGEMENTLOCALAUT0ALL0CATESEGMENTSPACEMANAGEMENTAUTO';executeimmediatesql_statement;endif;......步驟6動態(tài)創(chuàng)建三維空間數(shù)據要素對象表對應的觸發(fā)器。在上述(3)中所述的創(chuàng)建三維空間數(shù)據要素對象表時,通過觸發(fā)器獲取到相關創(chuàng)建信息,引擎自動調用已加載到數(shù)據庫用戶下的程序包內存儲過程為要素對象表創(chuàng)建對應的表觸發(fā)器,其過程與上述(2)創(chuàng)建觸發(fā)器的方式不同,要素對象表的結構均相同,創(chuàng)建觸發(fā)器只需將觸發(fā)獲取的表名作為傳入參數(shù)調用包內的存儲過程,根據表名創(chuàng)建對應要素對象表的觸發(fā)器,這樣省去了編寫重復代碼的工作,程序包內創(chuàng)建觸發(fā)器的部分程序塊列舉如下(以Oracle存儲過程為例);procedurecreate_tabtrig(IDinnumber)asv_sqlvarchar2(4000):=null;v_table_namevarchar2(4000):=null;......BEGINv_id:=ID;v_sql:=‘createorreplacetriggerG3D_TRIG_‘|to_char(v_id)afterinsertordeleteorupdateon'v_table_nameforeachrow'declare'v_idnumber(20,0);'v_namevarchar2(200);‘......executeimmediatev_sql;ENDcreate_tabtrig;步驟7快速恢復三維空間數(shù)據日志數(shù)據。當日志數(shù)據被用戶無意或蓄意破壞后,則可以進行快速恢復功能。利用程序將日志信息表的詳細內容導入TXT文本并存儲于本地。一旦日志信息被破壞將已備份的日志信息(TXT文件)重新加載到數(shù)據庫中,加載時利用數(shù)據庫本身的導入功能實現(xiàn)TXT文本的導入。利用日志記錄的詳細操作內容快速恢復三維空間數(shù)據的功能。日志表記錄了詳細的用戶操作內容,一旦三維空間數(shù)據遭到無意或蓄意破壞,日志管理系統(tǒng)能根據系統(tǒng)中的備份方案,快速恢復到破壞前的狀態(tài)。本發(fā)明的快速恢復是依靠上述存儲在數(shù)據庫中的詳細日志記錄而進行的。日志表記錄了用戶操作的時間和具體操作對象內容。由于三維空間數(shù)據的海量特征使得三維空間數(shù)據的恢復應只需要選擇被破壞的錯誤數(shù)據進行局部恢復,而不是將整個數(shù)據庫進行重新創(chuàng)建并恢復,否則將造成數(shù)據庫性能的下降。備份日志的代碼部分列舉如下std:ofstreamoutFile;outFile.open(filename,c—str(),std::ios::out|std::ios::trunc);if(!outFile){cerr<<〃error:unabletoopeninputfile:〃<<filename<<endl;return;}outFile<<〃更新的對象ID"<<"“"更新表名〃<<"“<<"更新類型〃<<"“<<〃更新時間〃<<“‘‘<<"用戶IP"<<endl;for(std:vector<UserDefLog>iteratorit=log.begin();it!=log.end();it++){std:stringstrlD=numberToString<char,unsignedlonglong>((*it)objID);std::stringstrTime=numberToString<char,unsignedlonglong>((*it)updatetime);outFile<<strlD<<"“(*it).tablename<<"“(*it).updateflag<<"“strTime<<"“<<(*it).ip_addr<<endl;}outFile.close();通過上述步驟創(chuàng)建的觸發(fā)器獲取詳細的三類日志表所需要存儲的詳細日志信息。一旦數(shù)據遭到無意或蓄意破壞,系統(tǒng)能根據日志記錄的時間和詳細操作內容快速重構三維空間數(shù)據,實現(xiàn)數(shù)據在0raCle、DB2等大型數(shù)據庫系統(tǒng)中的有效管理。同時在服務器端設置觸發(fā)器開關禁用或啟用觸發(fā)器,達到釋放數(shù)據庫資源的目的。在三維空間數(shù)據庫自適應日志管理方法的實施過程中,其硬件平臺體系由兩部分組成,一部分是數(shù)據庫服務器,另一部分是數(shù)據庫客戶端。所有程序包的內容由管理員手動寫入客戶端并以文本方式存儲。新建數(shù)據庫用戶前首先將系統(tǒng)程序包手動加載到數(shù)據庫用戶中,而用戶程序包則在創(chuàng)建新的數(shù)據庫用戶時自動加載到數(shù)據庫用戶下??臻g數(shù)據記錄表、日志記錄表和三類觸發(fā)器在客戶端通過數(shù)據引擎調用程序包自動創(chuàng)建在數(shù)據庫中。這樣最大性的發(fā)揮了大型數(shù)據庫系統(tǒng)的性能,為客戶端提供了高效的數(shù)據處理環(huán)境。以上實施例僅供說明本發(fā)明之用,而非對本發(fā)明的限制,有關
技術領域:
的技術人員,在不脫離本發(fā)明的精神和范圍的情況下,還可以作出各種變換或變型,因此所有等同的技術方案,都落入本發(fā)明的保護范圍。權利要求一種基于數(shù)據內容的三維空間數(shù)據自適應日志管理方法,其特征在于,包括以下步驟①用戶調用系統(tǒng)程序包自動創(chuàng)建結構相異的三維空間數(shù)據表、日志表及其相應表的觸發(fā)器;②在客戶端程序中用戶需要存儲要素對象的數(shù)據時,調用用戶程序包動態(tài)創(chuàng)建基本結構相同的三維空間要素對象表、要素對象的LOD信息表和對應表的觸發(fā)器,并通過觸發(fā)器獲取詳細的日志信息;③當用戶暫時不處理部分數(shù)據表時,在服務器端通過設置觸發(fā)器開關,及時釋放數(shù)據庫資源;④數(shù)據庫日志信息被破壞需要恢復時,利用程序備份的TXT日志信息文件,將其加載到數(shù)據庫端,實現(xiàn)日志的快速恢復。2.根據權利要求1所述的基于數(shù)據內容的三維空間數(shù)據自適應日志管理方法,其特征在于,在所述步驟①之前還包括以下步驟分析存儲在數(shù)據庫中的三維空間數(shù)據的特性和需要記錄的日志信息類型,將需要在新建用戶時創(chuàng)建的數(shù)據表和日志表以及相應觸發(fā)器的SQL語句程序塊記錄在系統(tǒng)程序包中;動態(tài)存儲要素對象時用于創(chuàng)建要素對象表、要素對象LOD信息表和觸發(fā)器的SQL語句程序塊記錄在用戶程序包里;系統(tǒng)程序包在新建數(shù)據庫用戶前加載到數(shù)據庫服務器端,用戶程序包在新建數(shù)據庫時隨程序一起加載到新建的用戶方案。3.根據權利要求2所述的基于數(shù)據內容的三維空間數(shù)據自適應日志管理方法,其特征在于所述步驟①中,根據三維空間數(shù)據的結構和類型特性,在創(chuàng)建新的數(shù)據庫用戶時自動調用數(shù)據庫管理系統(tǒng)的存儲函數(shù)實現(xiàn)自動創(chuàng)建結構相異的數(shù)據庫表、日志表和表觸發(fā)器的功能。4.根據權利要求2所述的基于數(shù)據內容的三維空間數(shù)據自適應日志管理方法,其特征在于所述步驟②中,當管理員向數(shù)據庫中存儲要素對象時,利用數(shù)據庫用戶程序包內的存儲過程和函數(shù)動態(tài)創(chuàng)建基本結構相同的三維空間要素對象表、要素對象LOD信息表及其表觸發(fā)器,進而向數(shù)據庫中存入三維空間數(shù)據要素對象。5.根據權利要求2-4中任一項所述的基于數(shù)據內容的三維空間數(shù)據自適應日志管理方法,其特征在于程序調用程序包中的存儲過程,數(shù)據管理員可以禁用部分暫時不使用的觸發(fā)器,釋放數(shù)據庫資源,需要時則選擇觸發(fā)器對其進行啟用。6.根據權利要求2-4中任一項所述的基于數(shù)據內容的三維空間數(shù)據自適應日志管理方法,其特征在于監(jiān)控的數(shù)據為存儲在數(shù)據庫中的三維空間數(shù)據,監(jiān)控記錄的內容來源于所述步驟①中創(chuàng)建的觸發(fā)器獲取的各種日志。7.根據權利要求1所述的基于數(shù)據內容的三維空間數(shù)據自適應日志管理方法,其特征在于所述步驟①中,創(chuàng)建的所述三維空間數(shù)據表包括三維空間數(shù)據的工程表、圖層表、要素類表、紋理表、材質表、拓撲信息表、索引表;所述步驟①中,創(chuàng)建的所述日志表包括系統(tǒng)日志表、用戶登錄日志表和數(shù)據庫更新日志^^o8.根據權利要求1所述的基于數(shù)據內容的三維空間數(shù)據自適應日志管理方法,其特征在于,所述步驟④包括以下子步驟將日志數(shù)據備份到本地的TXT文本,當日志數(shù)據被破壞時將TXT文件導入數(shù)據庫重載日志數(shù)據;利用所述表觸發(fā)器記錄的日志內容,選擇某個具體時刻的數(shù)據進行恢復,利用日志記錄的詳細操作內容在數(shù)據庫中進行恢復操作。全文摘要本發(fā)明涉及地學信息工程
技術領域:
,尤其涉及一種基于數(shù)據內容的三維空間數(shù)據自適應日志管理方法。本發(fā)明針對三維空間數(shù)據的特點,采用面向對象的方法進行設計和開發(fā),利用數(shù)據庫管理系統(tǒng)內的擴展SQL程序塊(包括存儲過程、觸發(fā)器等)在建庫時自動創(chuàng)建數(shù)據表及其相應觸發(fā)器,在存儲三維空間數(shù)據時動態(tài)創(chuàng)建要素對象表和觸發(fā)器,能高效創(chuàng)建三維空間數(shù)據表和日志表并實時監(jiān)控和記錄用戶操作。本發(fā)明能根據備份日志文件恢復完整日志表內容,數(shù)據管理系統(tǒng)可根據日志記錄內容快速恢復三維空間數(shù)據,保障數(shù)據庫中日志數(shù)據和三維空間數(shù)據的安全性和完整性,提高了空間數(shù)據庫系統(tǒng)的應用性能。文檔編號G06F17/30GK101916300SQ20101026910公開日2010年12月15日申請日期2010年9月1日優(yōu)先權日2010年9月1日發(fā)明者何世波,何珍文,劉軍旗,劉剛,吳沖龍,孔春芳,張夏林,徐凱,李新川,李晶,田宜平,翁正平申請人:中國地質大學(武漢)