zoukankan      html  css  js  c++  java
  • 三思学习笔记_000001

    oracle 数据库主要包括二个主要部分
    1:数据库:
      一系列物理文件(数据文件和相关对象文件)
    2:实例: 
       一系列操作系统进程和它管理内存区
    
    //-----------------------------------
    从多的数据由oracle来分配管理,
    是堆砌还是叠加..
    oracle 管理数据库的方式是
    高效的逻辑结构来管理物理数据结构.
    物理结构:对应一系列的不同格式类型作用的文件
    逻辑结构:oracle内部存储管理数据方式
    
    //--------------------------------
    数据库物理存储结构
    数据库由一系列物理文件组成,任务不同
    发号指令{领导}
    老实听话[跟班]
    任劳任怨[白劳]
    埋头苦干[保镖]
    
    //-----------------------------------
    控制文件 Control Files
    数据文件 DataFiles
    临时文件 Tempfiles
    重做日志文件 Online Redolog File & Archived Log Files
    
    //-------------------------------------------
    控制文件(Control Files) 领导
    1:文件的大小   不超过20000个数据库
    注意:控制文件数据块大小与数据文件数据块大小不一样
    SELECT BLOCK_SIZE FROM V$CONTROLFILE;//默认16KB
    如何查询数据文件的大小
    SELECT BLOCK_SIZE FROM V$DATAFILE;
    2:控制文件作用
     a:oracle启动从NOMOUNT状态-->MOUNT 状态读取控制文件
       如果文件出错或者不存在则启动失败。
    3:控制文件格式
       二进制不能手工修改可以通过指令修改
       ALTER SYSTEM SET ????????????????????????????????????????????????
    4:控制文件的内容
      数据文件位置/重做日志文件路径/
      数据库名称/数据库创建信息/表空间信息
      数据文件状态/日志文件信息/检查点信息
      
      1:该文件启动时需要
      2:备份
      3:数据库结构修改[添加删除表空间,数据文件]
        等操作都需要同步控制文件
      
    5:控制文件保证措施
      oracle 系统默认二个镜像控制文件11g
                     三个镜像控制文件10g
    6:查看控制文件
      SHOW PARAMETER CONTROL_FILES;
      SELECT NAME FROM V$CONTROLFILE;
      
    7:控制文件的位置和数据可以由DBA指定???????????????????
    //-----------------------------------------------------
    数据文件
    oracle 需要保存大量的数据,在所有文件中只有数据文件来
    保存数据.
    数据文件是指在磁盘上的一个物理文件
    
    1:oracle有多少个物理文件
    SELECT NAME,STATUS FROM V$DATAFILE;
    2:重要概念!!
    oracle在创建数据文件时,是通过操作系统
    在指定路径下分配一块指定大小的磁盘空间,
    并将这块空间的数据清空,然后按照指定的块
    大小格式化这块存储区域。
    
    3:裸设备
    oracle也允许在裸设备上创建数据文件
    裸设备:一块没有分区格式化的磁盘
    
    4:数据是直接保存在数据文件中吗?
    数据对象是保存在表空间中,
    然后由oracle分配至某一个或某几数据文件;
    
    5:数据文件的状态
    Online   联机
    Offline  脱机
    System   系统状态
    RECOVER  11g??????????????????????
    只有system和online状态的数据文件用户可以正常访问
    其中存储的数据,默认联机状态。
    
    6.修改数据文件的状态
    col name for a50;
    select name,status from v$datafile;
    ALTER DATABASE DATAFILE 'D:DEVORACLEDATATESTSCOTT_TBS01.DBF' OFFLINE;
    ALTER DATABASE DATAFILE 'D:DEVORACLEDATATESTSCOTT_TBS01.DBF' ONLINE;
    *1 行出现错误:
    ORA-01113: 文件 15 需要介质恢复
    
    ??正在使用文件??
    
    //------------------------------------------------------------
    临时文件
    1:概念的误解
      临时文件是临时存在的文件-->{不在}
      而是临时表空间对应的数据文件
      该文件不是用完就会被删除,而该文件中存储的对象属于
      <-临时存在的对象->
    2:什么情况下会使用临时表空间
      通常oracle在执行大规模排序操作时,如果PGA内存区无法存放,
      就会将数据存储到临时表空间作为中转,当排序操作完毕后,
      这部分空间又可被其它操作使用.
    3:临时表空间文件与普通表空间的数据文件不同之处
      a:临时表空间必须处理Nologging模式
      b:临时表空间数据文件不能置为只读
      c:不能通过ALTER DATABASE 语句创建临时表空间数据文件
      d:通过RMAN备份时不会备份临时表空间数据文件
        恢复数据时也不会恢复临时表空间。
      e:临时表空间数据文件在分配空间时与普通表空间数据文件不同.
        普通表空间数据文件分配空间时,需要等待操作系统格式化空间
        临时表空间数据文件是一种稀疏类型文件.
      f:查询临时文件
        SELECT * FROM V$TEMPFILE;
        SELECT * FROM DBA_TEMP_FILES;
    //-------------------------------------------------
    日志文件
     重做Redo特指一面操作:
     oracle执行数据修改操作后{不会马上写入数据文件}
     1: 生成重做信息
     2: 写入SGA中的一块LOG_BUFFER
     3: LOG_BUFFER 空间一般设置3~5MB左右
        如何查询LOG_BUFFER?????????????????????
     4:当满足触发条件后,LOG_BUFFER中写入联机重做日志文件.
     5:查询LOG_BUFFER大小
     SQL> show parameter log_buffer
     NAME                                 TYPE        VALUE
     ------------------------------------ ----------- --------
     log_buffer                           integer     7708672    
     6:联机重做日志文件
     6.0:查看联机重做日志
        select * from v$logfile;
     6.1:重做日志组 
        每个数据库至少有两个重做日志文件组(一般应该3~5组)
     6.2:重做日志组工作的方式
        循环使用
     6.3:循环的方式
        LGWR进程当前在写LOG日志组1,日志组1状态 CURRENT状态
        数据写满后.
        LGWR开始写下一个LOG日志组2<组2 状态CURRENT,组1ACTIVE>
        以此类推,所有日志都写满后LGWR再次写LOG日志组
        ?????LOG组不是满的吗?如何写
      6.4:每个日志文件至少要有一份冗余保证数据不会丢失。
      6.5:创建新日志文件组-->
      ALTER DATABASE ADD LOGFILE GROUP 10(
      'D:DEVORACLEDATATESTREDO011.LOG',
      'D:DEVORACLEDATATESTREDO012.LOG') SIZE 50M;  
      6.6: 新创建文件状态
      select * from v$log;
      10  UNUSED [未被写入过数据]
      6.7:删除联机重做日志组
      ALTER DATABASE DROP LOGFILE GROUP 9;
      注意:不能删除 CURRENT;ACTIVE状态重做日志组
           日志文件不会通过指令删除,需要管理员手工删除.
      6.8:为日志组添加日志文件
       ALTER DATABASE ADD LOGFILE MEMBER 'D:DEVORACLEDATATESTREDO013.LOG' to GROUP 10; 
       注意:单独添加文件不需要指定大小
      6.8:删除日志组中的文件
       ALTER DATABASE DROP  LOGFILE MEMBER 'D:DEVORACLEDATATESTREDO013.LOG';
      注意:删除文件之前必须确保删除后日志组中至少还拥有一个组员
            不然触发ORA-00361错误.
       ALTER DATABASE DROP  LOGFILE MEMBER 'D:DEVORACLEDATATESTREDO011.LOG';
       ALTER DATABASE DROP  LOGFILE MEMBER 'D:DEVORACLEDATATESTREDO012.LOG';
       第 1 行出现错误:
       ORA-00361: 无法删除最后一个日志成员 D:DEVORACLEDATATESTREDO012.LOG (组 10)
       6.9:查询重做日志        
        SELECT * FROM V$LOG;
        SELECT * FROM V$LOGFILE;    
       6.10 日志状态
        UNUSED:  日志文件从未被写入过数据,刚创建日志组状态。
        CURRENT: oracle正在使用的重做日志文件组
        ACTIVE:  当前未使用,不过该文件的内容<!!!尚未归档!!>
                 或者文件中的数据没有全部写入数据文件.
                 一旦需要实例恢复,必须借助该文件中保存的内容.
        CLEARING:该重做日志文件正被重建(重建后状态UNUSED)
        ?????????????????????????????????????? 如何重建
        CLEARING_CURRENT:重做日志重建时出现错误
        INACTIVE:联机重做日志文件中的内容己被妥善处理,当前处理空闲状态.
        
       6.11:设置联机重做日志文件大小
         a:数据修改频繁度
           如果数据频繁修改产生大量的重做日志,此时重做日志太小,
           日志组写满了换另一个组,一旦日志文件切换时发现下一组
           重做日志尚未完成写入,那么数据库将仃止工作,等待
           完成归档或数据写入。
         b:平均恢复时间
            如果重做日志文件大,是不是可以最终解决问题.
            修改数据->写数重做日志文件->触发检查点(CKPT)
            如果数据库受损,实例恢复的话必须要花费相当长的时间
            处理巨大日志文件。        
         c:高峰时的负载
           不同的业务高峰时刻也不同,有些系统可能是1:00-3:00
           有的系统可能是8:00-10:00
           不管什么系统设置重做日志都应该以最繁忙的时段产生的
           日志量为准.
           如果一天50G,其中4GB是13:00-15:00产生的,按照每10-15
           分钟左右换一次单个重做日志为3GB左右..
           
       
       6.12:重做日志的生成
            对数据库的更新操作会生成大量的重做日志,如果控制
         某些更新语句在执行时不生成重做日志[省时,省空间]
         常规情况下有二种
         a:某些DDL语句时附加NOLOGGIN子句
         b:执行DML时指定HINT APPEND
         c:SQL Loader 采用直接路径的方式跳过SQL引擎,不生成重做日志..
     //-----      
     create table test2
     NOLOGGING 
     as
     select * from dba_objects
     where 1=2;
    
    
     insert into test2 nologging select * from dba_objects
    
     alter table test2 nologging;
     insert into test2  select * from dba_objects;
     
     insert/*+append*/ into test2
     select * from dba_objects ;
    
     如果您希望生成重做日志成为强制约定,可以使用属性
     Force Logging
     一旦改变属性;Nologging/Append Hint自动失效/SQLLDER直接路径也会自动
     转为常规路径..
     
     6.13 查询数据库是否启用的Force Logging
     SQL> SELECT FORCE_LOGGING FROM V$DATABASE;
    
      FOR
      ---
      NO
     6.14  修改状态ForceLogging
     SQL> ALTER DATABASE FORCE LOGGING;
     6.15  取消属性
     SQL> ALTER DATABASE NO FORCE LOGGING;
    
    
       //-------------------------------------------------------------------
       数据文件 
       块:区:段:表空间
       表/列
       表空间->学院
       段----->系
       区----->专业
       块----->班
       数据文件-->教学大楼
       数据{表/记录/索引}----->学生
       
       :你真实看到一个物理{教学大楼}
       :大学校内有自己的组织关系{按照一定规则组织方便高效的管理}
       :学生-->去学院报到--->{内部管理方式->系->专业->班->学哪个教学大楼上课}
       :学生|<透明>|{内部工作方式}
          
       
       
       
       
       
       
  • 相关阅读:
    bzoj2115: [Wc2011] Xor
    bzoj2844: albus就是要第一个出场
    hdu3949
    bzoj2487: Super Poker II
    bzoj3456: 城市规划
    bzoj3992: [SDOI2015]序列统计
    ubuntu 使用命令行登录oracle
    ubuntu安装docker
    linux查询硬件信息
    ubuntu oracle 环境搭建
  • 原文地址:https://www.cnblogs.com/kaka100/p/3639036.html
Copyright © 2011-2022 走看看