Oracle+sde数据备份、恢复

一笑奈何 提交于 2020-03-30 05:54:17
1.数据库完整备份 EXP SYSTEM/PASSWORD@SID FULL=Y FILE=D:\SYSTEM.DMP LOG=D:\SYSTEM.LOG 2.数据入库 (a)从数据库中删除SDE和SDE USER用户 DROP USER SDE CASCADE; DROP USER SDEUSER CASCADE; (b)创建新的SDE用户和SDEUSER 下为创建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 "PASSWORD" 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; 3.导入SDE和SDEUSER的数据 注意顺序,先SDE,后SDEUSER IMP SYSTEM/PASSWOR@SID FROMUSER=SDE TOUSER=SDE IMP SYSTEM/PASSWOR@SID FROMUSER=SDEUSER TOUSER=SDEUSER 以上提到的SDE和SDEUSER是不同的用户,SDE是ArcSDE安装时的默认用户,SDEUSER 是指用户存储数据的用户,如果之间使用SDE默认用户存储,则省去所以的SDEUSER操作 --------- 1、首先为什么oracle的exp/imp不能使用? 一个feature class (shp文件)导入数据库后,会生成3个table 和7个index,这些表或者是index 可以保存在不同的表空间中。 除了这些数据表之外,还在sde表空间的控制表中加入了很多控制信息(如在layers表中加入图层编号,也即三个数据表分别叫 test_layer 、F120  、S120,这个120就是test_layer的编号。还有其他控制信息)。 如果只是用oracle的exp/imp导入导入的话,默认情况下不会把sde表空间的数据一起导出。 因此在导入到另一个数据库中,因为没有sde表空间里的控制信息,所以原来的layer全部编程 属性表了。 2、sde数据备份、导出/导入方法 可以利用 #4 楼说的 全库备份的方式。但是这种方式有两限制: 第一是数据库软件必须一致,也就是说你只能在oracle数据库之间(或sql server)互相导出/导入。 第二就是arcsde的版本必须一致才行。如不能用arcsde8.3 导出,再导入到Arcsde9.0内。(因为每个版本的ArcsDE控制表信息不完全相同)。 正确的方式: 利用sde提供的sdeexport/sdeimport命令备份、导出/导入。 以下是ArcSDE9.0 (ArcSDE9.2也相同)的sdeexport命令 sdeexport [-o create]  -t <table> [-V <version_name>] [-O] [-q] [-a {all | file=<file_name>}] -f <{export_file | -}> [-X <volume_size>] [-r <target_ArcSDE_version_number>] [-w <"where_clause">] [-i <service>] [-s <server_name>] [-D <database>] -u <DB_User_name> [-p <DB_User_password>] sdeexport [-o create]  -l <table,column> [-V <version_name>] [-O] [-q] [-a {all | file=<file_name>}] -f <{export_file | -}> [-X <volume_size>] [-r <target_ArcSDE_version_number>] [-w <"where_clause">] [-i <service>] [-s <server_name>] [-D <database>] -u <DB_User_name> [-p <DB_User_password>] 此命令有至少三种好处: 1、屏蔽了数据库,可以实现在不同数据库软件间的备份; 2、在不同sde版本间备份、转换 (指定 -r 参数即可); 3、生成批处理文件(.bat),方便日常备、导出/导入工作,减少了工作量。 --------------- 1.1.1.1    SDE命令导出数据 指令 sdeexport -o create -t 表名 -f 导出文件路径 -i SDE:ORACLE10G -s sde服务器IP -u SDE用户名 -p SDE用户密码@oracle服务名 指令运行环境:GIS服务器 如果SDE安装的版本为10g,则-i SDE:ORACLE10G; 如果为11g,则为-i SDE:ORACLE11G 实例如下:从172.168.10.250 机器中导出sde数据库中的T_GIS_G100表数据到C:\\T_GIS_G100.bak文件(会自动创建)里,命令如下: sdeexport -o create -t T_GIS_G100 -f C:\\T_GIS_G100.bak -i SDE:ORACLE10G -s 172.168.10.250 -u sde -p sde@sdeserver 1.1.1.2    批量导出 使用如下脚本创建bat文件如:exportGis.bat @echo off echo 此导出程序使用oracle的直连方式 set/p sdeServerIp=请输入SDE数据库所在的机器IP: set/p sdeUser=请输入SDE数据库的用户名: set/p sdePwd=请输入SDE数据库的密码,格式:密码@oracle服务名: rem 下面为需要导出的表名数组,表名之间需要有空格 set SDE_TABLE=导出的表名1 导出的表名2 ……… echo 程序将会导出GIS表为: %SDE_TABLE% for %%a in (%SDE_TABLE%) do ( echo 导出 %%a sdeexport -o create -t %%a -f %%a.bak -i SDE:ORACLE10G -s %sdeServerIp% -u %sdeUser% -p %sdePwd% ) echo 导出完成 pause<con>nul 双击exportGis.bat,根据要求输入参数,则会在当前bat所在目录下导出表数据 注: 1、  SDE_TABLE 需要自行设置导出的表名数组; 2、  -i SDE:ORACLE10G 需要根据SDE版本设置; 1.1.1.3    SDE命令导入数据 根据导出的数据文件进行数据导入。 指令: sdeimport -o create -t 导入的表名 -f 数据导出文件 -i SDE:ORACLE10G -s SDE数据库IP -u SDE用户名 -p SDE用户密码 指令运行环境:GIS服务器; Sdeimport命令导入:会根据【导入的表名】自行创建SDE表,无需事先创建 如果SDE安装的版本为10g,则-i SDE:ORACLE10G; 如果为11g,则为-i SDE:ORACLE11G 实例如下:导出C:\\T_GIS_G100.bak文件到172.168.10.250的SDE库中,命令如下: sdeimport -o create -t T_GIS_G100 -f C:\\T_GIS_G100.bak -i SDE:ORACLE10G -s 172.168.10.250 -u sde -p sde@sdeserver 1.1.1.4    批量导入 使用如下脚本创建bat文件如:importGis.bat @echo off echo 此导入程序使用oracle的直连方式 set/p sdeServerIp=请输入SDE数据库所在的机器IP: set/p sdeUser=请输入SDE数据库的用户名: set/p sdePwd=请输入SDE数据库的密码,格式:密码@oracle服务名: rem 下面为需要导入的表名数组 set SDE_TABLE=导出的表名1 导出的表名2 ……… echo 程序将会导入的GIS表为: %SDE_TABLE% for %%a in (%SDE_TABLE%) do ( echo 导入 %%a sdeimport -o create -t %%a -f %%.bak -i SDE:ORACLE10G -s %sdeServerIp% -u %sdeUser% -p %sdePwd% ) echo 导入完成 pause<con>nul 双击import.bat,根据要求输入参数,则会在当前bat所在目录下导出表数据 注: 1、  SDE_TABLE 需要自行设置导出的表名数组; 2、  -i SDE:ORACLE10G 需要根据SDE版本设置;
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!