TNSNAMES.ORA里的SERVICE_NAME到底是数据库中哪里设置的啊,服务名是指什么

gwolfupb 2003-09-18 01:14:50
是在init.ora文件中设置吗?
我的SID是hdqt
inithdqt.ora中设置如下:
db_name = "hdqt_db"
instance_name = hdqt
service_names = hdqt_db
可为什么我的TNSNAMES.ORA需要把SERVICE_NAME设置成hdqt(这恰恰是SID名)才能连接呢,(用hdqt_db有时行有时不行)
还有一点,原来8.0版本都用SID的,这个好理解SID建库的时候是自己指定的不会搞混,可是到了8i为什么有的机器是可以用SID连接,而有的机器只能使用SERVICE_NAME连接呢(好象是同一网段可以用SID,需要通过路由连接的话要用SERVICE_NAME),哪位大侠给我讲讲8i后引入服务名是为什么呢,有什么作用啊,我都给他们的关系给搞晕了:)
100分意思一下(可用分太多,花不出去了)...
...全文
2251 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
gwolfupb 2003-09-25
  • 打赏
  • 举报
回复
是不是这个意思啊,TNSNAMES.ora里的SERVICE_NAME和数据库INIT里的SERVICE_NAME根本不是一回事,而是SID的意思啊,
另外如果在listener.ora里定义加了GLOBAL_DBNAME的话,那么在客户端用SID名和GLOBAL_DBNAME 都是可以的?
chanet 2003-09-19
  • 打赏
  • 举报
回复
数据库名呀~
楼上还一个个解析了.

补充一下:
如果是新建的话,用 Net8 Configuration Assistant 方便很多,就添加一个就可以了~

如果是学习理解一下的话,呵呵... 路过,当我没来过... :)
l2g32003 2003-09-19
  • 打赏
  • 举报
回复
lsnrctl status 看有没有这个服务 hdqt_db

没有用 sql> alter system register;

oracle性能优化 这本书上有讲的
rolandzhang 2003-09-18
  • 打赏
  • 举报
回复
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
gwolfupb 2003-09-18
  • 打赏
  • 举报
回复
按各位的意思是不是TNSNAMES.ORA里的SERVICE_NAME就是设置 SID名即可??
我现在就是分不清楚SERVICE_NAME和SID的区别了
Drate 2003-09-18
  • 打赏
  • 举报
回复
如果楼主把SID与SERVER_NAME的概念区分开了,我想就应该不会存在这样的问题了

bzszp 2003-09-18
  • 打赏
  • 举报
回复
host 服务器名或ip
service_name 数据库sid
通过这样就找到了要连接哪一台服务器的哪个数据库了
llm06 2003-09-18
  • 打赏
  • 举报
回复
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.6)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = epolice)
)
)

这里的设置是客户端的设置,SERVICE_NAME就是远程服务器的服务名,就是远程数据库的sid名
BlueskyWide 2003-09-18
  • 打赏
  • 举报
回复
在一台已连通的客户端,以dba用户进入:
select value$ from sys.props$ where name='GLOBAL_DB_NAME';
jiezhi 2003-09-18
  • 打赏
  • 举报
回复
服務名是針對客戶端而言的。就是在你配置連接服務器的時候,需要輸入服務器上的數據庫實例的sid,而你輸入的服務名是你的客戶端使用的,可以為任何你喜歡的名字。
比如server上有實例sid為myDb,然后你配置連接的它的時候可以把服務名填寫為ILikemyDb這樣隨意的名字,但是通常人們都不會這么做的,因為不好記憶和區分。
beckhambobo 2003-09-18
  • 打赏
  • 举报
回复
PROTOCOL = TCP)(HOST = 192.168.0.6)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = epolice

PROTOCOL --协义
host --数据库服务器ip
port --数据库服务器端口
service_name -- 数据库sid
gwolfupb 2003-09-18
  • 打赏
  • 举报
回复
但是 我在init中设置 的是 hdqt_db啊 ,可是TNSNAMES.ORA里使用 SERVICE_NAME = hdqt_db
就连接不到数据库啊~~
catherine9999 2003-09-18
  • 打赏
  • 举报
回复
service name 指init中的service_names参数值

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