在oracle数据库中部署多个SDE服务


 一、一个oracle部署多个SDE服务(采用问题的方式提供答案

 问题:

    目的:
   在机器上安装了oracle实例,默认会产生一个数据库实例(SID为 Orcl),在这个数据库实例上安装了一个SDE(sde服务名为 esri_sde)。现在通过这个oracle的工具产生了另外一个数据库实例(SID为 SDEInst),现在的目的是:在这个SDEInst数据库实例上部署一个SDE。
   操作过程
   1、 使用DBCA产生SID为SDEInst的数据库实例,然后在这个数据库实例创建了一个用户(其用户名为:sde,只赋予了角色权限[Connect、DBA、RESOURCE],其他权限默认),用户对应的表空间也是自己创建的。
   2、安装ESRI全球网上提供的方法创建、修改文件。具体如下:
      I、拷贝 %SDEHOME% 到一个新的位置(%SDEHOME%我的拷贝的内容为D:\Program Files\ArcSDE 9.2\ArcSDE\ora9iexe),然后重命名为ora9iexe2.
         II、用数据库实例SID(这里为SDEInst)更新dbinit.sde 文件内容(ArcSDE\ora9iexe2\etc下),将它更改为:# Oracle SID for service demo_sde.
                                 set ORACLE_SID = SDEInst
         III、更新 ArcSDE\ora9iexe2\etc\services.sde文件,设置它的服务名和端口号为   demo_sde      5152/tcp         #ArcSDE for Oracle
         IV、在C:\WINDOWS\system32\drivers\etc\services 添加上服务名和端口号demo_sde      5152/tcp
         V、清除了ArcSDE\ora9iexe2\etc由ora9iexe带来的日志文件的内容---sde_setup.log
         VI、按照ESRI全球网的方法,需要更新giomgr.defs和dbtune.sde 文件的内容,由于不知道如何具体设置参数,就没有更改过.使用 Orcl中的sde参数应该没有问题吧?
     3、创建ArcSDE和Geodatabase的系统表和存储过程等,这里使用的命令是:
    sdesetup -o install -d ORACLE9I -H "D:\Program Files\ArcSDE 9.2\ArcSDE\ora9iexe2" -u sde -p sde
      这个命令行中,开始也遇到了很多问题。后来用户使用自己创建的 sde 用户并附上 DBA权限就创建成功了。但是ESRI全球网上对用户 -p的描述为:Database administrator password,为什么我用其他用户名的DBA用户就不行?这个问题就这样过了,毕竟已经创建成功了。
   4、创建sde服务(这个是出错的地方)
    使用SDE命令行:sdeservice -o create -d ORACLE9I,SDEInst -p sde -i demo_sde -H "D:\Program Files\ArcSDE 9.2\ArcSDE\ora9iexe2" -n .
     可是在使用运行的过程中总是抱如下错误(参考图片): Wrong RDBMS Name "ORACLE9I,SDEInst "。 我的数据库是ORACLE9I,并且如上描述我的SID为SDEInst,是没有问题的!!!?
    后来我尝试将"-d ORACLE9I,SDEInst" 换成"-d ORACLE,SDEInst" 居然创建成功了,但是这个名为demo_sde的SDE服务还是启动不起来,对比看了一下成功运行的SDE服务,发现这个demo_sde的SDE服务少了依赖的数据库服务OracleServiceSDEINST,也就是说这个SDE服务没有绑定到oracle实例上。


giomgr进程答案:

查看了下应用程序日志,上面主要是sde许可的问题。其实是很简单的问题。

(以前一直服务信息是在系统日志里面,没有看应用程序日志)


答案补充:
个oracle部署多个SDE服务主要分为两种方式:手动创建和post创建

一、手动创建sde服务:
     1、创建新的oracle实例;
     2、在这个实例上创建新的表空间(赋予一定的空间大小),创建在此表空间之上的sde用户名(用户名为sde),密码可以随意。给这个用户名赋予DBA、CONNECTION、RESOURCE三个角色权限,赋予select any table的系统权限。
     3、将原来默认安装的ArcSDE 9.2\ArcSDE\ora9iexe文件夹拷贝并重命名为ora9iexe2(路径为ArcSDE 9.2\ArcSDE\ora9iexe2),只要设置一下dbinit.sde中的ORACLE_SID使之对应到新创建的数据库实例名(当然安装上面完全自己设置也是可以的;或者可以不用设置,因为在下面的命令行中会对其进行相应的操作)。【切记下面sdesetup 和sdeservice 为ora9iexe2下的命令,需要设置环境变量或者通过dos的 cd 方式转到ora9iexe2目录下】。
    4、创建ArcSDE和Geodatabase的系统表和存储过程 sdesetup -o install -d ORACLE9I -H "D:\Program Files\ArcSDE 9.2\ArcSDE\ora9iexe2" -u sde -p sde -l C:\SdeLic.ecp 【我前面失败的原因就是没有-l C:\SdeLic.ecp 授予许可】。创建成功之后进行第5步。
    5、创建sde服务: sdeservice -o create -d oracle,CMDSDE -p sde -i cmd_sde -H "D:\Program Files\ArcSDE 9.2\ArcSDE\ora9iexe2" -n 【切记 oracle9i数据库使用-d oracle,CMDSDE ,如果换成-d oracle9i,CMDSDE,报错不认识oracle9i】。


二、post创建sde服务:
      和手工创建原理是一样的,只是有些sde命令是通过post向导执行的,我们只是提供参数而已。
      1、创建新的oracle实例;
      2、将原来默认安装的ArcSDE 9.2\ArcSDE\ora9iexe文件夹拷贝并重命名为ora9iexe2(路径为ArcSDE 9.2\ArcSDE\ora9iexe2),只要设置一下dbinit.sde中的ORACLE_SID使之对应到新创建的数据库实例名。
      3、开始-程序……里启动post安装,选择自定义custom,然后勾掉create ArcSDE Service我们最后手工创建;进入下一步填写你的oracle数据库信息;下一步 设置一下dbinit.sde的路径指向咱们刚才2中设置过的dbinit.sde;其中向导要求你输入SDE的许可,添加许可文件就可以了。[这步相当于手工创建的第4步].
     4、创建sde服务: sdeservice -o create -d oracle,CMDSDE -p sde -i cmd_sde -H "D:\Program Files\ArcSDE 9.2\ArcSDE\ora9iexe2" -n

-------------------------------------------------------------------------------------------------------------------------------------
、单SDE服务关联多用户(每个用户具有SDE的权限):

   主要应用点:将不同类型的数据部署在不同用户下。
   在一般安装SDE时会产生一个默认的用户sde用户,大部分的时候我们将数据都放在sde用户下面。
   有时我们需要业务需要放在不同的用户下(如:出于权限考虑),例如现在将基础地形图数据放在A用户下,房产图数据放在B用户下。这个可以在数据库操作如下:新建A用户和B用户所需要表空间,并设置它们的物理数据文件地址名为A001.dbf和B001.dbf;然后新建A用户和B用户,将其和刚才新建的表空间对应起来;最后设置A用户和B用户具有SDE权限(具体需要哪些权限可以参考默认产生的sde用户所赋予的权限)。
   在某些情况下,我们需要通过使用默认安装的sde用户来使用所有用户的数据(如这里的A用户和B用户下的数据),此时我们只要给sde用户授予相应的对象权限(如:Oracle具体对象权限,右击“sde用户”,选择“对象”Tap进行设置),也可以通过使用用户代理使得sde用户有足够的权限。
       这种方式建立的A用户和B用户,和SDE用户最大的区别在有没有SDE一些系统表。A和B用户能够存储空间数据是基于SDE用户的。  
       具体的SDE用户功能,参考  http://www.gissky.net/Article/94.htm

        具有SDE的用户最小系统权限设置要求是:
Create procedure / Create table / Create sequence / Create trigger / Create session

   (其他:1、启动SDE服务的时候发生了什么:SDE服务程序启动一个giomgr进程,giomgr进程从dbinit.sde文件中获取系统环境变量,giomgr进程检测服务的lincese是否已经安装。giomgr进程读取services.sde获取远程的TCP/IP协议和服务名、端口号。giomgr进程使用dbinit.sde连接数据库实例,giomgr遍历所有的锁定表,然后启动服务成功。giomgr进程开始监听它的端口,以确定外界是否请求有连接。
              2、SDE连接服务的时候发生了什么:giomgr进程监听它的端口,确定有一个客户端连接请求。giomgr比较程序计算机的锁定时间和它的主机时间,如果大于MaxTimeDiff,则不运行连接。giomgr进程开始比较客户端程序的ArcSDE版本和ArcSDE服务端版本,如果前者比后者旧,连接将被拒绝.giomgr进程启动一个gsrvr进程,为客户端程序服务,gsrvr进程获得共享内存.gsrvr进程连接到DBMS上一旦上面的过程成功,giomgr将继续监听下一个连接.)

 

 

 

 

           在oracle上安装SDE会存在一个默认的sde用户,使用创建sde用户的相似用户方式,让创建的每一个用户具有存储空间数据库的能力。要让sde具有访问其他用户的能力的话:必须给sde用户的角色权限附上dba的权限。(如果这个用户具有dba的权限的话,可以使用schma.tablename访问和编辑其他表的能力)。给sde用户附上dba的权限后sde就会具有在其上创建相似用户,它的一定的对象权限。

posted @ 2009-08-27 10:30  爱图--UpdooGIS  阅读(1980)  评论(0编辑  收藏  举报