ORACLE_SID, SID, INSTANCE_NAME, SERVICE_NAME, SERVICES_NAMES, DB_NAME, GLOBAL_DBNAME, SID_NAME,以及网络服

2023-10-26

转载:https://blog.csdn.net/lyjiau/article/details/52238997

在Oracle中,我们会遇到下面一系列的十分重要的参数。同时他们的含义也常常让我们混淆。这些参数有:

ORACLE_SID, SID, INSTANCE_NAME, SERVICE_NAME, SERVICES_NAMES, DB_NAME, GLOBAL_DBNAME, SID_NAME,以及网络服务名(net service name),实例服务名(instance service name)等。下面我一个一个的来学习他们。

 

1. ORACLE_SID 与 SID 和 INSTANCE_NAME 以及 SID_NAME

ORACLE_SID:即ORACLE System IDentifier,它是一个环境变量。我们一般在oracle用户的home目录中的.bash_profile中进行定义,一般该文件包含下面一行:

[oracle@localhost ~]$ pwd

/home/oracle

[oracle@localhost ~]$ grep ORACLE_SID .bash_profile

export ORACLE_SID=jiagulun

其作用就是:

在我们使用在sqlplus工具中startup启动数据库时,OS就是利用这个环境变量来fork创建构成Oracle实例的各个进程,以及来命名一些文件的名字。如下所示:

[oracle@localhost ~]$ ps -ef | grep oracle

oracle   31707     1  0 13:41 ?        00:00:01 ora_pmon_jiagulun

oracle   31709     1  0 13:41 ?        00:00:00 ora_psp0_jiagulun

oracle   31711     1  0 13:41 ?        00:00:00 ora_mman_jiagulun

oracle   31713     1  0 13:41 ?        00:00:02 ora_dbw0_jiagulun

oracle   31715     1  0 13:42 ?        00:00:02 ora_lgwr_jiagulun

oracle   31717     1  0 13:42 ?        00:00:05 ora_ckpt_jiagulun

oracle   31719     1  0 13:42 ?        00:00:03 ora_smon_jiagulun

oracle   31721     1  0 13:42 ?        00:00:00 ora_reco_jiagulun

oracle   31723     1  0 13:42 ?        00:00:02 ora_cjq0_jiagulun

oracle   31725     1  0 13:42 ?        00:00:04 ora_mmon_jiagulun

oracle   31727     1  0 13:42 ?        00:00:01 ora_mmnl_jiagulun

oracle   31729     1  0 13:42 ?        00:00:00 ora_d000_jiagulun

oracle   31731     1  0 13:42 ?        00:00:00 ora_s000_jiagulun

oracle   31733 31704  0 13:42 ?        00:00:00 oraclejiagulun (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

racle   31929     1  0 14:48 ?        00:00:00 ora_arc0_jiagulun

oracle   31931     1  0 14:48 ?        00:00:00 ora_arc1_jiagulun

oracle   31935     1  0 14:48 ?        00:00:00 ora_qmnc_jiagulun

oracle   31937     1  0 14:48 ?        00:00:01 ora_q000_jiagulun

oracle   31939     1  0 14:48 ?        00:00:00 ora_q001_jiagulun

oracle   32108     1  1 15:42 ?        00:00:00 ora_j000_jiagulun

 

[oracle@redhat4 bdump]$ pwd

/u01/app/oracle/admin/jiagulun/bdump

[oracle@redhat4 bdump]$ ls -l alert_jiagulun.log

-rw-r-----  1 oracle oinstall 305534 Nov  2 14:01 alert_jiagulun.log

 

[oracle@redhat4 dbs]$ pwd

/u01/app/oracle/product/10.2.0/db_1/dbs

[oracle@redhat4 dbs]$ ls -l

total 108

-rw-rw----  1 oracle oinstall  1544 Aug 31 13:08 hc_jiagulun.dat

-rw-rw----  1 oracle oinstall  1544 Nov  1 17:07 hc_julia.dat

-rw-r-----  1 oracle oinstall 12920 May  3  2001 initdw.ora

-rw-r--r--  1 oracle oinstall  1283 Nov  2 11:33 initjiagulun.ora

-rw-r--r--  1 oracle oinstall    14 Nov  1 17:07 initjulia.ora

-rw-r-----  1 oracle oinstall  8385 Sep 12  1998 init.ora

-rw-rw----  1 oracle oinstall    24 Aug 31 13:10 lkJIAGULUN

-rw-rw----  1 oracle oinstall    24 Nov  1 17:08 lkJULIA

-rw-r-----  1 oracle oinstall  1536 Oct 25 09:43 orapwjiagulun

-rw-r-----  1 oracle oinstall  3584 Nov  2 14:01 spfilejiagulun.ora

-rw-r-----  1 oracle oinstall  3584 Oct  3 22:17 spfilejiagulun.ora.backup

 

下面的命令的执行必须要有环境变量ORACLE_SID:

SQL> startup

 

那么我们的环境变量ORACLE_SID应该设置成什么值呢?

应该是:我们想要startup哪个Oracle实例,就应该将ORACLE_SID设置成哪个实例的SID

下面我们看看SID,在我们用dbca创建数据库时,会出现下面的GUI让我们选择:

 

第一参数,就是要我们设置一个DB_NAME来唯一地标识数据库

第二个参数,要我们设置一个SID来唯一地标识一个Oracle实例

我们知道Oracle server由Oracle实例和Oracle数据库两者共同组成。

 

所以:

1)很显然地,我们想要startup哪个Oracle实例,就应该将环境变量ORACLE_SID设置成哪个SID。

