0

0

Oracle 中极易混淆的几个 NAME 的分析和总结

php中文网

php中文网

发布时间:2016-06-07 16:50:50

|

1261人浏览过

|

来源于php中文网

原创

对一个数据库(Oracle database)的唯一标识。这种表示对于单个数据库是足够的,但是随着由多个数据库构成的分布式数据库的普及,

我们知道,oracle中的各种name会在我们的各个配置文件中经常出现,大致有以下这些:

在init.ora中有DB_NAME,INSTANCE_NAME,SERVICE_NAME

配置DG的时候,为了区分主备库,还要使用DB_UNIQUE_NAME

在操作系统中需要配置环境变量,ORACLE_SID

在listener.ora中有SID_NAME,GLOBAL_DBNAME

在tnsname.ora中有SERVICE_NAME,SID,NET SERVICE NAME

那么这么多名字到底有哪些区别呢?我们在使用过程中,又要注意些什么问题呢?下面我来总结一下: 

这么多名字中,有些是初始化参数,如DB_NAME,DB_QUNIQUE_NAME,DB_DOMAIN,GLOBAL_NAME
 
有些则只是一种叫法或者说是概念(并没有一个地方可以去设置它),如NET SERVICE NAME
 
有些则是某些表/视图中的字段名,如V$INSTANCE视图的INSTANCE_NAME
 
有些则是环境变量中的叫法,如ORACLE_SID
 
亦或是监听或客户端配置文件中设置的参数,如SID,SID_NAME,SERVICE_NAME,GLOBAL_DBNAME

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

Linux-6-64下安装Oracle 12C笔记

在CentOS 6.4下安装Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虚拟机中安装步骤

Debian 下 安装 Oracle 11g XE R2

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

DB_NAME:

对一个数据库(Oracle database)的唯一标识。这种表示对于单个数据库是足够的,但是随着由多个数据库构成的分布式数据库的普及,这种命令数据库的方法给数据库的管理造成一定的负担,因为各个数据库的名字可能一样,造成管理上的混乱。为了解决这种情况,引入了Db_domain参数,这样在数据库的标识是由Db_name和Db_domain两个参数共同决定的,避免了因为数据库重名而造成管理上的混乱。这类似于互连网上的机器名的管理。我们将Db_name和Db_domain两个参数用’.’连接起来,表示一个数据库,并将该数据库的名称称为Global_name,即它扩展了Db_name。Db_name参数只能由字母、数字、’_’、’#’、’$’组成,而且最多8个字符。特别要注意这个限制,有的时候会掉坑里,我就掉过一次T_T

千鹿AI
千鹿AI

千鹿AI是一个全面的AI图像处理平台,提供AI生图、AI扩图和AI去背景等多种智能工具。

下载

DB_DOMAIN:

定义一个数据库所在的域,该域的命名同互联网的’域’没有任何关系,只是数据库管理员为了更好的管理分布式数据库而根据实际情况决定的。当然为了管理方便,,可以将其等于互联网的域。
 
GLOBAL_NAME:

对一个数据库(Oracle database)的唯一标识,oracle建议用此种方法命令数据库。该值是在创建数据库是决定的,缺省值为Db_name.Db_domain。在以后对参数文件中Db_name与Db_domain参数的任何修改不影响Global_name的值,如果要修改Global_name,只能用ALTER DATABASE RENAME GLOBAL_NAME TO 命令进行修改,然后修改相应参数。
 
SERVICE_NAME:

该参数是oracle8i新引进的。在8i以前,我们用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中,一个数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库,而不是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name. Db_domain,即等于Global_name。一个数据库可以对应多个Service_name,以便实现更灵活的配置。该参数与SID没有直接关系,即Service name不必与SID一样。

比方说我可以在设置环境变量的时候,设置ORACLE_SID=zlm,那么这个时候SID就是zlm,而在tnsnames.ora中,我可以把SERVICE_NAME改成zlm_SN

##tnsnames.ora

ZLM10G =  ##ZLM10G为NET SERVICE NAME
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.91)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = zlm_SN)
##SERVICE_NAME为zlm_SN,与SID为zlm不同
    )
  )

