專利名稱::基于數(shù)據(jù)內(nèi)容的三維空間數(shù)據(jù)自適應(yīng)日志管理方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及地學(xué)信息工程
技術(shù)領(lǐng)域:
,尤其涉及一種基于數(shù)據(jù)內(nèi)容的三維空間數(shù)據(jù)自適應(yīng)日志管理方法。
背景技術(shù):
:三維空間數(shù)據(jù)具有多源、多類、多維、多量、多時態(tài)和多主題等重要特征,因此在數(shù)據(jù)庫中確保三維空間數(shù)據(jù)的安全性和完整性,有效管理三維空間數(shù)據(jù)對空間信息系統(tǒng)建設(shè)和應(yīng)用具有重要作用。目前在三維空間數(shù)據(jù)的管理系統(tǒng)中,極少有關(guān)于日志模塊的高效設(shè)計和管理。因此一旦用戶無意或蓄意破壞空間數(shù)據(jù),則很難恢復(fù)到破壞前的數(shù)據(jù)狀態(tài)。同時由于三維空間數(shù)據(jù)的海量特性,如果采用Oracle、DB2等大型數(shù)據(jù)庫系統(tǒng)的恢復(fù)技術(shù)將整個數(shù)據(jù)庫恢復(fù)到破壞前的正確狀態(tài)將耗費大量的資源和時間,也將影響數(shù)據(jù)庫的整體性能°哦日志主要記錄系統(tǒng)的運行情況,即用戶對系統(tǒng)的各個詳細(xì)操作,包括外部請求及內(nèi)部響應(yīng)過程中各個對象對應(yīng)表的創(chuàng)建、刪除、提取等。一方面記錄空間數(shù)據(jù)庫的內(nèi)部的操作(包括INSERT、DELETE、UPDATE等),另一方面記錄存儲空間對象與數(shù)據(jù)庫系統(tǒng)的對應(yīng)操作(包括CREATE、DROP、ALTER等),做到可查詢完成每個外部請求操作和相應(yīng)內(nèi)部的處理過程。并根據(jù)記錄情況對空間數(shù)據(jù)的操作進(jìn)行恢復(fù),保障空間數(shù)據(jù)庫的安全。在開發(fā)階段,日志主要用來作為軟件測試的手段之一。在運行階段,日志作為開發(fā)人員定位和修改故障的主要依據(jù),日志可以為審計和監(jiān)測數(shù)據(jù)庫提供數(shù)據(jù)。系統(tǒng)管理員根據(jù)日志來評價安全程序的效率并確定引起安全破壞或系統(tǒng)功能失效的原因。同時可以根據(jù)日志內(nèi)容將因為意外改變或意外刪除的數(shù)據(jù)恢復(fù)為原貌,能重構(gòu)完整的數(shù)據(jù)庫。日志管理模塊將軟件系統(tǒng)中記錄日志的操作提取出來形成獨立的模塊,降低系統(tǒng)的耦合度,提高復(fù)用性。通過日志系統(tǒng)對保證數(shù)據(jù)庫一致性起著重要作用,同時為數(shù)據(jù)庫的數(shù)據(jù)安全提供了保障。在開發(fā)數(shù)據(jù)庫系統(tǒng)軟件時,傳統(tǒng)的日志管理模塊一股有兩種方法獲取日志信息。一是在客戶端(C/S)或者應(yīng)用服務(wù)器(B/S)上對每個功能模塊編寫日志的處理子模塊;二是在創(chuàng)建數(shù)據(jù)表后對需要觸發(fā)器的表分別創(chuàng)建,將日志管理全部或部分轉(zhuǎn)換到數(shù)據(jù)庫中。這兩種方法都有弊端,如果采用對每個功能模塊編寫日志的方法,則程序開發(fā)人員的編程量大,開發(fā)效率低,同時在前臺程序中處理日志將占用內(nèi)存資源,影響用戶操作;后一種方法有所進(jìn)步,但是創(chuàng)建觸發(fā)器與觸發(fā)事件存在時間差,并且不能動態(tài)的為新建的表建立觸發(fā)器。特別是在對重要數(shù)據(jù)和大量數(shù)據(jù)庫表創(chuàng)建觸發(fā)器時,傳統(tǒng)方法的安全性和效率都將大大降低。因此有必要提出一種新型實用的日志管理方法,特別是在應(yīng)用三維空間信息系統(tǒng)以及管理三維空間數(shù)據(jù)的情況下,需要對這些數(shù)據(jù)進(jìn)行重要維護(hù)和管理并進(jìn)行相應(yīng)功能的研究,以奠定不同于傳統(tǒng)而是基于三維空間數(shù)據(jù)和大型數(shù)據(jù)庫系統(tǒng)的三維空間數(shù)據(jù)自適應(yīng)日志管理系統(tǒng)的基礎(chǔ)。
發(fā)明內(nèi)容針對上述存在的技術(shù)問題,本發(fā)明的目的是提供一種基于數(shù)據(jù)內(nèi)容的三維空間數(shù)據(jù)自適應(yīng)日志管理方法,從而在三維空間數(shù)據(jù)維護(hù)和管理的應(yīng)用中,提高系統(tǒng)的安全性和效率。為達(dá)到上述目的,本發(fā)明采用如下的詳細(xì)技術(shù)方案①用戶調(diào)用系統(tǒng)程序包自動創(chuàng)建結(jié)構(gòu)相異的三維空間數(shù)據(jù)表、日志表及其相應(yīng)表的觸發(fā)器;②在客戶端程序中用戶需要存儲要素對象的數(shù)據(jù)時,調(diào)用用戶程序包動態(tài)創(chuàng)建基本結(jié)構(gòu)相同的三維空間要素對象表、要素對象的L0D信息表和對應(yīng)表的觸發(fā)器,并通過觸發(fā)器獲取詳細(xì)的日志信息;③當(dāng)用戶暫時不處理部分?jǐn)?shù)據(jù)表時,在服務(wù)器端通過設(shè)置觸發(fā)器開關(guān),及時釋放數(shù)據(jù)庫資源;④數(shù)據(jù)庫日志信息被破壞需要恢復(fù)時,利用程序備份的TXT日志信息文件,將其加載到數(shù)據(jù)庫端,實現(xiàn)日志的快速恢復(fù)。在所述步驟①之前還包括以下步驟分析存儲在數(shù)據(jù)庫中的三維空間數(shù)據(jù)的特性和需要記錄的日志信息類型,將需要在新建用戶時創(chuàng)建的數(shù)據(jù)表和日志表以及相應(yīng)觸發(fā)器的SQL語句程序塊記錄在系統(tǒng)程序包中;動態(tài)存儲要素對象時用于創(chuàng)建要素對象表、要素對象L0D信息表和觸發(fā)器的SQL語句程序塊記錄在用戶程序包里;系統(tǒng)程序包在新建數(shù)據(jù)庫用戶前加載到數(shù)據(jù)庫服務(wù)器端,用戶程序包在新建數(shù)據(jù)庫時隨程序一起加載到新建的用戶方案。所述步驟①中,根據(jù)三維空間數(shù)據(jù)的結(jié)構(gòu)和類型特性,在創(chuàng)建新的數(shù)據(jù)庫用戶時自動調(diào)用數(shù)據(jù)庫管理系統(tǒng)的存儲函數(shù)實現(xiàn)自動創(chuàng)建結(jié)構(gòu)相異的數(shù)據(jù)庫表、日志表和表觸發(fā)器的功能。所述步驟②中,當(dāng)管理員向數(shù)據(jù)庫中存儲要素對象時,利用數(shù)據(jù)庫用戶程序包內(nèi)的存儲過程和函數(shù)動態(tài)創(chuàng)建基本結(jié)構(gòu)相同的三維空間要素對象表、要素對象L0D信息表及其表觸發(fā)器,進(jìn)而向數(shù)據(jù)庫中存入三維空間數(shù)據(jù)要素對象。程序調(diào)用程序包中的存儲過程,數(shù)據(jù)管理員可以禁用部分暫時不使用的觸發(fā)器,釋放數(shù)據(jù)庫資源,需要時則選擇觸發(fā)器對其進(jìn)行啟用。監(jiān)控的數(shù)據(jù)為存儲在數(shù)據(jù)庫中的三維空間數(shù)據(jù),監(jiān)控記錄的內(nèi)容來源于所述步驟①中創(chuàng)建的觸發(fā)器獲取的各種日志。所述步驟①中,創(chuàng)建的所述三維空間數(shù)據(jù)表包括三維空間數(shù)據(jù)的工程表、圖層表、要素類表、紋理表、材質(zhì)表、拓?fù)湫畔⒈?、索引表;所述步驟①中,創(chuàng)建的所述日志表包括系統(tǒng)日志表、用戶登錄日志表和數(shù)據(jù)庫更新日志表。所述步驟④包括以下子步驟將日志數(shù)據(jù)備份到本地的TXT文本,當(dāng)日志數(shù)據(jù)被破壞時將TXT文件導(dǎo)入數(shù)據(jù)庫重載日志數(shù)據(jù);利用所述表觸發(fā)器記錄的日志內(nèi)容,選擇某個具體時刻的數(shù)據(jù)進(jìn)行恢復(fù),利用日志記錄的詳細(xì)操作內(nèi)容在數(shù)據(jù)庫中進(jìn)行恢復(fù)操作。本發(fā)明具有以下優(yōu)點和積極效果1)本發(fā)明利用存儲過程自動創(chuàng)建數(shù)據(jù)庫表和觸發(fā)器,相比在建庫結(jié)束后創(chuàng)建表要省時省力;2)本發(fā)明的三維空間數(shù)據(jù)表是動態(tài)創(chuàng)建的,相比傳統(tǒng)方法本發(fā)明利用數(shù)據(jù)庫用戶內(nèi)的程序包在程序中由用戶在存儲三維空間要素對象時自動創(chuàng)建要素對象表和觸發(fā)器,省略了編寫重復(fù)代碼的繁瑣工作;3)本發(fā)明采用觸發(fā)器開關(guān)機制,對于暫時不需要記錄用戶操作的數(shù)據(jù)表,可通過傳入觸發(fā)器名調(diào)用存儲過程將其禁用,從而釋放資源,優(yōu)化數(shù)據(jù)庫性能;4)本發(fā)明根據(jù)備份的日志記錄文件,快速恢復(fù)完整的日志信息。程序?qū)⑷罩颈淼男畔浞轂門XT文件,當(dāng)日志信息表遭受無意或蓄意破壞時,管理員能將備份數(shù)據(jù)重新加載到數(shù)據(jù)庫中。當(dāng)三維空間數(shù)據(jù)被破壞時,用戶根據(jù)完備日志信息查找到破壞的數(shù)據(jù)和機器IP,進(jìn)而啟動數(shù)據(jù)管理系統(tǒng)中的三維空間數(shù)據(jù)恢復(fù)功能,實現(xiàn)三維空間數(shù)據(jù)的完備性;5)本發(fā)明合理有效的利用數(shù)據(jù)庫的相關(guān)技術(shù),能有效利用數(shù)據(jù)庫的各個功能,節(jié)省開發(fā)時間提高開發(fā)效率,相比傳統(tǒng)的建立日志管理處理子模塊或者僅使用觸發(fā)器開發(fā)的系統(tǒng),大大的提高了數(shù)據(jù)庫的性能,提高程序開發(fā)的效率。圖1是本發(fā)明提供的基于數(shù)據(jù)內(nèi)容的三維空間數(shù)據(jù)自適應(yīng)日志管理方法的流程圖。具體實施例方式本發(fā)明提供了一種基于數(shù)據(jù)內(nèi)容的三維空間數(shù)據(jù)自適應(yīng)日志管理方法,利用Oracle數(shù)據(jù)庫存儲過程和觸發(fā)器等PL/SQL程序塊來綜合管理,同時兼顧三維空間數(shù)據(jù)的特性設(shè)計創(chuàng)建空間數(shù)據(jù)表、日志表和觸發(fā)器的程序塊。利用程序?qū)⑷罩拘畔⒈淼膬?nèi)容備份到本地TXT文件中,一旦數(shù)據(jù)日志表被破壞時利用TXT文件將日志信息重新導(dǎo)入數(shù)據(jù)庫。當(dāng)三維空間數(shù)據(jù)被破壞時,利用日志信息查找到被破壞數(shù)據(jù)的破壞時間和具體信息,利用系統(tǒng)中的備份恢復(fù)表方案進(jìn)而恢復(fù)到破壞前的三維數(shù)據(jù)表,實現(xiàn)日志數(shù)據(jù)和三維空間數(shù)據(jù)的完整性,同時根據(jù)數(shù)據(jù)庫詳細(xì)的日志記錄實現(xiàn)三維空間數(shù)據(jù)的恢復(fù)保證三維空間數(shù)據(jù)的完備性。1)利用程序包內(nèi)的存儲過程和存儲函數(shù)實現(xiàn)自動化創(chuàng)建。將創(chuàng)建的表結(jié)構(gòu)及其觸發(fā)器內(nèi)容寫在數(shù)據(jù)庫服務(wù)器端的系統(tǒng)程序包里面,表結(jié)構(gòu)的設(shè)計根據(jù)三維空間數(shù)據(jù)的特性來確定并動態(tài)創(chuàng)建。當(dāng)管理員在前臺程序中創(chuàng)建新的數(shù)據(jù)庫用戶時,調(diào)用程序包可實現(xiàn)自動建表和觸發(fā)器的功能,一旦數(shù)據(jù)庫用戶創(chuàng)建成功,不僅將所需要的表和觸發(fā)器創(chuàng)建成功,同時還將該數(shù)據(jù)庫用戶的程序包和自定義類型等創(chuàng)建并加載到數(shù)據(jù)庫用戶下以備后續(xù)之用。程序員將創(chuàng)建要素對象表和觸發(fā)器的程序塊存放在數(shù)據(jù)庫用戶的程序包里面,并且在創(chuàng)建新的數(shù)據(jù)庫用戶時將程序包加載到新建的數(shù)據(jù)庫用戶下。當(dāng)數(shù)據(jù)管理員向數(shù)據(jù)庫存儲空間數(shù)據(jù)時系統(tǒng)會調(diào)用程序包的存儲函數(shù)實現(xiàn)要素對象表和表觸發(fā)器的自動創(chuàng)建,進(jìn)而將三維空間數(shù)據(jù)存入數(shù)據(jù)庫。2)利用觸發(fā)器獲取所有日志信息。通過創(chuàng)建的觸發(fā)器,通過觸發(fā)器機制和控制內(nèi)容可以實現(xiàn)任何時刻獲取用戶對數(shù)據(jù)庫表內(nèi)三維空間數(shù)據(jù)更新的具體操作,與傳統(tǒng)技術(shù)相比大大提高數(shù)據(jù)的安全性管理。3)利用備份數(shù)據(jù)快速恢復(fù)日志信息。利用程序?qū)⑷罩居涗洷韮?nèi)的詳細(xì)操作內(nèi)容備份為TXT文件并存入本地。數(shù)據(jù)庫中具有加載TXT文件的功能,利用重新加載的文件能快速恢復(fù)日志表的內(nèi)容。日志表記錄了詳細(xì)的用戶操作內(nèi)容,一旦三維空間數(shù)據(jù)遭到無意或蓄意破壞,數(shù)據(jù)管理系統(tǒng)能根據(jù)完整的日志信息和備份數(shù)據(jù)恢復(fù)到破壞前的三維空間數(shù)據(jù)。4)利用觸發(fā)器機制控制觸發(fā)功能。利用觸發(fā)器的可用或不可用的人為控制功能,在存儲函數(shù)中傳入觸發(fā)器名,實現(xiàn)人為控制觸發(fā)器的狀態(tài)。一旦數(shù)據(jù)庫資源不足即可關(guān)閉暫時不能更新的表格所對應(yīng)的觸發(fā)器,從而釋放資源提高數(shù)據(jù)庫的操作性能。需要時則開啟觸發(fā)開關(guān)使其可用。本發(fā)明提供了自動創(chuàng)建數(shù)據(jù)庫表及其表觸發(fā)器的功能,將創(chuàng)建的表結(jié)構(gòu)及其觸發(fā)器內(nèi)容寫在數(shù)據(jù)庫服務(wù)器端的系統(tǒng)程序包里面,表結(jié)構(gòu)的設(shè)計根據(jù)三維空間數(shù)據(jù)的特性來確定并動態(tài)創(chuàng)建。當(dāng)管理員在前臺程序中創(chuàng)建新的數(shù)據(jù)庫用戶時,調(diào)用程序包可實現(xiàn)自動建表和觸發(fā)器的功能,一旦數(shù)據(jù)庫用戶創(chuàng)建成功,不僅將所需要的表和觸發(fā)器創(chuàng)建成功,同時還將該數(shù)據(jù)庫用戶的程序包和自定義類型等創(chuàng)建并加載到數(shù)據(jù)庫用戶下以備后續(xù)之用。此過程中創(chuàng)建的表包括三維空間數(shù)據(jù)的工程表、圖層表、要素類表、紋理表、材質(zhì)表、拓?fù)湫畔⒈?、索引表等表結(jié)構(gòu)相異的基本三維空間數(shù)據(jù)表和系統(tǒng)日志表、用戶登錄日志表和數(shù)據(jù)庫更新日志表。本發(fā)明提供了在程序中存儲三維空間要素對象數(shù)據(jù)時動態(tài)創(chuàng)建相關(guān)要素對象表、要素對象L0D信息表及其觸發(fā)器,程序員將創(chuàng)建要素對象表和觸發(fā)器的程序塊存放在數(shù)據(jù)庫用戶的程序包里面,并且在創(chuàng)建新的數(shù)據(jù)庫用戶時將程序包加載到新建的數(shù)據(jù)庫用戶下,當(dāng)數(shù)據(jù)管理員向數(shù)據(jù)庫存儲數(shù)據(jù)時系統(tǒng)首先調(diào)用程序包的存儲函數(shù)實現(xiàn)要素對象表和表觸發(fā)器的自動創(chuàng)建,進(jìn)而將三維空間數(shù)據(jù)存入數(shù)據(jù)庫。通過創(chuàng)建的觸發(fā)器可以實現(xiàn)任何時刻獲取用戶對數(shù)據(jù)庫表內(nèi)三維空間數(shù)據(jù)更新的具體操作,與傳統(tǒng)技術(shù)相比大大提高數(shù)據(jù)的安全性管理。本發(fā)明提供了日志記錄的快速恢復(fù)功能。日志信息被破壞后將備份的日志信息(TXT文件)重新加載到數(shù)據(jù)庫中。利用日志記錄的詳細(xì)操作內(nèi)容快速恢復(fù)三維空間數(shù)據(jù),日志表記錄了詳細(xì)的用戶操作內(nèi)容,一旦空間數(shù)據(jù)遭到無意或蓄意破壞,根據(jù)數(shù)據(jù)管理系統(tǒng)中的備份方案恢復(fù)到破壞前的狀態(tài)。數(shù)據(jù)的恢復(fù)能保障日志數(shù)據(jù)和三維空間數(shù)據(jù)的完整性和安全性。本發(fā)明提供了自動管理觸發(fā)器的功能,其實質(zhì)是利用觸發(fā)器的可用或不可用的人為控制功能,在存儲函數(shù)中傳入觸發(fā)器名,實現(xiàn)人為控制觸發(fā)器的狀態(tài)。一旦數(shù)據(jù)庫資源不足即可關(guān)閉暫時不能更新的表格所對應(yīng)的觸發(fā)器,從而釋放資源提高數(shù)據(jù)庫的操作性能。需要時則開啟觸發(fā)開關(guān)使其可用。本發(fā)明提供了一種基于數(shù)據(jù)內(nèi)容的三維空間數(shù)據(jù)自適應(yīng)日志管理方法,該方法是針對三維空間數(shù)據(jù)的數(shù)據(jù)內(nèi)容等特點,利用大型數(shù)據(jù)庫管理系統(tǒng)(以O(shè)racle數(shù)據(jù)庫為例)中的程序包等可存儲程序來管理三維空間數(shù)據(jù)的自適應(yīng)日志管理。在三維空間數(shù)據(jù)日志管理系統(tǒng)中,根據(jù)三維空間數(shù)據(jù)的不同數(shù)據(jù)類型將數(shù)據(jù)表、日志表及其觸發(fā)器的創(chuàng)建分為兩類一類是在新建數(shù)據(jù)庫用戶時隨用戶的創(chuàng)建同時創(chuàng)建(其中包括工程表、圖層表、要素類表、紋理表、材質(zhì)表、拓?fù)湫畔⒈?、索引表、系統(tǒng)日志表、用戶登錄日志表和數(shù)據(jù)庫更新日志表等三維空間數(shù)據(jù)基本表,系統(tǒng)觸發(fā)器、用戶登錄觸發(fā)器和上述數(shù)據(jù)庫表觸發(fā)器),各表的結(jié)構(gòu)相異而且所存儲的數(shù)據(jù)表只需一個即可實現(xiàn);另一種是在數(shù)據(jù)管理員存儲三維空間要素對象時由程序動態(tài)創(chuàng)建(包括三維要素對象表、要素對象L0D信息表、DEM金字塔管理表和上述表的觸發(fā)器),每種類型的基本結(jié)構(gòu)相同而且需要創(chuàng)建的表格數(shù)量較多。兩類數(shù)據(jù)的分別創(chuàng)建實現(xiàn)了自適應(yīng)的應(yīng)用需求。利用存儲過程和觸發(fā)器不僅能在數(shù)據(jù)管理員新建數(shù)據(jù)庫用戶時自動創(chuàng)建固定結(jié)構(gòu)的數(shù)據(jù)庫表和觸發(fā)器,同時在存儲三維要素對象數(shù)據(jù)時能動態(tài)創(chuàng)建三維空間要素對象表、要素對象L0D信息表和對應(yīng)表的觸發(fā)器,省去程序員對創(chuàng)建類似表和觸發(fā)器編寫重復(fù)代碼的繁瑣工作。在Oracle服務(wù)器端為觸發(fā)器編寫存儲過程用于創(chuàng)建觸發(fā)開關(guān),適時禁用或啟用部分觸發(fā)器釋放資源。系統(tǒng)提供的快速恢復(fù)功能能根據(jù)詳細(xì)的日志記錄內(nèi)容將破壞的數(shù)據(jù)恢復(fù)到破壞前的狀態(tài)值,從而確保三維空間數(shù)據(jù)的完整和正確。該日志管理系統(tǒng)是三維空間數(shù)據(jù)管理系統(tǒng)的基礎(chǔ),滿足了三維空間數(shù)據(jù)管理的應(yīng)用需求。本發(fā)明是一個以三維空間數(shù)據(jù)為核心的多種技術(shù)聯(lián)合應(yīng)用、大型數(shù)據(jù)庫系統(tǒng)相關(guān)技術(shù)集成的高新技術(shù)系統(tǒng)。系統(tǒng)的開發(fā)立足于解決三維地理信息系統(tǒng)的空間數(shù)據(jù)管理問題,突破大規(guī)模地上地下、室外室內(nèi)三維空間數(shù)據(jù)一體化管理,研發(fā)高性能三維空間數(shù)據(jù)管理系統(tǒng)。體現(xiàn)了以大型數(shù)據(jù)庫系統(tǒng)為基礎(chǔ),以空間信息和屬性信息為核心,確保三維空間數(shù)據(jù)安全為目標(biāo)的設(shè)計思路。該系統(tǒng)以數(shù)據(jù)庫表為單位,其中要素對象表記錄三維空間數(shù)據(jù),日志表記錄用戶對數(shù)據(jù)庫的各項操作,包括用戶對系統(tǒng)的DDL(CREATE、DROP、ALTER)操作,用戶的登錄信息(LOGON、LOGOFF)和用戶對數(shù)據(jù)庫表的DML(INSERT、DELETE、UPDATE)操作,記錄內(nèi)容具體全面。該日志管理系統(tǒng)采用存儲過程語言、標(biāo)準(zhǔn)的代碼體系、規(guī)范的表結(jié)構(gòu)和通用的軟件接口,有較高的專業(yè)化特點。為三維空間數(shù)據(jù)的安全有效管理打下良好的基礎(chǔ)。下面結(jié)合圖1的流程圖,詳細(xì)描述本發(fā)明的具體實施步驟步驟1編寫創(chuàng)建數(shù)據(jù)庫表和觸發(fā)器的系統(tǒng)程序包和用戶程序包。分析存儲在數(shù)據(jù)庫中的三維空間數(shù)據(jù)的特性和需要記錄的日志信息類型,將需要在新建用戶時創(chuàng)建的數(shù)據(jù)表和日志表以及相應(yīng)觸發(fā)器的SQL語句程序塊記錄在系統(tǒng)程序包中;動態(tài)存儲要素對象時用于創(chuàng)建要素對象表、要素對象L0D信息表和觸發(fā)器的SQL語句程序塊記錄在用戶程序包里。兩個程序包的SQL程序塊分別以后綴為sql的類文本方式存儲在客戶端。系統(tǒng)程序包在新建數(shù)據(jù)庫用戶前加載到數(shù)據(jù)庫服務(wù)器端,用戶程序包在新建數(shù)據(jù)庫時隨程序一起加載到新建的用戶方案。以下是創(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)),;一具體操作內(nèi)容executeimmediatesql_statement;endcreate_g3d_all_syslog;步驟2創(chuàng)建數(shù)據(jù)庫用戶和數(shù)據(jù)庫表。程序初始運行時,服務(wù)器端的數(shù)據(jù)庫為空,里面的數(shù)據(jù)庫由客戶端調(diào)用具體的數(shù)據(jù)引擎接口實現(xiàn)。在數(shù)據(jù)庫中創(chuàng)建新的數(shù)據(jù)庫用戶,調(diào)用系統(tǒng)程序包內(nèi)存儲過程創(chuàng)建用于記錄三維空間數(shù)據(jù)的基本表和日志表,同時程序加載數(shù)據(jù)庫用戶的程序包,用來完成后續(xù)的相關(guān)操作,其中三維空間數(shù)據(jù)日志管理系統(tǒng)中各類日志記錄表的詳細(xì)表結(jié)構(gòu)設(shè)計如下表表1、表2、表3所示表1系統(tǒng)日志輸出表結(jié)構(gòu)〔0063〕表2用戶登陸日志輸出表結(jié)構(gòu)表3數(shù)據(jù)庫更新日志輸出表結(jié)構(gòu)步驟3創(chuàng)建系統(tǒng)觸發(fā)器、用戶登錄觸發(fā)器和數(shù)據(jù)庫表觸發(fā)器。在服務(wù)器端創(chuàng)建數(shù)據(jù)庫用戶時,客戶端會通過三維空間數(shù)據(jù)引擎調(diào)用數(shù)據(jù)庫服務(wù)器端的系統(tǒng)程序包創(chuàng)建固定表,建表完成后數(shù)據(jù)引擎會自動調(diào)用數(shù)據(jù)庫服務(wù)器端的存儲函數(shù),為三維空間數(shù)據(jù)庫已創(chuàng)建的數(shù)據(jù)表創(chuàng)建各類觸發(fā)器。觸發(fā)器成功創(chuàng)建后一旦用戶操作數(shù)據(jù)庫,觸發(fā)器被觸發(fā)并獲取用戶對數(shù)據(jù)庫和數(shù)據(jù)庫表的詳細(xì)操作,創(chuàng)建某數(shù)據(jù)表觸發(fā)器的部分SQL語句代碼如下procedurecreate_trigger(p_idinnumber)asv_sqlvarchar2(4000):=null;一執(zhí)行語句v_table_namevarchar2(4000):=null;一需要創(chuàng)建觸發(fā)器的數(shù)據(jù)表名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)|‘a(chǎn)fterinsertordeleteorupdateon‘v—table—name||‘foreachrow‘||‘declare‘||‘v_idnumber(20,0);‘||'v—namevarchar2(200);'......executeimmediatev_sql;—執(zhí)行代碼ENDcreate_trigger;步驟4創(chuàng)建觸發(fā)器開關(guān)。觸發(fā)器的使用占用較多資源,大量使用容易造成數(shù)據(jù)庫性能的下降。因此在管理員管理數(shù)據(jù)時可以有選擇性的禁用或啟用觸發(fā)器,以便釋放內(nèi)存資源空間從而提高數(shù)據(jù)庫的性能和效率。將控制觸發(fā)器開關(guān)的SQL代碼寫入存儲過程,由管理員在前臺程序中選擇需要關(guān)閉的觸發(fā)器名,數(shù)據(jù)引擎通過輸入的參數(shù)調(diào)用存儲過程進(jìn)而實現(xiàn)關(guān)觸發(fā)器的關(guān)閉。一旦需要啟用觸發(fā)器,在前臺程序中選擇相應(yīng)名稱,數(shù)據(jù)引擎調(diào)用存儲過程使其觸發(fā)器可用即可開啟。創(chuàng)建啟用觸發(fā)器的存儲過程的代碼如下所示proceduretrig_switchon(trignameinvarchar2)asv_sqlvarchar2(4000);beginv_sql:=‘a(chǎn)ltertrigger^||trigname||‘enable,;—執(zhí)行語句executeimmediatev_sql;endtrig—switchon;步驟5應(yīng)用程序動態(tài)創(chuàng)建三維空間數(shù)據(jù)要素對象表。數(shù)據(jù)管理員需要向數(shù)據(jù)庫裝載三維空間數(shù)據(jù)前,首先創(chuàng)建三維空間要素對象表。利用三維空間數(shù)據(jù)管理工具,創(chuàng)建表之前三維空間數(shù)據(jù)引擎調(diào)用存儲在數(shù)據(jù)庫用戶內(nèi)程序包的存儲函數(shù)實現(xiàn)動態(tài)創(chuàng)建,進(jìn)而向服務(wù)器端的數(shù)據(jù)庫裝載三維空間數(shù)據(jù),動態(tài)創(chuàng)建數(shù)據(jù)表的存儲過程部分代碼如下/*創(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ù)據(jù)要素對象表對應(yīng)的觸發(fā)器。在上述(3)中所述的創(chuàng)建三維空間數(shù)據(jù)要素對象表時,通過觸發(fā)器獲取到相關(guān)創(chuàng)建信息,引擎自動調(diào)用已加載到數(shù)據(jù)庫用戶下的程序包內(nèi)存儲過程為要素對象表創(chuàng)建對應(yīng)的表觸發(fā)器,其過程與上述(2)創(chuàng)建觸發(fā)器的方式不同,要素對象表的結(jié)構(gòu)均相同,創(chuàng)建觸發(fā)器只需將觸發(fā)獲取的表名作為傳入?yún)?shù)調(diào)用包內(nèi)的存儲過程,根據(jù)表名創(chuàng)建對應(yīng)要素對象表的觸發(fā)器,這樣省去了編寫重復(fù)代碼的工作,程序包內(nèi)創(chuàng)建觸發(fā)器的部分程序塊列舉如下(以O(shè)racle存儲過程為例);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快速恢復(fù)三維空間數(shù)據(jù)日志數(shù)據(jù)。當(dāng)日志數(shù)據(jù)被用戶無意或蓄意破壞后,則可以進(jìn)行快速恢復(fù)功能。利用程序?qū)⑷罩拘畔⒈淼脑敿?xì)內(nèi)容導(dǎo)入TXT文本并存儲于本地。一旦日志信息被破壞將已備份的日志信息(TXT文件)重新加載到數(shù)據(jù)庫中,加載時利用數(shù)據(jù)庫本身的導(dǎo)入功能實現(xiàn)TXT文本的導(dǎo)入。利用日志記錄的詳細(xì)操作內(nèi)容快速恢復(fù)三維空間數(shù)據(jù)的功能。日志表記錄了詳細(xì)的用戶操作內(nèi)容,一旦三維空間數(shù)據(jù)遭到無意或蓄意破壞,日志管理系統(tǒng)能根據(jù)系統(tǒng)中的備份方案,快速恢復(fù)到破壞前的狀態(tài)。本發(fā)明的快速恢復(fù)是依靠上述存儲在數(shù)據(jù)庫中的詳細(xì)日志記錄而進(jìn)行的。日志表記錄了用戶操作的時間和具體操作對象內(nèi)容。由于三維空間數(shù)據(jù)的海量特征使得三維空間數(shù)據(jù)的恢復(fù)應(yīng)只需要選擇被破壞的錯誤數(shù)據(jù)進(jìn)行局部恢復(fù),而不是將整個數(shù)據(jù)庫進(jìn)行重新創(chuàng)建并恢復(fù),否則將造成數(shù)據(jù)庫性能的下降。備份日志的代碼部分列舉如下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ā)器獲取詳細(xì)的三類日志表所需要存儲的詳細(xì)日志信息。一旦數(shù)據(jù)遭到無意或蓄意破壞,系統(tǒng)能根據(jù)日志記錄的時間和詳細(xì)操作內(nèi)容快速重構(gòu)三維空間數(shù)據(jù),實現(xiàn)數(shù)據(jù)在0raCle、DB2等大型數(shù)據(jù)庫系統(tǒng)中的有效管理。同時在服務(wù)器端設(shè)置觸發(fā)器開關(guān)禁用或啟用觸發(fā)器,達(dá)到釋放數(shù)據(jù)庫資源的目的。在三維空間數(shù)據(jù)庫自適應(yīng)日志管理方法的實施過程中,其硬件平臺體系由兩部分組成,一部分是數(shù)據(jù)庫服務(wù)器,另一部分是數(shù)據(jù)庫客戶端。所有程序包的內(nèi)容由管理員手動寫入客戶端并以文本方式存儲。新建數(shù)據(jù)庫用戶前首先將系統(tǒng)程序包手動加載到數(shù)據(jù)庫用戶中,而用戶程序包則在創(chuàng)建新的數(shù)據(jù)庫用戶時自動加載到數(shù)據(jù)庫用戶下。空間數(shù)據(jù)記錄表、日志記錄表和三類觸發(fā)器在客戶端通過數(shù)據(jù)引擎調(diào)用程序包自動創(chuàng)建在數(shù)據(jù)庫中。這樣最大性的發(fā)揮了大型數(shù)據(jù)庫系統(tǒng)的性能,為客戶端提供了高效的數(shù)據(jù)處理環(huán)境。以上實施例僅供說明本發(fā)明之用,而非對本發(fā)明的限制,有關(guān)
技術(shù)領(lǐng)域:
的技術(shù)人員,在不脫離本發(fā)明的精神和范圍的情況下,還可以作出各種變換或變型,因此所有等同的技術(shù)方案,都落入本發(fā)明的保護(hù)范圍。權(quán)利要求一種基于數(shù)據(jù)內(nèi)容的三維空間數(shù)據(jù)自適應(yīng)日志管理方法,其特征在于,包括以下步驟①用戶調(diào)用系統(tǒng)程序包自動創(chuàng)建結(jié)構(gòu)相異的三維空間數(shù)據(jù)表、日志表及其相應(yīng)表的觸發(fā)器;②在客戶端程序中用戶需要存儲要素對象的數(shù)據(jù)時,調(diào)用用戶程序包動態(tài)創(chuàng)建基本結(jié)構(gòu)相同的三維空間要素對象表、要素對象的LOD信息表和對應(yīng)表的觸發(fā)器,并通過觸發(fā)器獲取詳細(xì)的日志信息;③當(dāng)用戶暫時不處理部分?jǐn)?shù)據(jù)表時,在服務(wù)器端通過設(shè)置觸發(fā)器開關(guān),及時釋放數(shù)據(jù)庫資源;④數(shù)據(jù)庫日志信息被破壞需要恢復(fù)時,利用程序備份的TXT日志信息文件,將其加載到數(shù)據(jù)庫端,實現(xiàn)日志的快速恢復(fù)。2.根據(jù)權(quán)利要求1所述的基于數(shù)據(jù)內(nèi)容的三維空間數(shù)據(jù)自適應(yīng)日志管理方法,其特征在于,在所述步驟①之前還包括以下步驟分析存儲在數(shù)據(jù)庫中的三維空間數(shù)據(jù)的特性和需要記錄的日志信息類型,將需要在新建用戶時創(chuàng)建的數(shù)據(jù)表和日志表以及相應(yīng)觸發(fā)器的SQL語句程序塊記錄在系統(tǒng)程序包中;動態(tài)存儲要素對象時用于創(chuàng)建要素對象表、要素對象LOD信息表和觸發(fā)器的SQL語句程序塊記錄在用戶程序包里;系統(tǒng)程序包在新建數(shù)據(jù)庫用戶前加載到數(shù)據(jù)庫服務(wù)器端,用戶程序包在新建數(shù)據(jù)庫時隨程序一起加載到新建的用戶方案。3.根據(jù)權(quán)利要求2所述的基于數(shù)據(jù)內(nèi)容的三維空間數(shù)據(jù)自適應(yīng)日志管理方法,其特征在于所述步驟①中,根據(jù)三維空間數(shù)據(jù)的結(jié)構(gòu)和類型特性,在創(chuàng)建新的數(shù)據(jù)庫用戶時自動調(diào)用數(shù)據(jù)庫管理系統(tǒng)的存儲函數(shù)實現(xiàn)自動創(chuàng)建結(jié)構(gòu)相異的數(shù)據(jù)庫表、日志表和表觸發(fā)器的功能。4.根據(jù)權(quán)利要求2所述的基于數(shù)據(jù)內(nèi)容的三維空間數(shù)據(jù)自適應(yīng)日志管理方法,其特征在于所述步驟②中,當(dāng)管理員向數(shù)據(jù)庫中存儲要素對象時,利用數(shù)據(jù)庫用戶程序包內(nèi)的存儲過程和函數(shù)動態(tài)創(chuàng)建基本結(jié)構(gòu)相同的三維空間要素對象表、要素對象LOD信息表及其表觸發(fā)器,進(jìn)而向數(shù)據(jù)庫中存入三維空間數(shù)據(jù)要素對象。5.根據(jù)權(quán)利要求2-4中任一項所述的基于數(shù)據(jù)內(nèi)容的三維空間數(shù)據(jù)自適應(yīng)日志管理方法,其特征在于程序調(diào)用程序包中的存儲過程,數(shù)據(jù)管理員可以禁用部分暫時不使用的觸發(fā)器,釋放數(shù)據(jù)庫資源,需要時則選擇觸發(fā)器對其進(jìn)行啟用。6.根據(jù)權(quán)利要求2-4中任一項所述的基于數(shù)據(jù)內(nèi)容的三維空間數(shù)據(jù)自適應(yīng)日志管理方法,其特征在于監(jiān)控的數(shù)據(jù)為存儲在數(shù)據(jù)庫中的三維空間數(shù)據(jù),監(jiān)控記錄的內(nèi)容來源于所述步驟①中創(chuàng)建的觸發(fā)器獲取的各種日志。7.根據(jù)權(quán)利要求1所述的基于數(shù)據(jù)內(nèi)容的三維空間數(shù)據(jù)自適應(yīng)日志管理方法,其特征在于所述步驟①中,創(chuàng)建的所述三維空間數(shù)據(jù)表包括三維空間數(shù)據(jù)的工程表、圖層表、要素類表、紋理表、材質(zhì)表、拓?fù)湫畔⒈?、索引表;所述步驟①中,創(chuàng)建的所述日志表包括系統(tǒng)日志表、用戶登錄日志表和數(shù)據(jù)庫更新日志^^o8.根據(jù)權(quán)利要求1所述的基于數(shù)據(jù)內(nèi)容的三維空間數(shù)據(jù)自適應(yīng)日志管理方法,其特征在于,所述步驟④包括以下子步驟將日志數(shù)據(jù)備份到本地的TXT文本,當(dāng)日志數(shù)據(jù)被破壞時將TXT文件導(dǎo)入數(shù)據(jù)庫重載日志數(shù)據(jù);利用所述表觸發(fā)器記錄的日志內(nèi)容,選擇某個具體時刻的數(shù)據(jù)進(jìn)行恢復(fù),利用日志記錄的詳細(xì)操作內(nèi)容在數(shù)據(jù)庫中進(jìn)行恢復(fù)操作。全文摘要本發(fā)明涉及地學(xué)信息工程
技術(shù)領(lǐng)域:
,尤其涉及一種基于數(shù)據(jù)內(nèi)容的三維空間數(shù)據(jù)自適應(yīng)日志管理方法。本發(fā)明針對三維空間數(shù)據(jù)的特點,采用面向?qū)ο蟮姆椒ㄟM(jìn)行設(shè)計和開發(fā),利用數(shù)據(jù)庫管理系統(tǒng)內(nèi)的擴展SQL程序塊(包括存儲過程、觸發(fā)器等)在建庫時自動創(chuàng)建數(shù)據(jù)表及其相應(yīng)觸發(fā)器,在存儲三維空間數(shù)據(jù)時動態(tài)創(chuàng)建要素對象表和觸發(fā)器,能高效創(chuàng)建三維空間數(shù)據(jù)表和日志表并實時監(jiān)控和記錄用戶操作。本發(fā)明能根據(jù)備份日志文件恢復(fù)完整日志表內(nèi)容,數(shù)據(jù)管理系統(tǒng)可根據(jù)日志記錄內(nèi)容快速恢復(fù)三維空間數(shù)據(jù),保障數(shù)據(jù)庫中日志數(shù)據(jù)和三維空間數(shù)據(jù)的安全性和完整性,提高了空間數(shù)據(jù)庫系統(tǒng)的應(yīng)用性能。文檔編號G06F17/30GK101916300SQ20101026910公開日2010年12月15日申請日期2010年9月1日優(yōu)先權(quán)日2010年9月1日發(fā)明者何世波,何珍文,劉軍旗,劉剛,吳沖龍,孔春芳,張夏林,徐凱,李新川,李晶,田宜平,翁正平申請人:中國地質(zhì)大學(xué)(武漢)