对于国土部门来说,自从二调以来存在了很多的数据,但是这些数据都是在ArcGIS9.3Oracle32位数据库中的SDE中进行存储管理的,但是随着ArcGIS版本的发展以及oracle软件的升级,32位的数据库软件越来越不满足现状用户的需要了,也不能体现服务器的性能,特别是不能满足为其他部门提供数据的功能。怎么办?数据库迁移,本次的经验分享是基于某单位的SDE数据库过程。
首先我们来认识下Oracle的备份方式
冷备份
冷备份是Oracle最简单的一种备份;执行冷备份前必须关闭数据库;然后使用操作系统实用工具或者第三方工具备份所有相关的数据库文件。
优点:能简单快速地备份。能简单快速地恢复。执行简单。
缺点:必须关闭数据库,不能进行点恢复。
热备份
热备份是当数据库正在运行时进行数据备份的过程。执行热备份的前提是:数据库运行在可归档日志模式。适用于24X7不间断运行的关键应用系统。
优点:备份时数据库可以是打开的。热备份可以用来进行点恢复。初始化参数文件、归档日志在数据库正常运行时是关闭的,可用操作系统命令拷贝。
缺点:执行过程复杂。由于数据库不间断运行,测试比较困难。不能用操作系统实用工具拷贝打开的文件。必须使用Oracle提供的ocopy工具来拷贝打开的文件。热备份可能造成CPU、I/O过载,应在数据库不太忙时进行。
Export导出数据库对象
冷备份和热备份都备份物理数据库文件,因而被称为物理备份。而export备份的是数据库对象,因此被称为逻辑备份。
优点:能执行对象或者行恢复。备份和恢复速度更快。能够跨操作系统平台迁移数据库。数据库可一直运行。
缺点:export并不是冷备份和热备份的替代工具。冷、热备份可保护介质失效。export备份可保护用户或应用错误。
具体oracle备份方式参考博客http://blog.csdn.NET/tianlesoftware/article/details/7258654
那么对于SDE的空间数据来说,如果在数据库中的数据不做版本处理的话(基本不可能)我们可以先将数据导出到FileGDB,然后在新的oracle 64位中进行导入。那么我们就通过Oracle备份还原的方式,本次我们采用的是Export的方式,为什么没有采用冷备和热备的方式,最后从上述博客的内容来看还是能做的,只是这个工程师对Export方式情有独钟罢了。
1、测试一 exp/imp,经过测试导出导入的方式都可以成功,在导入的时候会有一个oracle和SDE的bug,具体遇到的时候可以baidu,时间有点长具体报错是什么忘记了。然后为64位sde用户赋予相应权限就可以进行导入导出了,过程中会有一些对象需要进行重新编译。这样进行完成导入导出后,通过catalog直连的方式不能连接SDE数据库。
2、测试二expdp/impdp方式,经过上述的方法后咨询ESRI售后,推荐使用expdp方式。同样的方法。最后成功完成目标。
具体的expdp和impdp方式请参见:http://www.cnblogs.com/lanzi/archive/2011/01/06/1927731.html
那么最后我们看下两者的区别:
exp/imp与expdp/impdp区别:
(1) 把用户usera的对象导到用户userb,用法区别在于fromuser=usera touser=userb ,remap_schema=’usera’:'usera’ 。例如:imp system/passwd fromuser=usera touser=userb file=/oracle/exp.dmp log=/oracle/exp.log;
impdp system/passwd directory=expdp dumpfile=expdp.dmp remap_schema=’usera’:'userb’ logfile=/oracle/exp.log;
(2) 更换表空间,用exp/imp的时候,要想更改表所在的表空间,需要手工去处理一下,
如alter table xxx move tablespace_new之类的操作。
用impdp只要用remap_tablespace=’tabspace_old’:'tablespace_new’
(3) 当指定一些表的时候,使用exp/imp 时,tables的用法是 tables=(‘table1′,’table2′,’table3′)。
expdp/impdp的用法是tables=’table1′,’table2′,’table3′
(4) 是否要导出数据行
exp (ROWS=Y 导出数据行,ROWS=N 不导出数据行)
expdp content(ALL:对象+导出数据行,DATA_ONLY:只导出对象,METADATA_ONLY:只导出数据的记录)
(5) expdp是[10g]的新特性而且只能在服务器执行。而exp/imp是通用的。
(6) oracle11g中有个新特性,当表无数据时,不分配segment,以节省空间,所以exp导不出空表。解决的办法是用expdp, 当然也可以设置deferred_segment_creation 参数 或者 insert一行,再rollback,但是这样很麻烦。
具体为什么EXPDP成功的原因是什么我们不做讨论,那么以后在遇到数据库备份和恢复的方式推荐采用这种导出方式,效率也是比较高。