Flyingis

          Talking and thinking freely !
          Flying in the world of GIS !
          隨筆 - 156, 文章 - 16, 評論 - 589, 引用 - 0
          數(shù)據(jù)加載中……

          ArcSDE 中空間數(shù)據(jù)的備份與恢復(fù) [轉(zhuǎn)載]

          原文鏈接:http://www.gis8.net/Article/arcgis/200611/362.htm

          隨著GIS應(yīng)用系統(tǒng)在復(fù)雜性、集成性、并發(fā)性等方面的要求不斷增加,系統(tǒng)所需的空間數(shù)據(jù)量在急劇地增長,同時(shí)用戶對空間數(shù)據(jù)并發(fā)訪問的需求也越來越突出。以傳統(tǒng)的文件形式存儲和表示空間數(shù)據(jù)的方法顯然已經(jīng)無法滿足這些需求。由于ArcSDE本身所具有的海量數(shù)據(jù)存儲、多用戶并發(fā)訪問、版本管理、長事務(wù)處理等強(qiáng)大優(yōu)勢,在GIS應(yīng)用系統(tǒng)中引入ArcSDE作為空間數(shù)據(jù)存儲和管理引擎,變得越來越普遍。ArcSDE作為空間數(shù)據(jù)庫引擎,在ArcGIS 8.1系列軟件中屬于服務(wù)器端的產(chǎn)品,在整個(gè)產(chǎn)品框架中,處于數(shù)據(jù)中心的重要地位,它利用Oracle、DB2、SQL Server、Informix等關(guān)系型數(shù)據(jù)庫在數(shù)據(jù)存儲、數(shù)據(jù)完整性等方面的先進(jìn)技術(shù)手段,將海量空間數(shù)據(jù)(包括矢量數(shù)據(jù)和柵格數(shù)據(jù))有機(jī)地組織和管理起來,通過其內(nèi)部異步緩沖、空間索引等先進(jìn)的機(jī)制,提供對空間數(shù)據(jù)的多用戶高效并發(fā)訪問。

          除了存儲空間數(shù)據(jù)并提供訪問,對于空間數(shù)據(jù)的備份和恢復(fù),是空間數(shù)據(jù)管理中最重要的工作環(huán)節(jié)之一,也是保障空間數(shù)據(jù)安全的重要方式。首先,空間數(shù)據(jù)本身在應(yīng)用過程中不斷地被更新變動,所以經(jīng)常會需要備份不同時(shí)期,不同的空間數(shù)據(jù)版本;第二,存儲介質(zhì)的意外損壞會導(dǎo)致嚴(yán)重的空間數(shù)據(jù)丟失,因此需要定期對空間數(shù)據(jù)對象的整體進(jìn)行完全備份;第三,有時(shí)出于調(diào)整的必要,需要在不同服務(wù)器、甚至不同數(shù)據(jù)庫管理系統(tǒng)之間進(jìn)行空間數(shù)據(jù)的移植和轉(zhuǎn)換。

          在采用文件形式空間數(shù)據(jù)的時(shí)代,空間數(shù)據(jù)的備份僅僅是操作系統(tǒng)中的文件拷貝、備份和歸檔的過程;而空間數(shù)據(jù)的恢復(fù)也不過是復(fù)制、覆蓋的操作;在基于ArcSDE和關(guān)系型數(shù)據(jù)庫的空間數(shù)據(jù)庫時(shí)代,空間數(shù)據(jù)的備份更多的依賴于關(guān)系型數(shù)據(jù)庫的備份和恢復(fù)技術(shù),當(dāng)然也不能缺少ArcSDE所提供的備份工具。按照備份的方式和對象,ArcSDE中空間數(shù)據(jù)的備份和恢復(fù)可以分為如下兩類:指定空間數(shù)據(jù)對象的備份恢復(fù),和整體空間數(shù)據(jù)庫的備份恢復(fù)。

          一、 指定空間數(shù)據(jù)對象的備份和恢復(fù)
          這種方式主要用于備份指定的空間數(shù)據(jù)對象,比如某個(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ù)庫。但是也有個(gè)明顯的優(yōu)點(diǎn),在于通過sdeexport和sdeimport工具,可以將空間數(shù)據(jù)在不同的關(guān)系型數(shù)據(jù)庫管理系統(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ù)庫的備份和恢復(fù)
          ArcSDE空間數(shù)據(jù)庫的整體備份和恢復(fù),實(shí)質(zhì)上很大程度上是其所在的數(shù)據(jù)庫或者數(shù)據(jù)庫對象的備份和恢復(fù)問題。當(dāng)然完整的ArcSDE數(shù)據(jù)備份應(yīng)當(dāng)還包括dbtune.sde,giomgr.defs,dbinit.sde和services.sde等文件。

          數(shù)據(jù)庫的備份和恢復(fù)有很多種類。在不同的數(shù)據(jù)庫管理系統(tǒng)中,更是千差萬別。總體上,大都可以分為靜態(tài)轉(zhuǎn)儲和動態(tài)轉(zhuǎn)儲兩個(gè)類型。靜態(tài)轉(zhuǎn)儲是在系統(tǒng)中無事務(wù)處理時(shí)進(jìn)行的轉(zhuǎn)儲操作,因而這種方式得到的一定是一個(gè)數(shù)據(jù)一致性的副本。靜態(tài)轉(zhuǎn)儲的優(yōu)點(diǎn)是操作簡單,保證數(shù)據(jù)一致性,但是缺點(diǎn)也很明顯,轉(zhuǎn)儲操作必須等待用戶事務(wù)結(jié)束才能進(jìn)行,而新的事務(wù)必須等待轉(zhuǎn)儲操作結(jié)束才能執(zhí)行,因此會降低數(shù)據(jù)庫的可用性。動態(tài)轉(zhuǎn)儲是指轉(zhuǎn)儲操作與用戶事務(wù)并發(fā)進(jìn)行,轉(zhuǎn)儲期間允許數(shù)據(jù)庫進(jìn)行存取和修改操作,它不必等待所有運(yùn)行的事務(wù)結(jié)束,也不會影響新事務(wù)的運(yùn)行,但是無法保證副本中的數(shù)據(jù)正確、有效、完整。所以在動態(tài)轉(zhuǎn)儲期間,往往會建立日志文件。后備文件加上日志文件就可以把數(shù)據(jù)庫恢復(fù)到正確的狀態(tài)。

          1. Oracle數(shù)據(jù)庫
          (1) 兩種歸檔模式(archive mode)
          Oracle有兩中歸檔模式:NO ARCHIVELOG和ARCHIVELOG。在NO ARCHIVELOG模式(該模式為缺省模式)下的數(shù)據(jù)庫操作不歸檔在線日志重做文件。當(dāng)存儲介質(zhì)損壞時(shí),NO ARCHIVELOG模式的數(shù)據(jù)庫只能恢復(fù)到上一次的備份點(diǎn)上。ARCHIVELOG模式的數(shù)據(jù)庫可以通過上一次的備份和歸檔日志重做文件相結(jié)合的方式,恢復(fù)到介質(zhì)損壞之前的點(diǎn)上。
          以NO ARCHIVELOG模式創(chuàng)建的Oracle數(shù)據(jù)庫可以切換至ARCHIVELOG模式。
          (2) 多種備份與恢復(fù)方式
          Oracle中的數(shù)據(jù)備份和恢復(fù)方式包括:脫機(jī)備份與恢復(fù)、邏輯備份與恢復(fù)、熱備份與恢復(fù)。
          * 脫機(jī)備份與恢復(fù):脫機(jī)備份是一種靜態(tài)轉(zhuǎn)儲技術(shù),備份在數(shù)據(jù)庫關(guān)閉、不工作的狀態(tài)下進(jìn)行。脫機(jī)備份包括兩種實(shí)現(xiàn)方式:第一種是使用Oracle提供的工具Backup/Recover;第二種是利用操作系統(tǒng)的復(fù)制功能,復(fù)制數(shù)據(jù)文件,即:冷備份。
          * 邏輯備份與恢復(fù):邏輯備份與恢復(fù)是指將數(shù)據(jù)庫、用戶和表等對象的內(nèi)容整個(gè)轉(zhuǎn)出到一個(gè)二進(jìn)制文件,然后在需要的時(shí)候通過轉(zhuǎn)入恢復(fù)到原來的形式。這種方式可以備份整個(gè)數(shù)據(jù)庫,指定用戶和指定表的內(nèi)容。
          * 熱備份與恢復(fù):脫機(jī)備份和邏輯備份通常是用戶不訪問數(shù)據(jù)庫時(shí)的靜態(tài)備份操作。這些備份只保證數(shù)據(jù)備份前的一致性和完整性,不保證備份期間的數(shù)據(jù)一致性。為了保證數(shù)據(jù)的即時(shí)一致性,在備份數(shù)據(jù)的同時(shí)還需要備份日志文件。數(shù)據(jù)庫運(yùn)行在ARCHIVELOG方式下,同時(shí)作數(shù)據(jù)和日志文件的備份稱為熱備份。
          (3) 實(shí)現(xiàn)步驟
          選擇使用何種備份方式,由具體的數(shù)據(jù)備份需求所決定。具體的Oracle數(shù)據(jù)庫備份實(shí)現(xiàn)步驟需要參考Oracle相關(guān)文檔,比如《Oracle8 Backup and Recovery Guide》。本實(shí)例采用Oracle中的邏輯備份,使用了exp和imp工具,以sde用戶方式備份和恢復(fù)整體空間數(shù)據(jù)。
          * 備份數(shù)據(jù)庫:使用Oracle中的exp命令,以sde用戶方式備份所有相關(guān)數(shù)據(jù)。
          * 恢復(fù)數(shù)據(jù)庫:使用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ù)庫
          (1)備份和恢復(fù)方式
          在MS SQL Server中,ArcSDE利用單獨(dú)的用戶數(shù)據(jù)庫SDE(缺省名)來管理和組織空間數(shù)據(jù)。
          SQLServer不僅可以在同一臺服務(wù)器上備份和恢復(fù)數(shù)據(jù)庫,還允許通過備份和恢復(fù)的方式在不同服務(wù)器之間很輕松地移動數(shù)據(jù)庫。MS SQL Server也允許將一個(gè)服務(wù)器上的數(shù)據(jù)庫備份恢復(fù)到另外一臺服務(wù)器上。
          如果要將數(shù)據(jù)庫備份恢復(fù)到另外一臺服務(wù)器上,兩臺服務(wù)器上的code page和排序方式必須相同。比如,不能把用二進(jìn)制排序方式(Binary Sort Order,BSO)建立的數(shù)據(jù)庫恢復(fù)到一個(gè)配置為缺省排序方式(字典順序,dictionary)的服務(wù)器上。當(dāng)然,可以通過在master數(shù)據(jù)庫中運(yùn)行'sp_helpsort'存儲過程設(shè)定服務(wù)器的排序方式。
          數(shù)據(jù)庫的備份操作同時(shí)備份了數(shù)據(jù)庫的系統(tǒng)表,包括sysusers。當(dāng)在不同的服務(wù)器上執(zhí)行備份和恢復(fù)操作時(shí),備份數(shù)據(jù)庫中所包含的用戶可能會和新的服務(wù)器上master數(shù)據(jù)庫中sysxlogins表中包含的用戶不同。這樣的話,就無法登錄到恢復(fù)后的數(shù)據(jù)庫,知道更正并統(tǒng)一master數(shù)據(jù)庫中sysxlogins表和恢復(fù)數(shù)據(jù)庫中sysusers表的登錄映射。要使上述兩個(gè)表同步,需要運(yùn)行"sp_change_users_login"存儲過程。
          (2)實(shí)現(xiàn)步驟
          * 備份SDE數(shù)據(jù)庫到備份文件:既可以使用T-SQL中的BACKUP語句,也可以使用企業(yè)管理器中的備份工具向?qū)硗瓿蒘DE和其他空間數(shù)據(jù)庫的備份。
          * 將備份文件復(fù)制到目標(biāo)服務(wù)器
          * 將備份文件恢復(fù)到目標(biāo)服務(wù)器:可以使用企業(yè)管理器中的恢復(fù)還原工具向?qū)硗瓿蒘DE和其他空間數(shù)據(jù)庫的恢復(fù)。
          * 統(tǒng)一SDE用戶登錄映射
          A. 兩個(gè)服務(wù)器上都有SDE用戶,但是兩者的SDE用戶具有不同的標(biāo)識
          當(dāng)恢復(fù)SDE數(shù)據(jù)庫至新的服務(wù)器后,sde數(shù)據(jù)庫中的sde用戶的SID與master數(shù)據(jù)庫中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)識,運(yùn)行"sp_change_users_login" 存儲過程,示例如下:
              Use sde
          go
          sp_change_users_login 'update_one','sde','sde'
          運(yùn)行上述的SID查詢來驗(yàn)證修改結(jié)果:
          0xEDDFCA8E56B0D411850000C04F8D0451
          0xEDDFCA8E56B0D411850000C04F8D0451
          可以看出修改后兩個(gè)表中sde用戶的SID標(biāo)識完全一致,此時(shí)就可以啟動ArcSDE for SQLServer的服務(wù)來使用了。
          B. 目標(biāo)服務(wù)器上還沒有SDE用戶
          這種情形是指目標(biāo)服務(wù)器上還沒有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ù)庫的權(quán)限授予sde用戶。添加登錄用戶,使用"sp_addlogin"存儲過程和在企業(yè)管理器中使用登錄管理工具。比如:
          sp_addlogin 'sde','go','sde'
          然后需要運(yùn)行 "sp_change_users_login" 存儲過程來統(tǒng)一master內(nèi)dbo.sysxlogins表和恢復(fù)后用戶數(shù)據(jù)庫內(nèi)sysusers表中的sde用戶SID標(biāo)識。
          use sde
          go
          sp_change_users_login 'update_one','sde','sde'
          最后,可以執(zhí)行SID查詢來驗(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)過SDE用戶的SID的統(tǒng)一之后,就可以啟動ArcSDE服務(wù)或者使用直接連接(direct connection)方式使用恢復(fù)后的空間數(shù)據(jù)了。

          posted on 2006-11-28 20:13 Flyingis 閱讀(2721) 評論(1)  編輯  收藏 所屬分類: ArcSDE

          評論

          # 好文章啊   回復(fù)  更多評論   

          好文章
          2007-03-11 17:25 | lugis

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 本溪| 十堰市| 扎兰屯市| 阿坝| 大安市| 泾川县| 双牌县| 铁力市| 南投市| 丹阳市| 龙岩市| 海盐县| 九江县| 平湖市| 宜城市| 武鸣县| 东明县| 枣庄市| 富阳市| 女性| 梓潼县| 罗源县| 无锡市| 仁布县| 卢氏县| 海城市| 竹北市| 陆河县| 阿勒泰市| 霍城县| 乐清市| 贵港市| 治多县| 尤溪县| 武胜县| 清涧县| 叶城县| 介休市| 敦化市| 连州市| 民权县|