mtbf:mean-time-between-failures两次故障之间的平均无故障时间
mttr:mean-time-to-recover故障恢复平均时间
故障分类:
1.sql表达式引起的故障
bug,非法数据,超过权限,配额限制
2.用户进程故障
断开连接,会话注销,用户进程bug,pmon自动处理此故障
3.用户故障
人为清空、删除表
4.网络故障
断网
5.实例故障
断电,smon进程处理此故障
6.介质故障
磁盘损坏,rman热备和dataguard容灾
内存结构
database buffer cache:存储从datafile中读取的blocks。数据由server process从数据文件读入database buffer cache,数据由dbwn进程从database buffer cache写入datafile;
redo log buffer:存储对数据库的任何改变,由lgwr写到redo logs
large pool:可选组件,备份等需要使用的大内存
shared pool:存储已经解析的sql表达式和pl/sql过程,数据字典信息
java pool:存储java code和jvm
后台进程
dbwn(database writer):把database buffer cache的脏数据(即已修改的数据)写到datafile。
lgwr(log writer):把redo log buffer数据写到redo log files
smon(system monitor):自动实例恢复,恢复临时段的空间当不再使用时,合并零散空间。
pmon(process monitor):清理连接进程;回滚进程操作和资源。
ckpt(checkpoint) :把当前redo log信息同步到datafile和control files的头上。
arcn(archiver):可选,把redo logs自动复制到其他地方。
用户进程
连接数据库的程序进程,如:sqlplus
服务进程
接收用户进程请求,处理请求。专有服务进程和共享服务进程
数据库文件
datafile:数据的物理存储,至少一个。
redo logs:存储数据改变,至少2组。
control files:记录了数据库的状态,物理结构,rman预处理数据
archive logs :联机重做日志文件的物理备份。
initialization parameter file:pfile文件,存储实例启动所需参数
server initialization parameter file:spfile文件,存储实例启动所需持久的参数,二进制文件。
password file:存储能启动、停止和恢复数据库的特权用户的信息;二进制文件。可使用工具orapwd.exe手工创建密码文件
动态视图
v$sga
v$sgastat
v$instance
v$process
v$bgprocess
v$database
v$datafile
large pool:用于oracle备份和还原操作,i/o server processes,共享服务者(shared server)进程的会话内存。
配置large pool可以阻止rman在其它部件分配内存,rman用large pool进行备份和还原当你设置dbwr_io_slaves或者backup_tape_io_slaves参数去模拟异步i/o时。如果2个参数都没设置,oracle会从local process memory分配备份缓冲区,而不是从shared pool。
如果large_pool_size参数被设置了,oracle会尝试去large pool获取内存。如果这个值不够大,oracle也不会尝试去shared pool获取缓冲区。如果没配置,oracle会分配共享内存缓冲区从shared pool。
如果orcle不能得到充足的内存,它就会从local process memory得到i/o缓冲区。而且会写信息到alert.log中,指出同步i/o被用于备份。
database buffer cache:用于存储大多数最近使用的数据块的区域,使用最近最少使用算法(lru)去决定覆盖某些以用来容纳新的block。
dbwn:写修改过的数据到数据文件,以确保可以从datafile读取新的block到database buffer cache。周期性的同步database buffer cache和datafile(即把database buffer cache写回到datafile)。繁重的工作可配置20个dwbn进程,dbw0-dbw9,dbwa-dbwj。
redo log buffer:是一个有对数据库改变信息的环形缓冲区,这些信息存储在redo entries。
redo entries包含需要重建或重做的信息,如insert、update、delete、create、alter、drop操作。redo entries用于数据库恢复,如果需要的话。redo entries被server process从用户内存空间复制到redo log buffer。
lgwr:当redo log buffer三分之一满,当每3秒,当有1mb的redo信息,当在dbwn写修改过的数据到数据文件之前,当commit时,写redo log file。
checkpoint position:恢复开始的地方,联机重做日志文件里的一个点。
它是checkpoint queue的第一个entry的开始标志。
例如:checkpoint这一点之前的redo log数据已被写到数据文件里。
checkpoint queue:内存中的队列链表。
checkpoint queue里的每个entry包含数据块的标识和与之相关的redo entry的信息。这样的一个entry被称为rba(redo byte address)。dbwn读取checkpoint queue的一个entry写入数据文件后删除这个entry。
checkpoint的类型
full checkpoint:全checkpoint,把所有的buffer都写入数据文件。当shutdown normal,immediate,transactional和alter system checkpoint时发生。
incremental checkpoint:增量checkpoint,周期性写,闲置时写。
partial checkpoint:部分checkpoint,,写表空间的脏数据。当alter tablespace begin backup和alter tablespace xxx offline normal。
ckpt:在检查点发生时通知dbwn进程去写datafile后,更新datafiles和control files的头去指出最近的checkpoint。每隔3秒,ckpt记录检查点队列里面的第一个entry的rba信息到控制文件中。只有在日志切换的时候,ckpt才会更新数据文件的头,为了提高性能不会马上更新所有的头,而是“懒写”。日志切换时不会把所有的脏数据写到磁盘。
control file:二进制文件,它描述了数据库的结构,当数据库处于mount或open状态的时候它必须能被数据库服务器来写。它的名字取决于操作系统。没有这个文件数据库不能被mount。推荐配置最少2个控制文件放在不同的磁盘以减少控制文件丢失带来的影响。控制文件损坏一个数据库就不能工作。控制文件包含数据库名字、数据库创建的时间戳,恢复所需的同步信息、数据文件和联机重做日志文件的名字和位置、数据库的归档模式、当前log sequence number、rman的备份元信息。
archived log file:用作media recovery。当被设置为归档模式时,lgwr进程会等联机重做日志文件被归档后才继续工作。
arcn:可选进程。当被启动时,它会把redo log files拷贝到指定的存储区域。这个进程对7*24数据库的备份恢复有很大的意见。当日志切换时,arcn进程被触发,把最近没归档的redo log组的一个成员拷贝到指定位置。
数据库同步:
1.所有数据文件(除了离线与只读的)必须被同步后数据库才能被open。
2.同步是基于当前checkpoint number。
3.发现不同步,数据库使用redo log files改变的记录同步数据文件
4.redo log files自动被数据库服务器请求。
实例恢复:
1.判断数据文件是否同步;
2.利用redo log前滚:写redo log files最近一个checkpoint之后的数据(包括undo数据)到数据文件;
3.数据文件现在包含提交的和未提交的改变,数据库可以被open;
4.利用undo log回滚未提交的改变:删除datafile中未提交的数据;
5.至此所有数据都提交。
不像media recovery,crash recovery和instance recovery是自动的。crash recovery是所有实例都恢复,instance recovery是单实例恢复。
调整实例恢复的持续时间:
1.设置一些初始化参数影响恢复需要的refo log记录和数据块的数量;
(新参数)
fast_start_mttr_target:指定恢复时间最大值,单位为秒。
(2个老参数)
log_checkpoint_timeout:2次检查点发生间隔的时间。
log_checkpoint_interval:增量检查点与最近写到redo log的块之间的redo log file块的数目。
2.控制redo log file的大小和refo log块的大小来影响checkpoint发生的频率;
3.用sql表达式手动强制检查点发生
4.并行恢复
实例恢复视图v$instance_recovery;
实例恢复优化
1.前滚:采用并行块恢复策略,recovery_parallelism可以设置并行进程数。
2.回滚:采用急需和并发2种恢复策略,fast_start_parallel_rollback可以设置并行程度,false为不使用并行,low:回滚进程数为cpu数的2倍,high:回滚进程数为cpu数的4倍。
回滚对应的2个视图:v$fast_start_servers:并发进程的信息;v$fast_start_transactions:需要回滚的transaction信息。