Oracle 中的各种名称(*_name)参数的含义与作用
目录
- Oracle 中的各种名称(*_name)参数的含义与作用
- 一、数据库名:db_name
- 二、数据库所在的域:db_domain
- 三、全局数据库名:global_name
- 四、服务名:service_name
- 五、网络服务名:net service name
- 六、实例名:instance_name
- 七、监听文件配置
在安装 Oracle 软件、创建数据库、配置初始化参数文件、配置监听时会用到很多带 name 的参数。这些参数的详细信息如下:
SQL> show parameter name
NAME 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_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string hisdb
查看监听信息:
[oracle@ora admin]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 05-JAN-2025 21:45:05
Copyright (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_domain
NAME 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_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string hisdb
SQL> show parameter instance_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string ora
同实例之外,在监听器动态注册时,还会用于向监听器注册。查看Oracle的监听信息:
[oracle@ora admin]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 05-JAN-2025 21:45:05
Copyright (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_names
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string hisdb123
查看监听信息:
[oracle@ora admin]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 05-JAN-2025 22:30:30
Copyright (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 2025
Copyright (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 options
SQL>
六、实例名: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 programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
export 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/bin
alias 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指定的数据库。
第三阶段:启动数据库
最后,实例进入第三阶段:启动数据库。这一阶段,实例进行了两项检查:检查点和更改点检查,之后启动数据库。



















