解决方案 »

  1.   

    我这有个课件写得不错,分享到云盘上了,自己看下吧
    http://yunpan.cn/Q75pQ8w4gVjf4 访问密码 468a
      

  2.   

         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;来查看日志和数据文件位置。
      

  3.   

    要是真这么简单,这搞oracle的就都该下岗了