SDE数据库的恢复与备份,共三种方法

2024-01-23 10:32

本文主要是介绍SDE数据库的恢复与备份,共三种方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://blog.csdn.net/mydriverc/article/details/1757867

 

SDE数据库的恢复与备份,共三种方法,算是完结篇吧

一、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用户的密码),如下图:

注:出现上图中的第二行语句才说明SDE服务已经被成功停止了。
b) 方法2:在控制面板中打到ArcSDE服务后停止它。
注意:一定要确保DesSDE已经被关闭了!才能进行以下的操作!
4, 打开DesSDE上的Oracle控制台,并以DBA的身份登录DesSDE,然后删除方案SDE下面的所有对象,包括:表、索引、视图、同义词、序列、簇、源类型、用户类型。如下图所示:

一般情况下,删除表、索引,视图后,以下五项已经没有内容了。但是要确定删除了这八项下面的所有内容。
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

注:出现上图中的第二句话说明启动成功!
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 如下图所示:

说明:在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库的恢复

 

这篇关于SDE数据库的恢复与备份,共三种方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/636112

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::