一、imp和exp命令对Oracle9i+SDE空间数据库的整体备份、恢复或迁移(方法1)
假设:现在需要把OriSDE服务器上的空间数据库迁移到DesSDE服务器上,在创建SDE时二个服务器上的默认用户都是SDE,密码是SDE。OriSDE服务器上还有另外一个SDE数据用户RasterData,密码是RasterData。
1, 备份SDE用户(创建SDE时默认创建的用户)下的所有数据:例如
exp sde/sde@ OriSDE file=c:/sde.dmp
2, 备份其它操作SDE数据的用户,方法同上。例如:
ExpRasterData/RasterData@ OriSDE file=c: RasterData.dmp
3, 停止DesSDE服务器上的服务:
a) 方法1:打开cmd,输入以下语名:sdemon –o shutdown –s DesSDE(服务名) –p SDE(SDE用户的密码),如下图:
![](http://static.flickr.com/69/197049073_976fb1e1eb_m.jpg)
注:出现上图中的第二行语句才说明SDE服务已经被成功停止了。
b) 方法2:在控制面板中打到ArcSDE服务后停止它。
注意:一定要确保DesSDE已经被关闭了!才能进行以下的操作!
4, 打开DesSDE上的Oracle控制台,并以DBA的身份登录DesSDE,然后删除方案SDE下面的所有对象,包括:表、索引、视图、同义词、序列、簇、源类型、用户类型。如下图所示:
![](http://static.flickr.com/73/197049075_4fe5f50c27_m.jpg)
一般情况下,删除表、索引,视图后,以下五项已经没有内容了。但是要确定删除了这八项下面的所有内容。
5, 在DesSDE Oraccle服务器上建立 RasterData用户,并使其具有的在OriSDE 服务器上相同的表空间、角色和系统权限。
6, 导入SDE.dmp到OriSDE数据库中,例如:
Imp sde/sde fromuser=sde file=c:/sde.dmp touser=sde
7, 导入数据用户RasterData的数据备份RasterData.dmp
Imp RasterData/RasterData fromuser=RasterData file=c:/RasterData.dmp touser=RasterData
8, 重新启动DesSDE服务器上的SDE服务。
a) 方法1,运行CMD,输入以下语名:sdemon –o start –s DesSDE –p SDE
![](http://static.flickr.com/69/197049073_976fb1e1eb_m.jpg)
注:出现上图中的第二句话说明启动成功!
b) 方法2,从控制面板/服务里找到ArcSDE服务,启动该服务。
9, 打开ArcCatalog,建立与DesSDE的连接,并察看是否能浏览数据,如果可以的话,就说明SDE数据库已经迁移成功了。
这里主要是SDE用户及其数据的恢复(3、4、5这三个步骤)。因为SDE用户下面保存了所有SDE数据用户的所有表的对应关系,所以这一项的恢复是否成功关系到SDE数据库的迁移是否成功。其它的备份和恢复操作都可以参照oracle 备份和恢复操作进行。
新服务器上的SDE用户和表空间不要删除。因为在创建SDE服务时,会有一个wise_err.log文件让用户查看创建的结果,从上面我们可以看到有30多个表被创建,还创建了GeoDatabase日志(Creating GeoDatabase Schema),如果没有恢复这些表及日志的把握,最好别删除SDE用户和表空间,否则SDE用户下的数据恢复就很难成功(这可能是因为表没有创建完整的问题),即使成功了,SDE服务也很难启动起来(这可能是因为日志文件的问题)。实践出真知,如果不信,可以试试 (失败了没有关系,可以重新安装SDE的)!
当然,这只能用于同一版本的SDE之间数据库的恢复或迁移(9.0和9.1视为同版本),在不同版本的SDE空间数据库之间迁移数据库会作另外的论述。
下面是dreambird网友提供的在oracle中批量删除某个用户下面的所有对象的方法:
其实,我不是什么oracle高手,皮毛而已,否则那些高手会气死的。哈哈,我的qq125861109,欢迎交流。另外,上面的代码我又做了优化,因为某些表有主外键关系时是不允许删除的。我测试过了,绝对可用。可以在oracle的plsql developer 下运行。
DECLARE
TYPE name_list IS TABLE OF VARCHAR2(40);
TYPE type_list IS TABLE OF VARCHAR2(20);
Tab_name name_list:=name_list();
Tab_type type_list:=type_list();
sql_str VARCHAR2(500);
BEGIN
sql_str := ’select uo.object_name,uo.object_type from user_objects uo where uo.object_type not in('’INDEX'’,'’LOB'’) order by uo.object_type desc’;
EXECUTE IMMEDIATE sql_str BULK COLLECT INTO tab_name,tab_type;
FOR i IN Tab_name.FIRST.. Tab_name.LAST LOOP
if tab_type(i)=’TABLE’ then
sql_str := ‘DROP ‘ || Tab_type(i) || ‘ ‘ || Tab_name(i) || ‘ CASCADE CONSTRAINTS’;
else
sql_str := ‘DROP ‘ || Tab_type(i) || ‘ ‘ || Tab_name(i) ;
end if;
EXECUTE IMMEDIATE sql_str;
END LOOP;
END;
以后考虑做成批处理,这样就方便解决了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 如下图所示:
![](http://static.flickr.com/72/202793244_efbba13782.jpg?v=0)
说明:在SDE数据库连接(上图中sdeto sy)上点击右键和在特征数据集(如上图中的upmis.规划历史库)上点击右键备份的元表是不一样的。在数据库连接上点击右键(当然此时连接数据库的用户需要具有操作所有数据的权限,比如SDE用户),备份的是所有的元表信息,而在特征数据集上点击右键,备份的是该特征数据集对应的元表。
选择只备份元表(schema only),选择备份元数据(SDE中的数据的来源等信息)的话会把元数据的也备份。如下图所示:
![](http://static.flickr.com/71/202793245_3104912bbe.jpg?v=0)
其次,备份数据表
备份数据表采用的命令是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数据库时,也存在局限性。
第三种备份的方法也会在近期推出,敬请关注!
三、同版本的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数据库时,也存在局限性。
第三种备份的方法也会在近期推出,敬请关注!
三、同版本的SDE库的恢复