您的位置:首页 > 数据库 > Oracle

Oracle+sde数据备份、恢复

2012-08-17 18:11 525 查看
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版本设置;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: