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
指定的数据库。
第三阶段:启动数据库
最后,实例进入第三阶段:启动数据库。这一阶段,实例进行了两项检查:检查点和更改点检查,之后启动数据库。