`
kavy
  • 浏览: 890667 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle中数据库与实例的区别

 
阅读更多

Oracle中数据库与实例的区别

上一篇 / 下一篇  2010-08-05 14:47:24

查看( 189 ) / 评论( 1 ) / 评分( 5 / 0 )

刚接触ORACLE的人肯定会对实例和数据库感到困惑,实例到底代表些什么?为什么会有这个概念的出现?
ORACLE
实例 = 进程 + 进程所使用的内存(SGA)
实例是一个临时性的东西,你也可以认为它代表了数据库某一时刻的状态!
数据库 = 重做文件 + 控制文件 + 数据文件 + 临时文件
数据库是永久的,是一个文件的集合。
ORACLE
实例和数据库之间的关系
1.
临时性和永久性
2.
实例可以在没有数据文件的情况下单独启动 startup nomount , 通常没什么意义
3.
一个实例在其生存期内只能装载(alter database mount)和打开(alter database open)一个数据库
4.
一个数据库可被许多实例同时装载和打开(RAC)RAC环境中实例的作用能够得到充分的体现!

下面对实例和数据库做详细的诠释:
Oracle领域中有两个词很容易混淆,这就是实例instance)和数据库database)。作为Oracle术语,这两个词的定义如下:
q
数据库(database):物理操作系统文件或磁盘(disk)的集合。使用Oracle 10g的自动存储管理Automatic Storage ManagementASM)或RAW分区时,数据库可能不作为操作系统中单独的文件,但定义仍然不变。
q
实例(instance):一组Oracle后台进程/线程以及一个共享内存区,这些内存由同一个计算机上运行的线程/进程所共享。这里可以维护易失的、非持久性内容(有些可以刷新输出到磁盘)。就算没有磁盘存储,数据库实例也能存在。也许实例不能算是世界上最有用的事物,不过你完全可以把它想成是最有用的事物,这有助于对实例和数据库划清界线。
这两个词有时可互换使用,不过二者的概念完全不同。实例和数据库之间的关系是:数据库可以由多个实例装载和打开,而实例可以在任何时间点装载和打开一个数据库。实际上,准确地讲,实例在其整个生存期中最多能装载和打开一个数据库!稍后就会介绍这样的一个例子。
是不是更糊涂了?我们还会做进一步的解释,应该能帮助你搞清楚这些概念。实例就是一组操作系统进程(或者是一个多线程的进程)以及一些内存。这些进程可以操作数据库;而数据库只是一个文件集合(包括数据文件、临时文件、重做日志文件和控制文件)。在任何时刻,一个实例只能有一组相关的文件(与一个数据库关联)。大多数情况下,反过来也成立:一个数据库上只有一个实例对其进行操作。不过,Oracle的真正应用集群(Real Application ClustersRAC)是一个例外,这是Oracle提供的一个选项,允许在集群环境中的多台计算机上操作,这样就可以有多台实例同时装载并打开一个数据库(位于一组共享物理磁盘上)。由此,我们可以同时从多台不同的计算机访问这个数据库。Oracle RAC能支持高度可用的系统,可用于构建可扩缩性极好的解决方案。


一个实例在其生存期中最多只能装载和打开一个数据库。要想再打开这个(或其他)数据库,必须先丢弃这个实例,并创建一个新的实例。
重申一遍:

实例是一组后台进程和共享内存。

数据库是磁盘上存储的数据集合。

实例一生只能装载并打开一个数据库。

数据库可以由一个或多个实例(使用RAC)装载和打开。
前面提到过,大多数情况下,实例和数据库之间存在一种一对一的关系。可能正因如此,才导致人们很容易将二者混淆。从大多数人的经验看来,数据库就是实例,实例就是数据库。
不过,在许多测试环境中,情况并非如此。在我的磁盘上,可以有5个不同的数据库。测试主机上任意时间点只会运行一个Oracle实例,但是它访问的数据库每天都可能不同(甚至每小时都不同),这取决于我的需求。只需有不同的配置文件,我就能装载并打开其中任意一个数据库。在这种情况下,任何时刻我都只有一个实例,但有多个数据库,在任意时间点上只能访问其中的一个数据库。
所以,你现在应该知道,如果有人谈到实例,他指的就是Oracle的进程和内存。提到数据库时,则是说保存数据的物理文件。可以从多个实例访问一个数据库,但是一个实例一次只能访问一个数据库。

1.oracle数据库系统中,DBMS可以管理多个数据库实例吗?还是需要一个oracle服务管理一个实例?

oracle
里面一个数据库系统可以又多个实例。你可以运行dbca,在界面里面你可以看到可以创建新的实例,但是大多数情况下,oracle都只是建立一个实例。

2需要建立教务数据库,财务数据库两个db,

是可以的,不过通常的做法是建再2个用户放在不同的tablespaces上面。一个用户存储教务数据库表数据,一个存放财务数据库表数据。

3.oracle中的schema属于哪个层次?
schema
简单来讲,你可以理解成一个用户以及用户所拥有的所有对象。其实就相当于sqlserver的库。

4.oracle中这样做。
create user Test;
grant [connect,……]to Test;
create table……
创建属于此用户的表及其他对象,那么这个用户数否可以代表为一个应用db

3一样,你可以这样理解成一个用户以及用户下面所有的对象其实就是sqlserver中的db了,实际生产环境中,为了减少成本和充分利用oracle数据库的资源,我们都是一个项目一个用户,一个应用一个用户,然后在不同的用户下面建立相应的表、视图、存储过程、存储函数、序列等等。

下面来看一个简单的例子。假设我们刚安装Oracle 10g10.1.0.3。我们执行一个纯软件安装,不包括初始的启动数据库,除了软件以外什么都没有。

通过pwd命令可以知道当前的工作目录(这个例子使用一个Linux平台的计算机)。我们的当前目录是dbs(如果在Windows平台上,则是database目录)。执行ls–l命令显示出这个目录为。其中没有init.ora 文件,也没有任何存储参数文件(stored parameter fileSPFILE);存储参数文件将在第3章详细讨论。

使用ps(进程状态)命令,可以看到用户ora10g运行的所有进程,这里假设ora10gOracle软件的所有者。此时还没有任何Oracle数据库进程。

然后使用ipcs命令,这个UNIX命令可用于显示进程间的通信设备,如共享内存、信号量等。目前系统中没有使用任何通信设备。

然后启动SQL*PlusOracle的命令行界面),并作为SYSDBA连接(SYSDBA账户可以在数据库中做任何事情)。连接成功后,SQL*Plus报告称我们连上了一个空闲的实例:

我们的实例现在只包括一个Oracle服务器进程,见以下输出中粗体显示的部分。此时还没有分配共享内存,也没有其他进程。

现在来启动实例:

这里提示的文件就是启动实例时必须要有的一个文件,我们需要有一个参数文件(一种简单的平面文件,后面还会详细说明),或者要有一个存储参数文件。现在就来创建参数文件,并放入启动数据库实例所需的最少信息(通常还会指定更多的参数,如数据库块大小、控制文件位置,等等)。

然后再回到SQL*Plus

这里对startup命令加了nomount选项,因为我们现在还不想真正装载数据库(要了解启动和关闭的所有选项,请参见SQL*Plus文档)。

注意

Windows上运行startup命令之前,还需要使用oradim.exe实用程序执行一条服务创建语句。

现在就有了所谓的实例。运行数据库所需的后台进程都有了,如进程监视器(process monitorPMON)、日志写入器(log writerLGWR)等,这些进程将在第5章详细介绍。

再使用ipcs命令,它会首次报告指出使用了共享内存和信号量,这是UNIX上的两个重要的进程间通信设备:

注意,我们还没有数据库呢!此时,只有数据库之名(在所创建的参数文件中),而没有数据库之实。如果试图装载这个数据库,就会失败,因为数据库根本就不存在。下面就来创建数据库。有人说创建一个Oracle数据库步骤很繁琐,真是这样吗?我们来看看:

这里创建数据库就是这么简单。但在实际中,也许要使用一个稍有些复杂的CREATE DATABASE命令,因为可能需要告诉Oracle把日志文件、数据文件、控制文件等放在哪里。不过,我们现在已经有了一个完全可操作的数据库了。可能还需要运行$ORACLE_HOME/rdbms/admin/ catalog.sql脚本和其他编录脚本(catalog script)来建立我们每天使用的数据字典(这个数据库中还没有我们使用的某些视图,如ALL_OBJECTS),但不管怎么说,数据库已经有了。可以简单地查询一些Oracle V$视图(具体就是V$DATAFILEV$LOGFILEV$CONTROLFILE),列出构成这个数据库的文件:

Oracle使用默认设置,把所有内容都放在一起,并把数据库创建为一组持久的文件。如果关闭这个数据库,再试图打开,就会发现数据库无法打开:

一个实例在其生存期中最多只能装载和打开一个数据库。要想再打开这个(或其他)数据库,必须先丢弃这个实例,并创建一个新的实例。

重申一遍:

1.实例是一组后台进程和共享内存。

2.数据库是磁盘上存储的数据集合。

3.实例一生只能装载并打开一个数据库。

4.数据库可以由一个或多个实例(使用RAC)装载和打开。

前面提到过,大多数情况下,实例和数据库之间存在一种一对一的关系。可能正因如此,才导致人们很容易将二者混淆。从大多数人的经验看来,数据库就是实例,实例就是数据库。

不过,在许多测试环境中,情况并非如此。在我的磁盘上,可以有5个不同的数据库。测试主机上任意时间点只会运行一个Oracle实例,但是它访问的数据库每天都可能不同(甚至每小时都不同),这取决于我的需求。只需有不同的配置文件,我就能装载并打开其中任意一个数据库。在这种情况下,任何时刻我都只有一个实例,但有多个数据库,在任意时间点上只能访问其中的一个数据库。

所以,你现在应该知道,如果有人谈到实例,他指的就是Oracle的进程和内存。提到数据库时,则是说保存数据的物理文件。可以从多个实例访问一个数据库,但是一个实例一次只能访问一个数据库。

 

 

分享到:
评论

相关推荐

    oracle数据库_实例_用户_表空间之间的关系

    Oracle 数据库实例用户表空间之间的关系 Oracle 数据库实例用户表空间之间的关系是 Oracle 数据库管理系统的核心概念。了解它们之间的关系对于数据库的设计、管理和优化至关重要。 数据库 Oracle 数据库是一个...

    JSP+Oracle数据库开发与实例 2

    在“JSP+Oracle数据库开发与实例”中,我们将学习如何使用JSP创建交互式网页,处理用户请求,并与数据库进行通信。 Oracle数据库,是全球广泛使用的大型关系型数据库管理系统之一,以其稳定性和高性能而著称。在...

    jsp+oracle数据库开发与实例

    通过学习《jsp+oracle数据库开发与实例》及其配套资源,开发者可以提升在Web应用开发中的数据库操作能力,了解如何在JSP中有效地使用Oracle数据库,从而构建更强大、更灵活的应用程序。无论你是初学者还是有经验的...

    修改数据库最大连接数以及linux系统下ORACLE数据库启动多实例参照.pdf

    2. 切换到需要启动的数据库实例下:export ORACLE_SID=orcl 3. 使用 oracle 账号登陆 Linux 系统:#oracle #passwd:oraclepass 4. 启动数据库实例:#sqlplus /nolog #conn /as sysdba #startup #exit 5. 启动实例...

    VC数据库编程实例-ORACLE数据库VC数据库编程实例

    本实例主要关注如何使用VC++与Oracle数据库进行交互,实现数据的存取、查询、更新和删除等操作。Oracle数据库是一个关系型数据库管理系统,提供了丰富的API和工具,如OCI(Oracle Call Interface)和ODBC(Open ...

    ASP.NET连接Oracle数据库完整实例(简单实例)

    ASP.NET连接Oracle数据库实例程序,根据sql.txt创建数据表后,更改WEB.config文件中Oracle字符串连接符中的数据库UID及PASSWORD,或许还需要再次引入System.Data.OracleClient,有问题可留言我

    oracle数据库实例视频教程01

    本"Oracle数据库实例视频教程01"是针对初学者和希望深化Oracle知识的人员设计的一系列教学资源,旨在帮助理解Oracle数据库的基础概念、安装配置以及基本操作。 在本教程中,首先会介绍Oracle数据库的概述,包括它的...

    oracle实例名,数据库名,服务名等概念区别与联系.doc

    Oracle 数据库概念解释 Oracle 数据库中有多个概念经常让初学者...数据库名、实例名、数据库域名、全局数据库名、服务名等概念都是 Oracle 数据库中重要的概念,理解它们的区别和联系对于数据库管理和开发非常重要。

    oracle删除和重建实例

    Oracle 数据库是一种关系型数据库管理系统,广泛应用于企业级数据库应用中。然而,在某些情况下,我们需要删除和重建 Oracle 实例,以便解决一些问题或进行升级维护。在这篇文章中,我们将介绍删除和重建 Oracle ...

    Oracle11G创建数据库实例

    首先,Oracle数据库实例是Oracle数据库管理系统在内存中运行的实体,它负责管理数据库的运行和访问。在创建实例之前,必须启动Oracle的监听服务——OracleOraDb11g_home1TNSListener。监听器是Oracle网络架构的一...

    ORACLE实例与数据库详解.doc

    1. **Oracle实例**:实例是操作系统中的进程集合,这些进程与Oracle数据库进行交互,并且共享一组内存结构,称为系统全局区(System Global Area,SGA)。SGA 包括数据缓冲区、重做日志缓冲区、共享SQL区域等,这些...

    数据库名实例名sid的区别

    在Oracle数据库系统中,数据库名(DB_NAME)、实例名(INSTANCE_NAME)以及操作系统环境变量(ORACLE_SID)是区分和管理数据库的关键概念。这些参数在不同的Oracle版本中有不同的作用和重要性。 首先,数据库名(DB...

    Oracle数据库创建数据库实例

    Oracle数据库,使用OraClient10g。创建数据库实例、建用户名、配置服务名、建表空间、表的导入

    创建oracle数据库(RAC)实例过程说明.doc

    Oracle RAC集群数据库实例创建过程详解 Oracle RAC(Real Application Clusters)是Oracle公司推出的集群解决方案,旨在提供高可用性、可扩展性和高性能的数据库解决方案。下面是创建Oracle RAC集群数据库实例的...

    oracle10201创建数据库实例教程(手把手教程)

    本教程将深入探讨如何手动创建一个Oracle 10g数据库实例,这对于理解数据库的内部工作原理以及进行数据库管理至关重要。我们将按照以下步骤进行: 1. **环境准备** 在开始创建数据库实例之前,确保你的系统已经...

    实战管理Oracle 12c数据库实例

    Oracle数据库版本号由五个数字组成,分别代表版本号、维护版本号、中间件版本、特定于组件的版本级别和平台版本标示。例如 Oracle 12c 的版本号为 12.1.0.2.0,可以通过查看 V$VERSION 视图来获取数据库版本信息。 ...

    oracle 数据库实例 篇

    Oracle数据库实例是一个复杂而关键的系统,用于存储和管理企业级的数据。本篇将深入讨论Oracle数据库的热备份和完整恢复机制,这是确保数据安全和业务连续性的重要环节。 首先,热备份是一种在数据库运行状态下进行...

    Oracle数据库_实例_用户_表空间之间的关系.doc

    与其他数据库系统不同,Oracle数据库中的“数据库”这一概念实际上指的是所有数据文件、控制文件、联机重做日志文件以及参数文件等物理组件的集合。这些物理组件共同构成了一个完整的数据库环境。 #### 二、实例...

    oracle中的全局数据库名称和sid的区别

    在操作系统中要取得与数据库之间的交互,必须使用数据库实例名。实例名可以被修改,数据库安装完成后,该实例名被写入数据库参数文件pfile 中。实例名与数据库名之间的关系是一一对应关系,有一个数据库名就有一个...

Global site tag (gtag.js) - Google Analytics