Oracle+sde数据备份、恢复
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版本设置;