oracle 10g中的几个概念(表空间,数据库名,实例名
2012-09-22 18:06:38
分类: Oracle
oracle 10g中的几个概念(表空间,数据库名,实例名
解释数据库、表空间、数据文件、表、数据的最好办法就是想象一个装满东西的柜子。数据库其实就是柜子,柜中的抽屉是表空间,抽屉中的文件夹是数据文件,文件夹中的纸是表,写在纸上的信息就是数据。
表空间的设计理念:
1.Oracle表空间之基本概念
ORACLE数据库被划分成称作为表空间的逻辑区域——形成ORACLE数据库的逻辑结构。一个ORACLE数据库能够有一个或多个Oracle,而一个表空间则对应着一个或多个物理的数据库文件。表空间是ORACLE数据库恢复的最小单位,容纳着许多数据库实体,如表、视图、索引、聚簇、回退段和临时段等。
每个ORACLE数据库均有SYSTEM表空间,这是数据库创建时自动创建的。SYSTEM表空间必须总要保持联机,因为其包含着数据库运行所要求的基本信息(关于整个数据库的数据字典、联机求助机制、所有回退段、临时段和自举段、所有的用户数据库实体、其它ORACLE软件产品要求的表)。
一个小型应用的ORACLE数据库通常仅包括SYSTEM表空间,然而一个稍大型应用的ORACLE数据库采用多个表空间会对数据库的使用带来更大的方便。
2.Oracle表空间之作用
表空间的作用能帮助DBA用户完成以下工作:
1.决定数据库实体的空间分配;
2.设置数据库用户的空间份额;
3.控制数据库部分数据的可用性;
4.分布数据于不同的设备之间以改善性能;
5.备份和恢复数据。
用户创建其数据库实体时其必须于给定的表空间中具有相应的权力,所以对一个用户来
说,其要操纵一个ORACLE数据库中的数据,应该:
1.被授予关于一个或多个表空间中的RESOURCE特权;
2.被指定缺省表空间;
3.被分配指定表空间的存储空间使用份额;
4.被指定缺省临时段表空间。
一、数据库名
1.数据库名的概念
数据库名在$ORACLE_HOME/admin/db_name/pfile/init.ora文件中
###########################################
# Database Identification
###########################################
db_domain=""
db_name=orcl
2.数据库名的作用
3.修改数据库名
(1)关闭数据库。
(2)修改数据库参数文件中的DB_NAME参数的值为新的数据库名。
(3)以NOMOUNT方式启动实例,修建控制文件(有关创建控制文件的命令语法,请参考oracle文档)
4.查询当前数据库名
二、数据库实例名
1.数据库实例名的概念(instance_name)
实例名和SID是一一对应的,名字相同,但在存储位置不同。
2.实例和数据库
3.查询当前数据库实例名
方法一:select instance_name from v$instance;
方法二:show parameter instance
三、ORACLE_SID
(ORACLE_SID)
OS<----------------> ORACLE 数据库 <--------(instance_name(实例名))
四、数据库域名与全局数据库名
2.查询数据库域名
3.例子
全国交通GIS系统的分布式数据库,其中:
吉林节点: jl.jtgis
吉林长春节点: cc.jl.jtgis
河北节点: hb.jtgis
河北石家庄节点:sjz.hb.jtgis
这些就是数据库域名,数据库域名在存在于参数文件中,她的参数是db_domain.
全局数据库名=数据库名+数据库域名,如前述福建节点的全局数据库名是:orcl.jl.jtgis
五、数据库服务名
查询数据库服务名
六、网络服务名
可以通过netmgr来新建网络服务名。
网络服务名是从客户端的角度出发,当客户端连接远程数据库或其他服务时,可以指定网络服务名。因此需要使用一个或多个命名方法将此Net服务名解析为连接数据库或其他服务的连接描述符,看下面:
[本地]——将存储在本地客户机的tnsnames.ora文件中的网络服务名解析为连接描述符。
[Oracle Names]——由Oracle名字服务器提供为网络上的每个Oracle Net服务提供解析方法
[主机名]——通过TCP/IP环境中的主机别名连接到Oracle数据库服务
[Sun NIS]/[DCE CDS]——专用系统用的,在Windows 2000系统环境下不适用
===============================================================================================
为什么会有这个概念的出现?
ORACLE实例 = 进程 + 进程所使用的内存(SGA)
实例是一个临时性的东西,你也可以认为它 代表了数据库某一时刻的状态!
数据库 = 重做文件 + 控制文件 + 数据文件 + 临时文件
数据库是永久的,是一个文件的集合。
ORACLE实例和数据库之间的关系
1.临时性和永久性
2.实例可以在没有数据文件的情况下单独启动 startup nomount , 通常没什么意义
3.一个实例在其生存期内只能装载(alter database mount)和打开(alter database open)一个数
据库
4.一个数据库可被许多实例同时装载和打开(即 RAC),RAC环境中实例的作用能够得到充分
的体现!
下面对实例和数据库做详细的诠释:
在Oracle领域中有两个词很容易混淆,这就是“实例”(instance)和“数据库”(database)。
作为Oracle术语,这两个词的定义如下:
数据库(database):物理操作系统文件或磁盘(disk)的集合。使用Oracle
管理(Automatic Storage Management,ASM)或RAW分区时,数据库可能不作为操作系统
中单独的文件,但定义仍然不变。
实例(instance):一组Oracle后台进程/线程以及一个共享内存区,这些内存由同一个计算
机上运行的线程/进程所共享。这里可以维护易失的、非持久性内容(有些可以刷新输出到
磁盘)。就算没有磁盘存储,数据库实例也能存在。也许实例不能算是世界上最有用的事物,
不过你完全可以把它想成是最有用的事物,这有助于对实例和数据库划清界线。
这两个词有时可互换使用,不过二者的概念完全不同。实例和数据库之间的关系是:数据库
可以由多个实例装载和打开,而实例可以在任何时间点装载和打开一个数据库。实际上,准
确地讲,实例在其整个生存期中最多能装载和打开一个数据库!稍后就会介绍这样的一个例
子。是不是更糊涂了?我们还会做进一步的解释,应该能帮助你搞清楚这些概念。实例就是
一组操作系统进程(或者是一个多线程的进程)以及一些内存。这些进程可以操作数据库;
而数据库只是一个文件集合(包括数据文件、临时文件、重做日志文件和控制文件)。在任
何时刻,一个实例只能有一组相关的文件(与一个数据库关联)。大多数情况下,反过来也
成立:一个数据库上只有一个实例对其进行操作。不过,Oracle的真正应用集群(Real
Application Clusters,RAC)是一个例外,这是Oracle提供的一个选项,允许在集群环境中的
多台计算机上操作,这样就可以有多台实例同时装载并打开一个数据库(位于一组共享物理
磁盘上)。由此,我们可以同时从多台不同的计算机访问这个数据库。Oracle RAC能支持高
度可用的系统,可用于构建可扩缩性极好的解决方案。
下面来看一个简单的例子。假设我们刚 安装了Oracle 10g10.1.0.3。我们执行一个纯 软件安装,
不包括初始的“启动”数据库,除了软件以外什么都没有。
通过pwd命令可以知道当前的工作目录(这个例子使用一个Linux平台的计算机)。我们的
当前目录是dbs(如果在Windows平台上,则是database目录)。执行ls–l 命令显示出这个
目录为“空”。其中没有init.ora 文件,也没有任何存储参数文件(stored parameter file,SPFILE);
存储参数文件将在以后讨论。
使用ps(进程状态)命令,可以看到用户ora10g运行的所有进程,这里假设ora10g是Oracle
软件的所有者。此时还没有任何Oracle数据库进程。
然后使用ipcs 命令,这个UNIX命令可用于显示进程间的通信设备,如共享内存、信号量等。
目前系统中没有使用任何通信设备。
然后启动SQL*Plus(Oracle的命令行界面),并作为SYSDBA连接(SYSDBA账户可以在数据
库中做任何事情)。连接成功后,SQL*Plus报告称我们连上了一个空闲的实例:
我们的“实例”现在只包括一个Oracle服务器进程,见以下输出中粗体显示的部分。此时
还没有分配共享内存,也没有其他进程。
现在来启动实例:
这里提示的文件就是启动实例时必须要有的一个文件,我们需要有一个参数文件(一种简单
的平面文件,后面还会详细说明),或者要有一个存储参数文件。现在就来创建参数文件,
并放入启动数据库实例所需的最少信息(通常还会指定更多的参数,如数据库块大小、控制
文件位置,等等)。
然后再回到SQL*Plus:
这里对startup命令加了nomount选项,因为我们现在还不想真正“装载”数据库(要了解
启动和关闭的所有选项,请参见SQL*Plus文档)。注意,在Windows上运行startup命令之
前,还需要使用oradim.exe实用程序执行一条服务创建语句。现在就有了所谓的“实例”。
运行数据库所需的后台进程都有了,如进程监视器(process monitor,PMON)、日志写入器
(log writer,LGWR)等,这些进程将在以后详细介绍。
再使用ipcs 命令,它会首次报告指出使用了共享内存和信号量,这是UNIX上的两个重要的
进程间通信设备:
注意,我们还没有“数据库”呢!此时,只有数据库之名(在所创建的参数文件中),而没
有数据库之实。如果试图“装载”这个数据库,就会失败,因为数据库根本就不存在。下面
就来创建数据库。有人说创建一个Oracle数据库步骤很繁琐,真是这样吗?我们来看看:
这里创建数据库就是这么简单。但在实际中,也许要使用一个稍有些复杂的CREATE DATABASE
命令,因为可能需要告诉Oracle把日志文件、数据文件、控制文件等放在哪里。不过,我
们 现 在 已 经 有 了 一 个 完 全 可 操 作 的 数 据 库 了 。 可 能 还 需 要 运 行
$ORACLE_HOME/rdbms/admin/ catalog.sql脚本和其他编录脚本(catalog script)来建立我们
每天使用的数据字典(这个数据库中还没有我们使用的某些视图,如ALL_OBJECTS),但不
管怎么说,数据库已经有了。可以简单地查询一些Oracle V$视图(具体就是V$DATAFILE、
V$LOGFILE和V$CONTROLFILE),列出构成这个数据库的文件:
Oracle使用默认设置,把所有内容都放在一起,并把数据库创建为一组持久的文件。如果关
闭这个数据库,再试图打开,就会发现数据库无法打开:
一个实例在其生存期中最多只能装载和打开一个数据库。要想再打开这个(或其他)数据库,
必须先丢弃这个实例,并创建一个新的实例。
重申一遍:实例是一组后台进程和共享内存。
数据库是磁盘上存储的数据集合。
实例“一生”只能装载并打开一个数据库。
数据库可以由一个或多个实例(使用RAC)装载和打开。
前面提到过,大多数情况下,实例和数据库之间存在一种一对一的关系。可能正因如此,才
导致人们很容易将二者混淆。从大多数人的经验看来,数据库就是实例,实例就是数据库。
不过,在许多测试环境中,情况并非如此。在我的磁盘上,可以有5个不同的数据库。测试
主机上任意时间点只会运行一个Oracle实例,但是它访问的数据库每天都可能不同(甚至
每小时都不同),这取决于我的需求。只需有不同的配置文件,我就能装载并打开其中任意
一个数据库。在这种情况下,任何时刻我都只有一个“实例”,但有多个数据库,在任意时
间点上只能访问其中的一个数据库。所以,你现在应该知道,如果有人谈到实例,他指的就
是Oracle的进程和内存。提到数据库时,则是说保存数据的物理文件。可以从多个实例访
问一个数据库,但是一个实例一次只能访问一个数据库。