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