服務名是針對客戶端而言的。就是在你配置連接服務器的時候,需要輸入服務器上的數據庫實例的sid,而你輸入的服務名是你的客戶端使用的,可以為任何你喜歡的名字。
比如server上有實例sid為myDb,然后你配置連接的它的時候可以把服務名填寫為ILikemyDb這樣隨意的名字,但是通常人們都不會這么做的,因為不好記憶和區分。

解决方案 »

  1.   

    在一台已连通的客户端,以dba用户进入:
    select value$ from sys.props$ where name='GLOBAL_DB_NAME';
      

  2.   

    (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.6)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = epolice)
        )
      )这里的设置是客户端的设置,SERVICE_NAME就是远程服务器的服务名,就是远程数据库的sid名
      

  3.   

    host 服务器名或ip
    service_name 数据库sid
    通过这样就找到了要连接哪一台服务器的哪个数据库了
      

  4.   

    如果楼主把SID与SERVER_NAME的概念区分开了,我想就应该不会存在这样的问题了
      

  5.   

    按各位的意思是不是TNSNAMES.ORA里的SERVICE_NAME就是设置 SID名即可??
    我现在就是分不清楚SERVICE_NAME和SID的区别了
      

  6.   

    oracle 8i及以后版本在tnsnames.ora中用SERVICE_NAME代替了SID,我想主要是分布式数据管理的需要:要恰当设计长期使用的分布式数据库,必须使数据的物理位置对应用程序使透明的.数据库中的表明在所属的模式中使惟一的,因此,在单个数据库中,拥有者与表名的结合将惟一
    指定一个表.然而,一个远程数据库有可能拥有一个同名的帐户,并且这个帐户也同样又有一个同名的表, 如何正确地限定表名呢?
    在分布式数据库中,需要添加两个附加的对象识别层:首先,必须识别加紧访问数据库的实例名,例如你的instance_name = hdqt;其次必须识别实例所在的主机名.将对象的四个部分:主机、实例、拥有者和名字放在一起,就形成一个全局对象名(global object name)。若要访问一个远程表,这个表的全局对象名必须是已知的。通过使用服务名,使主机和实例名保持透明。
    例如:你的 inithdqt.ora应该是:
    hdqt_db=(description
                (address=
                        (protocol=tcp)
                        (host=yourhostname)
                        (port=1521)
                connect data=
                        (sid=hdqt)))db_name = "hdqt_db"
    instance_name = hdqt
    service_names = hdqt_db
      

  7.   

    service name 指init中的service_names参数值
      

  8.   

    但是 我在init中设置 的是 hdqt_db啊 ,可是TNSNAMES.ORA里使用 SERVICE_NAME = hdqt_db
    就连接不到数据库啊~~
      

  9.   

    PROTOCOL = TCP)(HOST = 192.168.0.6)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = epolicePROTOCOL   --协义
    host       --数据库服务器ip
    port       --数据库服务器端口
    service_name -- 数据库sid
      

  10.   

    数据库名呀~
    楼上还一个个解析了.补充一下:
       如果是新建的话,用 Net8 Configuration Assistant 方便很多,就添加一个就可以了~如果是学习理解一下的话,呵呵... 路过,当我没来过... :)
      

  11.   

    lsnrctl status 看有没有这个服务 hdqt_db没有用 sql> alter system register;oracle性能优化 这本书上有讲的
      

  12.   

    是不是这个意思啊,TNSNAMES.ora里的SERVICE_NAME和数据库INIT里的SERVICE_NAME根本不是一回事,而是SID的意思啊,
    另外如果在listener.ora里定义加了GLOBAL_DBNAME的话,那么在客户端用SID名和GLOBAL_DBNAME 都是可以的?