在单实例环境中,一个实例打开一个数据库,而在分布式环境中,有多重组合实例与数据库的方式。
1、实时应用集群(Real Application Clusters,RAC),多个实例打开一个数据库;
2、流,多个Oracle服务器相互之间船舶事务;
3、数据保护,主数据库跟新备用数据库;
ORACEL Service本身的数据存储在一组特殊的叫做数据字典的表中;
SELECT * from DICTIONARY WHERE TABLE_NAME like 'V
S
Y
S
1
、
做
为
S
Y
S
T
E
M
连
接
到
数
据
库
;
2
、
确
定
实
例
是
否
是
单
实
例
数
据
库
,
如
果
是
但
是
离
数
据
库
,
那
么
返
回
N
O
;
s
e
l
e
c
t
p
a
r
a
l
l
e
l
f
r
o
m
v
SYS%'; 1、 做为SYSTEM连接到数据库; 2、 确定实例是否是单实例数据库,如果是但是离数据库,那么返回NO; select parallel from v
SYS1、做为SYSTEM连接到数据库;2、确定实例是否是单实例数据库,如果是但是离数据库,那么返回NO;selectparallelfromvinstance;
3、 确认数据库是否通过备用数据库的报来防止数据丢失;
SELECT protection_level from V$database;
如果数据库的确未受保护,那么将返回UNPROTECTED;
4、 确定是否数据库中配置了流;
SELECT * from dba_streams_administrator;
如果尚未配置流,那么将不返回任何行;
5、
对缓冲池的理解:
数据库缓冲区是数据库用来执行SQL的区域。数据库在创建之后,数据文件是存储在磁盘(硬盘)上的,当第一次对指定的数据表操作时,会话将包含关键数据的数据块首先赋值到数据缓冲区缓冲起来,第一次加载的时候,缓冲区中的是“干净缓冲区”,此时,用户会话的所有的增删查改优先操作缓冲区的数据中的数据,此时缓冲区的数据会变得与磁盘中的数据文件有区别,此时被叫做“脏缓冲区”。
缓冲区 的更新频率(或者COMMIT的数量)与核实写回数据文件没有任何关系,对数据文件执行写操作由数据库写入器哦后台进程完成。
数据库缓冲区缓存在实例启动的时候分配。
日志缓冲区:
日志缓冲区是小型的、用于短期存储将写入到磁盘上的重做日志的变更向量写入到磁盘的重做日志的的变跟向量的临时区域;
重做日志可以确保数据永不丢失:每单数据块发生变更时,都会将应用于块的变更向量写到重做日志,如果需要还原数据文件,则通过重日志,可以将变更向量提取并应用于数据文件备份。
会话会将重做记录写入内存中的日志缓冲区中,当会话发起COMMIT,会实时执行日志缓冲区写操作。
日志缓冲区比较小,因为他是一个非常短暂的存储区域,将变更向量插入其中,并几乎实时的使其流向磁盘。
日志缓冲区在实例启动的时候分配。(所以修改大小之后需要重启实例,一般使用默认大小)
共享池
共享池是最负责的PGA,他由许多字构成;共享池的所有结构是自动管理的,在共享池的总体大小范围各个模块的大小动态调配,整个共享池的大小动态可调,可以自动管理,也可以通过DBA的指令调配大小;
1、库缓存:
是一个内存区域,按其已分析的格式存储最近执行的代码(分析:编程人员编写的代码转换成的可执行的代码)因为分析语句的时间可能会比执行他的时间要长
第一次打出语句时,必须在执行前进行分析,第二次发出语句时,即可立即执行。通过代码缓存在共享池,可以在不重新分析的情况下重用。比如说我第一次执行了SELECT * FROM TableA;数据库会将这几代码装换成机器可执行的字节码,如果我之后多次需要执行这个SELECT * FROM TableA,程序就会优先去库缓存中找,就会减少编译的时间;
2.数据字典缓存
也称“行缓存”,他存储最近使用的对象定义:表、索引、用户和其他元数据定义的描述。存放在SAG的内存中,而不是被迫从磁盘的数据字典中重复读取它们,从而提高分析性能。
3.PL/SQL区
存储的PL/SQL对象是过程、函数、打包的过程、打包的函数、对象类型定义和触发器。它们全部像源代码那样存储在数据字典中,也是用已编译的格式,但会话调用存储的PL/SQL对象时,它必须从数据字典读取,为了避免重复读取,就将PL/SQL对象存储在共享池的PL/SQL区。
PL/SQL可以从用户进程发出,而不存在用户字典中,这一部分称之为匿名PL/SQL,该种类型的PL/SQL不能被缓存和重用,但必须实时编译。
4、SQL查询和PL/SQL函数结果缓存
通过创建结果缓存,Oracle服务器可以见相同类型的查询结果存储在内存中,在下次发生的时候调用执行结果而不知运行该查询。
结果缓存机制具有足够的智能,跟踪每一次查询的结果是否发生过改变,没变就直接返回缓存中的结果,变了就返回最新的内容;
(默认模式下,将禁用SQL查询和PL/SQL函数结果缓存,但以编程的方式启用,是个好东西)
这个缓存DBA可以指定其最大容量,该缓存位于共享池中;
5.设置共享池大小
共享池的内存的大小按照最近最少使用算法来分配。如果Oracle服务器需要共享池中的空间,它将重写限置时间最长的对象。共享池在实例启动时分配。9i之前无法在不重启实例的情况下设置共享池大小,9i开始可以随时调整。共享池的大小是动态的,可以对其进行自动管理。
了解实例的内存结构:
查看可以动态重置大小的 额SGA组件的当前、最大和最小的容量:
select * FROM V$sga_dynamic_components;
--select COMPONENT,CURRENT_SIZE,MIN_SIZE,MAX_SIZE FROM V$sga_dynamic_components;
查询到的结果如下图:
此处显示的实例不包含流,我们可看到流池的大小为0。
查看程序为全局区分配了多少内存
--SELECT * FROM V$PGASTAT;
select * from v$pgastat where name in ('maximum PGA allocated','total PGA allocated');
实例进程结构
SMON:System Monitor通过查找和验证数据库文件来安装数据库;
PMON:Process Monitor,用户会话是连接到服务进程的用户进程,服务器进程在用户常见连接时启动,在会话结束时注销。
实例后台进程在启动实例时启动,在终止实例时终止运行。
系统监视器(System Monitor,SMON)、进程监视器(Process Monitor,PMON)、数据库写入器(Database Writer,DBWn)、日志写入器(Log Writer,LGWR)和检查点进程(Checkpoint Process,CKPT)。在更新的产品版本中,引入了其他多个进程,可管理性监视器(Manageability Monitor,MMON)和内存管理器(Memory Manager,MMAN)是其中两个重要的进程。
数据库的存储结构:
数据库必须包含三类文件:控制文件、联机重做日志文件以及任意数量的数据文件;
------未完,有时间就更新,接着整理。