服務名是針對客戶端而言的。就是在你配置連接服務器的時候,需要輸入服務器上的數據庫實例的sid,而你輸入的服務名是你的客戶端使用的,可以為任何你喜歡的名字。
比如server上有實例sid為myDb,然后你配置連接的它的時候可以把服務名填寫為ILikemyDb這樣隨意的名字,但是通常人們都不會這么做的,因為不好記憶和區分。
比如server上有實例sid為myDb,然后你配置連接的它的時候可以把服務名填寫為ILikemyDb這樣隨意的名字,但是通常人們都不會這么做的,因為不好記憶和區分。
解决方案 »
- oracle序列的应用
- oracle的gruppo by 问题
- help !! help 这个题
- 不是group by 表达式
- 1000求助!!!在C#里如何用一条SQL访问两个数据库里的表?
- 请问如何写一个sql,只保留表的前500条记录,其余的都删除
- 做Oracle DBA要会些什么问题
- 在linux72下安装oracle9i,停留在init java virtual machine,求救
- 已设置Session和Process为480,300 实际连接30个Process就满了,如何查找哪里设置有问题?
- cantnot set autotrace
- oracle8i安装问-在线等待-急
- 控制面板 中的“服务”里的 oracle服务不能自动启动!!!
select value$ from sys.props$ where name='GLOBAL_DB_NAME';
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.6)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = epolice)
)
)这里的设置是客户端的设置,SERVICE_NAME就是远程服务器的服务名,就是远程数据库的sid名
service_name 数据库sid
通过这样就找到了要连接哪一台服务器的哪个数据库了
我现在就是分不清楚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
就连接不到数据库啊~~
)
(CONNECT_DATA =
(SERVICE_NAME = epolicePROTOCOL --协义
host --数据库服务器ip
port --数据库服务器端口
service_name -- 数据库sid
楼上还一个个解析了.补充一下:
如果是新建的话,用 Net8 Configuration Assistant 方便很多,就添加一个就可以了~如果是学习理解一下的话,呵呵... 路过,当我没来过... :)
另外如果在listener.ora里定义加了GLOBAL_DBNAME的话,那么在客户端用SID名和GLOBAL_DBNAME 都是可以的?