可以看到,SERVICE_NAME用了刚才在netca中配置的zlm_SN,SID用了ORACLE_SID设置的zlm,并且把tnsnames.ora里系统自动添加的NET SERVICE NAME相关的内容删除了(即由pmon进程自动注册的2个动态监听),只留下自己配置的部分

注意,这里我还使用了netmgr配置了静态监听(从status UNKNOWN其实便可知),静态监听的目的,除了简化配置外,还可以提供在数据库未启动前仍能连接的功能,而不再是等数据库实例启动后,由pmon进程负责动态向监听注册服务,动态监听会通常比较滞后,启动监听后,要等若干分钟,才能看到服务被监听。

##listener.ora

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = zlm_SN)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (SID_NAME = zlm)
    )
  )


经过上面的tnsnames.ora和linstener.ora的配置,当我们查看监听状态的时候,就会发现不同:

$lsnrctl status
......
 
Services Summary...
 Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
 Service "zlm_SN" has 1 instance(s).## 表示对应的SERVICE_NAME为zlm_SN
  Instance "zlm", status UNKNOWN, has 1 handler(s) for this service...  ##表示对应的INSTANCE_NAME为zlm,也即SID和ORACLE_SID
 The command completed successfully

而通常情况下,我们会设置SERVICE_NAME和INSTANCE_NAME一致。这里还要注意的是,SERVICE_NAME虽然可以脱离INSTANCE_NAME搞别名,但是必须对应listener.ora里配置的GLOBAL_DBNAME,否则就算配好了静态监听,也是注册不了服务的

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 序列化
Python 序列化

本专题整合了python序列化、反序列化相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.02.02

AO3官网入口与中文阅读设置 AO3网页版使用与访问
AO3官网入口与中文阅读设置 AO3网页版使用与访问

本专题围绕 Archive of Our Own(AO3)官网入口展开,系统整理 AO3 最新可用官网地址、网页版访问方式、正确打开链接的方法,并详细讲解 AO3 中文界面设置、阅读语言切换及基础使用流程,帮助用户稳定访问 AO3 官网,高效完成中文阅读与作品浏览。

91

2026.02.02

主流快递单号查询入口 实时物流进度一站式追踪专题
主流快递单号查询入口 实时物流进度一站式追踪专题

本专题聚合极兔快递、京东快递、中通快递、圆通快递、韵达快递等主流物流平台的单号查询与运单追踪内容,重点解决单号查询、手机号查物流、官网入口直达、包裹进度实时追踪等高频问题,帮助用户快速获取最新物流状态,提升查件效率与使用体验。

27

2026.02.02

Golang WebAssembly(WASM)开发入门
Golang WebAssembly(WASM)开发入门

本专题系统讲解 Golang 在 WebAssembly(WASM)开发中的实践方法,涵盖 WASM 基础原理、Go 编译到 WASM 的流程、与 JavaScript 的交互方式、性能与体积优化,以及典型应用场景(如前端计算、跨平台模块)。帮助开发者掌握 Go 在新一代 Web 技术栈中的应用能力。

11

2026.02.02

PHP Swoole 高性能服务开发
PHP Swoole 高性能服务开发

本专题聚焦 PHP Swoole 扩展在高性能服务端开发中的应用,系统讲解协程模型、异步IO、TCP/HTTP/WebSocket服务器、进程与任务管理、常驻内存架构设计。通过实战案例,帮助开发者掌握 使用 PHP 构建高并发、低延迟服务端应用的工程化能力。

5

2026.02.02

Java JNI 与本地代码交互实战
Java JNI 与本地代码交互实战

本专题系统讲解 Java 通过 JNI 调用 C/C++ 本地代码的核心机制,涵盖 JNI 基本原理、数据类型映射、内存管理、异常处理、性能优化策略以及典型应用场景(如高性能计算、底层库封装)。通过实战示例,帮助开发者掌握 Java 与本地代码混合开发的完整流程。

5

2026.02.02

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

62

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

55

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

27

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SQL 教程
SQL 教程

共61课时 | 3.7万人学习

Java 教程
Java 教程

共578课时 | 56.2万人学习

oracle知识库
oracle知识库

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号