oracle原理Word格式文档下载.docx
《oracle原理Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《oracle原理Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
selectstatusfromv$instance;
数据库启动分为三个阶段
startupnomount;
1.nomount:
打开参数文件,此时分配内存和后台进程
STATUS
------------
STARTED
alterdatabasebackupcontrolfiletotraceas'
/tmp/ctl'
;
startupmount;
/alterdatabasemount;
2.mount:
打开控制文件
MOUNTED
startup/alterdatabaseopen;
3.open:
打开数据文件和日志文件
OPEN
关闭数据
shutdownimmediate
强制关闭数据库
shutdownabort
startupforce=shutdownabort+startup
数据库在挂载状态(nomount)
【因修改参数后数据库无法打开,可先挂载到这个状态,然后指定pfile=‘’进行开启数据库。
】
打开参数文件pfile(文本)orspfile(二进制)
$ORACLE_HOME/dbs找
先找SPFILE,发现spfile不在,然后再去找pfile
动态初始化参数文件spfile格式:
spfile+数据库实例名.ora
静态初始化参数文件pfile格式:
init+数据库实例名.ora
查看当前数据库用的是哪种模式的参数文件pfile(文本)/spfile(二进制)
showparameterspfile;
NAMETYPEVALUE
-----------------------------------------------------------------------------
spfilestring/u01/app/oracle/product/11.2.0
/db_1/dbs/spfileorcl.ora
创建pfile
createpfilefromspfile;
创建spfile
createspfilefrompfile;
Filecreated.
createpfile='
路径/文件名'
fromspfile;
startuppfile='
spfile在此目录
[oracle@caizhibin~]$cd$ORACLE_HOME/dbs
生成的pfile也在$ORACLE_HOME/dbs
-rw-r--r--1oracleoinstall807May1409:
48initorcl.ora
启动数据库时查找参数文件顺序
spfileSID.ora->
spfile.ora->
initsid.ora
指定pfile来启动数据库
startuppfile='
/u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora'
spfile情况下:
修改参数文件里的参数有两种模式spfile|memory|both
altersystemsetundo_retention=1000scope=memory;
1.生产环境和测试环境都用spfile,除非自己想看文本的参数
2.修改的模式有三种spfile|memory|both,pfile默认是memory,spfile默认是both,both=spfile+memory
.
3.memory是立即生效的,不会写进物理的参数文件里面。
1.利用spfile创建pfile
2.用pfile启动数据库
3.修改undo_retention=1000
4.用spfile启动数据库
5.修改undo_retention=1000,再创建pfile,然后catpfile文件里的undo_retention是否等于1000
告警日志
/u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
SGA:
比较重要的事sharedpool,databuffercache,logbuffer
脏缓存:
databuffer和数据文件不一致,只有DML才会产生脏缓存。
自由缓存:
databuffer和数据文件一致。
LRU算法:
插入一个新块时,判断冷段最后一个块
1.如果判断是不经常使用的块,则踢掉,然后把新块加入到冷段最前头。
2.如果端盘是经常使用的块,则放在热段最前头。
logbuffer:
1.作用防止断电,导致的数据丢失。
logbuffer写进日志文件是顺序写。
10g:
开启ASMM
设置sga大小
自动管理SGA:
databuffercache,sharedpool,largepool.
logbuffer需要手动管理
设置PGA大小(9i开始自动管理)
11g:
showparameterpga
pga_aggregate_targetbiginteger0
showparametersga
sga_targetbiginteger0
showparametermemory
memory_targetbiginteger1472M
setlin200
colCOMPONENTfora40
1*SELECTcomponent,current_size/1024/1024,min_size,max_sizeFROMv$memory_dynamic_components
/
COMPONENTCURRENT_SIZE/1024/1024MIN_SIZEMAX_SIZE
----------------------------------------------------------------------------------
sharedpool240234881024251658240
largepool161677721616777216
javapool161677721616777216
streamspool000
SGATarget880922746880922746880
DEFAULTbuffercache592620756992637534208
KEEPbuffercache000
RECYCLEbuffercache000
DEFAULT2Kbuffercache000
DEFAULT4Kbuffercache000
DEFAULT8Kbuffercache000
DEFAULT16Kbuffercache000
DEFAULT32Kbuffercache000
SharedIOPool000
PGATarget592620756992620756992
ASMBufferCache000
16rowsselected.
查询表时,数据库后台将请求放入内存中进行HASH运算,HASH将表按表的对象号+数据文件号+数据块号进行运算,然后将计算出来的结果和HASH表的桶数相除取余。
HASHtable的大小=BUCKET桶*8字节,HASHtable是由BUCKET组成。
一个块占8KB,数据库最小操作IO单位是8KB,无论数据是多小,都是操作8KB。
每个BUCKET桶是由一个或多个BH【bufferheader】组成,每个BH由buffer块组成,每个buffer块是8kb。
也存在0个BH的BUCKET。
每个bufferheader指向一个BUCKET桶,bufferheader包含
计算例子400MB的高速缓存区buffercache,400*1024换成KB÷
8=51200个块,而桶的数量最少是块的2倍。
一个桶可能占多个块,也有可能是分不到1个块。
当用户执行发起请求时,语句的运行是在数据库高速缓冲区中运行,运行机制是首先数据库进行会先在数据库高速缓存区查询结果,如果没有就在数据文件中查询,在数据文件查找后就加载到数据库高速缓存区,在用户没有执行commit时,执行语句前,数据库会生成一条redo记录,并将执行语句放入到重做日志缓冲区,当数据累计到1MB,或3秒【举例】,redo记录达重做日志缓冲区1/3,或commit,会将redo记录写入日志文件。
当服务器宕机,数据库会将日志文件拿出执行语句,放入到重做日志缓冲区重新执行,然后数据库会自动commit。
redo记录在日志文件中按时间写。
大致流程:
1、事务开始;
2、在buffercache中找到需要的数据块,如果没有找到,则从数据文件中载入buffercache中;
3、事务修改buffercache的数据块,该数据被标识为“脏数据”,并被写入logbuffer中;
4、事务提交,LGWR进程将logbuffer中的“脏数据”写入redologfile中;
5、当发生checkpoint,CKPT进程更新所有数据文件的文件头中的信息,DBWn进程则负责将BufferCache中的脏数据写入到数据文件中。
附:
checkpoint由ckpt进程触发oracle进行checkpoint动作,将databuffer中的脏块(已经写在redo里记录但是没有写到datafile里的)的内容写入到datafile里并释放站用的空间,由dbw后台进程完成,并修改controlfile和datafile的scn.
一般手工执行(altersystemcheckpoint)是由于要删除某个日志但是该日志里还有没有同步到datafile里的内容,就需要手工checkpoint来同步数据,然后就可以droplogfileg