1 数据库名
1.1 数据库名的概念
数据库名(db_name)就是一个数据库的标识,就像人的身份证号一样。如果一台机器上装了多个数据库,那么每一个数据库都有一个数据库名。在数据库安装或创建完成之后,参数DB_NAME被写入参数文件之中。
数据库名在$ORACLE_HOME/admin/db_name/pfile/init.ora(或$ORACLE_BASE/admin/db_name/pfile/init.ora或$ORACLE_HOME/dbs/SPFILE<实例名>.ORA)文件中
###########################################
# Database Identification
###########################################
db_domain=""
db_name=orcl
在创建数据库时就应考虑好数据库名,并且在创建完数据库之后,数据库名不宜修改,即使要修改也会很麻烦。因为,数据库名还被写入控制文件中,控制文件是以二进制型式存储的,用户无法修改控制文件的内容。假设用户修改了参数文件中的数据库名,即修改DB_NAME的值。但是在Oracle启动时,由于参数文 件中的DB_NAME与控制文件中的数据库名不一致,导致数据库启动失败,将返回ORA-01103错误。
1.2 数据库名的作用
数据库名是在安装数据库、创建新的数据库、创建数据库控制文件、修改数据结构、备份与恢复数据库时都需要使用到的(注意这些时候不能使用sid,还有alter database时都是使用数据库名)。
有很多Oracle安装文件目录是与数据库名相关的,如:
winnt: F:\oracle\product\10.2.0\oradata\DB_NAME\...
又如参数文件pfile:
winnt: F:\oracle\product\10.2.0\admin\DB_NAME\pfile\init.ora.54200885729
如果控制文件损坏或丢失,数据库将不能加载,这时要重新创建控制文件,方法是以nomount方式启动实例,然后以create controlfile命令创建控制文件,当然这个命令中也要指明DB_NAME。
1.3 修改数据库名
建议:应在创建数据库时就确定好数据库名,数据库名不应作修改,因为修改数据库名是一件比较复杂的事情。是区分数据的内部标识(即是给Oracle数据库内部使用的),因为其在数据库多处保存,并且控制文件中保存的是二进制的,所以很难改变其名字。
在已创建数据之后,修改数据库名。步骤如下:
(1)关闭数据库。
(2)修改数据库参数文件中的DB_NAME参数的值为新的数据库名。
(3)以NOMOUNT方式启动实例,修建控制文件(有关创建控制文件的命令语法,请参考oracle文档)
1.4 查询当前数据库名
方法一:select name from v$database;
方法二:show parameter db
方法三:查看参数文件,$ORACLE_HOME/admin/db_name/pfile/init.ora(或$ORACLE_BASE/admin/db_name/pfile/init.ora)
2 数据库实例名(instance name)
2.1 数据库实例名的概念(instance_name)
实例名是代表用于加载或打开一个数据库所用的memory structures + Background process (MEM + BGP)。在unix中,实例名由ORACLE_SID环境变量定义,在windows中由服务名定义。可以用于连接字符串中,这种用法用于8i版本前,虽然10g仍然支持,但是并不推荐,因为这种方法缺乏对某些新特性的支持。
实例是访问Oracle数据库所需的一部分计算机内存和辅助处理后台进程,是由进程和这些进程所使用的内存(SGA)所构成一个集合,它根本不需要一个与其相关联的数据库,没有任何数据文件也可以启动实例。下面是Oralce的启动过程:
sqlplus / as sysdba
sql>startup nomount #启动了一个实例,现在SGA分配了,进程在运行,除数据库外所有的东西都启动了
sql>alter database mount #利用控制文件(init.ora文件中指定)定位重作日志文件、数据文件、临时文件
sql>alter database open #数据库可供任何人通过这个实例访问。
所以可以这么理解:访问Oracle都是访问一个实例,但这个实例如果关联了数据库文件,就是可以访问的,如果没有,就会得到实例不可用的错误。
实例名指的是用于响应某个数据库操作的数据库管理系统的名称,也叫SID。实例名是由参数instance_name决定的。如果这个参数不被指定(即instance_name没有被指定为任何值),那么实例的名字由该用户的环境变量ORACLE_SID(注意这里是大写)决定。在windows平台下,则是注册表中oracle_sid值决定。
实例名和SID是一一对应的,名字相同,但存储位置不同。
2.2 实例和数据库
实例和数据库之间的区别如下:
(1)实例是临时的,它只在相关的进程和内存集合存在时存在;数据库是永久的,只要文件存在它就存在。
(2)一个实例在其生存期内可安装和打开单个数据库;数据库可以被很多实例安装和打开,或者一个接一个的实例安装和打开,或者由多个实例同时安装和打开(RAC)。
简单来说RAC就是多个实例同时打开一个数据库文件的系统,在结构上是多台机器,每台机器运行一个实例,每个实例都打开同一个数据库 (这个是用磁盘共享技术实现的),这些实例之间需要同步高速缓存,这样保证多个实例是完全一致的,不会相互冲突乃至覆盖。
数据库实例名(instance_name)用于对外部连接。在操作系统中要取得与数据库的联系,必须使用数据库实例名。例如,要去连接一个数据库服务器,就必须知道其数据库实例名,只知道数据库名是没有用的。与数据库名不同,在数据安装或创建数据库之后,实例名可以被修改。数据库名和实例名可以相同也可以不同。在一般情况下,数据库名和实例名是一对一的关系,但如果在oracle并行服务器架构(即oracle实时应用集群) 中,数据库名和实例名是一对多的关系(一个数据库对应多个实例,同一时间内用户只与一个实例相联系,当某一实例出现故障,其它实例自动服务,以保证数据库安全运行) 。
实例就是一组操作系统进程(或者是一个多线程的进程)以及一些内存,这些进程可以操作数据库;而数据库只是一个文件集合(包括数据文件、临时文件、重做日志文件和控制文件)。在任何时刻,一个实例只能有一组相关的文件(与一个数据库关联)。大多数情况下,反过来也成立:一个数据库上只有一个实例对其进行操作。不过,Oracle的应用集群(Real Application Clusters,RAC)是一个例外,这是Oracle提供的一个选项,允许在集群环境中的多台计算机上操作,这样就可以有多台实例同时装载并打开一个数据库(位于一组共享物理磁盘上)。由此,我们可以同时从多台不同的计算机访问这个数据库。Oracle RAC能支持高度可用的系统,可用于构建可扩缩性极好的解决方案。
2.3 查询当前数据库实例名
方法一:select instance_name from v$instance;
方法二:show parameter instance
3 ORACLE_SID(环境变量)
在实际中,对于数据库实例的标识有时使用实例名,有时使用ORACLE_SID,它们有什么区别呢?(非常容易混淆)
OS(ORACLE_SID)<----------------> ORACLE 数据库 <--------(instance_name(实例名))
上图表示实例名instance_name、ORACLE_SID与数据库及操作系统之间的关系,虽然这里列出的两个参数都是数据库实例名,但 instance_name参数是ORACLE数据库的参数,此参数可以在参数文件中查询到;而ORACLE_SID参数则是操作系统环境变量,与 ORACLE_BASE、ORACLE_HOME等用法相同,用于和操作系统交互。也就是说,在操作系统中要想得到实例名,就必须使用ORACLE_SID。且ORACLE_SID必须与instance_name的值一致,否则,你将会收到一个错误,在winnt平台,是“TNS:协议适配器错误”。
在数据库安装之后,ORACLE_SID被用于定义数据库参数文件的名称。如:
$ORACLE_BASE/admin/DB_NAME/pfile/init$ORACLE_SID.ora。
如果在同一服务器中创建了多个数据库,则必然同时存在多个数据库实例,这时可以重复定义过程(export ORACLE_SID=orcl),以选择不同实例。 还可以用oraenv命令行来切换不同的ORACLE_SID来通过操作系统来启动不同的实例(instance)
4 数据库域名与全局数据库名
4.1 概念与联系
使用数据库名(da_name)对一个数据库进行唯一标识,这种表示对于单个数据库是足够的,但是随着由多个数据库构成的分布式数据库的普及,这给数据库的管理造成一定的负担,因为各个数据库的名字可能一样,造成管理上的混乱。为了解决这种情况,引入了db_domain参数,这样数据库的标识是由db_name和db_domain两个参数共同决定的,避免了因为数据库重名而造成管理上的混乱。这类似于互连网上的机器名的管理。我们 将db_name和db_domain两个参数用‘.’连接起来,表示一个数据库,并将该数据库的名称称为global_name,即它扩展了 db_name。db_name参数只能由字母、数字、’_’、’#’、’$’组成,而且最多8个字符。
数据库域名(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 <db_name.db_domain>命令进行修改,然后修改相应参数。
4.2查询数据库域名
方法一:select value from v$parameter where name = 'db_domain';(10g中不可行)
方法二:show parameter domain
方法三:在参数文件中查询,$ORACLE_HOME/admin/db_name/pfile/init.ora(或$ORACLE_BASE/admin/db_name/pfile/init.ora)
4.3 例子
全国交通GIS系统的分布式数据库,其中:
吉林节点: jl.jtgis
吉林长春节点: cc.jl.jtgis
河北节点: hb.jtgis
河北石家庄节点:sjz.hb.jtgis
这些就是数据库域名,数据库域名在存在于参数文件中,她的参数是db_domain.
全局数据库名=数据库名+数据库域名,如前述福建节点的全局数据库名是:orcl.jl.jtgis
5 数据库服务名(service_name)
该参数是oracle8i新引进的。在8i以前,我们用SID来表示数据库的一个实例,但是在Oracle的并行环境中,一个数据库对应多个实例,这样就需要多网络服务名,设置繁琐。为了方便并行环境中的设置,引进了service_name参数。该参数对应一个数据库,而不是一个实例,而且该参数有许多其它的好处。
该参数的缺省值为db_name.db_domain,即等于global_name。如果数据库有域名,则数据库服务名就是全局数据库名;否则,数据库服务名与数据库名相同。一个数据库可以对应多个service_name,以便实现更灵活的配置。该参数与SID没有直接关系,即 service_name 不必与SID一样。
从Oracle8i开始的oracle网络组件,数据库与客户端连接的主机字符串推荐使用的是数据库服务名。之前用的是SID,即数据库实例名。
SID = the unique name of your DB instance, ServiceName = the alias used when connecting。
如果database is registered with listener in this way,你就可以在tnsnames.ora文件中使用SERVICE_NAME parameter,否则就要用SID。
查询数据库服务名(方法二测试可行)
方法一:select value from v$parameter where name = 'service_name';(10g中不可行)
方法二:show parameter service_name
更多关于服务名的信息可以参考:
http://www.dbabeta.com/2009/service-name-registeration.html
http://space.itpub.net/?uid-67294-action-viewspace-itemid-402633
6 网络服务名(net_service_name)
网络服务名(net_service_name),又可以称为数据库别名(database alias),是客户端程序访问数据库时所需要,屏蔽了客户端如何连接到服务器端的细节,实现了数据库的位置透明的特性。网络服务名被记录在 tnsnames.ora文件中。
可以通过netmgr来新建网络服务名。
网络服务名是从客户端的角度出发,当客户端连接远程数据库或其他服务时,可以指定网络服务名。因此需要使用一个或多个命名方法将此Net服务名解析为连接数据库或其他服务的连接描述符,命名方法如下:
[本地]——将存储在本地客户机的tnsnames.ora文件中的网络服务名解析为连接描述符。
[Oracle Names]——由Oracle名字服务器提供为网络上的每个Oracle Net服务提供解析方法
[主机名]——通过TCP/IP环境中的主机别名连接到Oracle数据库服务
[Sun NIS]/[DCE CDS]——专用系统用的,在Windows 2000系统环境下不适用
相关推荐
通常情况下,数据库名和实例名是一对一的关系,但是在 Oracle 并行服务器架构中,数据库名和实例名是一对多的关系。 数据库域名 (DB_DOMAIN) 数据库域名是在分布式数据库系统中使用的概念,用于区别同名数据库。在...
Oracle 数据库实例用户表空间之间的关系 Oracle 数据库实例用户表空间之间的关系是 Oracle 数据库管理系统的核心概念。了解它们之间的关系对于数据库的设计、管理和优化至关重要。 数据库 Oracle 数据库是一个...
### Oracle数据库、实例、用户、表空间的关系解析 #### 一、Oracle数据库概述 Oracle数据库是一种高度复杂的数据库管理系统,主要用于企业级数据管理和处理。与其他数据库系统不同,Oracle数据库中的“数据库”这一...
数据库名与实例名的关系通常是对应的,即一个数据库对应一个实例,但Oracle 8i及更高版本的并行服务器架构打破了这种一对一关系,使得一个数据库可以有多个实例,提供了更高级别的容错和性能优化。服务名(SERVICE_...
详解_数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名
修改Oracle实例名涉及到一系列的操作和注意事项,以下列出详细的知识点: 1. 修改实例名前的准备工作:在进行实例名更改之前,应当确保数据库处于关闭状态(或者至少是处于MOUNT状态)。这可以通过运行shutdown ...
### Oracle 数据库名、实例名、数据库域名、全局数据库名、服务名 解析 #### 一、Oracle数据库名称(DB_NAME) 在Oracle数据库系统中,**数据库名称**(DB_NAME)是一个非常重要的概念,用于唯一标识一个特定的...
本文将深入探讨如何使用GeoServer 2.14版本与Oracle数据库进行集成,以及如何在GeoServer中读取并显示Oracle数据库内的Shapefile数据。 首先,Oracle数据库是全球领先的大型企业级数据库管理系统,广泛应用于数据...
实例名与数据库名之间的关系是一一对应关系,有一个数据库名就有一个实例名。如果在一个服务器中创建两个数据库,则有两个数据库名,两个数据库实例名,用两个标识确定一个数据库,用户和实例相连接。 三、操作系统...
Oracle 数据库备份与还原实例 Oracle 数据库备份与还原是数据库管理的重要步骤,涉及到数据的安全性和可靠性。本文将介绍 Oracle 数据库备份与还原实例,使用 exp 与 imp 方式导出和导入数据,同时也包含 Linux ...
在一般情况下,数据库名和实例名是一对一的关系,但如果在 oracle 并行服务器架构中,数据库名和实例名是一对多的关系。 ORACLE_SID 是操作系统的环境变量,用于与操作系统交互,也就是说,从操作系统的角度访问...
新建Oracle数据库并连接详细教程 在这篇教程中,我们将学习如何新建Oracle数据库并连接到该数据库。该教程分为两部分:新建Oracle数据库和连接到数据库。 新建Oracle数据库 新建Oracle数据库需要使用Database ...
描述Oracle数据库名称、服务名、实例名等的关系
实例名与 ORACLE_SID 的区别是:instance_name 是 oracle 数据库参数,而 ORACLE_SID 是操作系统的环境变量。 ORACLE_SID 用于与操作系统交互,也就是说,从操作系统的角度访问实例名,必须通过 ORACLE_SID。 服务...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,其强大的功能和稳定性使其在企业级应用中占据了重要地位。本文将详细解析Oracle数据库的体系结构,帮助读者深入理解其内部工作原理。 Oracle数据库的...
易语言,作为一种简洁易学的编程语言,提供了与Oracle数据库交互的能力,使得开发者可以方便地进行数据存取、查询和管理。本文将详细介绍如何使用易语言连接Oracle数据库,并探讨相关组件的使用。 首先,连接Oracle...
#### 四、Oracle数据库、表空间与数据文件之间的关系 - **数据库与表空间**:在Oracle数据库中,表空间是逻辑上的存储单元。一个Oracle数据库可以包含多个表空间,每个表空间都是数据库的一部分。不同的表空间可以...
Oracle数据库认证大师考试是Oracle认证的考试之一,考试代号为1z0-062,主要考察考生对于Oracle Database 12c的安装和管理相关知识的掌握程度。该考试主要涵盖了数据库实例的参数设置、安全管理、数据库链接的创建等...