• oracle存储结构


    数据库的物理存储结构

    select * from v$datafile;

    数据库的逻辑存储结构,从表空间开始查起
    一个数据库对象的逻辑存储结构如下
    表空间-段-区-块

    select * from dba_tablespaces;
    select * from dba_segments
    where tablespace_name='KYC_VEH';
    select * from dba_segments
    where tablespace_name='KYC_VEH' and segment_name='VEHICLE_INFO';
    select * from dba_extents
    where tablespace_name='KYC_VEH' and segment_name='VEHICLE_INFO';

    初始是按照一个区8个块进行分配的,也即65536B,initial_extent是65536,即dba_segments中的initial_extent字段值
    select 16*8*8192 from dual;
    1048576
    初始大小占完之后,再分配时是按照一个区128个块进行分配的,也即1MB,next_extent是1048576,即dba_segments中的next_extent字段值
    select 128*8192 from dual;
    1048576

    一个段占用了17 extents
    一个区8个块,即一个区是65536字节
    一个块8192字节

    block_id是全局的,其它的是相对的
    select * from dba_segments;
    主要关注header_block,blocks两个字段的值变化,并且可以降序或升序看一下

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

    dba_extents 中除了记录每个extent启始块号(block_id),还记录了该extent中有多少个块(blocks)。所以,只要查到11943在哪个范围内就可以知道这个块属于哪个extent,属于哪个段了。但是,每个数据文件中的块号都是从头开始编号的,意味着每个数据文件都可能会有11943这个块号。所以,你还需要知道这个块属于哪个文件。

    另一种方法:DUMP出该数据块的任一行记录的ROWID,通过ROWD可以直接计算出对应的唯一文件号和对象号,从而知道该块存在哪了个数据文件上,是属于哪个对象的。
    select  dbms_rowid.rowid_object(rowid) objectid--对象号
           ,dbms_rowid.rowid_relative_fno(rowid) fileid--文件号
           ,dbms_rowid.rowid_block_number(rowid) blockid--块号
           ,dbms_rowid.rowid_row_number(rowid) rownums--行号
    from dual

  • 相关阅读:
    【java多线程】队列系统之说说队列Queue
    【传输协议】什么是CA证书
    5.1 javassist基本使用
    第四章 dubbo内核之aop源码解析
    第三章 dubbo内核之ioc源码解析
    2.2 dubbo-spi源码解析
    2.1 jdk-spi的实现原理
    第一章 第一个dubbo项目
    第零章 dubbo源码解析目录
    macOS Sierra10.12.5 显示允许任何来源
  • 原文地址:https://www.cnblogs.com/createyuan/p/7743957.html
Copyright © 2020-2023  润新知