包括:实例、数据库文件、用户进程、服务器进程以及其他文件,其中实例包括sga(系统全局区)和一系列后台进程组成;
    数据库包括三种文件:重做日志文件、控制文件、数据文件
    sga包括:数据库高速缓存、重做日志缓存、共享池、流池、java池等
    后台进程:系统监控进程(smon)、进程监控(pmon)、数据库写进程(dbwn)、日志写进程(lgwr)、检验点进程(ckpt)及其他进程
    要访问数据库必须先启动实例,实例启动时,先分配内存,然后再启动后台进程,否则无法创建实例,启动过程中可以通过告警日志,alertsid.ora中看到详细过程;

    2.oracle服务器:有oracle实例及数据库文件组成,也就是dbms;

    数据库服务器除了维护实例和数据库文件外,还在用户建立与服务器连接时启动服务器进程并分配pga(程序全局区);

    3.查询会话视图:v$session;
    select serial,username,status,server,processs,program,logon_time from v$session;
    其中active 的会话状态为活跃;

    oracle数据库的内存结构sga(系统全局区)

    共享池:有两部分组成,库高速缓存及数据字典高速缓存;
    包括存储最近使用过的sql和pl/sql语句,但容量有限,oracle采用lrv算法清除最近很少使用的执行计划从库高速缓存中清除,显然缓冲区越大,共享的sql代码越多,只能 通过共享池的设置,间接地更改,而共享池时sga的一部分,所以不能超过sga的大小;
    alter system set shared_pool_size=16M;
    查看共享池大小:
    show parameter shared_pool_size;

    2.数据字典高速缓存:
    存储数据表、文件、索引、列、用户、权限等一些数据对象的定义,sql解析阶段,需要解析这些对象,如果缓存这些信息,无疑会加快查询速度,也取决于共享池的大小;

    3.数据库高速缓冲区(database buffer cache)
    数据库高速缓冲区存储了最近从数据文件读入的数据块信息或用户更改后需要写回数据库的 数据信息,此时这些没有提交给数据库的更改的数据称为脏数据,当用户执行语句查询如select * from dept时,如果查询的数据在数据库高速缓冲区,则oracle不必从磁盘中读取,提高了查询速度,oracle使用db_block_size 和db_block_buffers设置高速缓存的大小,db_cache_size时数据块的大小,而db_block_buffers是数据块的个数,二者相乘就是数据高速缓冲区的大小;

    在oracle9i及以上版本中提供db_cache_size参数设置了高速缓冲区大小show parameter db_cache_size查看大小;

    oracle11g中sga为数据库服务器自动管理,所以参数为0,当然运行oracle11g时缓存是分配好的,我们使用show sga;查看大小,但用户可以根据alter system set db_cache_size=200m动态设置缓冲区大小;

    4.重做日志缓冲区(redo buffer cache)
    当用户执行了如insert 、update等dml,ddl操作后,数据写入日志高速缓冲区,查看show parameter log_buffer ;alter system set log_buffer=1m;会提示错误,因为log_buffer为静态参数,不能动态修改

    5.大池和java池
    大池时sga的一段可选内存区,只能在共享服务器环境中配置大池,在共享服务器下,oracle在共享池中分配了额外的空间用于存储用户进程和服务器进程之间的会话信息,但是用户进程区域的uga大部分在大池中分配,这样就减轻了共享池的负担,show parameter large_pool_size;
    alter system large_pool_size=48m;

    6.流池:也称为流内存,是为了流专用的内存池,大小由stream _pool_size动态调整

    7.pga(进程全局区)与uga(用户全局区)

    进程全局区是服务器专用的一块内存,独立于sga,不会在sga中出现,由操作系统在本地进程分配;

    uga总是在pga中分配;
    show parameter sort_area_size; 查看pga排序区大小;
    在服务器最初查询时,会使用512内存实数据排序;
    show sga 查看系统全局区
    fixed size 相关的内存区,oracle使用这个内存区来寻找其他的sga区,可以理解为数据库的自举区;

    variable size 相关的内存区,包括共享池、java池、大池,其中variable size 的尺寸大小要高于口述三个内存结构之和,因为在total sga中除去db_cache_size部分也包括在variable size 中

    show sga_max_size;

    数据库5个后台进程:smon、pmon、dbwr、ckpt、lgwr

    smon:系统监控进程主要作用是数据库实例恢复,当数据库发生故障时,如操作系统重启,此时实例中没有写到磁盘的信息都会丢失,当数据库重新启动时系统监控进程会自动恢复实例:恢复步骤如下:
    1、前滚所有没有写到数据文件的而被记录在重做日志文件中的数据,此时系统监控进程读取了重做日志文件,把用户更改的数据重新写到数据块;
    2.打开数据库,方便用户及时登录,以免回滚时间太长,影响用户行为,这样用户就可以操作那些没有被事物恢复锁住的数据;
    3.回滚未提交的事物;
    除此之外系统监控进程执行某些空间维护的作用;

    进程监控进程(pmon)
    进程监控进程负责服务器进程的管理和维护操作,在进程失败或连接异常时,该进程负责清理工作
    1,回滚没有提交事物;
    2.释放所有占用的sga资源;
    3.释放所有当前的表或行锁;
    4.监视其他oracle的后台进程,在必要时重启后台进程;
    5.向oracle tns 监视器注册刚启动的实例;

    3.数据库写进程(dbwr)
    脏数据是用户更改了但是没有提交到数据库的数据,这种数据必须在特定的条件下写到数据文件中,这就是数据库写进程;

    4.重做日志进程(lgwr)
    重做日志写进程能负责将重做日志缓冲区的数据写到重做日志文件中;

    5.归档日志进程ARCH
    可选进程,该进程并不在实例启动,而是自启动
    查看归档模式 archieve log list

    alter database archivelog;

    查看数据库恢复目录位置:
    show parameter db_recover_file_dest

    6.校验点进程(ckpt)

    校验点是一个事件,当数据库写进程是把sga中的所有被修改了的数据库高速缓冲区中的数据写到数据文件上时产生,这些被修改的数据包括已提交的和未提交的数据,由于引入校验点使得所有
    校验点和所有变化了的数据都写到数据文件中,在实例恢复时,就不必恢复校验点前的重做日志中的数据,加快效率,在校验点发生时,会触发以下两点;

    1)校验点进程要将校验点号写入相关的数据文件的文件头中;
    2)校验点进程把校验点号码、scn号、重做日志序列号归档日志都写入控制文件

    alter system checkpoint; 用户强制产生校验点无标题笔记(1).note