Oracle被设计成为可移植性很好的数据库软件,不管在Linux,Unix还是Windows下载都可以比较稳定的运行,在大型机上也是支持的。
本篇博客仅仅用于记录本人初次学习Oracle时对Oracle体系结构的初步认识,如有不足希望大家给予指正。
数据库与实例
数据库(database):物理操作系统文件或者磁盘的集合。使用Oracle的ASM(自动存储管理)时,或者在使用RAW分区时,数据库可能不作为文件系统中单独的文件,但是定义仍然不变。
注:ASM在我第一次接触的时候,暂时被解释为和LVM具有相似功能的管理机制。
实例(instance):一组Oracle后台进程(Linux与Unix下)以及一个共享内存区(内存结构),就算没有磁盘存储,实例也可以存在。
注:数据库可以由多个实例装载和打开,而实例可以在任何时间点转载和打开仅仅一个数据库。也就是说,在同一个时间,通过当前实例仅仅可以访问一个数据库并进行交互。
当我们执行一个仅软件安装的数据库的操作,并不包括“启动”数据库的行为的时候,除软件之外什么都没有。
此时$ORACLE_HOME/dbs目录(oracle的工作目录)下没有任何文件,我们使用ls -l查看会发现一下信息:
Total 0
其中不存在init.ora文件(parameter file 参数文件),此时通过ps命令也不会发现任何关于oracle的进程(除了grep oracle操作出现的oracle关键字之外),如果建库执行dbca创建数据库后,执行sqlplus / as sysdba,作为sysdba不使用用户密码认证访问$ORACLE_SID所指定的实例名后,会生成init.ora的参数文件。
在访问数据库后,系统上执行ps aux就会发现许多进程,他们是以ora_开头的,包括smon(系统监控),ckpt(检查点),pmon(进程监控)等进程。
注:一个实例在其生存期中最多只能装载和打开一个实例,如果关闭数据库(alter close database;),那么则生存周期完毕(回收内存空间,结束相关进程),如果再想打开一个数据库,那么需要丢弃该实例,创建一个新的实例(尝试shutdown关闭实例后再startup再开启相当于重新建立实例,可以打开数据库)。
这里就是Oracle的instance与database概念的划分。