原文鏈接:http://www.gis8.net/Article/arcgis/200611/362.htm
隨著GIS應(yīng)用系統(tǒng)在復(fù)雜性、集成性、并發(fā)性等方面的要求不斷增加,系統(tǒng)所需的空間數(shù)據(jù)量在急劇地增長(zhǎng),同時(shí)用戶對(duì)空間數(shù)據(jù)并發(fā)訪問(wèn)的需求也越來(lái)越突出。以傳統(tǒng)的文件形式存儲(chǔ)和表示空間數(shù)據(jù)的方法顯然已經(jīng)無(wú)法滿足這些需求。由于ArcSDE本身所具有的海量數(shù)據(jù)存儲(chǔ)、多用戶并發(fā)訪問(wèn)、版本管理、長(zhǎng)事務(wù)處理等強(qiáng)大優(yōu)勢(shì),在GIS應(yīng)用系統(tǒng)中引入ArcSDE作為空間數(shù)據(jù)存儲(chǔ)和管理引擎,變得越來(lái)越普遍。ArcSDE作為空間數(shù)據(jù)庫(kù)引擎,在ArcGIS 8.1系列軟件中屬于服務(wù)器端的產(chǎn)品,在整個(gè)產(chǎn)品框架中,處于數(shù)據(jù)中心的重要地位,它利用Oracle、DB2、SQL Server、Informix等關(guān)系型數(shù)據(jù)庫(kù)在數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)完整性等方面的先進(jìn)技術(shù)手段,將海量空間數(shù)據(jù)(包括矢量數(shù)據(jù)和柵格數(shù)據(jù))有機(jī)地組織和管理起來(lái),通過(guò)其內(nèi)部異步緩沖、空間索引等先進(jìn)的機(jī)制,提供對(duì)空間數(shù)據(jù)的多用戶高效并發(fā)訪問(wèn)。
除了存儲(chǔ)空間數(shù)據(jù)并提供訪問(wèn),對(duì)于空間數(shù)據(jù)的備份和恢復(fù),是空間數(shù)據(jù)管理中最重要的工作環(huán)節(jié)之一,也是保障空間數(shù)據(jù)安全的重要方式。首先,空間數(shù)據(jù)本身在應(yīng)用過(guò)程中不斷地被更新變動(dòng),所以經(jīng)常會(huì)需要備份不同時(shí)期,不同的空間數(shù)據(jù)版本;第二,存儲(chǔ)介質(zhì)的意外損壞會(huì)導(dǎo)致嚴(yán)重的空間數(shù)據(jù)丟失,因此需要定期對(duì)空間數(shù)據(jù)對(duì)象的整體進(jìn)行完全備份;第三,有時(shí)出于調(diào)整的必要,需要在不同服務(wù)器、甚至不同數(shù)據(jù)庫(kù)管理系統(tǒng)之間進(jìn)行空間數(shù)據(jù)的移植和轉(zhuǎn)換。
在采用文件形式空間數(shù)據(jù)的時(shí)代,空間數(shù)據(jù)的備份僅僅是操作系統(tǒng)中的文件拷貝、備份和歸檔的過(guò)程;而空間數(shù)據(jù)的恢復(fù)也不過(guò)是復(fù)制、覆蓋的操作;在基于ArcSDE和關(guān)系型數(shù)據(jù)庫(kù)的空間數(shù)據(jù)庫(kù)時(shí)代,空間數(shù)據(jù)的備份更多的依賴于關(guān)系型數(shù)據(jù)庫(kù)的備份和恢復(fù)技術(shù),當(dāng)然也不能缺少ArcSDE所提供的備份工具。按照備份的方式和對(duì)象,ArcSDE中空間數(shù)據(jù)的備份和恢復(fù)可以分為如下兩類:指定空間數(shù)據(jù)對(duì)象的備份恢復(fù),和整體空間數(shù)據(jù)庫(kù)的備份恢復(fù)。
一、 指定空間數(shù)據(jù)對(duì)象的備份和恢復(fù)
這種方式主要用于備份指定的空間數(shù)據(jù)對(duì)象,比如某個(gè)圖層和要素類、其中的某些滿足特定條件的記錄、甚至特定的版本。實(shí)現(xiàn)這種備份方式的方法主要是利用ArcSDE提供的管理工具:sdeexport和sdeimport命令。它們的位置在%ArcSDEHOME%\bin\中。其中,sdeexport用于將空間數(shù)據(jù)從ArcSDE Server上備份為單獨(dú)的數(shù)據(jù)文件,而sdeimport用于將經(jīng)由sdeexport備份的數(shù)據(jù)文件恢復(fù)到ArcSDE Server中。
這一方式的缺點(diǎn)在于不能一次備份完整的空間數(shù)據(jù)庫(kù)。但是也有個(gè)明顯的優(yōu)點(diǎn),在于通過(guò)sdeexport和sdeimport工具,可以將空間數(shù)據(jù)在不同的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)之間進(jìn)行移植。
1. 備份全部記錄
使用sdeexport命令的缺省方式即可,比如:
(1) 將指定的圖層備份到備份文件
sdeexport -o create -l dcxq,shape -f d:\dcxq.exp -i jerry_oracle -u sde -p sde
就是將名為jerry_oracle的sde服務(wù)(ArcSDE for Oracle8i)中的指定圖層“dcxq”按缺省方式備份到文件d:\dcxq.exp中。
(2) 利用操作系統(tǒng)命令,拷貝備份文件到目標(biāo)服務(wù)器上
(3) 將備份文件恢復(fù)至目標(biāo)RDBMS中
sdeimport -o create -l newDcxq,shape -f d:\dcxq.exp -i jerry_sqlsvr -u sde -p sde
此操作將備份文件恢復(fù)到名為jerry_sqlsvr的sde服務(wù)(ArcSDE for SQLServer)中,圖層名為:newDcxq。
2. 備份部分記錄
sdeexport命令中添加-w參數(shù)和一個(gè)條件選擇表達(dá)式即可,比如:
(1) 將指定圖層中滿足條件的記錄備份到備份文件
sdeexport -o create -l dcxq,shape -f d:\dcxq.exp -w xzqy = '徐匯區(qū)' -i jerry_oracle -u sde -p sde
就是將名為jerry_oracle的sde服務(wù)(ArcSDE for Oracle8i)內(nèi)的指定圖層“dcxq”中所有"徐匯區(qū)"的人口調(diào)查小區(qū)備份到文件d:\dcxq.exp中。
(2) 利用操作系統(tǒng)命令,拷貝備份文件到目標(biāo)服務(wù)器上
(3) 將備份文件恢復(fù)至目標(biāo)RDBMS中
sdeimport -o create -l XHDcxq,shape -f d:\dcxq.exp -i jerry_sqlsvr -u sde -p sde
此操作將備份文件恢復(fù)到名為jerry_sqlsvr的sde服務(wù)(ArcSDE for SQLServer)中,圖層名為:XHDcxq。
3. 備份特定數(shù)據(jù)版本
sdeexport命令中添加-v參數(shù)和一個(gè)版本名稱即可,比如:
(1) 將指定圖層的特定版本備份到備份文件
sdeexport -o create -l dcxq,shape -f d:\dcxq.exp -V verAPR -i jerry_oracle -u sde -p sde
此操作將名為jerry_oracle的sde服務(wù)(ArcSDE for Oracle8i)內(nèi)的指定圖層“dcxq”的verAPR版本備份到文件d:\dcxq.exp中。
(2) 利用操作系統(tǒng)命令,拷貝備份文件到目標(biāo)服務(wù)器上
(3) 將備份文件恢復(fù)至目標(biāo)RDBMS中
sdeimport -o create -l APRdcxq,shape -f d:\dcxq.exp -i jerry_sqlsvr -u sde -p sde
此操作將備份文件恢復(fù)到名為jerry_sqlsvr的sde服務(wù)(ArcSDE for SQLServer)中,圖層名為:APRDcxq。
二、 整體空間數(shù)據(jù)庫(kù)的備份和恢復(fù)
ArcSDE空間數(shù)據(jù)庫(kù)的整體備份和恢復(fù),實(shí)質(zhì)上很大程度上是其所在的數(shù)據(jù)庫(kù)或者數(shù)據(jù)庫(kù)對(duì)象的備份和恢復(fù)問(wèn)題。當(dāng)然完整的ArcSDE數(shù)據(jù)備份應(yīng)當(dāng)還包括dbtune.sde,giomgr.defs,dbinit.sde和services.sde等文件。
數(shù)據(jù)庫(kù)的備份和恢復(fù)有很多種類。在不同的數(shù)據(jù)庫(kù)管理系統(tǒng)中,更是千差萬(wàn)別。總體上,大都可以分為靜態(tài)轉(zhuǎn)儲(chǔ)和動(dòng)態(tài)轉(zhuǎn)儲(chǔ)兩個(gè)類型。靜態(tài)轉(zhuǎn)儲(chǔ)是在系統(tǒng)中無(wú)事務(wù)處理時(shí)進(jìn)行的轉(zhuǎn)儲(chǔ)操作,因而這種方式得到的一定是一個(gè)數(shù)據(jù)一致性的副本。靜態(tài)轉(zhuǎn)儲(chǔ)的優(yōu)點(diǎn)是操作簡(jiǎn)單,保證數(shù)據(jù)一致性,但是缺點(diǎn)也很明顯,轉(zhuǎn)儲(chǔ)操作必須等待用戶事務(wù)結(jié)束才能進(jìn)行,而新的事務(wù)必須等待轉(zhuǎn)儲(chǔ)操作結(jié)束才能執(zhí)行,因此會(huì)降低數(shù)據(jù)庫(kù)的可用性。動(dòng)態(tài)轉(zhuǎn)儲(chǔ)是指轉(zhuǎn)儲(chǔ)操作與用戶事務(wù)并發(fā)進(jìn)行,轉(zhuǎn)儲(chǔ)期間允許數(shù)據(jù)庫(kù)進(jìn)行存取和修改操作,它不必等待所有運(yùn)行的事務(wù)結(jié)束,也不會(huì)影響新事務(wù)的運(yùn)行,但是無(wú)法保證副本中的數(shù)據(jù)正確、有效、完整。所以在動(dòng)態(tài)轉(zhuǎn)儲(chǔ)期間,往往會(huì)建立日志文件。后備文件加上日志文件就可以把數(shù)據(jù)庫(kù)恢復(fù)到正確的狀態(tài)。
1. Oracle數(shù)據(jù)庫(kù)
(1) 兩種歸檔模式(archive mode)
Oracle有兩中歸檔模式:NO ARCHIVELOG和ARCHIVELOG。在NO ARCHIVELOG模式(該模式為缺省模式)下的數(shù)據(jù)庫(kù)操作不歸檔在線日志重做文件。當(dāng)存儲(chǔ)介質(zhì)損壞時(shí),NO ARCHIVELOG模式的數(shù)據(jù)庫(kù)只能恢復(fù)到上一次的備份點(diǎn)上。ARCHIVELOG模式的數(shù)據(jù)庫(kù)可以通過(guò)上一次的備份和歸檔日志重做文件相結(jié)合的方式,恢復(fù)到介質(zhì)損壞之前的點(diǎn)上。
以NO ARCHIVELOG模式創(chuàng)建的Oracle數(shù)據(jù)庫(kù)可以切換至ARCHIVELOG模式。
(2) 多種備份與恢復(fù)方式
Oracle中的數(shù)據(jù)備份和恢復(fù)方式包括:脫機(jī)備份與恢復(fù)、邏輯備份與恢復(fù)、熱備份與恢復(fù)。
* 脫機(jī)備份與恢復(fù):脫機(jī)備份是一種靜態(tài)轉(zhuǎn)儲(chǔ)技術(shù),備份在數(shù)據(jù)庫(kù)關(guān)閉、不工作的狀態(tài)下進(jìn)行。脫機(jī)備份包括兩種實(shí)現(xiàn)方式:第一種是使用Oracle提供的工具Backup/Recover;第二種是利用操作系統(tǒng)的復(fù)制功能,復(fù)制數(shù)據(jù)文件,即:冷備份。
* 邏輯備份與恢復(fù):邏輯備份與恢復(fù)是指將數(shù)據(jù)庫(kù)、用戶和表等對(duì)象的內(nèi)容整個(gè)轉(zhuǎn)出到一個(gè)二進(jìn)制文件,然后在需要的時(shí)候通過(guò)轉(zhuǎn)入恢復(fù)到原來(lái)的形式。這種方式可以備份整個(gè)數(shù)據(jù)庫(kù),指定用戶和指定表的內(nèi)容。
* 熱備份與恢復(fù):脫機(jī)備份和邏輯備份通常是用戶不訪問(wèn)數(shù)據(jù)庫(kù)時(shí)的靜態(tài)備份操作。這些備份只保證數(shù)據(jù)備份前的一致性和完整性,不保證備份期間的數(shù)據(jù)一致性。為了保證數(shù)據(jù)的即時(shí)一致性,在備份數(shù)據(jù)的同時(shí)還需要備份日志文件。數(shù)據(jù)庫(kù)運(yùn)行在ARCHIVELOG方式下,同時(shí)作數(shù)據(jù)和日志文件的備份稱為熱備份。
(3) 實(shí)現(xiàn)步驟
選擇使用何種備份方式,由具體的數(shù)據(jù)備份需求所決定。具體的Oracle數(shù)據(jù)庫(kù)備份實(shí)現(xiàn)步驟需要參考Oracle相關(guān)文檔,比如《Oracle8 Backup and Recovery Guide》。本實(shí)例采用Oracle中的邏輯備份,使用了exp和imp工具,以sde用戶方式備份和恢復(fù)整體空間數(shù)據(jù)。
* 備份數(shù)據(jù)庫(kù):使用Oracle中的exp命令,以sde用戶方式備份所有相關(guān)數(shù)據(jù)。
* 恢復(fù)數(shù)據(jù)庫(kù):使用Oracle中的imp命令,以sde用戶方式恢復(fù)后備數(shù)據(jù)文件。
* 恢復(fù)ArcSDE系統(tǒng)文件:如果有必要,在恢復(fù)oracle數(shù)據(jù)之后,需要恢復(fù)安裝ArcSDE的程序文件;另外還需要從備份機(jī)器上恢復(fù)dbtune,giomgr.defs,dbinit.sde,和services.sde文件。
2. SQLServer數(shù)據(jù)庫(kù)
(1)備份和恢復(fù)方式
在MS SQL Server中,ArcSDE利用單獨(dú)的用戶數(shù)據(jù)庫(kù)SDE(缺省名)來(lái)管理和組織空間數(shù)據(jù)。
SQLServer不僅可以在同一臺(tái)服務(wù)器上備份和恢復(fù)數(shù)據(jù)庫(kù),還允許通過(guò)備份和恢復(fù)的方式在不同服務(wù)器之間很輕松地移動(dòng)數(shù)據(jù)庫(kù)。MS SQL Server也允許將一個(gè)服務(wù)器上的數(shù)據(jù)庫(kù)備份恢復(fù)到另外一臺(tái)服務(wù)器上。
如果要將數(shù)據(jù)庫(kù)備份恢復(fù)到另外一臺(tái)服務(wù)器上,兩臺(tái)服務(wù)器上的code page和排序方式必須相同。比如,不能把用二進(jìn)制排序方式(Binary Sort Order,BSO)建立的數(shù)據(jù)庫(kù)恢復(fù)到一個(gè)配置為缺省排序方式(字典順序,dictionary)的服務(wù)器上。當(dāng)然,可以通過(guò)在master數(shù)據(jù)庫(kù)中運(yùn)行'sp_helpsort'存儲(chǔ)過(guò)程設(shè)定服務(wù)器的排序方式。
數(shù)據(jù)庫(kù)的備份操作同時(shí)備份了數(shù)據(jù)庫(kù)的系統(tǒng)表,包括sysusers。當(dāng)在不同的服務(wù)器上執(zhí)行備份和恢復(fù)操作時(shí),備份數(shù)據(jù)庫(kù)中所包含的用戶可能會(huì)和新的服務(wù)器上master數(shù)據(jù)庫(kù)中sysxlogins表中包含的用戶不同。這樣的話,就無(wú)法登錄到恢復(fù)后的數(shù)據(jù)庫(kù),知道更正并統(tǒng)一master數(shù)據(jù)庫(kù)中sysxlogins表和恢復(fù)數(shù)據(jù)庫(kù)中sysusers表的登錄映射。要使上述兩個(gè)表同步,需要運(yùn)行"sp_change_users_login"存儲(chǔ)過(guò)程。
(2)實(shí)現(xiàn)步驟
* 備份SDE數(shù)據(jù)庫(kù)到備份文件:既可以使用T-SQL中的BACKUP語(yǔ)句,也可以使用企業(yè)管理器中的備份工具向?qū)?lái)完成SDE和其他空間數(shù)據(jù)庫(kù)的備份。
* 將備份文件復(fù)制到目標(biāo)服務(wù)器
* 將備份文件恢復(fù)到目標(biāo)服務(wù)器:可以使用企業(yè)管理器中的恢復(fù)還原工具向?qū)?lái)完成SDE和其他空間數(shù)據(jù)庫(kù)的恢復(fù)。
* 統(tǒng)一SDE用戶登錄映射
A. 兩個(gè)服務(wù)器上都有SDE用戶,但是兩者的SDE用戶具有不同的標(biāo)識(shí)
當(dāng)恢復(fù)SDE數(shù)據(jù)庫(kù)至新的服務(wù)器后,sde數(shù)據(jù)庫(kù)中的sde用戶的SID與master數(shù)據(jù)庫(kù)中dbo.sysxlogins表中的sde登錄名的SID不同,比如:
Use sde
go
Select SID from sysusers where name = 'sde'
Use master
go
select SID from sysxlogins where name = 'sde'
SID
-----------------------------------------------------------
0x76695419BFAED41184FD00C04F8D0451
(1 row(s) affected)
SID
-----------------------------------------------------------
0xEDDFCA8E56B0D411850000C04F8D0451
(1 row(s) affected)
此時(shí)必須統(tǒng)一兩個(gè)表中sde用戶的SID標(biāo)識(shí),運(yùn)行"sp_change_users_login" 存儲(chǔ)過(guò)程,示例如下:
Use sde
go
sp_change_users_login 'update_one','sde','sde'
運(yùn)行上述的SID查詢來(lái)驗(yàn)證修改結(jié)果:
0xEDDFCA8E56B0D411850000C04F8D0451
0xEDDFCA8E56B0D411850000C04F8D0451
可以看出修改后兩個(gè)表中sde用戶的SID標(biāo)識(shí)完全一致,此時(shí)就可以啟動(dòng)ArcSDE for SQLServer的服務(wù)來(lái)使用了。
B. 目標(biāo)服務(wù)器上還沒(méi)有SDE用戶
這種情形是指目標(biāo)服務(wù)器上還沒(méi)有sde登錄用戶,此時(shí)執(zhí)行上述的SID查詢,結(jié)果如下:
Use sde
go
Select SID from sysusers where name = 'sde'
Use master
go
select SID from sysxlogins where name = 'sde'
SID
-----------------------------------------------------------
0x76695419BFAED41184FD00C04F8D0451
(1 row(s) affected)
SID
-----------------------------------------------------------
(0 row(s) affected)
要矯正這種情況,需要首先到目標(biāo)服務(wù)器中添加sde登錄用戶,但是不要將sde數(shù)據(jù)庫(kù)的權(quán)限授予sde用戶。添加登錄用戶,使用"sp_addlogin"存儲(chǔ)過(guò)程和在企業(yè)管理器中使用登錄管理工具。比如:
sp_addlogin 'sde','go','sde'
然后需要運(yùn)行 "sp_change_users_login" 存儲(chǔ)過(guò)程來(lái)統(tǒng)一master內(nèi)dbo.sysxlogins表和恢復(fù)后用戶數(shù)據(jù)庫(kù)內(nèi)sysusers表中的sde用戶SID標(biāo)識(shí)。
use sde
go
sp_change_users_login 'update_one','sde','sde'
最后,可以執(zhí)行SID查詢來(lái)驗(yàn)證SID的一致性:
Use sde
Go
Select SID from sysusers where name = 'sde'
Use master
Go
select SID from sysxlogins where name = 'sde'
SID
-----------------------------------------------------------
0xF6DFCA8E56B0D411850000C04F8D0451
(1 row(s) affected)
SID
-----------------------------------------------------------
0xF6DFCA8E56B0D411850000C04F8D0451
(1 row(s) affected)
經(jīng)過(guò)SDE用戶的SID的統(tǒng)一之后,就可以啟動(dòng)ArcSDE服務(wù)或者使用直接連接(direct connection)方式使用恢復(fù)后的空間數(shù)據(jù)了。