2)SID唯一地标识一个Oracle实例,而ORACLE_SID启动该实例,启动之后我们得到一个Oracle实例,这个实例有一个名字:INSTANCE_NAME。SID==>>ORACLE_SID==>>INSTANCE_NAME这三者是一致的,是完全相同的。

3)同时这个实例向外提供服务,所以又有一个SERVICE_NAME。

 

而SID_NAME出现在lisnter.ora文件中:

[oracle@redhat4 admin]$ cat listener.ora

# listener.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora

# Generated by Oracle configuration tools.

 

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = PL***tProc)

      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

      (PROGRAM = extproc)

    )

    (SID_DESC =

      (SID_NAME = jiagulun)

      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

      (GLOBAL_DBNAME = jiagulun)

    )

  )

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

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

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

    )

  )

lisnter.ora中的SID_NAME的值必须与SID的值一致。通过lisnter.ora中的SID_NAME和GLOBAL_DBNAME两个参数以及客户端的tnsnames.ora中的SERVICE_NAME,这三个参数一起作用,可以实现ORACLE客户端与服务端的隔离。

[oracle@redhat4 admin]$ cat tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

 

JIAGULUN =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVICE_NAME = jiagulun)

    )

  )

 

EXTPROC_CONNECTION_DATA =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

    )

    (CONNECT_DATA =

      (SID = PL***tProc)

      (PRESENTATION = RO)

    )

  )

 

客户端根据tnsname.ora中的SERVICE_NAME和地址(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521)),到这个地址去访问监听器。然后监听器根据文件lisnter.ora文件中的GLOBAL_NAME来判断是否有一个 GLOBAL_DBNAME 和 SERVICE_NAME 相等。如果相等,则建立客户端到SID标识的服务端实例的连接。(有一个例外:tnsnames.ora中可以用参数SID来取代SERVICE_NAME,这时比较的是tnsnames.ora中的SID和lisnter.ora中的SID_NAME,但是从oracle9i开始不推荐使用SID。因为SID无法隔离客户端和服务端)

 

tnsnames.ora中的地址(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521))是监听器监听的地址。监听器进程一直在这个地址上监听,等待客户端的连接。

 

总结一下

1)客户端和服务端的隔离是通过lisnter.ora中的GLOBAL_DBNAME来实现的,GLOBAL_DBNAME是一个连接客户端和服务端的桥梁:

a>client端tnsnames.ora中的SERVICE_NAME和server端lisnter.ora中的GLOBAL_DBNAME相等;

b>server端的lisnter.ora中的SID_NAME与系统的SID相等;

2)SID==>>SID_NAME==>>ORACLE_SID==>>INSTANCE_NAME 四者是一致的,相等的;

3)可以在lisnter.ora中配置多个不同的GLOBAL_NAME来供不同的客户端SERVICE_NAME来对应,从而实现不同的客户端使用不同的SERVICE_NAME来访问同一个SID实例使用,配置如下:

lisnter.ora:

    (SID_DESC =

      (SID_NAME = jiagulun)

      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

      (GLOBAL_DBNAME = jiagulun)

    )

    (SID_DESC =

      (SID_NAME = jiagulun)

      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

      (GLOBAL_DBNAME = jgl)

    )

 

tnsnames.ora:

JIAGULUN =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVICE_NAME = jiagulun)

    )

  )

 

