我有2台哦ORACLE服务器,s1和s2,s1的用户是S1USER,口令是S1USER。 s2的用户是S2USER,口令是S2USER。 
想在s1上建立1个s2的Dblink,请问怎么写创建语句?
是在s1上执行吗?
着急,在线等。

解决方案 »

  1.   

    Create public database link S2DBLINK connect to S2USER identified by S2USER using "NSName";
    --NSName表示s2的网络服务名
    --在是s1服务器上执行
      

  2.   

    1.首先在s1上,用net configuration assisant 建立s2的网络连接。比如连接名字为 ss
    2。在s1上,建立dblinkcreate database link test
      connect to S2USER identified by S2USER 
      using 'ss';3,查询 select * from tab@test;
      

  3.   

    Create public database link S2DBLINK connect to S2USER identified by S2USER using 'NSName';
      

  4.   

    --2.创建DB link--- 
    ---------------- 创建私有链接名 -----------------------------------
    create  database link sztylf8
    CONNECT TO hll IDENTIFIED BY szty2009hll 
    using '(DESCRIPTION = 
    (ADDRESS_LIST = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.5.8)(PORT = 1521)) 

    (CONNECT_DATA = 
    (SERVICE_NAME = sztyora) 

    )';-- 其中 
    -- *(1) hll 是远程数据库的用户名
    -- *(2) szty2009hll 是远程数据库的密码
    -- *(3) 192.168.5.7 是远程数据库的IP(我这里是用的内网IP,你也可以用外网IP,但是那将影响你的查询速度)
    -- *(4) 1521 是远程数据库启用的端口号
    -- *(5) sztyora 是远程数据库的SID-- 若要创建公共链接名的话:
    create  public database link sztylf
    ......
      

  5.   

    -- 以下这样创建出来的 DBLink 不受你本地配置的访问远程服务器的服务名的影响create  database link szty245link 
    CONNECT TO scott IDENTIFIED BY bee56915
    using '(DESCRIPTION = 
    (ADDRESS_LIST = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.245)(PORT = 1521)) 

    (CONNECT_DATA = 
    (SERVICE_NAME = sztyora) 

    )';
      

  6.   

    感谢大家指点,我现在想看一下表内容
    用select * from  all_tables@S2DBLINK 
    提示出错
      

  7.   

    -- 只是一句话:提示出错, 到底怎么报的错误嘛?-- 就不能把你创建 s2dblink 的代码,及 select 的报错代码贴出来吗?-- 汗:一句话:报错,就指望别人帮你解决问题?
      

  8.   

    select * from all_tables@S2DBLINK
    ORA-12154: TNS: 指定接续的识别子不能解决
      

  9.   

    谢谢!创建完了,怎样才可以查询?
    我试了多次,一直出上面提到的错误。
    s2里有表:user1.m001
    语法如下:
    select * from user1.m001@S2DBLINK
      

  10.   


    -- 问你创建 S2DBLINK 的代码是什么?能贴出来不?
      

  11.   

    就是上面duqiangcise提供的那个。
    Create public database link S2DBLINK connect to S2USER identified by S2USER using 'NSName'
      

  12.   

    -- 你数据库中有这个 名为:'NSName' 的服务名吗?
      

  13.   

    -- 要不这样吧:
    -- 你查找一个这个文件:tnsnames.ora (其默认路径在:$ORACLE_HOME/network/admin 下)-- 有类似如下的代码:# tnsnames.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.ora
    # Generated by Oracle configuration tools.SZTYORA245 =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.245)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = sztyora)
        )
      )......-- 其中 SZTYORA245 就是服务名(即 using 'NSName' 中的 NSName 部分就用 SZTYORA245 去替换)
    -- 一般应该是大写-- 不知道我这样讲,你能明白不?
      

  14.   

    创建都正常,只是查询的时候,才出错。
    ORA-12154:   TNS:   无法解析指定的连接标识符是不是需要在本地服务器s1的tnsnames.ora 文件里添加s2的服务名?
      

  15.   

    谢谢大家。
    原因已经查明。
    是由于服务器s1的ORACLE配置文件里没有配置服务器s2的服务名。还有一个问题。
    我的服务器s2是加密的服务器,在程序里是先用一个用户USER111和密码pwd111去连接。对目标表没有操作权限。只是去提取用户USER222的加密的密码***,这个密码每天都不一样。这种情况,可以在服务器s1上一次处理,一直使用吗?可以的话,怎么做?
      

  16.   

    特别感谢luoyoumou,一直在给与帮助。
    结帖时会考虑的。我也一直在按着给我的指点作测试了。
      

  17.   

    看来只有在程序里去处理了。具体什么时候变我也不太清楚,应该是利用ORACLE的密码加密功能。
    是在VB里用程序去提取加密后的密码。先结贴了。
    谢谢大家了!