• Oracle 体系结构之ORACLE逻辑结构


    Oracle逻辑结构的相关数据字典:

    SELECT * FROM DBA_TABLESPACES --记录各个表空间的详细信息。

    SELECT * FROM DBA_TABLESPACE_USAGE_METRICS --记录各表空间的使用状况。

    SELECT * FROM DBA_DATA_FILES --记录各个数据文件的详细信息。

    SELECT * FROM DBA_SEGMENTS –记录各个段的详细信息,与 DBA_TABLES,DBA_INDEXES,DBA_LOBS,DBA_PART_TABLES,DBA_PART_INDEXES, DBA_PART_LOBS,DBA_OBJECTS搭配使用。

    SELECT * FROM DBA_LOBS --BLOB字段所对应的字段名称。

    SELECT * FROM DBA_INDEXES --分区索引需通过DBA_INDEXS来找到对应的表名。

    SELECT * FROM DBA_EXTENTS --记录各个区间对象的详细信息。

    SELECT * FROM V$TABLESPACE --记录表空间的基本信息,对象ID,表空间名称。

    SELECT * FROM V$DATAFILE --记录数据文件的基本信息,对象ID,表空间ID,文件名称以及状态、大小和相应的变化。

    SELECT * FROM V$SEGSTAT --实时监控数据库段级对象的统计信息。

    SELECT * FROM V$SEGSTAT_NAME --段级对象的统计项目。

    SELECT * FROM V$SEGMENT_STATISTICS --实时监控段级对象的性能,说穿了和V$SEGSTAT有点像,统计信息更丰富一些。

    1、 表空间(tablespace)

    表空间是数据库中的基本逻辑结构,一系列数据文件的集合。一个表空间可以包含多个

    数据文件,但是一个数据文件只能属于一个表空间。

    查询表空间:

    SQL>select * form dba_data_files;

    查询表空间的空闲信息:

    SQL>select * from dba_free_space;

    SQL>alter tablespace *** offline;

    限制表空间大小:

    SQL>alter user *** quota ***m on ***

    临时表空间用于为用户排序的ORDER BY语句使用。

    创建数据库时可以指定数据库的默认临时表空间。在创建用户的时候可以指定用户的默认临时表空间。例如下句就指定temp为用户的临时表空间。

    SQL>CREATE USER *** IDENTIFIED BY **** TEMPORARY TABLESPACE temp;

    2、 段(Segment)

    段是对象在数据库中占用的空间,虽然段和数据库对象是一一对应的,但段是从数据库

    存储的角度来看的。一个段只能属于一个表空间,当然一个表空间可以有多个段。

    表空间和数据文件是物理存储上的一对多的关系,表空间和段是逻辑存储上的一对多的

    关系,段不直接和数据文件发生关系。一个段可以属于多个数据文件,关于段可以指定扩展

    到哪个数据文件上面。

    段基本可以分为以下四种

    数据段(Data Segment)

    索引段(Index Segment)

    回滚段(Rollback Segment)

    临时段(Temporary Segment)

    3、区间(Extent)

    关于Extent的翻译有多种解释,有的译作扩展,有的译作盘区,我这里通常译为区间。在一个段中可以存在多个区间,区间是为数据一次性预留的一个较大的存储空间,直到那个区间被用满,数据库会继续申请一个新的预留存储空间,即新的区间,一直到段的最大区间数(Max Extent)或没有可用的磁盘空间可以申请。在ORACLE8i以上版本,理论上一个段可以无穷个区间,但是多个区间对ORACLE却是有性能影响的,ORACLE建议把数据分布在尽量少的区间上,以减少ORACLE的管理与磁头的移动。

    4、Oracle数据块(Block)

    ORACLE最基本的存储单位,他是OS数据块的整数倍。ORACLE的操作都是以块为基本单位,一个区间可以包含多个块(如果区间大小不是块大小的整数倍,ORACLE实际也扩展到块的整数倍)。

    5、基本表空间介绍

    a. 系统表空间

    主要存放数据字典和内部系统表基表

    查看数据数据字典的SQL

    select * from dict

    查看内部系统表的SQL

    select * from v$fixed_view_definition

    DBA对系统的系统表中的数据字典必须有一个很深刻的了解,他们必须准备一些基础的SQL语句,通过这些SQL可以立即了解系统的状况和数据库的状态,这些基本的SQL

    包括:

    系统的剩余空间

    系统的SGA

    状态系统的等待

    用户的权限

    当前的用户锁

    缓冲区的使用状况等

    在成为DBA 的道路上我们不建议你过分的依赖于OEM/Quest 等优秀的数据库管理工具,因为他们不利于你对数据数据字典的理解,SQL语句可以完成几乎全部的数据库管理工作。

    大量的读少量的写是该表空间的一个显著的特点。

    b. 临时表空间.

    临时表空间顾名思义是用来存放临时数据的,例如排序操作的临时空间,他的空间会在下次系统启动的时候全部被释放。

    c. 回滚段表空间

    i. 回滚段在系统中的作用

    当数据库进行更新插入删除等操作的时候,新的数据被更新到原来的数据文件,而旧的数据(Before Image)就被放到回滚段中,如果数据需要回滚,那么可以从回滚段将数据再复制到数据文件中。来完成数据的回滚。在系统恢复的时候,回滚段可以用来回滚没有被commit 的数据,解决系统的一至性。

    回滚段在什么情况下都是大量的写,一般是少量读,因此建议把回滚段单独出来放在一个单独的设备(如单独的磁盘或RAID),以减少磁盘的IO争用。

    ii. 回滚段的工作方式

    一个回滚表空间可以被划分成多个回滚段. 一个回滚段可以保存多个会话的数据.

    回滚段是一个圆形的数据模型

    假设回滚段由4 个区间组成,他们的使用顺序就是区间1à区间2à区间3à区间4à区间

    1。也就是说,区间是可以循环使用的,当区间4到区间1的时候,区间1里面的会话还没有结束, 区间4用完后就不能再用区间1,这时系统必须分配区间5,来继续为其他会话服务服务。

    我们分析一个Update 语句的完成

    ①. 用户提交一个Update 语句

    ②. Server Process 检查内存缓冲.

    如果没有该数据块的缓冲,则从磁盘读入

    i. 如果没有内存的有效空间,DBWR被启动将未写入磁盘的脏缓冲写入磁盘。

    ii. 如果有有效空间,则读入。

    ③. 在缓冲内更新数据

    i. 申请一个回滚段入口,将旧数据写如回滚段。

    ii. 加锁并更新数据。

    iii. 并在同时将修改记录在Redo log buffer中。


    作者:czjie
    出处:http://www.cnblogs.com/czjie/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    redis缓存分页数据ID
    Kafka学习之(六)搭建kafka集群
    高并发下,php使用uniqid函数生成唯一标识符的四种方案(本博客也有雪花算法的方式,在【算法组】)
    Kafka学习之(五)搭建kafka集群之Zookeeper集群搭建
    Centos 更改系统时间
    Js删除字符串中的指定字符串
    Jquery 给Js动态新添加的元素 绑定的点击事件
    PHP 常用的header头部定义汇总
    来了解一下Ajax是什么?Ajax的原理?Ajax与传统Web比较?Ajax的优缺点?Ajax的Post与Get比较
    phpstorm常用快捷键(自备不全)
  • 原文地址:https://www.cnblogs.com/czjie/p/2236713.html
Copyright © 2020-2023  润新知