JGL =

  (DESCRIPTION =

     (ADDRESS_LIST =

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

     )

     (CONNECT_DATA =

        (SERVICE_NAME = jgl)

     )

  )

同时设置一下参数service_names(不进行该项设置似乎也可以,无关紧要)

SQL> show parameter service

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

service_names                        string      jiagulun

SQL> alter system set service_names = 'jiagulun,jgl' scope=both;

System altered.

SQL> show parameter service

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

service_names                        string      jiagulun,jgl

SQL>

 

测试:

[oracle@redhat4 admin]$ tnsping jiagulun

TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 01-NOV-2012 20:12:22

Copyright (c) 1997, 2005, Oracle.  All rights reserved.

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = jiagulun)))

OK (0 msec)

 

[oracle@redhat4 admin]$ tnsping jgl

TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 01-NOV-2012 20:12:27

Copyright (c) 1997, 2005, Oracle.  All rights reserved.

Used parameter files:

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = jgl)))

OK (10 msec)

[oracle@redhat4 admin]$

现在我们在客户端既可以使用SERVICE_NAME=jiagulun来访问服务端,也可以使用SERVICE_NAME=jgl来访问。使用plsql develop用jgl和jiagulun都可以正常登陆。

 

2. SID 与 DB_NAME

显然,DB_NAME唯一性地标识了 oracle database,与数据库物理文件相关;而SID唯一性地标识了oracle instance,与所有进程相关。而oracle database和oracle instance一起组成了oracle server. SID和DB_NAME在非RAC环境默认是相等的。但是二者相等与否,无关紧要。在RAC环境,因为一个DB_NAME对应多个SID,所以不可能相等了。

 

DB_NAME是最重要的一个参数,在dbca中填写的DB_NAME,应该与启动参数文件pfile/spfile中的一致。在dbca中创建数据库时填写DB_NAME被写入到了多个地方:启动参数文件、控制文件、数据文件、日志文件等。

所以我们不能随便地修改启动参数文件中的DB_NAME参数:

sys@JIAGULUN> create pfile from spfile;

File created.

 

sys@JIAGULUN> exit

Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

[oracle@redhat4 oradata]$ grep db_name /u01/app/oracle/product/10.2.0/db_1/dbs/initjiagulun.ora

*.db_name='jiagulun'

[oracle@redhat4 oradata]$

 

如果启动参数文件中的DB_NAME与控制文件中的不一致,则在mount阶段会报错。

 

3. SERVICE_NAME 与 SERVICE_NAMES

       SERVICE_NAME是Oracle实例提供的服务名。它隔离了Oracle实例,客户端仅仅需要知道SERVICE_NAME就可以访问实例。而不需要知道实例的SID。更不需要知道DB_NAME等信息。

       SERVICE_NAMES为实例定义一个或多个SERVICE_NAME,这样可以通过多个SERVICE_NAME将不同的用户连接区分开来。

 

       service name似乎应该分为两种,一种是实例服务名 instance service name,一种是网络服务名 net service name,如下tnsnames.ora所示:

 

net_service_name =

  (DESCRIPTION =

     (ADDRESS_LIST =

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

     )

     (CONNECT_DATA =

        (SERVICE_NAME = instance_service_name)

     )

  )

 

而plsql develop登陆使用的是net_service_name,而不是instance_service_name。

而tnsping 测试的也是net_service_name,而不是instance_service_name。

[oracle@redhat4 admin]$ cat tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

 

JIAGULUN =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVICE_NAME = jiagulun)

    )

  )

 

net_jgl =

  (DESCRIPTION =

     (ADDRESS_LIST =

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

     )

     (CONNECT_DATA =

        (SERVICE_NAME = jgl)

     )

  )

 

EXTPROC_CONNECTION_DATA =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

    )

    (CONNECT_DATA =

      (SID = PL***tProc)

      (PRESENTATION = RO)

    )

  )

 

[oracle@redhat4 admin]$ tnsping net_jgl

TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 02-NOV-2012 14:01:55

Copyright (c) 1997, 2005, Oracle.  All rights reserved.

Used parameter files:

 

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = jgl)))

OK (10 msec)

[oracle@redhat4 admin]$ tnsping jgl

TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 02-NOV-2012 14:01:59

Copyright (c) 1997, 2005, Oracle.  All rights reserved.

Used parameter files:

TNS-03505: Failed to resolve name

[oracle@redhat4 admin]$

 

如上所示:当我们使用 tnsping instance_service_name是失败了。

