1.oracle体系架构
实例和数据库
oracle server :database + instance
database :data file ,control file ,redolog file
instance:an instance access a database
oracle memory:sga + pga
instance::sga + backgroud process
一个instance只有一个sga,sga供所有session共享,随着instance启动而分配,instance down,sga释放
sga的基本组件
1.shared pool
共享池是对sql,pl/sql程序语法分析,编译,执行的内存区域
2.database buffer cache
用于存储从磁盘数据文件中读入的数据,为所有用户共享
服务器进程将读入的数据保存在数据缓冲区中,当后续的请求需要这些数据时可以在内存中找到,不需要从磁盘读取。
数据缓冲区中被修改的数据块(脏块)由后台进程dbwr将其写入磁盘。
3.redo log buffer
日志条目(redo entries),记录了数据库的所有修改信息(包括DML和DDL),为的是数据库修复,日志条目首先产生于日志缓冲区。
日志缓冲区较小,它是以字节为单位的,他极其重要。
show parameter log_buffer
日志缓冲区的大小是固定的,如果要调整,只能修改参数文件,然后重启数据库。不能由sga自动管理。
oracle进程:
user process
server process
background process
后台进程
smon系统监控进程
在实例崩溃后,oracle会自动恢复实例。另一个作用是释放不再使用的临时段。
pmon进程监控
1.当user process失败时,清理出现故障的进程。释放当前所有挂起的锁定。释放服务器端使用的资源。
2.监控空闲会话是否达到阈值
3.动态注册监听
dbwr数据写入进程
1.将修改后的缓冲区数据写入数据文件中。写脏快。
2.释放data buffer空间
以下情况发生时,dbwr都会写
1.ckpt发生 2.脏块太多 3.db_buffer自由空间不足 4. 3s 5.表空间read only/offline/backup
commit不能触发dbwr写
lgwr写日志条目
从redo log buffer 到 redo logfile(必须在dwnr写脏块之前写入日志)
以下情况发生时,
lgwr
都会写
1.commit 2.三分之一满 3先于dbwr写而写 4. 3s
ckpt生成检查点
通知或督促dwnr写脏块
完全检查点:保证数据一致性
增量检查点:不断更新控制文件中的检查点位置,当发生实例崩溃时。可以尽量缩短实例恢复时间。
pga
属于oracle内存结构,存放用户游标,变量,控制,数据排序,存放hash值。与sga不同,pga是独立的,非共享。
用户与服务器的连接方式
1.专用连接(dedicated)
2.共享连接(shared)
3.驻留连接池模式
实例管理及数据库的启动及关闭
instance
用于管理和访问database
instance在启动阶段读取初始化参数文件(init parameter files)
init parameter files
管理实例相关启动参数,位置$oracle_home/dbs
pfile(parameter file)静态参数文件
1.文本文件,通过编辑器修改参数
2.修改参数,下次重启实例才生效
3.pfile参数文件 可以不在database server上
init+sid.ora
spifle(system parameter file)动态参数文件
1.二进制文件,不能通过编辑器修改
2.必须在database server的指定路径下
spfile+sid.ora
静态参数和动态参数
在spfile读到内存后,有一部分参数是可以直接在内存中修改,并对当前instance立即生效,这样的参数叫动态参数。
除了动态参数都是静态参数。静态参数修改spfile文件。动态参数在instance关闭后失效,静态参数在instance下次启动后生效。
修改spfile文件的方法
alter system set 参数=值 [scope =memory|spfile|both
] --both是缺省值
alter system reset 参数 --恢复缺省值
优先spfile启动,找不到spfile用pfile启动
pfile和spfile可以相互生成
create pfile from spfile
create spfile from pfile
启动的三个阶段
nomount阶段
读取init parameter
mount阶段
读取控制文件
open阶段
加载数据文件
检查数据库的一致性(control file ,datafile,redo file的检查点是否一致,一致的话正常打开,不一致的话做media recover)
select * from v$datafile;
select * from v$datafile_header;
select * from v$instance;
实例关闭
shutdown normal
拒绝新的连接,等待当前事务和会话结束,生成检查点
shutdown transaction
拒绝新的连接,等待当前事务结束,生成检查点
shutdown immediate
拒绝新的连接,未提交的事务回滚,生成检查点
shutdown abort(startup force)
事务不回滚,不生成检查点,下次启动需要做instance recovery
口令文件
OS认证
sqlplus / as sysdba
口令文件认证 sysdba权限
sqlplus sys/bsoft as sysdba
普通用户登录
sqlplus scott/bsoft
口令密码不是以文件形式存放,由oracle保管在他的内部字典里
控制文件
1.定义数据库当前物理状态
2.维护数据的一致性
3.是一个二进制文件
4.在mount阶段被读取
5.记录rman备份的元数据
redo日志
1.记录数据库的变化(DML,DDL)
2.用于数据库的recovery
3.以组的方式管理redo file,最少两组redo,循环使用
4.和数据文件存放到不同的磁盘上,需要读写速度快的磁盘
日志切换
1.归档模式:将历史日志连续的进行保存
2.非归档:历史日志被覆盖
3.产生checkpoint,通知redo log所对应的脏块从data buffer写入到datafile 并且更新控制文件
归档日志 archivelog
归档和非归档的区别
1.归档模式下,切换日志时,备份历史日志,可以进行冷备和热备。可以实现完全恢复和不完全恢复(基于时间点)
2.归档会启用arcn后台进程,占用磁盘空间
3.非归档只能冷备,只能恢复到最后一次备份状态
管理undo
使用undo tablespace存放从datafiles读出的数据块的前镜像
供以下情况使用
1.回滚事务
2.读一致性:正在做DML操作的数据块,事务结束前,其他用户读undo里面的数据前镜像
3.实例恢复:instance recover(undo ->rollback)
4.闪回技术
检查点checkpoint
checkpoint是数据库的一个内部事件,检查点激活时会触发dbwr,将数据缓冲区中的脏数据写入到数据文件
1.保证数据库的一致性(保证内存和硬盘上的数据一致)
2.缩短实例恢复时间,实例恢复要把内存中的脏数据写入到硬盘,脏数据多的话,需要更长的恢复时间
实例恢复机制
1.重新构成内存崩溃时内存中未被保存到磁盘的已commit事务
2.回滚已被写入到数据文件的uncommit事务
2.oracle存储架构
database->tablespaces->segments->extends->blocks
表空间分类
1.permanent 永久表空间
2.undo撤销表空间
3.temporary临时表空间
创建表空间
create tablespace a datafile 'D:\a.dmp' size 10M
数据库open下不能删除的表空间
1.system 2.active undo tablespace 3.default temporary tablespace 4. default tablespace
数据库open下不能offline的表空间
1.system 2.active undo tablespace 3.default temporary tablespace
查看表空间空闲大小
select * from dba_free_space
segment段
1.表空间逻辑上对应多个段,物理上对应多个数据文件,一个段比较大时,可以跨越多个数据文件
2.创建一个表,oracle为表创建一个或多个段。在一个段中保存该表的所有表数据(表数据不能跨段)
3.段中至少有一个初始区,当区不够用时,为这个段分配新的区
一般一个单纯的表就分配一个段,但表往往没那么单纯。比如索引有索引段,分区表,每个分区有独立的段,oracle 的大对象(blob,clob)会被分出过个段
oracle11gr2新的初始化参数deferred_segment_creation(仅适用未分区的heap table),此参数设置为true后,create table后并不会马上分配segment,当第一个insert后才会分配segment
extend区
区是oracle进行存储空间分配的最小单位,是由一系列逻辑上连续的oracle数据块组成的逻辑存储结构。
block数据块
block是oracle进行存储空间IO操作的最小单位
临时表空间
用于排序,可以建立多个临时表空间.但默认的临时表空间只能有一个.默认表空间不能offline和drop.如果没有指定默认的临时表空间.
oracle会使用system作为临时表空间.,只有temp表空间,是nologing.