oracle概念:实例和数据库
数据库程序,一般都要使用计算机的内存和持久存储设备(例如磁盘)进行操作。磁盘提供了持久存储和保存大量信息的空间。但是,从磁盘中获得信息要比从内存中获取信息的速度慢很多,因此,很多数据库引擎利用内存来缓存信息,从而加快数据的访问速度。
信息如何存储和从什么地方获取对于终端查询用户来说是透明的,但是,如果你打算管理oracle,你就需要熟悉oracle的处理方式。本文讨论两个基础但是很重要和内存和磁盘相关的概念:数据库和实例。
数据库
在oracle中,数据库用于描述用来存储信息的物理文件的集合。主要有三种类型的物理文件:
*
数据文件(Data files) ------这些文件是数据库的主要文件:其中包括数据表、索引和所有其他的段。
*
控制文件(Control files)----这些文件告诉你数据文件、临时文件和重做日志文件在哪里,还会指出与文件状态有关的其他元数据。
*
重做日志文件(Redo-log files)----用于记录所有对数据的修改信息,这些信息可用于数据备份和恢复。
无论使用多少文件,它们都是数据库的一部分。
实例
如果没用内存结构和后台进程操作数据库,那么这些数据库文件本身将毫无意义,oralce用术语实例定义用于访问数据库的一组后台进程和内存结构。
一个实例主要使用两种内存结构:
*
系统全局区(System Global Area,SGA),又叫共享全局区(Shared Gloabl Area):由oracle进程共享的内存区域。
*
程序全局区(Program Global Area,PGA),又叫私有全局区:特定进程私有的内存区域。
SGA包括用于保存从数据文件中读取的信息的数据库缓存,用于保存元数据信息的数据字典缓存和用于保存最近使用的SQL和PL/SQL语句的库缓存。PGA用于为每个特定的进程需要的信息分配内存,包括排序空间、数组、游标等。实例还包括相互协作的一组后台进程,他们用于实现不同的功能。例如数据库写入器进程,负责保存所有对数据库的修改;进程监视器,负责清除失败的用户进程。
启动oracle服务器:从启动oracle的不同步骤中可以看出数据库和实例之间的区别。第一步是实例自身的启动,不同的后台进程被启动并且分配了相应的内存区。第二步是实例装载数据库。最后是打开数据库。
尽管通常情况下在启动oracle的时候这些步骤一起完成,但是有时你需要让oracle停留在某个阶段。我们看下相关的语法,可以使用SQL*PLUS登录oracle尝试这些命令。
STARTUP或者STARTUP OPEN告诉oracle一次完成三步操作。如果你只想启动oracle实例,可以使用命令STARTUP NOMOUNT,oracle将只启动实例但是不会装载数据库,即启动一个空实例。
为什么需要这么做呢?有时你可能需要创建新的控制文件或者新的数据库,而这些操作必须在访问数据库之前完成。你也可以输入STARTUP MOUNT(或者你之前输入了STARTUP NOMOUNT你可以输入ALTER DATABASE MOUNT)告诉oracle装载数据库文件。在这种情况下,实例将会访问和数据库有关的所有信息。但是这时用户还不能访问数据库。一个必须进行的操作的例子是重命名有SYSTEM表空间使用的文件。当完成了所有的修改后,你可以输入ALTER DATABASE OPEN命令使所有的用户都可以访问数据库。