而 sqlplus scott/tiger@net_jgl 使用的也是net_service_name.

 

所以 tnsping, sqlplus user/passwd@net_jgl, plsql develop使用的都是net_service_name,而不是instance_service_name.

 

[oracle@redhat4 admin]$ sqlplus scott/tiger@net_jgl

SQL*Plus: Release 10.2.0.1.0 - Production on Thu Nov 1 21:08:48 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

 

[oracle@redhat4 admin]$ sqlplus scott/tiger@jgl

SQL*Plus: Release 10.2.0.1.0 - Production on Fri Nov 2 14:05:57 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

ERROR:

ORA-12154: TNS:could not resolve the connect identifier specified

 

所以这里提供了多层的隔离

net_service_name ==>> instance_service_name ==>> global_dbname ==>> sid_name ==>> sid

  (sid_name=sid=oracle_sid=instance_name)

1> tnsnames.ora中定义了net_service_name和instance_service_name的对应,或者说隔离。

2> lisnter.ora中定义了global_dbname和sid的对应,或者说隔离;

3> 而tnsnames.ora中的instance_service_name(SERVICE_NAME)又和lisnter.ora中的GLOBAL_DBNAME相等。将两层隔离连接起来。

1.ORACLE_SID:(ORACLE SYSTEM IDENTIFIER)站点标示符

以环境变量的形式出现的。
       Oracle实例是由SGA和一组后台进程组成的,实例的创建和启动需要一个参数文件,而参 数文件的名称就是由ORACLE_SID决定的。对于init文件,缺省的文件名称是init.ora,对于 spfile文件,缺省的文件名称是spfile.ora
       设置不同的ORACLE_SID值,就可以默认使用不同的参数文件启动不同的数据库实例。
       另外,ORACLE_SID的作用远远不是作为一个实例入口这么简单的,在实例启动后,实例名称INSTANCE_NAME也是从ORACLE_SID得到的。
2.INSTANCE_NAME:

       实例名称,这是Oracle实例的名字,用来区分不同的实例。在Oracle9i之前,该名字存储在两个地方:参数文件和数据库的内部视图(V$INSTANCE).
       而在Oracle10g之后的版本中,该名字不再出现在参数文件中,而是动态从系统中获得,默认是取自ORACLE_SID。
       INSTANCE_NAME的作用除了区别不同实例之外,在监听器动态注册时,还会用于向监听器注册。比如instance_name=wolf,监听中将动态注册Instance "wolf",status READY信息。
3.DB_NAME: 

    DB_NAME概念相比于INSTANCE_NAME要重要的多,它决定实例将挂在的数据文件。它出现在数据文件,控制文件,日志文件中。在参数文件中也出现,且必须出现。这个参数涉及到系统的物理文件。
4.SERVICE_NAME和GLOBAL_DBNAME:
       这两个参数之所以放在一起讲,是因为他们往往是成对出现的。SERVICE_NAME出现在Tnsnames.ora文件中,是客户端要请求的服务名。
       GLOBAL_DBNAME 出现在Listener.ora文件中,是服务器提供的服务名,可以通过show paramerer service_names查看,并可以通过alter system set service_name='servicename' scope=both来修改。
       SERVICE_NAMES为实例所连接的数据库定义一个或多个服务名,可以通过定义多个服务名将不同用户连接区分开来。这个参数的缺省格式为:DB_NAME.DB_DOMAIN,如果定义了DB_DOMAIN那么定义的服务名就类似: 
SERVICE_NAMES = sales.eygle.com, news.eygle.com
       通过这样的定义,销售用户可以通过在客户端TNSNAME定义中使用SALES服务名来建立连接,而新闻用户则可以通过NEWS服务名进行连接,最终用户可以不必关注数据库是哪一个,他们只需要关心服务名。


       二者对应,实现了Listerner.ora/Tnsnames.ora的重要功能----监听、请求与验证。

       总结:一条startup命令,究竟是如何启动庞大的oracle数据库的呢?下面我们来贯穿起来整个启动流程,一探究竟:
