zoukankan      html  css  js  c++  java
  • Oracle 学习笔记(二)

    一、索引

    表的数据是无序的,所以叫堆表(heap table),意思为随机存储数据。因为数据是随机存储的,所以在查询的时候需要全表扫描。索引就是将无序的数据有序化,这样就可以在查询数据的时候 减少数据块的读取,实现快速定位数据。对大表的排序是非常消耗资源的,索引是事先排好序,这样就可以在需要排序的时候使用索引就可以避免排序。索引对数据库的影响是巨大的,但索引不是万能的,数据库对索引的使用是有选择的,我们可以强制使用索引,也可以强制不使用索引。一般的情况下数据库会自动的判断是否使用索引,除非你明确的在SQL语句中指定。所有索引的原形都是树状结构,由根、枝干和叶子组成。根和枝干中存放键值范围导 引指针叶子中存放的是条目,条目中存放的是索引的键值和该数据行的ROWID。索引的叶子间通过指针横向的联系在一起,前一个叶子指向下一片叶子,这样的目的是数据库在找到一个叶子后就可以查找相临近的叶子,而不必再次去查找根和枝干的数据块索引和表一样是段级单位,和表和回退段是平级单位

    索引的建立
     索引的建立有两种模式:隐式建立和显式建立隐式建立,当我们在表上建立主键和唯一性 约束的时候,数据库会自动的建立同名称的索引,如果你删除或者禁用约束, 数据库会自动的删除该同名称的索引,因为这两个约束是通过索引来实现的。显式建立,我们在需要的列上建立索引以提高数据库的性能,一个表上可以建立很多个索引。 因为列的排序组合会有很多种模式,每个列上可以有很多个函数索引,所以理论上一张表的索引数目是无限的,但请记住我们只建立查询时经常使用的索引 因为索引要占空间,而且需要数据库维护。 索引的维护数据库会自动的维护索引,我们手工可以重新建立和合并指定的索引当索引已经建立,我们 update 索引的键值的时候,数据库会删除老的条目,添加新的条目,因为索引是有序的,条目不能直接在原地修改到新的键值,新的键值必须去它应该存在的叶子
     
     索引的重建与合并
     索引的重建就是将老的抛弃,跟新的一样,这样就使索引的结构发生了变化,由原来的  2层结构降为一层结构。那合并和重建有什么区别呢?合并不释放段所拥有的空间,不处理正在变化的行,也就是说有事务的时候也可以合并。合并只是合并 枝干内的叶子,如果叶子属于不同的枝干则分别独立合并,记住合并不会改变索引的结构。
    不会改变改变索引的表空间和索引类型。重建只能在没有事务的情况下进行,如果有未提交的事务,就会报错

    二、 约束

     运行每句话都判定约束为立即约束
     在事务结束的时候统一判定叫延迟约束
     延迟约束可以容纳一段时间的非法数据
     建立约束默认为立即约束 

    三、 字典

      在创建数据库时,数据字典是自动创建的,数据字典的位置: %oracle_home% dbmsadmincatalog.sql  v$ 的字典是数据库在启动时初始化的  
     数据库字典的使用
     数据库自己使用字典获取信息
     数据库自动维护
     查看字典获取数据库的相关信息:select table_name from dict where table_name like '%TABLE%' or like '%VIEW%';

    四、 数据库三大视图

      Dba_***
      All_***
      User_***   
      *** 代表某个单词,如table   
       Dba_table   当前整个数据库使用的表
       All_table   当前用户可以访问的表
       User_table  当前用户所拥有的表

    五、 数据库控制文件

     控制文件是二进制文件(不会超过 100m,一般是几m 大小)
     控制文件记录了数据库的结构和行为
     在mount 时候读
     在数据库 open 时一直使用
     丢失需要恢复
     相关字典 
     查看控制文件   Select * from v$controlfile 

    六、 数据文件

     数据文件是数据的存放载体
     数据文件存在于操作系统上,可以是文件、设备。
     数据文件不能独立存在,得有组织
     数据文件的逻辑组织形式为表空间 tablespace
     一个表空间内可以含有多个数据文件
     数据库内可以有多个表空间  

    七、 表空间

     System 表空间
          数据库内最重要的表空间
       在建立数据库时,就诞生了
       在数据库 open 的时候必须 online
       该表空间含有数据字典的基表
       含有包,函数,视图,存储过程的定义
       原则上不存放用户的数据
      Sysaux 表空间(system auxiliary辅助)
       10g新引入的新的表空间
       分担 system表空间的压力
       一些应用程序的存放数据空间
       不能改名称
       可以 offline,但部分数据库功能受影响
       查看有那些应用程序使用了sysaux 表空间:  select * from V$SYSAUX_OCCUPANTS;
       查看用哪些程序可以更改某些帐号的默认表空间: SELECT OCCUPANT_NAME, SCHEMA_NAME, MOVE_PROCEDURE  FROM V$SYSAUX_OCCUPANTS;

    八、 临时表空间

      不存放永久的对象
     用来排序或临时存放数据的
     临时表空间的内部分配由oracle自动完成
     重新启动数据库时该表空间都会重新分配
     有排序需求时分配,SHUTDOWN 后回收
     数据库内可以有多个临时表空间
     select TABLESPACE_NAME,CONTENTS,LOGGING from dba_tablespaces order by 2

    九、 数据库的逻辑结构

     Block(块)最基本的存储单元,块是建筑数据库的基石。是数据库的最小 i/o单位  Extent(范围)一次分配的连续的块  

    Segment(段)属于同一对象的范围组成一个段  Tablespace(表空间)数据文件的组织行为 

    Insert插入操作的详细步骤  

      1.获得空闲列表

       2.找到可以使用的数据块  

      3.插入到pctfree 的位置停止插入

       4.将该数据块从空闲列表中移走  

       5.通过指针找到下一个可以使用的数据块

       6.继续插入,直到操作完成  步骤 3留下的空间是给块内的行update 使用的    

    Delete 删除操作的详细步骤

       块内数据删除  当块内数据大于pctused的时候,该数据块不能插入,因为它不在空闲列表中  

      当块内数据少于pctused的时候,将该块加入到空闲列表,可以插入新数据了  我们接着上面的实验.进行删除操作   oracle 数据库的范围

          范围:一次分配的,连续的,oracle 块。    

          查看表的块信息   select segment_name, owner,extent_id,file_id,block_id,blocks    from dba_extents where owner='SYS' and segment_name='OBJ$'  

       Drop table;  不释放空间

       Purge table 表名;  释放空间  

      Drop table t1 purge; 相当于 Truncate table  删除表同时清空回收站  

      建立表的原则  

      设计表的时候表的名称,列名称,索引,约束等名称要统一  

      表和列要加注释  将会出现 null 值的列放在最后,最后连续的 null 都不占空间  定义约束,

      维护数据的完整性  尽量使用 cluster 类型的表,使存储最少,sql 语句最优

      ROWID

       ROWID 是伪列,索引使用它,表中并没有存储 rowid,每一行的 rowid 是该行的物理地址,可以快速定位该行.我们也可以将指定的数构造出一个 rowid

     ROWNUM

       在查询的结果中, ROWNUM 为结果中每一行标识一个行号,可以限制查询结果集中返回的行数。      

      数据压缩

       压缩存储的原理是每个块内相同的数据只存放一次,所以我们在压缩表的时候最好要排序。     我们把大的静态表压缩存储,这样既可以节约存储空间又提高了 I/O 的效率,  还节约了内存的使用,但是经常 update 的表我们不要压缩存储会下降 DML的性能。    当表运行一段时间后,表中的数据会被删除,导致了高水位下有空的数据块,  或者不满的数据块,数据库在处理全表扫描的时候总是读高水位下所有的数据块。     降低了全表扫描的效率,我们将表挪动表空间后,数据会紧密的码放,释放多余的空间,  回收了高水位线。提高了全表扫描的性能,节约了存储空间。在9I前,挪动表以后会使索引无效,  在 10G 版本中会自动重新建立索引

    十、配置数据库监听

    配置文件 oracle_home etworkadminlistener.ora

    监听的名称(默认为 listener,最好不改)  监听主机的信息(主机名称或ip,协议,端口号)  监听数据库的信息(数据库名称,oracle_home,实例名称)    只能监听本地的主机  不能监听远程的主机  一个监听可以监听多个数据库  一个数据库可以被多个监听监听

    客户端网络配置  

     配置文件位置 oracle_home etworkadmin nsnames.ora     网络服务名称(最好代表一定的含义如ip等)  远端主机的信息(主机名称或ip,协议,端口号)  远端数据库的信息(数据库名称,oracle_home,实例名称)   数据库的连接配置

     数据库的客户端发出请求,有两种模式连接到服务器.一种为共享模式,一种为专有模式.  到底走哪种连接模式,由服务器的配置和客户端的配置两方面决定.数据库管理员要明确使用  专有连接连接到数据库,因为共享连接不能停止数据库.  我们配置的原则是批处理走专有,小的事物走共享.共享连接的概念很好,  可惜 BUG 太多,容易资源锁死,所以大部分用户放弃了 ORACLE 提供的共享连接,  而买昂贵的第三方中间件产品就是这个道理.oracle 只有数据库是很好的产品,  其它的都不出色.请选择产品的时候仔细考虑.  服务器的配置有两个因素决定了连接的模式.  初始化参数:   dispatchers,   shared_servers,   local_listener  监听的配置:一定要监听 ip地址,因为有浮动 ip.  客户端的配置:tnsnames.ora 文件的设置

  • 相关阅读:
    Bzoj4872: [Shoi2017]分手是祝愿
    大数据应用价值研究员--数据可视化工程师
    Angular Redux
    Reactive Redux
    Testing a Redux & React web application
    [转]于Fragment和Activity之间onCreateOptionsMenu的问题
    [转]探究java IO之FileInputStream类
    深入解析FileInputStream和FileOutputStream
    [转]慎用InputStream的read()方法
    [转]Android
  • 原文地址:https://www.cnblogs.com/wisdo/p/7439702.html
Copyright © 2011-2022 走看看