三思学习笔记_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;


   //-------------------------------------------------------------------
   数据文件 
   块:区:段:表空间
   表/列
   表空间->学院
   段----->系
   区----->专业
   块----->班
   数据文件-->教学大楼
   数据{表/记录/索引}----->学生
   
   :你真实看到一个物理{教学大楼}
   :大学校内有自己的组织关系{按照一定规则组织方便高效的管理}
   :学生-->去学院报到--->{内部管理方式->系->专业->班->学哪个教学大楼上课}
   :学生|<透明>|{内部工作方式}
      
   
   
   
   
   
   
原文地址:https://www.cnblogs.com/kaka100/p/3639036.html