如题;
   我想实现在oracle1数据库中使用sql,或者存储过程,触发器来操作另一台oracle2数据库,请问我需要做哪些配置?之前自己查询过相关解决方案:
   1。配置TNS,然后创建dblink, 创建同义词
     
     -- 错误提示:ORA-12505:TNS:监听程序无法识别连接描述符中所给出的SID.
       2。使用sp_addlinkedserver命令,根本执行不到,最后才知道是SQL SERVER的命令..请知道的前辈给以明确指示:最好能提示哈,每个步骤怎么操作的. 先谢了。

解决方案 »

  1.   

    ORA-12505:TNS:监听程序无法识别连接描述符中所给出的SID.
    这样的错误,网上很多 ,你搜下吧
      

  2.   

    个人理解似乎只能从jdbc实现,如果这种跨数据库可以随意操作的话,就不安全了,如果你想实现这种功能,可以创建两个schema,用schema.的方式去相互调用
      

  3.   

    首先谢谢你们的回复:
        不过主要业务方面涉及到使用该功能, 之前做过ORACLE到SQL2000透明网关,是可以在ORACLE里边直接操作SQL2000里边的表的, 我想可能我所理解的方式不对吧,应该可以实现这功能的吧; SQL SERVER数据库都可以,我想ORACLE肯定可以的.. 还请有大牛不吝赐教..
      

  4.   

    是不是因为你的TNS设置错误呢?
      

  5.   

    同义词使用方法例如:ORACEL1中有表sykm006,ORACEL2也许要用sykm006表,那就要在ORACEL2中建立同义词。首先:进入ORACEL1用户,赋予ORACEL2对于sykm006的查询权限:
        grant select, references, alter, index on sykm006 to ORACEL2;然后:进入ORACEL2用户,建立与ORACEL1的同义词
        create or replace synonym sykm006 for ORACEL1.SYKM006; 最后:在ORACEL2用户下 运行sql:
    select * from sykm006运行正常,可以查出ORACEL1用户下的sykm006表的数据,表明成功。 这样做的前提的是 数据库ORACEL1和数据库ORACEL2在同一台机器上。至于在不同的机器上,期待
      

  6.   

    CREATE PUBLIC DATABASE LINK dblink_name
    CONNECT TO 用户名 IDENTIFIED BY 密码
    USING '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST =  X.X.X.X)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = SID)))';这样过后, 还需要配置其他么?同义词配置不配置无所谓,主要是使用方便
      

  7.   

    请确认
    1.tns的配置是否正确?可以在数据库所在服务器使用tnsping XXX查看
    2.创建的dblink是否正确? 你可以是用 select * from table_name@dblink_name的方式来查询
    3.你的SQL是否有问题?建议你将TNS配置信息,DBLINK的创建脚本(密码隐藏掉),执行的SQL语句都发出来看看
      

  8.   

    试试tnsping 目标的数据库sid看通否  这不不通任何事情枉然
      

  9.   

    首先谢谢各位的回复创建dblink语句
    CREATE PUBLIC DATABASE LINK crm_boss
    CONNECT TO name IDENTIFIED BY pwd
    USING '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST =  172.16.0.169)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = SID)))'这句话中,的name、pwd参数值,我写的是在net manager里边配置时测试的那个账号,密码;不知道对不对,不对的话,应该写那个用户名、密码; SID我写的是目标数据库名字;(因为我看到在oracle/db_1/network/admin/tnsnames.ora里边配置的); 不知道我这样写对不对, 之前没手动配置过这个,全是依照之前那些tns配置推理修改的;若不对, 怎么样修改呢, 谢谢;最后查询语句是 select * from 表名@crm_boss;
    弹出的错误信息入帖子上发的;
    注明: oracle我是菜鸟, 接触时间不多; 若犯的错误比较基础;还望各位前辈给予指出,不吝赐教;再次感谢.
      

  10.   

    配置:
    oracle1:192.168.1.58  oracle_sid=orcl1  
    oracle2:192.189.4.57  oracle_sid=orcl2  user:scott pwd:tiger
    在orcl1中创建orcl2的数据库链接
    orcl1:sql:>
    CREATE PUBLIC DATABASE LINK crm_boss
    CONNECT TO scott idtified BY tiger
    USING '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.189.4.57)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl2)))';
    测试:
    select *  from emp@crm_boss  ;
      

  11.   


    这里这个orcl1和orcl2都要在本地服务配置的,还有你配置好以后,用tnsping orcl1和orcl2,看能够PING通不,你出现的错误是指本地无法识别你的服务名。
      

  12.   


    请问下配置里边的两台ORACLE数据库, oracle_sid是怎么得到呢?
    是在net_Manager里边么,还是手动配置在tnsnames.ora里边?
      

  13.   

    3Q大家,问题解决了;
    CREATE PUBLIC DATABASE LINK crm_boss
    CONNECT TO name IDENTIFIED BY pwd
    USING '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 172.16.0.169)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = SID)))'这一句话就OK的, name、pwd是netManager里边配置的登陆sqlplus的用户名、密码,SID是目标数据库名称;