oracle体系结构 oracle结构 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我这有个课件写得不错,分享到云盘上了,自己看下吧http://yunpan.cn/Q75pQ8w4gVjf4 访问密码 468a oracle由实例和数据库组成,实例由sga(system global area)和一系列后台进程构成。对于sga主要有共享池(shared pool)、数据缓冲区(db cache)和日志缓冲区,后台进程有pmon等。 数据库有数据文件、参数文件、日志、控制等文件构成。一个数据库可以有多个实例组成,实例下面有用户、表空间等。 sga就是system global area,主要包括共享池、数据缓冲区、日志缓冲区三类。pga(program global area)和sga一样,也是开辟出来的内存区。两者的区别就是pga私有,而sga共享。pga在用户登录时候直接绑定各类会话、权限等信息,而且当排序时候也是在这个区域中进行的,但是当排序尺寸超出pga区域范围,就会占用临时表空间的大小。 sga保留了许多缓存信息,可以打打提高sql语句的运行速度,每一次sql语句执行都会在sga的share pool里面生成一条记录,当下一次执行同一条语句时候直接从share pool里面调用执行计划等,而且当查询结果在sga的数据缓冲区内的时候,可以直接避免磁盘读取(physical reads),大大提高效率。 通过常规show parameter sga、show parameter pga命令可以分别查看sga和pga分配的大小。当然我们也可以通过show parameter shared_pool_size和show parameter db_cache_size来分别查看共享池和缓冲池分配大小。调整sga值大小,可以通过alter system set sga_target=1000m scope=spfile,这时候scope后面的参数也是有讲究的,当以pfile启动时候,修改sga_target只能用memory,而修改sga_max_size时候只能用spfile,这时候就必须用spfile启动了。 而sga、pga具体大小设置,一般oltp应用为内存*0.8*0.8(sga)、内存*0.8*0.2(pga);olap应用为内存*0.8*0.5(sga)、内存*0.8*0.5(pga);或者oltp sga=系统内存*70%*80% pga=sga*(10%-20%),olap sga=系统内存*80%*60%,pga=sga*(45%-65%)。附:scope=memory代之只更改当前,重启失效 scope=spfile代之只更改以后,当前无效 scope=both更改当前和以后 缺省值:当以spfile启动时候为both,以pfile启动时候为memory 修改log_buffer和sga_max_size时只能scope=spfile 后台进程:pmon即processes monitor,进程监视器,自动进行简单的故障回滚等操作。 smon即system monitor,系统监视器,她关注的是系统级的操作而非单个进程,她的主要任务就是实例恢复,同时 肩负清理临时表空间、回滚段表空间、合并空闲空间等。 lckn这个进程是在集群上面使用,最多可以有10个进程,主要用于实例间的封锁。 reco主要用于distributed database recovery,即分布式数据库的恢复。 ckpt用于触发从数据缓冲区中写数据到磁盘(即dbwr)。 dbwr进程负责把数据缓冲区写到磁盘里。 lgwr进程负责把日志缓冲区的内容从内存写到磁盘的redo文件里。 arch进程负责在lgwr要覆盖重写的时候转移日志为归档日志文件。 把arch进程说一下。arch归档进程会循环写入进程,在这个过程中就会出现循环写入的情况,这时候为了保证数据安全性,就需要把即将被覆盖的日志写出到磁盘。在实际应用中,这个地方如何设置要看具体情况,要看你是想要效率还是想要安全了。像测试库,就没必要,但是某些情况就例外了。在rman备份前,必须将数据库切换为archivelog mode。这时候数据库的database log mode必须为archiver mode,oracle默认的模式为no archive log,那么如何切换为archive log模式呢?很简单,三步搞定(生产库谨慎操作):1.关闭数据库 shutdown immediate;2.启动到mount模式 startup mount; 3.改动log mode alter database archiverlog;4.打开数据库 alter database open;这时候通过命令archive log list查看就知道数据库已经是归档模式。 数据库的文件: 数据文件、参数文件、日志文件和控制文件 spfile或者pfile 由于9i之后spfile代替了pfile,所以这里就主要介绍spfile。介绍之前先简单回忆下spfile和pfile的区别吧。spfile是一个二进制文件,不能编辑修改,可以通过pfile来创建。而pfile是文本文件可以直接编辑修改,里面有数据配置信息。这个文件大家都不会陌生,数据库启动nomount、创建数据库需要她,所以非常重要,除了问题连数据库都打不开了,在oracle启动时候优先级是spfile<sid>.ora > spfile.ora > init<sid>.ora,数据库打开时候是nomount、mount和open三个步骤,而关闭时候是database close、database dismounted、oracle instance shut down,其实仔细观察,关闭和打开步骤是相对应的,但是动作都是相反的(打开时候是先启动实例、然后挂载数据库、最后是打开数据库,而关闭时候是先关闭数据库,然后卸载数据库,最后才是关闭实例)。 控制文件 这个文件在数据库mount的时候会检查,可以通过show parameter control查看数据库控制文件信息。 日志和数据文件 这些在数据库open阶段时候会检查,如果出问题数据库就无法切换至open状态。可以分别通过select file_name from dba_data_files;和select group#,member from v$logfile;来查看日志和数据文件位置。 要是真这么简单,这搞oracle的就都该下岗了 关于合并部分相同字段的值的sql,进来看看 谢谢。 oracle如何每次取1000条 oracle是否有日志警告功能 分组统计。。 散分攒点人气 急!急!急!Oracle游标操作 帮我啊 (+)在查询中的应用 怎么取到Oracle 函数的返回值? 为什么oracle 9i企业管理器显示不了中文 oracle10g以文本文件形式备份,求高手帮忙 字符集US7ASCII转AL32UTF8
http://yunpan.cn/Q75pQ8w4gVjf4 访问密码 468a
数据库有数据文件、参数文件、日志、控制等文件构成。一个数据库可以有多个实例组成,实例下面有用户、表空间等。 sga就是system global area,主要包括共享池、数据缓冲区、日志缓冲区三类。pga(program global area)和sga一样,也是开辟出来的内存区。两者的区别就是pga私有,而sga共享。pga在用户登录时候直接绑定各类会话、权限等信息,而且当排序时候也是在这个区域中进行的,但是当排序尺寸超出pga区域范围,就会占用临时表空间的大小。
sga保留了许多缓存信息,可以打打提高sql语句的运行速度,每一次sql语句执行都会在sga的share pool里面生成一条记录,当下一次执行同一条语句时候直接从share pool里面调用执行计划等,而且当查询结果在sga的数据缓冲区内的时候,可以直接避免磁盘读取(physical reads),大大提高效率。
通过常规show parameter sga、show parameter pga命令可以分别查看sga和pga分配的大小。当然我们也可以通过show parameter shared_pool_size和show parameter db_cache_size来分别查看共享池和缓冲池分配大小。调整sga值大小,可以通过alter system set sga_target=1000m scope=spfile,这时候scope后面的参数也是有讲究的,当以pfile启动时候,修改sga_target只能用memory,而修改sga_max_size时候只能用spfile,这时候就必须用spfile启动了。
而sga、pga具体大小设置,一般oltp应用为内存*0.8*0.8(sga)、内存*0.8*0.2(pga);olap应用为内存*0.8*0.5(sga)、内存*0.8*0.5(pga);或者oltp sga=系统内存*70%*80% pga=sga*(10%-20%),olap sga=系统内存*80%*60%,pga=sga*(45%-65%)。
附:scope=memory代之只更改当前,重启失效
scope=spfile代之只更改以后,当前无效
scope=both更改当前和以后
缺省值:当以spfile启动时候为both,以pfile启动时候为memory
修改log_buffer和sga_max_size时只能scope=spfile 后台进程:pmon即processes monitor,进程监视器,自动进行简单的故障回滚等操作。
smon即system monitor,系统监视器,她关注的是系统级的操作而非单个进程,她的主要任务就是实例恢复,同时 肩负清理临时表空间、回滚段表空间、合并空闲空间等。
lckn这个进程是在集群上面使用,最多可以有10个进程,主要用于实例间的封锁。
reco主要用于distributed database recovery,即分布式数据库的恢复。
ckpt用于触发从数据缓冲区中写数据到磁盘(即dbwr)。
dbwr进程负责把数据缓冲区写到磁盘里。
lgwr进程负责把日志缓冲区的内容从内存写到磁盘的redo文件里。
arch进程负责在lgwr要覆盖重写的时候转移日志为归档日志文件。
把arch进程说一下。arch归档进程会循环写入进程,在这个过程中就会出现循环写入的情况,这时候为了保证数据安全性,就需要把即将被覆盖的日志写出到磁盘。在实际应用中,这个地方如何设置要看具体情况,要看你是想要效率还是想要安全了。像测试库,就没必要,但是某些情况就例外了。在rman备份前,必须将数据库切换为archivelog mode。这时候数据库的database log mode必须为archiver mode,oracle默认的模式为no archive log,那么如何切换为archive log模式呢?很简单,三步搞定(生产库谨慎操作):1.关闭数据库 shutdown immediate;2.启动到mount模式 startup mount; 3.改动log mode alter database archiverlog;4.打开数据库 alter database open;这时候通过命令archive log list查看就知道数据库已经是归档模式。 数据库的文件:
数据文件、参数文件、日志文件和控制文件
spfile或者pfile
由于9i之后spfile代替了pfile,所以这里就主要介绍spfile。介绍之前先简单回忆下spfile和pfile的区别吧。spfile是一个二进制文件,不能编辑修改,可以通过pfile来创建。而pfile是文本文件可以直接编辑修改,里面有数据配置信息。这个文件大家都不会陌生,数据库启动nomount、创建数据库需要她,所以非常重要,除了问题连数据库都打不开了,在oracle启动时候优先级是spfile<sid>.ora > spfile.ora > init<sid>.ora,数据库打开时候是nomount、mount和open三个步骤,而关闭时候是database close、database dismounted、oracle instance shut down,其实仔细观察,关闭和打开步骤是相对应的,但是动作都是相反的(打开时候是先启动实例、然后挂载数据库、最后是打开数据库,而关闭时候是先关闭数据库,然后卸载数据库,最后才是关闭实例)。
控制文件
这个文件在数据库mount的时候会检查,可以通过show parameter control查看数据库控制文件信息。
日志和数据文件
这些在数据库open阶段时候会检查,如果出问题数据库就无法切换至open状态。可以分别通过select file_name from dba_data_files;和select group#,member from v$logfile;来查看日志和数据文件位置。