满随天外云卷云舒 静观庭前花开花落
分类: 系统运维
2008-04-23 09:07:56
SDE数据库的备份、迁移或恢复
使用sdeexport和sdeimport命令对SDE数据库的备份、迁移或恢复
本方法分四个步骤,备份元表,备份数据表,还原元表,还原数据表。
做SDE库的迁移或恢复之前,首先要了解SDE做为空间数据库引擎,它是怎么组织空间数据的,即要知道元表存放的内容和数据表存放的内容。SDE用 户是SDE数据库边默认的一个用户,所有的元表存放在该用户下面,元表的作用就是存放数据表之间的关系,约7张数据表才能组成一个要素类,它们之间的关系 要靠SDE的元表来维护。因此SDE库的备份就分二个步骤,备份元表,备份数据表。
此方法讲的是采用SDE自带的命令sdeimport和sdeexport备份和导入数据表,即方法的优点是可以在不同的数据库之间进行库的迁移或用于某个要素类恢复(sdeimport和sdeexport命令详见SDE自带的帮助文档)。
首先,备份元表
可以采用sdeexmport命令来备份元表,但本方法采用使用ArcCatalog自带的export工具来备份元表。连接需要备份的SDE库, 在需要备份的特征数据集或某个连接上点击右键,再点击export/xml workspace Document 如下图所示:
说明:在SDE数据库连接(上图中sdeto sy)上点击右键和在特征数据集(如上图中的upmis.规划历史库)上点击右键备份的元表是不一样的。在数据库连接上点击右键(当然此时连接数据库的用 户需要具有操作所有数据的权限,比如SDE用户),备份的是所有的元表信息,而在特征数据集上点击右键,备份的是该特征数据集对应的元表。
选择只备份元表(schema only),选择备份元数据(SDE中的数据的来源等信息)的话会把元数据的也备份。如下图所示:
其次,备份数据表
备份数据表采用的命令是sdeexport。在cmd里边执行该命令即可。假如现在我要备份的是upmissde用户下面的jmd要素类,命令如下:
sdeexport -t jmd -f d:\jmd -u upmissde –p pwd -V sde.default
-t:表名(要素类名),-f(存储路径),-u(用户名),-p(密码) ,-V(版本名称)。
当然,如果不是在SDE主机上备份还需要加上-i (端口) ,-s(主机名)这二个参数。
把所有需要备份的要素类都进行备份。
再次,在目标数据库上还原元表
也可以采用sdeimport命令来完成,本方法中同样采用ArcCatalog的import工具来还原元表。
以某个用户名(比如说sde)建立SDE数据库的连接,双击连接后在数据库连接上点击右击,选择import/ xml workspace Document。
需要注意的是,以什么用户登陆,还原的元表记录的就是哪个用户的数据表关系。比如,备份时我是使用upmissde备份的dlg特征数据集,还原元表时我 是以sde用户登录的,那么,还原后会在sde用户下面出现一个sde.dlg(本来是upmissde.dlg),这就是此方法的特异之处,可以在不同 的用户和不用的SDE版本及不同的数据库(Oracle ,SqlServer)之间进行数据迁移。
最后,还原数据表
同样采用的是使用sdeimport命令进行还原,假如现在我要还原刚才备份出来的jmd到sde用户下面,命令如下:
sdeimport -o append –t jmd -f d:\jmd -u upmissde –pwd –V sde.default
当然,如果不是在SDE主机上备份还需要加上-i (端口) ,-s(主机名)这二个参数。把所有需要备份的要素类都进行备份。
-o的参数选用append的原因是:用ArcCatalog恢复元表的时候,同时会把元表中相关的数据表也创立了,所以-o后面的参数不能再选create了。
如果要素类多备份和恢复麻烦的话,可以写一个批处理程序,哈哈。
本方法的缺点是不能处理多版本的数据,试验如下:
C:\>sdeexport -t pl -f d:\nsyncbin\pl -u vertest -p vertest -V version
ArcSDE 9.1 Oracle9i Build 1269 Thu Mar 3 18:54:58 PST 2005
SDEX File Export Administration Utility
—————————————————–
Exporting ArcSDE object to “d:\nsyncbin\pl” in SDEX 9.0 export format …
Exporting table “pl”.
Spatial column “SHAPE”
2 features converted.
2 features exported.
C:\>sdeimport -o append -t pl -V SDE.DEFAULT -f D:\nsyncbin\pl -u vertest -p ver
test
ArcSDE 9.1 Oracle9i Build 1269 Thu Mar 3 18:54:58 PST 2005
SDEX File Import Administration Utility
—————————————————–
Importing SDEX from D:\nsyncbin\pl …
Importing spatial column “SHAPE”
ROWID colume “OBJECTID” exists in export file’s attribute. Drop
2 records read.
2 records stored.
C:\>sdeimport -o append -t pl -V version -f D:\nsyncbin\pl -u vertest -p vertest
ArcSDE 9.1 Oracle9i Build 1269 Thu Mar 3 18:54:58 PST 2005
SDEX File Import Administration Utility
—————————————————–
Importing SDEX from D:\nsyncbin\pl …
Importing spatial column “SHAPE”
ROWID colume “OBJECTID” exists in export file’s attribute. Drop
2 records read.
2 records stored.
C:\>
在导入之前,VERTEST用户下面,SDE.DEFAULT版本里,PL图层中有一个要素,OID为1,以VERTEST的身份,新建一个版本 version,并在version版本中新建一个要素,OID为2。此时Default版本中只有一个OID=1的要素,而在version版本中有 OID=1,2二个要素。
然后使用sdeexport命令导出(如上所示)
接着,使用sdeimport把数据导入到VERTEST用户的default版本中,此时查看default版本中的数据时,有OID=1,3,4三个要素。
接着,再把数据导入到VERTEST用户的version版本中,此时version版本中的具有OID=1,2,5,6四个要素。
把version版本里边的数据提交到default版本后,default具有OID=1,2,3,4,5,6六个要素,并且在做冲突检查的过程中不会报有冲突。这就是说明在使用该命令备份和恢复多版本的SDE数据库时,也存在局限性。