Oracle 中的各种名称(*_name)参数的含义与作用
目录
- Oracle 中的各种名称(*_name)参数的含义与作用
- 一、数据库名:db_name
- 二、数据库所在的域:db_domain
- 三、全局数据库名:global_name
- 四、服务名:service_name
- 五、网络服务名:net service name
- 六、实例名:instance_name
- 七、监听文件配置
在安装 Oracle 软件、创建数据库、配置初始化参数文件、配置监听时会用到很多带 name 的参数。这些参数的详细信息如下:
SQL> show parameter nameNAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cell_offloadgroup_name string
db_file_name_convert string
db_name string hisdb -- 数据库名
db_unique_name string hisdb -- 数据库唯一名
global_names boolean FALSE -- 数据库唯一标识
instance_name string ora -- 实例名
lock_name_space string
log_file_name_convert string
processor_group_name string
service_names string hisdb -- 服务名
db_name,instance_name,service_name,db_unique_name,global_name
参数可以在初始化参数文件(init$ORACLE_SID.ora
)中设置。
instance_name
不能在初始化参数文件中直接设置,通过在操作系统中配置环境变量ORACLE_SID
自动设置。
配置监听时,在文件listener.ora
中需要使用参数instance_name
,global_names
,在文件tnsname.ora
中需要使用参数service_names
,instance_name
。
一、数据库名:db_name
db_name
参数用于标识数据库的名称。db_name
参数对于Oracle
本身比较有用,对用户而言没有太多的用处,db_name
记录在controlfile
,datafile_header
,redo
中,要想修改db_name
是比较麻烦的。因此在建库时指定恰当的db_name
非常重要的。
db_name
还有一个非常重要的作用就是动态注册监听,不管是否指定了service_name
,pmon
都会使用db_name
动态注册监听。
查看参数db_name
的值:
SQL> show parameter db_nameNAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string hisdb
查看监听信息:
[oracle@ora admin]$ lsnrctl statusLSNRCTL for Linux: Version 11.2.0.4.0 - Production on 05-JAN-2025 21:45:05Copyright (c) 1991, 2013, Oracle. All rights reserved.Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 01-JAN-2025 12:24:12
Uptime 4 days 9 hr. 20 min. 52 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /usr/local/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File /usr/local/oracle/diag/tnslsnr/ora/listener/alert/log.xml
Listening Endpoints Summary...(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora)(PORT=1521)))
Services Summary...
Service "hisdb" has 2 instance(s). # hisdb 就是数据库名Instance "ora", status UNKNOWN, has 1 handler(s) for this service...Instance "ora", status READY, has 1 handler(s) for this service...
Service "oraXDB" has 1 instance(s).Instance "ora", status READY, has 1 handler(s) for this service...
The command completed successfully
二、数据库所在的域:db_domain
db_domain
参数定义一个数据库所在的域。
随着由多个数据库构成的分布式数据库的普及,各个数据库的名字可能一样,造成管理上的混乱。为了解决这种情况,引入了db_domain
参数,数据库的标识(global_name
)由db_name
和db_domain
两个参数共同决定,避免了因为数据库重名而造成管理上的混乱。将db_name
和db_domain
两个参数用【.】
连接起来,表示一个数据库,并将该数据库的名称称为global_name
。 查看参数db_domain
的值:
SQL> show parameter db_domainNAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_domain string
三、全局数据库名:global_name
global_name
定义一个全局数据库名。缺省值为db_name.db_domain
。该值是在创建数据库时决定的,以后对参数文件中Db_name
与Db_domain
参数的任何修改都不影响global_name
的值,如果要修改global_name
,只能用以下命令进行修改:
ALTER DATABASE RENAME GLOBAL_NAME TO <db_name.db_domain>;
查看参数global_name
的值:
SQL> select * from global_name;GLOBAL_NAME
--------------------------------------------------------------------------------
HISDB
在配置静态监听注册时需要输入的全局数据库名(GLOBAL_DBNAME
)应该是什么?配置网络服务命名(tns
)时需要输入的服务名(SERVICE_NAME
)又是什么?
[oracle@ora admin]$ vi listener.ora# listener.ora Network Configuration File: /usr/local/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))(ADDRESS = (PROTOCOL = TCP)(HOST = ora)(PORT = 1521))))SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = hisdb)(ORACLE_HOME = /usr/local/oracle/product/11.2.0/db_1)(SID_NAME = ora))ADR_BASE_LISTENER = /usr/local/oracle[oracle@ora admin]$ vi tnsnames.ora # tnsnames.ora Network Configuration File: /usr/local/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.HISDB =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = ora)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = hisdb)))
答案:
只要保证listerner.ora
中的GLOBAL_DBNAME
和tnsnames.ora
中的SERVICE_NAME
保持一致就可以,可以是任意内容。
在配置listener
和tnsnames
时提供的GLOBAL_DBNAME
和SERVICE_NAME
参数值与系统中的global_name
、service_name
没有任何关系。
四、服务名:service_name
服务名是复数,意味着service_names
可以是多个值,服务名在动态注册监听时被使用。
Oracle dataguard
建议在主库与备库上使用相同的service_names
,便于尽可能的实现透明切换。如果配置了静态注册的监听,在主库与备库也务必保持在listener
中输入的服务名相同。
初始化参数service_name
默认为db_name.db_dimain
,后台进程PMON
自动在服务器监听器中注册该参数。
查看参数service_name
的值:
SQL> show parameter service_nameNAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string hisdbSQL> show parameter instance_nameNAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string ora
同实例之外,在监听器动态注册时,还会用于向监听器注册。查看Oracle
的监听信息:
[oracle@ora admin]$ lsnrctl statusLSNRCTL for Linux: Version 11.2.0.4.0 - Production on 05-JAN-2025 21:45:05Copyright (c) 1991, 2013, Oracle. All rights reserved.Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 01-JAN-2025 12:24:12
Uptime 4 days 9 hr. 20 min. 52 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /usr/local/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File /usr/local/oracle/diag/tnslsnr/ora/listener/alert/log.xml
Listening Endpoints Summary...(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora)(PORT=1521)))
Services Summary...
Service "hisdb" has 2 instance(s).Instance "ora", status UNKNOWN, has 1 handler(s) for this service...Instance "ora", status READY, has 1 handler(s) for this service...
Service "oraXDB" has 1 instance(s).Instance "ora", status READY, has 1 handler(s) for this service...
The command completed successfully
修改参数 SERVICE_NAMES
的值:
SQL> alter system set service_names='hisdb123' scope=both;System altered.SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.Total System Global Area 1068937216 bytes
Fixed Size 2260088 bytes
Variable Size 331350920 bytes
Database Buffers 729808896 bytes
Redo Buffers 5517312 bytes
Database mounted.
Database opened.SQL> show parameter service_namesNAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string hisdb123
查看监听信息:
[oracle@ora admin]$ lsnrctl statusLSNRCTL for Linux: Version 11.2.0.4.0 - Production on 05-JAN-2025 22:30:30Copyright (c) 1991, 2013, Oracle. All rights reserved.Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 01-JAN-2025 12:24:12
Uptime 4 days 10 hr. 6 min. 17 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /usr/local/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File /usr/local/oracle/diag/tnslsnr/ora/listener/alert/log.xml
Listening Endpoints Summary...(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora)(PORT=1521)))
Services Summary...
# 虽然service_name没有设置hisdb,PMON 仍然把db_name设置的数据库名hisdb注册到监听器上
Service "hisdb" has 2 instance(s).Instance "ora", status UNKNOWN, has 1 handler(s) for this service...Instance "ora", status READY, has 1 handler(s) for this service...
# 下面显示的 hisdb123 就是初始化参数中 SERVICE_NAMES 设置的参数值,由 PMON 自动注册到监听器上
Service "hisdb123" has 1 instance(s).Instance "ora", status READY, has 1 handler(s) for this service...
Service "oraXDB" has 1 instance(s).Instance "ora", status READY, has 1 handler(s) for this service...
The command completed successfully
五、网络服务名:net service name
网络服务名又称为数据库别名(database alias
)。
网络服务名是客户端程序访问数据库时所需要,屏蔽了客户端如何连接到服务器端的细节,实现了数据库的位置透明的特性。网络服务名在tnsname.ora
文件中配置,相当于某个数据库实例的别名,方便记忆和访问。
例如:在tnsnames.ora
中配置网络服务名HISDB
[oracle@ora admin]$ vi tnsnames.ora# tnsnames.ora Network Configuration File: /usr/local/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.HISDB =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = ora)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = hisdb)))
则可以使用如下命令登录数据库:
[oracle@ora admin]$ sqlplus sys/oracle@hisdb as sysdba;SQL*Plus: Release 11.2.0.4.0 Production on Sun Jan 5 22:01:27 2025Copyright (c) 1982, 2013, Oracle. All rights reserved.Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL>
六、实例名:instance_name
实例(INSTANCE
)就是管理数据库的内存结构的名称(由SGA
、PGA
、服务器进程、用户进程、后台进程等组成)。
数据库(Database
)就是磁盘上的文件(数据文件、日志文件、控制文件等),负责保存数据,由对应的实例来操作它的数据。
服务名(service_name
)就是对外公布的名称,为网络监听服务。
实例名在动态注册监听时需要使用。
查看参数instance_name
的值:
SQL> show parameter instance_name;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string ora
实例名在 Oracle
用户的环境变量中通过设置ORACLE_SID
参数进行配置:
[root@ora ~]# su - oracle
上一次登录:日 1月 5 17:27:32 CST 2025pts/0 上
[oracle@ora ~]$ cat .bash_profile
# .bash_profile# Get the aliases and functions
if [ -f ~/.bashrc ]; then. ~/.bashrc
fi# User specific environment and startup programsPATH=$PATH:$HOME/.local/bin:$HOME/binexport PATHexport ORACLE_BASE=/usr/local/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=ora # 实例名
export ORACLE_OWNER=oracle
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/binalias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
七、监听文件配置
在listener.ora
文件中需要配置SID_NAME
,GLOBAL_DBNAME
两个参数。
在tnsnames.ora
文件中需要配置SERVICE_NAME
参数。
SID_NAME
就是实例名。
在配置监听的静态注册时,配置listener
和tnsnames
时提供的GLOBAL_DBNAME
和SERVICE_NAME
参数值与系统中的global_name
、service_name
没有任何关系,可以是任意名称,但要保证listerner.ora
中的GLOBAL_DBNAME
和tnsnames.ora
中的SERVICE_NAME
保持一致。
如果是动态注册,则动态注册的对外网络连接名称就会用到init.ora
文件中的service_names
。
监听文件listener.ora
的配置:
[oracle@ora dbs]$ cd $ORACLE_HOME/network/admin
[oracle@ora admin]$ ll
总用量 16
-rw-r--r-- 1 oracle oinstall 676 1月 1 12:16 listener.ora
drwxr-xr-x 2 oracle oinstall 64 12月 30 21:15 samples
-rw-r--r-- 1 oracle oinstall 381 12月 17 2012 shrept.lst
-rw-r--r-- 1 oracle oinstall 223 12月 30 21:28 sqlnet.ora
-rw-r----- 1 oracle oinstall 500 1月 1 11:55 tnsnames.ora[oracle@ora admin]$ vi listener.ora# listener.ora Network Configuration File: /usr/local/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))(ADDRESS = (PROTOCOL = TCP)(HOST = ora)(PORT = 1521))))SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = hisdb)(ORACLE_HOME = /usr/local/oracle/product/11.2.0/db_1)(SID_NAME = ora)))ADR_BASE_LISTENER = /usr/local/oracle
监听文件tnsname.ora
的配置:
[oracle@ora admin]$ vi tnsnames.ora# tnsnames.ora Network Configuration File: /usr/local/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.HISDB =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = ora)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = hisdb)))
Oracle
实例的启动过程:
第一阶段:实例创建
系统接收到startup
命令,立刻采取行动,取得环境变量ORACLE_SID
的值。系统根据找到的参数文件启动ORACLE
数据库实例,实例启动后,一切由实例接管:注册instance_name
(instance_name
来自ORACLE_SID
),接着向监听器动态注册实例自己,并将instance_name
写入系统数据字典表。
第二阶段:挂载数据库
接下来,实例取参数文件,取得DB_NAME
、控制文件、检查点等信息,进入第二阶段:挂载数据库。实例从控制文件取得DB_NAME
,并取得数据文件、日志文件等信息,进行DB_NAME
的一致性检验、文件的存在性判断等工作之后,实例将挂载数据库,挂载的数据库就是DB_NAME
指定的数据库。
第三阶段:启动数据库
最后,实例进入第三阶段:启动数据库。这一阶段,实例进行了两项检查:检查点和更改点检查,之后启动数据库。