内存结构加上后台进程构成,是访问数据库的一种途径
作数据恢复时,利用第三方工具,不须要访问实例,其他都要访问实例
使用ode,模拟SID直接访问咱们的磁盘 ,通常用做数据恢复,称为灾难恢复
java
用户经常使用的链接数据库的工具:
sqlplus
plsqldeveloper
sqldeveloper
toad
spoolit
oracle工做站
应用程序
用户进程经过两种链接途径去访问咱们的数据库
本地链接: IPC表示进程间的通讯
网络链接 :TCP/IP协议 须要配置监听即listener,没有listener用户没法访问
算法
用户链接后,须要咱们的服务器进程去响应
专有链接:用户进程和服务器进程的关系是一对一的关系
共享链接 :一个用户链接进来,哪个服务器进程空闲就去接待用户,是一对多的关系
最多只能分配1023个进程
sql
program global area----程序全局区域
private golbal area ---- 私有全局区域
主要用来存放用户进程信息/服务进程信息
当用户进程和服务器进程信息链接后,自动分配一个PGA区域用来存放用户进程信息和服务器进程信息,其余用户经过工具连建后,又给他分配另一个PGA区域。--------------进程之间的PGA是隔离开的
PGA--存放的信息
会话信息:用户的会话信息
操做信息: 用户执行的操做 包括SQL/PLSQL
链接工具:用户在链接的时候,使用的是什么工具链接,主机名
PGA的层次:
stack space -----堆栈空间:用户声明的变量,常量,数据类型,游标
session information------经过两个视图能够查看v$session , v$process
用户名,链接工具,主机名,ip地址,操做,用户进程号
sort area ------排序区域:用户使用了sql/plsql 中的order by /union 等排序操做时,都在这个区域排,占用了 PGA70%的空间,一旦空间不够,就会到名词表空间(磁盘)里面排,会大大下降数据库的性能,通常的优化都是优化这里。
hash area-------分区表中使用的hash算法,都在这个区域完成
UGA ---(session information+sort area+hash area)---用户全局区域,存放用户的信息。里面存放的是专有链接的用户,若是用户使用的是共享链接,则用户信息(session information+sort area+hash area)存放到SGA即用户的中
pga_aggregate_terget 设置PGA 的大小
数据库
system global area:系统全局区域
shared global area:共享全局区域
sga_target ---设置SGA 的大小,受限与max_sga_size
SGA层次:
1.shared pool---共享池:共享用户的信息,用户共享的会话信息,用户共享的sql/plsql信息,共享数据字典的信息 ,权限,对象,数据文件,块信息。 ---最近常常使用的信息才会共享到shared pool中
1.1 libary cache----库高速缓冲区:用户常常使用的sql,plsql的执行计划
1.1.1 sql共享区:最近常常使用的sql执行计划
1.1.2 plsql共享区 :最近常常使用的plsql执行计划
#软分析:语句在执行过程当中在libary cache 中能找到相同的执行计划,这是语句执行走软分析
#硬分析:语句在执行过程当中在libary cache 中能找不到相同的执行计划,这是语句执行走硬分析(硬分析过程a、验证语句的语法是否正确 ;b、验证语句的语义是否正确(验证用户是否有权限,是否有该对象,数据类型是否正确);c、经过oracle优化器获得最优的执行计划(rbo/cbo 优化器);d、再根据执行计划执行语句;e、将结果返回给用户进程;)
dbms_shared_pool.keep //若是执行计划比较大并且会常常使用,可以使执行计划驻留
1.2data dict cache--- 字典缓冲区:常常要使用的数据字典信息(all_,user_,dba_.v$)
存放 对象名,对象列名,列数据类型,数据文件的编号,数据块编号,用户的权限信息....
通常命中 率在 90%,严格要求的命中率在95%,若是没有找到,则把字典信息从磁盘取到内存中
1.3 control structuer---控制结构 :控制shared pool中的争用
内存锁 (lanch)
# shared pool size ---11g之前须要设置共享池的大小
2.database buffer cache ---数据高速缓冲区:最近常常使用的数据块 (遵循lru的算法,即最近常常使用)
2.1按照驻留时间的不一样分配的
2.1.1 keep:永远放到内存中,除非手动刷新内存,或者内存被释放(数据库重启,停机)
db_keep_cache_size 设置后,才会使用该区域 默认放到db_cache_size
2.1.2 default: lru 最近常常使用
2.1.3 recycle:用户操做执行完后,很快被移出内存
db_recycle_cache_size
3.redo log buffer ----日志缓冲区: 记录data buffer cache中数据块的更改信息
记录的DML,部分的DDL 操做
loging 强制日志记录,加上这个参数才会记录
nologin 不进行日志记录 ,默认不记录
由show parameter log_buffer 决定日志大小,不能设置太大,由于太大在项目中还将来得及写入到日志文件中时,日志缓冲区中的内容丢失会致使咱们丢数据。项目中日志缓冲区不要超过100M
4.large pool ---大池:
rman 备份信息
uga 共享链接用户的session information+sort area+hash area信息
large_pool_size 设置大小
5. java pool-----java 池:
java 相关的应用程序和链接信息
java_pool_size 设置大小
6.stream pool:流池
流复制 有丢数据的可能,只能在oracle数据库中同步,不一样城市间的同步会有延时
steam pool已被替代 goldengate:ogg 将多个数据库实现时时同步
7.other pool --其余池
没有地方放了,就放other pool服务器