各位大侠,我现在用PL/SQL连接oracle数据库时,出现一个问题,具体问题如下:oracle版本为10.2.0.4.0,是从10.2.0.1.0升级得到的。当客户端的tnsnames.ora配置为:
aaa =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = orcl)
    )
  )
此时PL/SQL可以连接,没有问题。
当tnsnames.ora改为:
aaa =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (service_name = orcl)
    )
  )之后,PL/SQL就会出错:
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor而我现在有一个程序,已经编译过了,里面默认使用的是service_name,已经不能再改为SID了,请问如何才能使用service_name连接到oracle数据库呢??

解决方案 »

  1.   

    oracle版本为10.2.0.1.0,升级到10.2.0.4.0后,还需要升级你的实例用oracle自带的Database upgrade assistant进行升级,具体操作步骤为:
    开始--程序--Oracle--Database upgrade assistant
    别的参数不需要修改
      

  2.   

    实例我已经升级了,但是service_name就是不能用,我查了一下:
    SQL> show parameter ser;service_names   string   orcl.hn.modata.com我在PL/SQL中将service_name写成这个肯定也不行。请教一下,我怎么将service_name改为orcl,去掉后面的域名呀??
      

  3.   

    那你把tnsname.ora里面的改为这个行不啊?
      

  4.   

    把tnsnames.ora中的SID=orcl
    改为service_name=orcl   不行  错误:ORA-12514
    改为service_name=orcl.hn.modata.com    更不行   错误:ora-12545
      

  5.   

    在系统环境变量添加oracle_sid=orcl试试
      

  6.   

    我没用过10g,不过在9i中,可以直接登录控制台,手工修改服务命名。不知道10g中有没有类似的界面。
      

  7.   

    ORCL =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = orcl)
        )
      )我的是这样的 ,可不可以把SID = orcl   SERVICE_NAME = orcl 都写上,可以试试
      

  8.   


    两个都写上也不行,好像是首先去找的service_name,所以提示的错误还是ora-12514我想请教一下,如何将oracle数据库的service_name进行修改呢???
      

  9.   

    好方法:
    重新装一个ORACLE ,我刚装个,比较熟悉
    把SID 该成service_name!
      

  10.   


    我现在想要使用service_name,但不能,总提示ora-12514的错误,只有换成SID才可以。不过我必须得用Service_name,不知道怎么才能使用。
      

  11.   

    如果数据库有域名,则数据库服务名(service_names)就是全局数据库名;否则,服务名与数据库名相同
    全局数据库名=数据库名+数据库域名(db_domain)
    你把数据库域名改为空,再用service_name = orcl试试
      

  12.   

    我的是这样的,可以参考下 我估计是你的那个SERVER有问题
    ngstst =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 100.22.67.98)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = ngbiltst)
        )
      )
      

  13.   

    试试对ocrl数据库重新配置一个service_name
      

  14.   

    没有与讲过你说的问题看!你说的程序是什么程序?前台应用不会用到oracle底层的配置吧!
      

  15.   

    你数据库的SID和servic_names 值是一样吗。如果是
    aa= 
      (DESCRIPTION = 
        (ADDRESS = (PROTOCOL = TCP)(HOST = 100.22.67.98)(PORT = 1521)) 
        (CONNECT_DATA = 
          (SERVER = DEDICATED) 
          (SERVICE_NAME = sid) 
        ) 
      )
    应该没问题的,不一样的就后面
    server_name= 全局数据库的值
    就行啦