Oracle服务器由Oracle实例与Oracle数据库组成Oracle实例(instance),通过ORACLE_SID来引导(Oracle标识)单实例情况下:Oracle数据库名与Oracle实例名相同且具
Oracle 服务器由Oracle实例与Oracle数据库组成
Oracle实例(instance),通过ORACLE_SID来引导(Oracle标识)
单实例情况下:Oracle数据库名与Oracle实例名相同且具有唯一性
举例:
三国中,关羽使用青龙偃月刀,吕布使用方天画戟,这就是唯一性身份标识(连游戏里都有攻击力加成甚至其他特殊效果,别不承认,哈哈),那么青龙偃月刀和方天画戟分别是两个独立的库,美国空间,他们的ORACLE_SID就分别是关羽和吕布。
另一种情况下,关羽与吕布的坐骑都是赤兔马(貂蝉不算哈,额,貂蝉,有木有),此时赤兔做为唯一库名,但是同时被关羽和吕布两个SID实例调用,因此赤兔马属于RAC(实时应用集群,具有LB+HA双层功效)
单实例情况下,instance(sid)名与数据库是一致的(查询出的库名与表名默认都是大写形式,这是正常的)
RAC集群的第一个节点
RAC集群的第二个节点(可以明显看到,虽然实例名不同,但是库名是一样的,因此,RAC是一个多实例单库的集群数据库模式)
Oracle数据库结构包括内存结构、进程结构、存储结构
Oracle实例等于SGA + 后台进程
Oracle内存结构
上面的图就说明了Oracle的内存结构,其中最重要的两个区域就是SGA与PGA
系统全局区(SGA):由所有服务器进程和后台进程共享
程序全局区(PGA):专用于每一个服务器进程或后台进程。每一个进程使用一个PGA
SGA 是包含实例的数据和控制信息的内存区。
SGA 包含以下数据结构:
数据库缓冲区高速缓存:缓存从数据库检索的数据块
重做日志缓冲区:高速缓存重做信息(用于实例恢复),直到可以将其写入磁盘中存储的物理重做日志文件
共享池:缓存可在用户间共享的各个结构
大型池:是一个可选区域,可为某些大型进程(如Oracle 备份和恢复操作、I/O 服务器进程)提供大量内存分配
Java 池:用于Java 虚拟机(JVM) 中特定会话的所有Java 代码和数据
Streams 池:由Oracle Streams 使用
通过使用Enterprise Manager 或SQL*Plus 启动实例,可以显示为SGA 分配的内存量。
下面具体说一下SGA里的几个重要的池
共享池(Shared_Pool):Oracle会将用户提交来的SQL语句都缓存在内存中。每次处理新的一条SQL语句时,都会先在内存中查看是否有相同的SQL语句。如果相同则可以减少最重要的解析工作(也就是生成执行计划),从而节省了大量的资源;反之,如果没有找到相同的SQL语句,则必须重新从头到尾进行完整的解析过程。这部分存放SQL语句的内存就叫做共享池(Shared Pool)。当然,Shared Pool里不仅仅是SQL语句,还包括管理Shared Pool的内存结构以及执行计划、控制信息等等内存结构。
数据库缓冲区高速缓存(Buffer_Cache):Buffer Cache所能提供的功能主要包括(一些频繁查询的热表可以考虑放在这个区域,这就像现在最火的固态硬盘一个道理,但是频繁DML操作的表不建议放入此处)
通过缓存数据块,从而减少I/O;
通过构造CR块,从而提供读一致性功能;
通过提供各种Lock、Latch机制,从而提供多个进程并发访问同一个数据块的功能。
重做日志缓冲区(Log_Buffer):Oracle这种数据库最好的一个运作机制在于先写日志后操作,这样能够有效的确定你运行到了哪一步,方便故障排查与恢复。
为了临时存放所产生的日志信息,Oracle在SGA中开辟了一块内存区域。这块区域就叫做日志缓冲区(Log Buffer),当满足一定条件以后,Oracle会使用名为LGWR的后台进程将Log Buffer中的日志信息写入联机日志文件里。
在10g以后的Oracle版本中,有两个参数可以动态的调整SGA的大小,否则就需要自行设置每个池子的大小(当然,Oracle官方有一套科学的算法)
10g数据库有如下两个参数(在初始化参数文件中设置)
SGA_MAX_SIZE(允许的最大的SGA大小)
SGA_TARGET(SGA分配大小)
到了11g以后不仅可以自动配置SGA,也同时可以分配所有内存了,有如下两个参数(在初始化参数文件中设置)
MEMORY_MAX_TARGET(允许的最大的内存大小)
MEMORY_TARGET(内存分配大小)
进程结构
Oracle的进程包括了上图所述几个主要种类的进程,这里主要说一下后台进程
系统监视器(SMON):出现故障后,在启动实例时执行崩溃恢复任务
进程监视器(PMON):用户进程失败时执行进程清理任务
数据库写进程(DBWn):将修改后的块从数据库缓冲区高速缓存写入磁盘中的数据文件
检查点(CKPT):通过更新数据库的所有数据文件和控制文件指出最新的检查点
日志写进程(LGWR):将重做日志条目写入磁盘
归档进程(ARCn):发生日志切换时将重做日志文件复制到归档存储器
上图包括了所有的后台进程(MMON和MMNL是AWR报告的支持进程),其他一些进程不做详细解释
Oracle存储结构
上图是一个Oracle的物理存储结构
构成Oracle 数据库的文件可分为以下几类:
控制文件:包含有关数据库本身的数据(即物理数据库的结构信息)。这些文件对数据库而言至关重要。没有这些文件,就无法打开用于访问数据库数据的数据文件。
数据文件:包含数据库中的用户数据或应用程序数据。
联机重做日志文件:可用来实现数据库实例恢复。如果数据库已崩溃但未丢失任何数据文件,那么使用这些文件中的信息可以通过实例恢复数据库。
要成功运行数据库,以下附加文件非常重要:
参数文件:用于定义启动实例时如何配置实例。
口令文件:允许用户远程连接到数据库并执行管理任务。
备份文件:用于恢复数据库。当因介质故障或用户错误而损坏或删除了原始文件时,通常需要还原备份文件。
归档日志文件:包含实例生成的数据更改(重做)的实时历史记录。
使用这些文件和数据库备份可以恢复丢失的数据文件。也就是说,使用归档日志可以恢复还原的数据文件。