Oracle 中 db_name / service_name / sid 三者的关系和作用

db_name 是一个实在的物理名称。service_name 时带有域名的,因为如果两个数据库不再同一个域可以有相同的名称。而sid 是数据库的实例名称,它是有SGA 和后台进程组成。一个数据库只有一个db_name 但是可以有两个实例。每个实例各有自己的SGA 和后台进程。

 

Db_name :对一个数据库(Oracle database )的唯一标识。这种表示对于单个数据库是足够的,但是随着由多个数据库构成的分布式数据库的普及,这种命令数据库的方法给数据库的管理造 成一定的负担,因为各个数据库的名字可能一样,造成管理上的混乱。为了解决这种情况,引入了Db_domain 参数,这样在数据库的标识是由 Db_nameDb_domain 两个参数共同决定的,避免了因为数据库重名而造成管理上的混乱。这类似于互连网上的机器名的管理。我们将 Db_nameDb_domain 两个参数用’.’ 连接起来,表示一个数据库,并将该数据库的名称称为Global_name ,即它扩展了 Db_nameDb_name 参数只能由字母、数字、’_’’#’’$’ 组成,而且最多8 个字符。

Db_domain
:定义一个数据库所在的域,该域的命名同互联网的 没有任何关系,只是数据库管理员为了更好的管理分布式数据库而根据实际情况决定的。当然为了管理方便,可以将其等于互联网的域。

Global_name
: 对一个数据库(Oracle database )的唯一标识,oracle 建议用此种方法命令数据库。该值是在创建数据库是决定的,缺省值为Db_name. Db_domain 。在以后对参数文件中Db_nameDb_domain 参数的任何修改不影响Global_name 的值,如果要修改 Global_name ,只能用ALTER DATABASE RENAME GLOBAL_NAME TO <db_name.db_domain> 命令进行修改,然后修改相应参数。

Service_name
:该参数是oracle8i 新引进的。在8i 以前,我们用SID 来表示标识数据库的一个实例,但是在Oracle 的并行环境中,一个数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name 参数,该参数对应一个数据库,而不是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name. Db_domain ,即等于Global_name 。一个数据库可以对应多个Service_name ,以便实现更灵活的配置。该参数与SID 没有直接关系,即不必Service name 必须与SID 一样。

Instance_name
: 数据库实例名。用于和操作系统之间的联系,用于对外部连接时使用。在操作系统中要取得与数据库之间的交互,必须使用数据库实例名。例如,要和某一个数据库 server 连接,就必须知道其数据库实例名,只知道数据库名是没有用的,与数据库名不同,在数据安装或创建数据库之后,实例名可以被修改。数据库名与实 例名之间的关系一般是一一对应关系,有一个数据库名就有一个实例名,如果在一个服务器中创建两个数据库,则有两个数据库名,两个数据库实例名,用两个标识 确定一个数据库,用户和实例相连接。 但在8i9i 的并行服务器结构中,数据库与实例之间不存在一一对应关系,而是一对多关系,( 一个数据库对应多个实例,同一时间内用户只一个实例相联系, 当某一实例出现故障,其它实例自动服务,以保证数据库安全运行。)

Oracle_SID :操作系统环境变量。在实际中,对于数据库实例名的描述有时使用实例名(instance_name) 参数,有时使用ORACLE_SID 参数。这两个都是数据库实例名,它们有什么区别呢?( 经常弄混)

(ORACLE_SID)
OS<---------------->; ORACLE
数据库 <--------(Instance_name( 实例名))

上例表示实例名instance_nameORACLE_SID 与数据库及操作系统之间的关系,虽然这里列出的两个参数都是数据库实例名,但 instance_name 参数是ORACLE 数据库的参数,此参数可以在参数文件中查询到,而ORACLE_SID 参数则是操作系统环境变量。
操 作系统环境变量ORACLE_SID 用于和操作系统交互。也就是说,在操作系统中要想得到实例名,就必须使用ORACLE_SID 。此参数与 ORACLE_BASEORACLE_HOME 等用法相同。在数据库安装之后,ORACLE_SID 被用于定义数据库参数文件的名称。如:

=======================================

init.ora 中有db_nameinstance_nameservice_name

db_name 是数据库的名称,在db 安装时就已经设置了,这里不可修改,它觉得了数据库安装文件的位置。

instance_name 是实例名,是数据库运行中名称,其实在OOdb_name 相当于类而instance_name 向当于对象,它也 是代表数据库运行中的内存及其进程,同时影响到了这些进程的名称,譬如:一个数据库db_namecus ,而其实例 instance_name=aking ,那么数据库起来后,其进程名可能为:Pmon_aking_1 。这里的实例名称要和PWDsid.ora initSid.ora 等文件匹配上,否则,db 起动报错。从这里可以看出db_name 是类名,定义后是不可修改的,而对于instance_name 实例名向当于对象,所以我们可以设定自己喜欢的对象名称。不过话虽这样讲,但改了instance_name 后,牵扯到很多其他的设置,还是最好不要动 他,默认和db_name 是一样的,这样多好。

service_name 我觉得应该是指数据库网络连接时的名称,在listener 配置中会有所考虑的。这个值也是可以随意改动的,并且还可以有多个值。alter system set service_name=serv1,serv2 scope=both;

 

listener.ora 中有SID_NAMEGLOBAL_DBNAME