首先,系统接收到startup命令,立刻采取行动,取得环境变量ORACLE_SID的值,启动第一阶段--实例创建。系统根据找到的参数文件启动 ORACLE数据库实例,实例启动后,一切由实例接管:注册INSTANCE_NAME,往往INSTANCE_NAME就是来自ORACLE_SID, 接着向监听器动态注册实例自己,并将INSTANCE_NAME写入系统数据字典表,
接下来,实例进一步读取参数文件,取得DB_NAME、控制文件、检查点等信息,进入第二阶段--挂载数据库。实例从控制文件中取得DB_NAME,并取 得数据文件、日志文件等信息,进行DB_NAME的一致性检验、文件的存在性判断等工作之后,实例将挂载数据库,挂载的数据库就是DB_NAME指定的数 据库。
最后,实例进入第三阶段--启动数据库。这一阶段,实例进行了两项检查:检查点和更改点检查,之后启动数据库。

       init.ora 中的instance_name是可以设置的,这个大家都知道是没有错误的,但是这个和我们ORACLE_SID又有什么区别呢?

       其实还是有一些区别 的,ORACLE_SID就是系统表示符,这个环境变量就是要告诉OS,我要读取那个init.ora文件或者spfile来启动我的Oracle instance,比如set ORACLE_SID=mylife,这个时候当我连入Oracle后,运行startup,那么Oracle就会寻找spfilemylife.ora 或者initmylife.ora这样的参数文件,并启动我的instance,在数据库成 功open后,我们可以通过select instance_name from v$instance来观察这个已经记录的SID,这个时候我们也可以show parameter instance_name来观察这个值,没错都是mylife,

       一般来讲,我们启动instance所加载的pfile或者spfile中也记录了一个 instance_name这个参数,但是这个参数一般没有显示的列出,因此我们可以手动的去加上这个参数或者修改这个参数,把这个参数的值改为和 mylife不相同的一个值mylove,这个时候再重新启动数据库,会发现show parameter和select instance_name from v$instance的方式有两个不同的值分别是mylove和mylife,如果我们的tnsnames.ora中的文件是以sid方式来寻找服务,那 么这个sid 的值就不是mylife了,而要改为mylove.恩,大体上就是这个意思。还没有深入研究太多,对于大多数用户来讲,理解这些就足够了。

       再 说一下service_name,如果我们的参数文件中记录了db_domain比如是cn.ibm.com,那么service_name默认就是 db_name+db_domain,但是我们完全可以修改这个值,原先数据库的service_name=icmnlsdb.cn.ibm.com,现 在比如我在pfile中显示的指定service_names=abc,重启database后,这个service_name就变为了abc,而不是先 前的icmnlsdb.cn.ibm.com了,那么在tnsnames.ora中的service_name列,我就要指定这个值为 abc+db_domain.注意不是service_name+db_domain,因为我的service_name在修改后是不带domain标识 的,那么如果db_domain为空的话,tnsnames.ora文件中的service_name就直接可以写为abc了。大体就是这个意思,解释的 有点饶,但是总算可以从这条路中走出来了。
最后一点,lsnrctl status我们随时观察一下listener的状态,看看他到底有什么变化。很有意思的。

       在init.ora中有db_name,instance_name,service_name
       在操作系统中需要配置oracle_sid
       在listener.ora中有SID_NAME,GLOBAL_DBNAME,
       在tnsname.ora中有SERVICE_NAME,SID
       这么多,是不是你也看糊涂了。先晕一个,下面慢慢道来。

       在init.ora中有db_name,instance_name,service_name
       db_name是数据库的名称,在db安装时就已经设置了,这里不可修改,它觉得了数据库安装文件的位置。
instance_name是实例名,是数据库运行中名称,其实在OO中db_name相当于类而instance_name向当于对象,它也 是代表数据库运行中的内存及其进程,同时影响到了这些进程的名称,譬如:一个数据库db_name=cus,而其实例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_NAME,GLOBAL_DBNAME
这里SID_NAME指数据库的运行的实例名,应该是和instance_name一致,
       而对于GLOBAL_DBNAME是listener配置的对外网络连接名称,我们在配置tnsname.ora时会考虑这个参数。这个参数可以任意的设置。
       另外有一点需要注意,一般我们会在listener.ora手工配置数据库实例的监听配置。但oracle可以通过pmon进程支持自动注册, 这时自动注册的对外网络连接名称就会用到init.ora文件中service_name,有多个值的话就会注册多个,对于上面的例子,在这里就会注册 serv1和serv2两个监听服务。如果你还手工配置了一个GLOBAL_DBNAME=serv3的监听服务的话,那么对于实例 instance_name=aking就会有三个监听服务。

       在tnsname.ora中有SERVICE_NAME,SID
       下面配置客户端的tnsname.ora
       对于这里的配置主要要给出要连接的数据库的IP及其连接的实例或服务
       在监听配置中我们提到了对外网络连接名称,在这里如果我们用SERVICE_NAME的话,就需要SERVICE_NAME= (GLOBAL_DBNAME或者service_name这里要求oracle已经自动注册到了监听器中),对于SID= (instance_name)即可,譬如:
