在 Oracle 数据库中,SERVICE_NAME 和 SERVICE_NAMES 有什么区别?
在 Oracle 数据库中,SERVICE_NAME 和 SERVICE_NAMES 是两个相关的但略有不同的概念。它们都用于标识数据库服务,但使用场景和作用有所不同。下面详细解释这两个概念的区别:
SERVICE_NAME
1. 定义:
SERVICE_NAME 是一个单一的、唯一的名称,用于标识一个数据库服务。它通常在连接字符串中使用,客户端通过 SERVICE_NAME 连接到特定的数据库服务。
2. 配置:
SERVICE_NAME 通常在 tnsnames.ora 文件中定义,用于客户端连接到数据库。例如:
MYDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mydb.example.com)
)
)
3. 使用场景:
客户端连接到数据库时,通常使用 SERVICE_NAME 来指定要连接的服务。例如,使用 SQL*Plus 连接:
sqlplus user/password@mydb.example.com
SERVICE_NAMES
1. 定义:
SERVICE_NAMES 是一个初始化参数,用于指定数据库实例可以注册的多个服务名称。一个数据库实例可以注册多个服务名称,每个服务名称可以有不同的特性和服务级别协议(SLA)。
2. 配置:
SERVICE_NAMES 参数在数据库的初始化参数文件(init.ora 或 spfile.ora)中设置。例如:
SERVICE_NAMES=mydb.example.com,mydb2.example.com
3. 使用场景:
SERVICE_NAMES 参数允许一个数据库实例提供多个服务,每个服务可以有不同的连接属性和负载均衡策略。
例如,一个数据库实例可以同时提供生产服务和开发服务,每个服务有不同的 SERVICE_NAME。
区别总结
SERVICE_NAME:
单一的服务名称,用于客户端连接到特定的数据库服务。通常在 tnsnames.ora 文件中定义。用于指定连接字符串中的服务名称。
SERVICE_NAMES:
多个服务名称,用于配置数据库实例可以注册的服务。在初始化参数文件中设置。允许一个数据库实例提供多个服务。
示例
假设你有一个数据库实例 ORCL,你希望它提供两个服务:orcl.example.com 和orcl_dev.example.com。
1. 配置 SERVICE_NAMES 参数:
SERVICE_NAMES=orcl.example.com,orcl_dev.example.com
2. 在 tnsnames.ora 文件中定义服务:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.example.com)
)
)
ORCL_DEV =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl_dev.example.com)
)
)
3. 客户端连接:
连接到生产服务:
sqlplus user/password@orcl.example.com
连接到开发服务:
sqlplus user/password@orcl_dev.example.com
以上内容就是 SERVICE_NAME 和 SERVICE_NAMES 的区别和使用场景。