oracle database vs. oracle instance
前者存在于硬盘,硬件级别,是数据的物理存储
后者存在于内存,是软件,是逻辑的
用户不直接访问database而是和instance进行交互
1个db对应多个instance 属于一对多关系 一个instance只能属于一个db
用户----instance---database
oracle database structure
表空间(tablespace):逻辑的,由datafile组成
控制文件(control file):物理的,识别datafile和redo log
redo日志:物理的,用于recovery,记录对于datafile的“修改”
归档日志(archived log):
block change tracking file
flashback log
recovery backup file
control file:
必须multiplexing以防当之有一个时,丢失导致的巨大风险
在这里,RAID is not enough:1、当冗余的disk也丢失时2、人为错误
datafile:
由oracle blocks组成,oracle block由operating system block组成
有一个datafile header 其中最重要的是一个checkpoint,在recovery的时候很重要
redo log:
记录对datafile的修改,这些修改可能是在cache中做的,当系统崩溃时,redo log可以重现那些修改
与rollback不同,当rollback之后,undo的方式就是redo log了
redo log也需要multiplexing,oracle使用一个thread来进行redo log的编写
一个thread有多个group(逻辑上对应一个redo log file) 一个group对应多个member
member上的内容是同步修改的(为了冗余),group之间是线性的
当一个group被写完后 需要立即进行archive
an instance = a shared memory(SGA) + background processes(下图除了SGA都是process)
oracle instance:
shared pool:缓存,存放sql queries,query fragment,results
SMON:system monitor
PMON:process monitor
CKPT:checkpoint
RECO:recover