oracle 笔记-基本知识及体系结构

数据库分为关系型数据库和对象型数据库

关系型数据库:把存放的内容抽象化成关系

区分关系型:一定是表和行的方式

选择release2版本,相对release1要稳定的多

10g grid 分布计算加安全访问

oracle与mysql区别


数据库对象:

table,view,synonym,contrains,index,

存储过程,触发器,包,函数


数据库安全:

users,schema,privilege,role,配额quota


数据库文件与存储:

datafile,control file,redo log,pfile and spfile,tablespace


数据库网络访问:

db_name, instance_name, service_name, tsnname, listener, 连接字符串

=====================================================

oracle默认为专用服务器
oracle体系结构分为三类:进程结构,内存结构,存储结构。

进程结构:用户进程和服务进程

a.用户进程访问数据库的方式 

---- 本机直接通过scok方式访问,即IPC

----通过TCP建立连接到oracle服务器

    ----sqlplus  sys/oracle@ora10g as sysdba,本机需配置$ORACLE_HOME/network/admin/tnsnames.ora

    ----sqlplus sys/oracle@remote.example.com:1521/ora10g as sysdba  , 服务器上需配置listener.ora

   如果需要查看用户进程产生的信息:可以使用 show parameter user_  , 其下有一个user_dump_dest。 v$session v$sql v$sqltext v$process

  

b.服务进程

  用户和服务进程建立连接后, 如会话信息存储在 PGA,便于维护和管理。

 SGA共享

  -----服务器进程传递给实例,放到实例共享池里进行判断,如果执行过进行软分析,否则进行硬分析。

     表放在哪一个blcoc?数据字典可以告诉你表放在哪个表空间,行放在哪个块。data buffer cache中是否已有4号文件第5个block?如果有,则返回数据给用户。

      如果没有,则从磁盘中读取数据到data buffer中,undo缓存块会对该块做镜象。然后读镜像中的数据给用户。

redo log buffer 记录block更改变化,修改前后的块镜像标记不同(是否commit)。


c. 后台进程

ckpt保证数据同步的进程。触发dbwr,dbwr再触发lgwr。这样就可以让lgwr写完后,再做dbwr。

dbwr,lgwr,smon,pmon,ckpt 5个进程必须正常,其中一个异常都会造成instance关闭。  ps -ef | grep ora         或者 v$bgprocess


  smon:

            实例恢复

  pmon:

              清除失败的进程

  dbwr何时触发:

             发生检查点、脏数据到达限制、没有free 缓存、超时发生、RAC ping请求、表空间离线、表删除或者截断、表空间只读、开始备份表空间。

             32bit -- dbw0~dbw9                     64bit--dbw0~dbw9   dbwa~dbwj

  lgwr何时触发:

             commit 、达到1/3满、日志的大小到1M、每隔3s、在DBWn进程写之前

             考虑磁盘I/O性能好,RAID或raw device方案,保证写日志够块,避免出现库异常或宕库。

   ckpt:

             作用:发送信号给DBWn、更新数据文件头、更新控制文件

             SCN 判断数据的一致性。一般通过回滚来修复一致性,高级一点的是直接修改SCN

   archive: (可选后台进程)

            开启该进程,设置为归档模式

            select log_mode from v$database;

            startup mount

            alter database archivelog;

            alter database open

            show parameter db_recovery_file_dest  //可查询归档日志文件目录

            show parameter log_archive_max_processes  //归档进程个数,最多只能设置30个 。

   还有很多其他可选后台进程


内存结构:SGA,PGA

     PGA: PROGRAM GLOBAL AREA

     SHOW PARAMETER PGA      //pga大小

     SHOW PARAMETER WORK   //如果此为auto,则sort ,hash不用考虑

     SHOW PARAMETER SORT_

     SHOW PARAMETER HASH


     SGA:

      内存结构和后台进程的组成实例(看图更象是sga和后台进程组成了实例)


SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。

     SGA的分配和回收由实例的启动,关闭来决定。

     固定sga, 不是所有的sga都是共享的。

    show sga

    sga抖动现象,没有为组件分配固定大小。

    sga管理方法:

    静态管理(8i),动态管理,自动动态管理(sga_target>0,否则为动态管理)。

    在设置内存大小的时候,分配的基本单位是粒度granule

    10g中的分配规则是:

    sga<=1G granule 4M 否则16M

    整个内存组建分配大小必须是granule的整倍数

    整个sga最小不小于3个granule的大小。

     查看granule大小

     select name, bytes/1024/1024 m, resizeable from v$sgainfo;

     show parameter sga_max_size    //此大小决定了granule大小

     alter system set sga_max_size=1025m scope=spfile;

   

-----shared buffer pool

      library cache 语句执行的判断(软分析或硬分析)

      data dictionary  cache  (定义表,比如查找表空间,行,索引,权限等等)

      大小由shared_pool_size决定,可以动态分配

-----database buffer pool

       有3种:

        default pool不指定块存储的buffer时,使用默认的   DB_CACHE_SIZE

        keep pool    避免被Lru算法给淘汰掉   DB_KEEP_CACHE_SIZE

       recycle pool  避免内存的反复回收释放   DB_RECYCLE_CACHE_SIZE

       只有 default pool可以被sga 管理。

      

-----redo log buffer

       大小由log_buffer 决定(1-2M即可,不需要太大),不可以被动态管理

  ----large pool (可选内存区)

       比如rman备份,数据库性能下降。

       共享服务器模式下,这部分内容放在uga中,如果不是共享服务器模式,则这部分内容是放在pga中的。

       并行进程执行的时候

       一些大对象操作的时候

               -----大小由large_pool_size决定,可以被动态管理。在自动管理时,也请设置初始大小值,避免sga抖动问题。

------java pool (可选)

       用于java的解析和执行

       大小由java_pool_size决定,可以动态调整

        如果granule是4M,java pool size默认是24M,如果granule是16M,则java pool size 默认是32M.

-----stream pool

      缓存高级队列,一般设置12M,记得设置初始大小,10gr2才可以自动管理

sga总结:sga_max_size=(80%mem) *2/3  还有设置sga_target 



存储结构:database

   show prameter db_name        //数据库名

   select name from v$database;

   select instance_name from v$instance;

    show parameter instance_name;

    v$datafile 、v$controfile、v$logfile、v$archived_log 、v$parameter

    初始化参数文件:SELECT VALUE FROM V$PARAMETER WHERE NAME='spfile';

    密码文件: ls $ORACLE_HOME/dbs/orapw$ORACLE_SID

     alert log :  ls $ORACLE_BASE/admin/$ORACLE_SID/bdump/alter_$ORACLE_SID.log

上述都是基于10g的

11gr2里的alert log:$ORACLE_BASE/diag/rdbms/orcl/orcl/trace   //不同的sid,路径也不一样。

其实用 find .  -name 'alert_*.log'  这条命令更加方便查找


看oratab中的说明,即便设置成 
$ORACLE_SID:ORACLE_HOME:Y ,oracle也不会随系统的启动而启动。从实验上来看<Y|N>选项只是能不能用
$ORACLE_HOME/bin/dbstart和$ORACLE_HOME/bin/dbshut来启动和关闭数据库的开关。
如果想让数据库随系统启动而启动,必须在系统启动的时候以oracle用户来运行$ORACLE_HOME/bin/dbstart脚本

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值