SERVICE_NAME=serv1,serv2,serv3都可以,或者
SID=aking

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ORACLE_SID, SID, INSTANCE_NAME, SERVICE_NAME, SERVICES_NAMES, DB_NAME, GLOBAL_DBNAME, SID_NAME,以及网络服 的相关文章

  • 数据库表的关系

    表与表之间一般存在三种关系 即一对一 一对多 多对多关系 下面分别就三种关系讲解数据库相关设计的思路和思考过程 1 一对一关系 例如 下面的一张表 保存了人的相关信息 有男有女 要求查处所有的夫妻 sql代码 CREATE TABLE IF
  • Maven install报错To see the full stack trace of the errors, re-run Maven with the -e switch.解决

    今天在使用maven进行springCloud的打包jar包时 一直报错 To see the full stack trace of the errors re run Maven with the e switch 首先 我是使用了本地
  • Python学习笔记 面向对象编程

    类和对象 定义类 Python支持面向对象编程 下面是一个例子 我们可以看到 在Python中声明类和其他语言差不多 不过实际上差别还是挺大的 首先 Python没有严格意义上的构造函数 只有一个 init self XXX 函数 该函数和
  • IC验证方法基础

    数字IC的设计流程 如下图所示 其中讲到形式验证的时候就懵了 当时老师说 其实我也记不太清了 就从网上找了一下 形式验证 Formal Verification 是一种IC设计的验证方法 它的主要思想是通过使用数学证明的方式来验证一个设计的
  • C语言刷题之摩尔投票法

    目录 1 引入 2 摩尔投票算法 3 基本步骤 摩尔投票法分为两个阶段 1 抵消阶段 2 检验阶段 4 代码实现 5 扩展沿伸 6 总结 1 引入 我们来看一个问题 假设有一个无序数组长度为n 要求找出其中出现次数超过n 2的数 要求时间复
  • 【算法日志】动态规划:动态规划简介及其简单应用(day33)

    算法随想录刷题60Day 目录 动态规划简介 动态规划简单应用 斐波那契 爬楼梯 使用最小开支爬楼 动态规划简介 动态规划 Dynamic Programming 是一种解决复杂问题的算法设计思想 它的主要思路是将原问题拆分若干个子问题 并
  • C++ -- variadic template (可变参数模板)

    C variadic template 可变参数模板 作者 唐风 主页 http www cnblogs com muxue C 11 语言核心的改进中 最为关注的有 rvalue reference 这里有一篇拙作 lambda vari
  • if for循环

    一 If语句 if if else if if lt gt 转换 if 条件判断 当条件成立时 执行里面的执行语句 当if成立时 才能执行 里面的语句 当条件转换成布尔值 如果结果为true就执行 如果为false就不执行 var num
  • 词法分析器Flex源码及算法分析(一)

    概念 正则表达式 NFA 使用bison来解析输入文件 将输入文件的规则区中的正则表达式转换为NFA图 典型的NFA状态图可见下面的示例 DFA NFA到DFA的计算过程 从NFA图中得到每个对应DFA状态的NFA状态集合c1 每次转换一步
  • C++之资源转移智能指针auto_ptr的实现

    目录 概念 使用标准库auto ptr指针 自定义智能指针的底层实现 概念 auto ptr智能指针已在C 17中移除 可用作学习智能指针的入门 auto ptr又称资源转移指针 即发生拷贝构造或 号赋值后 原auto ptr指针为空 使用
  • 知乎:哪些心态是你刻意练习的?

    我的恋爱熊 1 不要脸 不在乎别人说什么 必须不敏感 不玻璃心 钝感力强 笔者认为 敏感是天性 是对事件发展的体察 我们没有办法让自己不敏感 但是在体察事件有困难 别人不愿帮助甚至是找你麻烦的时候 你都不要放弃 渴望痛苦 你依然要坚持自己的
  • linux内核中断(一)

    一 中断简介 中断是指 CPU 在执行程序的过程中 出现了某些突发事件急待处理 CPU 必须暂停当前程序的执行 转去处理突发事件 处理完毕后又返回原程序被中断的位置继续执行 由于中断的存在极大的提高了 CPU 的运行效率 但是设备的中断会打
  • 【C/C++内功心法】剖析编译链接的过程,探究源文件是如何一步步变成可执行程序,提升C/C++内功

    文章目录 前言 一 程序的翻译环境和执行环境 二 详解编译 链接 1 翻译环境 2 编译本身也分为几个阶段 2 1 预编译 预处理 2 2 编译 2 3 汇编 3 链接 3 1 合并段表 3 2 符号表的合并与重定向 总结 前言 大家好啊
  • Go中 channel的使用

    文章目录 背景 channel 简介 使用说明 声明 发送和接受数据 关闭channel 使用示例 背景 使用 sync 包和 context 包的工具可以实现多个协程之间互相协作 但是没有一种很好的方式解决多个协程之间通信的问题 gola
  • openssl实现双向认证教程(服务端代码+客户端代码+证书生成)

    一 背景说明 1 1 面临问题 最近一份产品检测报告建议使用基于pki的认证方式 由于产品已实现https 商量之下认为其意思是使用双向认证以处理中间人形式攻击 信息安全工程 中接触过双向认证 但有两个问题 第一个是当时最终的课程设计客户端
  • jquery ui draggable,droppable 学习总结

    刚接触的时候 分不清draggable和droppable的区别 瞎弄了一会 其实很简单 draggable就是 拖 的功能 droppable就是 放 的功能 一 先上一个简单例子 1 代码 2 截图 拖动 draggable之前的截图
  • 我们为什么要使用补码?

    想必对于原码 反码 补码大家并不陌生 计算机专业的同学都会学到这方面的一些知识 当初在学这部分的时候 只知道用补码可以解决0和 0的问题 但是还是没明白为什么会想到用补码 前阵子看了斯坦福大学关于范式编程的公开课 里面老师讲了这方面的内容
  • 【golang设计模式】Golang设计模式详解三

    十一 组合模式 组合模式统一对象和对象集 使得使用相同接口使用对象和对象集 组合模式常用于树状结构 用于统一叶子节点和树节点的访问 并且可以用于应用某一操作到所有子节点 composite go package composite impo
  • 生成Git ssh公钥和私钥(ppk)文件

    一 生成ssh公钥 step1 安装GIT和TortoiseGit step2 文件夹空白地方右键点击 Git Bash Here 进入终端 如果右键没有Git Bash Here 操作方法见 https mp csdn net mp bl
  • Scikit-learn之模型评估预测

    sklearn decomposition PCA scikit learn 1 2 2 documentation sklearn官网 代码以后补上 先介绍一些简单的 sklearn能做到很多传统意义上 比较简单 的机器学习 例如 分类

