一个单独的日志文件。在归档的时候当前日志组就不能用了,所以需要有第二个日志组来接上。这样循环,生生不息。
考虑到日志文件恢复数据库的作用,一般建议多路复用重做日志,把日志副本存放到不同的磁盘上,保证不会轻易丢失。
查看重做日志文件所在
SQL>select member from v$logfile;
1.7 其他文件
还有一些文件,蛤蟆先简单带过一下吧,后续咱们再深入之。
SPFILE,PFILE,密码文件,告警日志文件,跟踪文件,备份文件等。
SPFILE是oracle实例的初始化参数,这个文件是二进制文件无法手动编辑,我们可以通过命令从SPFILE来生成PFILE,PFILE可以支持手动编辑。下节中内存结构中的组件大小都可以在SPFILE或者PFILE中进行设定。
密码文件是授予SYSDBA或SYSOPER管理权限的数据库用户名字,和数据库安全相关,后续蛤蟆会和大伙一起捣鼓捣鼓。
告警日志文件,蛤蟆喜欢叫他alert日志。捕捉了oracle实例运行期间的主要更改和事件。包含日志切换、错误、告警和其他信息,也是数据库错问题时候,蛤蟆第一时间查看地方,大伙没事可以进去看看也。Alert日志文件路径:
$ORACLE_BASE/diag/rdbms/[SID]/trace/alert_[SID].log。
跟踪文件,Oracle各类内部结构中所包含的信息转储(dump)到跟踪文件中,以便用户能根据文件内容来解决各种故障。
备份文件,顾名思义,因为备份数据操作得到的文件。
2 内存结构
内存结构也是ORACLE数据库实例的组成部分。这个内存结构可以让用户之间共享可执行代码,可以将数据库更改写入内存区域等,让数据库性能提升好几个数量级。
我们看图4

一图胜过千言万语啊,一看就明白了数据库内存结构包括PGA和SGA,那么问题来了,具体呢?
2.1 SGA
SGA是实例中最重要的内存部件了,特别是在OLTP数据库系统中,比PGA要大很多。在数据仓库环境下,PGA可能就是更重要的ORACLE内存区域。
2.1.1 数据库缓冲区
保存从文件中读取的数据块副本,提高读取性能。
当然数据库缓冲区本身还可以细化成:可用缓冲区,脏缓冲区,钉住缓冲区。
缓冲区的主要目的是最小数据未命中率和磁盘IO操作。
可以将一个缓冲区分成多个缓冲区提供给不同的对象使用,也可以设置多个数据库块尺寸的缓存区(如4KB,8KB,16KB的)。
2.1.2 共享池
共享池是保持可执行PL/SQL代码和SQL语句,以及数据字典表的信息。其可以分为库高速缓存和字典高速缓存。
注:数据字典是ORACLE维护的一组关键表,包含了又关数据表、用户、权限等重要的元数据。
该池可以减少相同代码的编译,减少硬解析从而减少内存和CPU资源。
蛤蟆就知道了数据字典和库高速缓存的低命中率的解决方法是相同的,即增加共享池的尺寸。
2.1.3 重做日志缓冲区
我们待会回将日志写入进程,因为日志写入进程的刷新频率,该区大小不必太大,基本几M就搞定了。
为JVM何基于JAVA的应用保留。
2.1.5 大池
在使用并行查询时候才需要使用大池。此外使用RMAN和共享服务器配置也需要建议配置大池。
2.1.6 流池
实现在不同数据库之间和不同环境之间共享数据。
2.2 PGA
用户启动会话时为每个用户创建一个程序全局区。PGA保存ORACLE为用户创建的专用服务器进程的数据和控制信息。PGA是独占的不能共享,除非使用一个共享的服务器配置。
PGA可以存放用户的游标,不与其他用户共享,此外还会涉及一些排序类的内存密集型操作。
概念介绍大伙看看乐一乐好了,当前不需要太较真。
3 进程
进程是Oracle数据库实例的一部分,我们说过oracle数据库实例由内存结构和进程组成。
Oracle进程其实可以分为两种,一种是用户进程,用于连接用户和数据库;另一种是oracle进程,用于执行数据库的所有实际操作(读写数据文件,写日志等)。这里蛤蟆来聊聊最主要的几个后台进程,其他的进程咱有机会再说。
进程是什么呢?这个蛤蟆就不说了哈
咱们直接进入正题,如下进程都可以在安装ORACLE数据的系统中执行
#ps –ef | grep ora_
来查看。
3.1 数据写进程 (DBWR)
这个进程的作用是将在内存中的数据写入到磁盘中,使得对数据库的修改持久化。因为考虑到性能问题,并不是对数据库的所有修改多会直接写磁盘,而是保留在内存中,等时机成熟才进行批量刷入到磁盘中,这对性能提升还是大大的。
这个时机就是如下三种情况:
a) 数据库发布检查点
b) 内存缓冲区没有可用空间
c) 3秒
以上3点,任何一点满足即可。
考虑到有些系统每次刷入的数据量较大,ORACLE就支持多个进程一起写。通过在DB_WIRTER_PROCESSES参数在PFILE中设定,前提是系统支持异步IO,不然不如只用一个写进程。
3.2 日志写进程 (LGWR)
类似数据写进程,将重做日志在内存中的缓存写入到磁盘中。这个写特点是100%顺序写。如果日志文件不能被写入,那么数据库就会停止工作了,当然这种情况极小发生。毕竟好端端的怎么会突然不能被写入了呢。
日志写也是有时机的类似数据写进程,这进程有四个机会点了
a) 3秒
b) 缓存区到三分之一
c) 数据写进程触发(先完成日志写进程,方进行数据写进程,针对这个有个写前协议)
d) 事务提交,将提交记录写到重做日志
注意:重做日志文件可能包含提交以及未提交的事务记录。
3.3 系统监控进程 (SMON)
这是系统监控进程了,并非一直工作,周期性巡检。主要处理
a) 实例崩溃重启后,是否一致
b) 合并可用区(我们说过区是相邻的数据块嘛)
c) 清除不必要的临时段
3.4 进程监控进程 (PMON)
这个进程用于清除失败的用户进程,保证数据库释放死进程占用的资源。这个进程和SMON一样,一般是处于不活动的,但是会周期性的进行巡检,类似魔兽世界中猪头监工,不干活,周期性的走走,看看谁在偷懒,偷懒的它就动手。
如果可以蛤蟆也希望变成PMON,SMON,他们两兄弟干活真实轻松啊,一看就是领导。
3.5 检查点进程 (CKPT)
通知数据库写进程,这个还会触发日志写进程的。该进程的作用是同步缓存区高速缓存信息与数据库磁盘上的信息。
该进程具体是做了如下4个事情:
a) 日志缓冲写到日志文件
b) 检查点记录写入日志文件
c) 刷数据缓存到磁盘中
d) 更新数据文件和控制文件的头
3.6 归档进程 (ARCn)
这个进程在系统以归档方式运行时才有,负责将填满的日志文件归档。就是将联机日志文件的内容生成一个归档日志文档。如果需要,可以同时设置多个进行进行归档操作。
这个进程在切换日志的时候开始干活。
如果我们在非归档模式运行,那么压根就没有这个进程了,不过生产系统必须以归档模式运行,不然后果不堪设想,蛤蟆自己玩的系统崩溃也没事的哈哈。
其他进程在此就不?嗦了,后续自然会涉及。这篇到此结束~如果大伙感兴趣就看下回笔记。