??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
随着GIS应用pȝ在复杂性、集成性、ƈ发性等斚w的要求不断增加,pȝ所需的空间数据量在急剧地增长,同时用户对空间数据ƈ发访问的需求也来突出。以传统的文件Ş式存储和表示I间数据的方法显然已l无法满些需求。由于ArcSDE本n所h的v量数据存储、多用户q发讉K、版本管理、长事务处理{强大优势,在GIS应用pȝ中引入ArcSDE作ؓI间数据存储和管理引擎,变得来普遍。ArcSDE作ؓI间数据库引擎,在ArcGIS 8.1pd软g中属于服务器端的产品Q在整个产品框架中,处于数据中心的重要地位,它利用Oracle、DB2、SQL Server、Informix{关pd数据库在数据存储、数据完整性等斚w的先q技术手D,v量空间数据(包括矢量数据和栅格数据)有机地组l和理hQ通过其内部异步缓册Ӏ空间烦引等先进的机Ӟ提供对空间数据的多用户高效ƈ发访问?/font>
除了存储I间数据q提供访问,对于I间数据的备份和恢复Q是I间数据理中最重要的工作环节之一Q也是保障空间数据安全的重要方式。首先,I间数据本n在应用过E中不断地被更新变动Q所以经怼需要备份不同时期,不同的空间数据版本;W二Q存储介质的意外损坏会导致严重的I间数据丢失Q因此需要定期对I间数据对象的整体进行完全备份;W三Q有时出于调整的必要Q需要在不同服务器、甚至不同数据库理pȝ之间q行I间数据的移植和转换?br />
在采用文件Ş式空间数据的时代Q空间数据的备䆾仅仅是操作系l中的文件拷贝、备份和归的过E;而空间数据的恢复也不q是复制、覆盖的操作Q在ZArcSDE和关pd数据库的I间数据库时代,I间数据的备份更多的依赖于关pd数据库的备䆾和恢复技术,当然也不能缺ArcSDE所提供的备份工兗按照备份的方式和对象,ArcSDE中空间数据的备䆾和恢复可以分为如下两c:指定I间数据对象的备份恢复,和整体空间数据库的备份恢复?/font>
一?指定I间数据对象的备份和恢复
q种方式主要用于备䆾指定的空间数据对象,比如某个囑ֱ和要素类、其中的某些满特定条g的记录、甚至特定的版本。实现这U备份方式的Ҏ主要是利用ArcSDE提供的管理工Psdeexport和sdeimport命o。它们的位置?ArcSDEHOME%\bin\中。其中,sdeexport用于空间数据从ArcSDE Server上备份ؓ单独的数据文Ӟ而sdeimport用于经由sdeexport备䆾的数据文件恢复到ArcSDE Server中?/font>
q一方式的缺点在于不能一ơ备份完整的I间数据库。但是也有个明显的优点,在于通过sdeexport和sdeimport工具Q可以将I间数据在不同的关系型数据库理pȝQRDBMSQ之间进行移植?/font>
1Q?备䆾全部记录
使用sdeexport命o的缺省方式即可,比如Q?br />Q?Q?指定的囑ֱ备䆾到备份文?br />sdeexport -o create -l dcxq,shape -f d:\dcxq.exp -i jerry_oracle -u sde -p sde
是名为jerry_oracle的sde服务QArcSDE for Oracle8iQ中的指定图?#8220;dcxq”按缺省方式备份到文gd:\dcxq.exp中?br />Q?Q?利用操作pȝ命oQ拷贝备份文件到目标服务器上
Q?Q?备份文件恢复至目标RDBMS?br />sdeimport -o create -l newDcxq,shape -f d:\dcxq.exp -i jerry_sqlsvr -u sde -p sde
此操作将备䆾文g恢复到名为jerry_sqlsvr的sde服务QArcSDE for SQLServerQ中Q图层名为:newDcxq?/font>
2Q?备䆾部分记录
sdeexport命o中添?w参数和一个条仉择表达式即可,比如Q?br />Q?Q?指定图层中满条g的记录备份到备䆾文g
sdeexport -o create -l dcxq,shape -f d:\dcxq.exp -w xzqy = '徐汇? -i jerry_oracle -u sde -p sde
是名为jerry_oracle的sde服务QArcSDE for Oracle8iQ内的指定图?#8220;dcxq”中所?徐汇?的h口调查小区备份到文gd:\dcxq.exp中?br />Q?Q?利用操作pȝ命oQ拷贝备份文件到目标服务器上
Q?Q?备份文件恢复至目标RDBMS?br />sdeimport -o create -l XHDcxq,shape -f d:\dcxq.exp -i jerry_sqlsvr -u sde -p sde
此操作将备䆾文g恢复到名为jerry_sqlsvr的sde服务QArcSDE for SQLServerQ中Q图层名为:XHDcxq?/font>
3Q?备䆾特定数据版本
sdeexport命o中添?v参数和一个版本名U即可,比如Q?br />Q?Q?指定图层的特定版本备䆾到备份文?br />sdeexport -o create -l dcxq,shape -f d:\dcxq.exp -V verAPR -i jerry_oracle -u sde -p sde
此操作将名ؓjerry_oracle的sde服务QArcSDE for Oracle8iQ内的指定图?#8220;dcxq”的verAPR版本备䆾到文件d:\dcxq.exp中?br />Q?Q?利用操作pȝ命oQ拷贝备份文件到目标服务器上
Q?Q?备份文件恢复至目标RDBMS?br />sdeimport -o create -l APRdcxq,shape -f d:\dcxq.exp -i jerry_sqlsvr -u sde -p sde
此操作将备䆾文g恢复到名为jerry_sqlsvr的sde服务QArcSDE for SQLServerQ中Q图层名为:APRDcxq?/font>
二?整体I间数据库的备䆾和恢?br />ArcSDEI间数据库的整体备䆾和恢复,实质上很大程度上是其所在的数据库或者数据库对象的备份和恢复问题。当然完整的ArcSDE数据备䆾应当q包括dbtune.sdeQgiomgr.defsQdbinit.sde和services.sde{文件?/font>
数据库的备䆾和恢复有很多U类。在不同的数据库理pȝ中,更是千差万别。M上,大都可以分ؓ静态{储和动态{储两个类型。静态{储是在系l中无事务处理时q行的{储操作,因而这U方式得到的一定是一个数据一致性的副本。静态{储的优点是操作简单,保证数据一致性,但是~点也很明显Q{储操作必ȝ待用户事务结束才能进行,而新的事务必ȝ待{储操作结束才能执行,因此会降低数据库的可用性。动态{储是指{储操作与用户事务q发q行Q{储期间允许数据库q行存取和修Ҏ作,它不必等待所有运行的事务l束Q也不会影响C务的q行Q但是无法保证副本中的数据正、有效、完整。所以在动态{储期_往往会徏立日志文件。后备文件加上日志文件就可以把数据库恢复到正的状态?/font>
1Q?Oracle数据?br />Q?Q?两种归模式Qarchive modeQ?br />Oracle有两中归模式:NO ARCHIVELOG和ARCHIVELOG。在NO ARCHIVELOG模式Q该模式为缺省模式)下的数据库操作不归在线日志重做文g。当存储介质损坏ӞNO ARCHIVELOG模式的数据库只能恢复C一ơ的备䆾点上。ARCHIVELOG模式的数据库可以通过上一ơ的备䆾和归日志重做文件相l合的方式,恢复C质损坏之前的点上?br />以NO ARCHIVELOG模式创徏的Oracle数据库可以切换至ARCHIVELOG模式?br />Q?Q?多种备䆾与恢复方?br />Oracle中的数据备䆾和恢复方式包括:脱机备䆾与恢复、逻辑备䆾与恢复、热备䆾与恢复?br />* 脱机备䆾与恢复:脱机备䆾是一U静态{储技术,备䆾在数据库关闭、不工作的状态下q行。脱机备份包括两U实现方式:W一U是使用Oracle提供的工具Backup/RecoverQ第二种是利用操作系l的复制功能Q复制数据文Ӟ卻I冷备份?br />* 逻辑备䆾与恢复:逻辑备䆾与恢复是指将数据库、用户和表等对象的内Ҏ个{出到一个二q制文gQ然后在需要的时候通过转入恢复到原来的形式。这U方式可以备份整个数据库Q指定用户和指定表的内容?br />* 热备份与恢复Q脱机备份和逻辑备䆾通常是用户不讉K数据库时的静态备份操作。这些备份只保证数据备䆾前的一致性和完整性,不保证备份期间的数据一致性。ؓ了保证数据的x一致性,在备份数据的同时q需要备份日志文件。数据库q行在ARCHIVELOG方式下,同时作数据和日志文g的备份称为热备䆾?br />Q?Q?实现步骤
选择使用何种备䆾方式Q由具体的数据备份需求所军_。具体的Oracle数据库备份实现步骤需要参考Oracle相关文Q比如《Oracle8 Backup and Recovery Guide》。本实例采用Oracle中的逻辑备䆾Q用了exp和imp工具Q以sde用户方式备䆾和恢复整体空间数据?br />* 备䆾数据库:使用Oracle中的exp命oQ以sde用户方式备䆾所有相x据?br />* 恢复数据库:使用Oracle中的imp命oQ以sde用户方式恢复后备数据文g?br />* 恢复ArcSDEpȝ文gQ如果有必要Q在恢复oracle数据之后Q需要恢复安装ArcSDE的程序文Ӟ另外q需要从备䆾机器上恢复dbtuneQgiomgr.defsQdbinit.sdeQ和services.sde文g?/font>
2Q?SQLServer数据?br />Q?Q备份和恢复方式
在MS SQL Server中,ArcSDE利用单独的用h据库SDEQ缺省名Q来理和组l空间数据?br />SQLServer不仅可以在同一台服务器上备份和恢复数据库,q允讔R过备䆾和恢复的方式在不同服务器之间很轻村֜Ud数据库。MS SQL Server也允许将一个服务器上的数据库备份恢复到另外一台服务器上?br />如果要将数据库备份恢复到另外一台服务器上,两台服务器上的code page和排序方式必ȝ同。比如,不能把用二进制排序方式(Binary Sort OrderQBSOQ徏立的数据库恢复到一个配|ؓ~省排序方式Q字兔R序,dictionaryQ的服务器上。当Ӟ可以通过在master数据库中q行'sp_helpsort'存储q程讑֮服务器的排序方式?br />数据库的备䆾操作同时备䆾了数据库的系l表Q包括sysusers。当在不同的服务器上执行备䆾和恢复操作时Q备份数据库中所包含的用户可能会和新的服务器上master数据库中sysxlogins表中包含的用户不同。这L话,无法登录到恢复后的数据库,知道更正q统一master数据库中sysxlogins表和恢复数据库中sysusers表的d映射。要使上qC个表同步Q需要运?sp_change_users_login"存储q程?br />Q?Q实现步?br />* 备䆾SDE数据库到备䆾文gQ既可以使用T-SQL中的BACKUP语句Q也可以使用企业理器中的备份工具向导来完成SDE和其他空间数据库的备份?br />* 备份文件复制到目标服务?br />* 备份文件恢复到目标服务器:可以使用企业理器中的恢复还原工具向导来完成SDE和其他空间数据库的恢复?br />* l一SDE用户d映射
A. 两个服务器上都有SDE用户Q但是两者的SDE用户h不同的标?br />当恢复SDE数据库至新的服务器后Qsde数据库中的sde用户的SID与master数据库中dbo.sysxlogins表中的sded名的SID不同Q比如:
Use sde
go
Select SID from sysusers where name = 'sde'
Use master
go
select SID from sysxlogins where name = 'sde'
SID
-----------------------------------------------------------
0x76695419BFAED41184FD00C04F8D0451
Q? rowQsQ?affectedQ?/font>
SID
-----------------------------------------------------------
0xEDDFCA8E56B0D411850000C04F8D0451
Q? rowQsQ?affectedQ?br />此时必须l一两个表中sde用户的SID标识Q运?sp_change_users_login" 存储q程Q示例如下:
Use sde
go
sp_change_users_login 'update_one','sde','sde'
q行上述的SID查询来验证修改结果:
0xEDDFCA8E56B0D411850000C04F8D0451
0xEDDFCA8E56B0D411850000C04F8D0451
可以看出修改后两个表中sde用户的SID标识完全一_此时可以启动ArcSDE for SQLServer的服务来使用了?br />B. 目标服务器上q没有SDE用户
q种情Ş是指目标服务器上q没有sded用户Q此时执行上q的SID查询Q结果如下:
Use sde
go
Select SID from sysusers where name = 'sde'
Use master
go
select SID from sysxlogins where name = 'sde'
SID
-----------------------------------------------------------
0x76695419BFAED41184FD00C04F8D0451
Q? rowQsQ?affectedQ?br />SID
-----------------------------------------------------------
Q? rowQsQ?affectedQ?br />要矫正这U情况,需要首先到目标服务器中dsded用户Q但是不要将sde数据库的权限授予sde用户。添加登录用P使用"sp_addlogin"存储q程和在企业理器中使用d理工具。比如:
sp_addlogin 'sde','go','sde'
然后需要运?"sp_change_users_login" 存储q程来统一master内dbo.sysxlogins表和恢复后用h据库内sysusers表中的sde用户SID标识?br />use sde
go
sp_change_users_login 'update_one','sde','sde'
最后,可以执行SID查询来验证SID的一致性:
Use sde
Go
Select SID from sysusers where name = 'sde'
Use master
Go
select SID from sysxlogins where name = 'sde'
SID
-----------------------------------------------------------
0xF6DFCA8E56B0D411850000C04F8D0451
Q? rowQsQ?affectedQ?br />SID
-----------------------------------------------------------
0xF6DFCA8E56B0D411850000C04F8D0451
Q? rowQsQ?affectedQ?br />l过SDE用户的SID的统一之后Q就可以启动ArcSDE服务或者用直接连接(direct connectionQ方式用恢复后的空间数据了?/font>