对Oracle下ArcSDE创建的空间数据库, 整体备份、恢复或迁移。
一、imp和exp命令方式
1.1 数据库完整备份
检查数据库字符集是否一致
SQL>select userenv(‘language’) from dual;
导出源数据库的SDE表空间
EXP SYSTEM/PASSWORD@SID FULL=Y FILE=D:/SYSTEM.DMP LOG=D:/SYSTEM.LOG
1.2 数据恢复准备
(1)删除目标数据库中的sde用户、及sde表空间
停止ArcSDE服务器中的sde服务,删除目标数据库中的SDE_USER用户(下面行中的代码为sde)及SDE表空间。
drop tablespace sde including contents and datafiles;
drop user sde cascade;
(2)创建SDE表空间,及SDE_USER用户
cmd下sysdba连接进入到plsql。使用sql语句建立新的sde用户及空的表空间,并授权SDE用户相同的权限。
i)创建表空间
CREATE TABLESPACE "SDE"
LOGGING
DATAFILE 'C:/ORACLE/ORADATA/ORACLE/SDE.ora' SIZE 200M
EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO
ii)创建用户
CREATE USER "SDE" PROFILE "DEFAULT"
IDENTIFIED BY "SDE" DEFAULT TABLESPACE "SDE"
TEMPORARY TABLESPACE "TEMP"
ACCOUNT UNLOCK;
iii)创建角色
GRANT "DBA" TO "SDE";
GRANT "CONNECT" TO "SDE";
GRANT "RESOURCE" TO "SDE";
iiii)系统权限
GRANT ALTER ANY INDEX TO "SDE" WITH ADMIN OPTION;
GRANT ALTER ANY TABLE TO "SDE" WITH ADMIN OPTION;
GRANT ANALYZE ANY TO "SDE" WITH ADMIN OPTION;
GRANT CREATE ANY INDEX TO "SDE" WITH ADMIN OPTION;
GRANT CREATE ANY PROCEDURE TO "SDE" WITH ADMIN OPTION;
GRANT CREATE ANY SEQUENCE TO "SDE" WITH ADMIN OPTION;
GRANT CREATE ANY TRIGGER TO "SDE" WITH ADMIN OPTION;
GRANT CREATE ANY VIEW TO "SDE" WITH ADMIN OPTION;
GRANT CREATE SESSION TO "SDE" WITH ADMIN OPTION;
GRANT DROP ANY INDEX TO "SDE" WITH ADMIN OPTION;
GRANT DROP ANY TABLE TO "SDE" WITH ADMIN OPTION;
GRANT DROP ANY VIEW TO "SDE" WITH ADMIN OPTION;
GRANT DROP ANY PROCEDURE TO "SDE" WITH ADMIN OPTION;
GRANT DROP ANY SEQUENCE TO "SDE" WITH ADMIN OPTION;
GRANT EXECUTE ANY PROCEDURE TO "SDE" WITH ADMIN OPTION;
GRANT SELECT ANY SEQUENCE TO "SDE" WITH ADMIN OPTION;
GRANT SELECT ANY TABLE TO "SDE" WITH ADMIN OPTION;
GRANT UNLIMITED TABLESPACE TO "SDE" WITH ADMIN OPTION;
1.3 导入SDE和SDEUSER的数据
cmd下连接数据库,导入数据。注意数据导入的次序,先SDE,后SDEUSER(sde)。
sqlplus /nolog connect sys/orcl@192.168.110.51/myorcl as sysdba(conn /as sysdba;) SQLPLUS SYS/SYS@myorcl AS SYSDBA IMP SYSTEM/PASSWOR@SID FROMUSER=SDE TOUSER=SDE IMP SYSTEM/PASSWOR@SID FROMUSER=SDEUSER TOUSER=SDEUSER
以上提到的SDE和SDEUSER是不同的用户,SDE是ArcSDE安装时的默认用户,SDEUSER
是指用户存储数据的用户,如果之间使用SDE默认用户存储,则省去所以的SDEUSER操作
二、 sdeexport和sdeimport命令方式
这种方式主要用于备份指定的空间数据对象,比如某个图层和要素类、其中的某些满足特定条件的记录、甚至特定的版本。实现这种备份方式的方法主要是利用ArcSDE提供的管理工具:sdeexport和sdeimport命令。它们的位置在%ArcSDEHOME%in中。其中,sdeexport用于将空间数据从ArcSDE Server上备份为单独的数据文件,而sdeimport用于将经由sdeexport备份的数据文件恢复到ArcSDE Server中。
这一方式的缺点在于不能一次备份完整的空间数据库。但是也有个明显的优点,在于通过sdeexport和sdeimport工具,可以将空间数据在不同的关系型数据库管理系统(RDBMS)之间进行移植。
2.1 常用的备份方式
与以上三个步骤不同,本方法的数据备份增加了一个元表备份的内容:备份元表、备份数据表;还原元表;还原数据表。
做SDE库的迁移或恢复之前,首先要了解SDE做为空间数据库引擎,它是怎么组织空间数据的,即要知道元表存放的内容和数据表存放的内容。SDE用户是SDE数据库边默认的一个用户,所有的元表存放在该用户下面,元表的作用就是存放数据表之间的关系,约7张数据表才能组成一个要素类,它们之间的关系要靠SDE的元表来维护。因此SDE库的备份就分二个步骤,备份元表,备份数据表。此方法讲的是采用SDE自带的命令sdeimport和sdeexport备份和导入数据表,即方法的优点是可以在不同的数据库之间进行库的迁移或用于某个要素类恢复(sdeimport和sdeexport命令详见SDE自带的帮助文档)。
2.1.1 备份元表
可以采用sdeexmport命令来备份元表,但本方法采用使用ArcCatalog自带的export工具来备份元表。
连接需要备份的SDE库,在需要备份的特征数据集或某个连接上点击右键,再点击export/xml workspace Document 。
说明:在SDE数据库连接(export/xml workspace Document后的图中sdeto
sy)上点击右键和在特征数据集(如图中的upmis.规划历史库)上点击右键备份的元表是不一样的。在数据库连接上点击右键(当然此时连接数据库的用户需要具有操作所有数据的权限,比如SDE用户)备份的是所有的元表信息,而在特征数据集上点击右键,备份的是该特征数据集对应的元表。选择只备份元表(schema only),选择备份元数据(SDE中的数据的来源等信息)的话会把元数据的也备份。
2.1.2 备份数据表
备份数据表采用的命令是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(主机名)这二个参数。
把所有需要备份的要素类都进行备份。
2.1.3 在目标数据库上还原元表
也可以采用sdeimport命令来完成,本方法中同样采用ArcCatalog的import工具来还原元表。
以某个用户名(比如说sde)建立SDE数据库的连接,双击连接后在数据库连接上点击右击,选择import/ xml workspace Document。
需要注意的是,以什么用户登陆,还原的元表记录的就是哪个用户的数据表关系。比如,备份时我是使用upmissde备份的dlg特征数据集,还原元表时我是以sde用户登录的,那么,还原后会在sde用户下面出现一个sde.dlg(本来是upmissde.dlg),这就是此方法的特异之处,可以在不同的用户和不用的SDE版本及不同的数据库(Oracle ,SqlServer)之间进行数据迁移。
2.1.4 还原数据表
同样采用的是使用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数据库时,也存在局限性。
2.2 备份全部记录
使用sdeexport命令的缺省方式即可,比如:
(1) 将指定的图层备份到备份文件
sdeexport -o create -l dcxq,shape -f d:dcxq.exp -i jerry_oracle -u sde -p sde
就是将名为jerry_oracle的sde服务(ArcSDE
for oracle8i)中的指定图层“dcxq”按缺省方式备份到文件d:dcxq.exp中。
(2) 利用操作系统命令,拷贝备份文件到目标服务器上
(3) 将备份文件恢复至目标RDBMS中
sdeimport -o create -l newDcxq,shape -f d:dcxq.exp -i jerry_sqlsvr -u sde -p
sde
此操作将备份文件恢复到名为jerry_sqlsvr的sde服务(ArcSDE
for SQLServer)中,图层名为:newDcxq。
2.3 备份部分记录
sdeexport命令中添加-w参数和一个条件选择表达式即可,比如:
(1)将指定图层中满足条件的记录备份到备份文件
sdeexport -o create -l dcxq,shape -f d:dcxq.exp -w xzqy = '徐汇区' -i jerry_oracle -u sde -p sde
就是将名为jerry_oracle的sde服务(ArcSDE
for oracle8i)内的指定图层“dcxq”中所有"徐汇区"的人口调查小区备份到文件d:dcxq.exp中。
(2)利用操作系统命令,拷贝备份文件到目标服务器上
(3)将备份文件恢复至目标RDBMS中
sdeimport -o create -l XHDcxq,shape -f d:dcxq.exp -i jerry_sqlsvr -u sde -p
sde
此操作将备份文件恢复到名为jerry_sqlsvr的sde服务(ArcSDE
for SQLServer)中,图层名为:XHDcxq。
2.4 备份特定数据版本
sdeexport命令中添加-v参数和一个版本名称即可,比如:
(1)将指定图层的特定版本备份到备份文件
sdeexport -o create -l dcxq,shape -f d:dcxq.exp -V verAPR -i jerry_oracle -u
sde -p sde
此操作将名为jerry_oracle的sde服务(ArcSDE
for oracle8i)内的指定图层“dcxq”的verAPR版本备份到文件d:dcxq.exp中。
(2)利用操作系统命令,拷贝备份文件到目标服务器上
(3)将备份文件恢复至目标RDBMS中
sdeimport -o create -l APRdcxq,shape -f d:dcxq.exp -i jerry_sqlsvr -u sde -p
sde
此操作将备份文件恢复到名为jerry_sqlsvr的sde服务(ArcSDE
for SQLServer)中,图层名为:APRDcxq。
三、整体空间数据库的备份和恢复
ArcSDE空间数据库的整体备份和恢复,实质上很大程度上是其所在的数据库或者数据库对象的备份和恢复问题。当然完整的ArcSDE数据备份应当还包括dbtune.sde,giomgr.defs,dbinit.sde和services.sde等文件。
数据库的备份和恢复有很多种类。在不同的数据库管理系统中,更是千差万别。总体上,大都可以分为静态转储和动态转储两个类型。静态转储是在系统中无事务处理时进行的转储操作,因而这种方式得到的一定是一个数据一致性的副本。静态转储的优点是操作简单,保证数据一致性,但是缺点也很明显,转储操作必须等待用户事务结束才能进行,而新的事务必须等待转储操作结束才能执行,因此会降低数据库的可用性。动态转储是指转储操作与用户事务并发进行,转储期间允许数据库进行存取和修改操作,它不必等待所有运行的事务结束,也不会影响新事务的运行,但是无法保证副本中的数据正确、有效、完整。所以在动态转储期间,往往会建立日志文件。后备文件加上日志文件就可以把数据库恢复到正确的状态。
oracle数据库
(1)两种归档模式(archive
mode)
oracle有两中归档模式:NO
ARCHIVELOG和ARCHIVELOG。在NO ARCHIVELOG模式(该模式为缺省模式)下的数据库操作不归档在线日志重做文件。当存储介质损坏时,NO
ARCHIVELOG模式的数据库只能恢复到上一次的备份点上。ARCHIVELOG模式的数据库可以通过上一次的备份和归档日志重做文件相结合的方式,恢复到介质损坏之前的点上。
以NO ARCHIVELOG模式创建的Oracle数据库可以切换至ARCHIVELOG模式。
(2)多种备份与恢复方式
oracle中的数据备份和恢复方式包括:脱机备份与恢复、逻辑备份与恢复、热备份与恢复。
* 脱机备份与恢复:脱机备份是一种静态转储技术,备份在数据库关闭、不工作的状态下进行。脱机备份包括两种实现方式:第一种是使用Oracle提供的工具Backup/Recover;第二种是利用操作系统的复制功能,复制数据文件,即:冷备份。
* 逻辑备份与恢复:逻辑备份与恢复是指将数据库、用户和表等对象的内容整个转出到一个二进制文件,然后在需要的时候通过转入恢复到原来的形式。这种方式可以备份整个数据库,指定用户和指定表的内容。
* 热备份与恢复:脱机备份和逻辑备份通常是用户不访问数据库时的静态备份操作。这些备份只保证数据备份前的一致性和完整性,不保证备份期间的数据一致性。为了保证数据的即时一致性,在备份数据的同时还需要备份日志文件。数据库运行在ARCHIVELOG方式下,同时作数据和日志文件的备份称为热备份。
(3)实现步骤
选择使用何种备份方式,由具体的数据备份需求所决定。具体的Oracle数据库备份实现步骤需要参考Oracle相关文档,比如《Oracle8
Backup and Recovery Guide》。本实例采用Oracle中的逻辑备份,使用了exp和imp工具,以sde用户方式备份和恢复整体空间数据。
* 备份数据库:使用Oracle中的exp命令,以sde用户方式备份所有相关数据。
* 恢复数据库:使用Oracle中的imp命令,以sde用户方式恢复后备数据文件。
* 恢复ArcSDE系统文件:如果有必要,在恢复oracle数据之后,需要恢复安装ArcSDE的程序文件;另外还需要从备份机器上恢复dbtune,giomgr.defs,dbinit.sde,和services.sde文件。
参考文章
备份部分记录