随机推荐

  • Vue+ElementUI实现表单动态渲染、校验(一)

    Vue ElementUI实现表单动态渲染 校验 一 项目需求 1 vue表单实现递归渲染 项目需求 接到新的项目需求 需要把一个json文件动态渲染成表单 并添加各种校验规则等 经过各种查资料 最终完成了此功能开发 对这块的知识点进行梳理
  • 23种设计模式

    设计模式主要分为三大类 1 创建型模式 2 结构型模式 3 行为型模式 1 创建型模式 创建型模式关注对象的创建过程 1 工厂方法模式 Factory Method Pattern 用于创建对象的接口 让子类决定实例化哪一个类 工厂方法模式
  • PRML-系列一之1.2.2~1.2.3

    期望和方差 涉及概率最重要的操作是找到函数的加权平均值 在概率分布p x 情况下函数f x 的平均值称为f x 的期望 并用E f 表示 对于一个离散分布 它由下式给出 使得平均值加权到不同x值的相应概率上 连续变量的情况下 期望用相应概率
  • Unity3D学习笔记(4)—— 牧师和魔鬼游戏

    牧师和魔鬼游戏是一款益智类游戏 游戏的目标是将3个牧师和3个魔鬼从河的一端安全地送到河的另一端 在运送过程中 船可以搭载两个人 而且必须有一人掌船 无论何时 只要河一边的魔鬼数量多于牧师的数量 游戏就会以失败结束 想玩玩的话请走传送门 Pr
  • 基于FBX SDK的FBX模型解析与加载 -(一)

    1 简介 FBX是Autodesk的一个用于跨平台的免费三维数据交换的格式 最早不是由Autodesk开发 但后来被其收购 目前被 众多的标准建模软件所支持 在游戏开发领域也常用来作为各种建模工具的标准导出格式 Autodesk提供了基于C
  • FFmpeg视频解码中的YUV420P格式

    参考文章 在做基于FFmpeg解码的视频播放时 需要涉及到帧数据存储的YUV与RGB格式 所以了解了一下 参考下述博文 https blog csdn net lanxiaziyi article details 74139729 avfr
  • 在arm平台上安装qt

    qt官网上如果没有找到对应的安装包 就需要下载源代码自行编译安装qt 时间会久一点 qt下载 进入官网下载 如下图步骤选择源代码包 以5 12 12为例 可以复制链接地址在迅雷上创建下载任务 下载速度会快些 qt的编译与安装 需要先安装gc
  • 服务器 常用命令

    screen screen S xx 创建 screen ls 列表 screen r xx 回来 在detach分离的前提下 screen d 分离
  • mysqlworkbench 程序或文件打开失败( Failed to open the program or a mwb file)

    异常状况 昨天将mysqlworkbench 6 0 以下简称mwb 卸载掉 今天需要又要装上 安装的过程没有任何错误 但是打不开mwb 或者mwb后缀的文件 弹出3个提示框 提示有3个xml的配置文件找不到 具体文件名忘记了 解决方式 1
  • 论文/机器学习笔记:SENet (Squeeze-and-Excitation Networks)

    Image 2017 挑战赛夺冠paper 1 motivation 希望显式地建模特征通道 channel 之间的相互依赖关系 通过学习的方式来自动获取到每个特征通道的重要程度 依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特
  • linux/centos 搭建 bgp 网络

    在之前的教程中 我对如何简单地使用Quagga把CentOS系统变成一个不折不扣地OSPF路由器做了一些介绍 Quagga是一个开源路由软件套件 在这个教程中 我将会重点讲讲如何把一个Linux系统变成一个BGP路由器 还是使用Quagga
  • 算法_插入排序

    插入排序 插入排序的思想 每一步就是将待排序的数据插入到已经排好序的数据中 直到全部数据依次按照从小 或大 的顺序排列 例如 1 4 2 5 8 3 7 1 第一次排序 1 4 2 5 8 3 7 1 第二次排序 1 2 4 5 8 3 7
  • Redis系列一

    1 1 Nosql 1 1 1 概述 单机mysql时代 90年代 一个基本的网站访问量不会太大 单个数据库足够 更多的使用静态网页html 网站瓶颈 数据量太大 一个机器放不下 数据的索引 一个机器的内存也放不下 访问量太大 读写混合 性
  • python3 对字典去重

    对于一个列表中的多个字典进行去重 1 对key去重 将相同的key合并到一个字典中 2 对元素去重 将一个字典的重复元素去重 代码如下 initializing list
  • 百度 AI Studio——《高层API助你快速上手深度学习》课程学习总结

    百度 AI Studio 高层API助你快速上手深度学习 课程学习总结 一开始报名参与这个课程还是信心满满 然而最终没有顺利结课 也是备受打击 课程学习博客更新到第二节 也不会有后续的几节直播课的笔记 这篇就是对前一段深度学习的总结 今天这
  • windows 安装 Nginx 与使用

    目录 nginx下载地址 nginx download 解压后运行 nginx 打开 localhost Nginx打开本地指定文件 编辑 nginx conf 文件 修改指向目录 打开 localhost 结束 nginx Windows
  • 力扣:验证回文串--使用正则匹配

    给定一个字符串 验证它是否是回文串 只考虑字母和数字字符 可以忽略字母的大小写 public class PalindromeRegular public boolean isPalindrome String s 去掉非字母数字的字符 S
  • ISP基本框架及算法介绍

    ISP基本框架及算法介绍 参考网址 https blog csdn net lz0499 article details 71156291 ISP Image Signal Processor 即图像处理 主要作用是对前端图像传感器输出的信
  • 【智能制造】智慧工厂整体规划实施与方案架构;智慧工厂顶层设计与智能制造能力测评...

    2018年4月25日 第十届 NEPCON与智慧工厂1 0 电子制造的未来 主题研讨会在上海成功召开 本次会议围绕 电子制造智慧工厂整体规划与关键支撑技术 主题展开探讨 今天小编分享智慧工厂研究院副院长王书强先生的演讲资料 王书强联系方式
  • ORACLE_SID, SID, INSTANCE_NAME, SERVICE_NAME, SERVICES_NAMES, DB_NAME, GLOBAL_DBNAME, SID_NAME,以及网络服

    转载 https blog csdn net lyjiau article details 52238997 在Oracle中 我们会遇到下面一系列的十分重要的参数 同时他们的含义也常常让我们混淆 这些参数有 ORACLE SID SID