这里SID_NAME 指数据库的运行的实例名,应该是和instance_name 一致

而对于GLOBAL_DBNAMElistener 配置的对外网络连接名称,我们在配置tnsname.ora 时会考虑这个参数。这个参数可以任意的设置。

另外有一点需要注意,一般我们会在listener.ora 手工配置数据库实例的监听配置。但oracle 可以通过pmon 进程支持自动注册, 这时自动注册的对外网络连接名称就会用到init.ora 文件中service_name ,有多个值的话就会注册多个,对于上面的例子,在这里就会注册 serv1serv2 两个监听服务。如果你还手工配置了一个GLOBAL_DBNAMEserv3 的监听服务的话,那么对于实例 instance_name=aking 就会有三个监听服务。

 

tnsname.ora 中有SERVICE_NAMESID

下面配置客户端的tnsname.ora

对于这里的配置主要要给出要连接的数据库的IP 及其连接的实例或服务

在监听配置中我们提到了对外网络连接名称,在这里如果我们用SERVICE_NAME 的话,就需要SERVICE_NAME = (GLOBAL_DBNAME 或者service_name 这里要求oracle 已经自动注册到了监听器中),对于SID = (instance_name )即可,譬如:

SERVICE_NAME serv1serv2serv3 都可以,或者

SID=aking

 

最后一个是ORACLE_SID 参数,这个参数是操作系统中用到的,它是描述我们要默认连接的数据库实例,对于一个机器上有多个实例的情况下,要修改后才能通过 conn / as sysdba 连接,因为这里用到了默认的实例名。

=============================================

 

 

一直对ORACLE 中各种名字不是很清晰,这两天做了比较细致的研究,也算是小有成就吧,哈哈!

Service_name 数据库逻辑上表现为一个服务,服务名可以任意取,并且一个数据库可以有 多个服务名,名字由参数Service_names 决定,如果该参数为空,默认的服务名为全局数据库名,即db_name.db_domain

 

Instance_name 实例与数据库的对应关系是多对一,由参数instance_name 指定,当系统的实例与数据库为一对一关系时,通常实例名即为数据库名。

 

 

db_name db_name db_domain 组成全局数据库名,唯一地标识一个Oracle 数据库,db_name 在数据库创建后就不能再更改。

 

ORACLE_SID 全称是Oracle System Identifier ,是以环境变量的形式出现,用于区分不同的实例。所以ORACLE_SID 其实就是当前想连接的实例名,因为实例与数据库是多对一的关系,所以确定了实例,就等于确定了要连接的数据库。

 

连接标识符: 下面是一个tnsnames.ora 文件的基本内容:

ORACLE =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.111)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = ora10g)

)

)

其中ORACLE 即是连接标识符,当使用本地命名的方式,在应用程序(如SQL*PLUS )连接Oracle 时,使用的就是连接标识符,如

sqlplus scott/tiger@oracle

连接标识符等号右边的内容全部为连接描述符,是使用本地命名连接Oracle 时所需的信息。

SERVICE_NAME 就是参数Service_names 中的值,必须与该参数的值对应,如果参数为空,那这里的SERVICE_NAME 只能是db_name.db_domain ,否则无法连接Oracle

==============================

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle创建连接MySQL的数据库连接(db_link),需要执行以下步骤: 1. 在Oracle数据库安装MySQL的适配器,称为Heterogeneous Services for ODBC(HSODBC)。该适配器可用于建立与其他数据库的连接。 2. 在Oracle的$ORACLE_HOME/hs/admin目录创建一个init<db_link名称>.ora文件。该文件定义了连接MySQL所需的参数。 以下是一个示例的init<db_link名称>.ora文件内容: ``` HS_FDS_CONNECT_INFO = host=<MySQL服务器IP地址> service=<MySQL服务器端口号> uid=<MySQL用户名> pwd=<MySQL密码> HS_FDS_TRACE_LEVEL = off HS_FDS_FETCH_ROWS = 100 HS_FDS_SHAREABLE_NAME = <ODBC驱动名称> ``` 3. 在Oracle数据库创建数据库链接。使用CREATE DATABASE LINK语句创建一个对象,指定连接MySQL所需的参数。 以下是一个示例的创建数据库链接的语句: ``` CREATE DATABASE LINK <db_link名称> CONNECT TO <MySQL用户名> IDENTIFIED BY <MySQL密码> USING <db_link名称> ``` 4. 配置Oracle数据库的监听器文件,将hsodbc适配器添加到该文件。 打开$ORACLE_HOME/network/admin目录下的listener.ora文件,在其添加以下内容: ``` SID_LIST_<SID名称> = (SID_LIST = (SID_DESC = (SID_NAME = <SID名称>) (ORACLE_HOME = <ORACLE_HOME目录>) (PROGRAM = hsodbc) ) ) ``` 确保替换<SID名称>和<ORACLE_HOME目录>为正确的值。 5. 重启Oracle数据库以使更改生效。 完成上述步骤后,您就可以使用创建的数据库链接(db_link)来访问MySQL数据库的数据。例如,您可以使用SELECT语句从远程MySQL表检索数据: ``` SELECT * FROM <MySQL数据库名称>.<MySQL表名>@<db_link名称> ``` 以上便是使用Oracle创建并使用数据库链接连接MySQL的一般步骤。根据您的具体环境和要求,可能需要进行适当的调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值