3.Oracle数据结构

1.前言

  这里说一下Oracle的数据结构(逻辑存储架构)  

  3.Oracle数据结构

2.Oracle的数据存储结构

  1)表空间(tablespace) -- oracle最大的逻辑存储单位

  2)  数据文件(data file) -- 表空间物理存储载体(裸设备除外)

  3)段(segment) -- oracle所有占用空间的对象的总称

  4)extent  --段的组成单位

  5)数据块(data block) -- extent 的组成单位, 是oracle存储和数据操作的最小单位

3.tablespace(表空间)

  表空间类型

  1)permanent:永久表空间

  2)undo:   撤销表空间

  3)temporary:临时表空间

  管理方式:

    段和区的管理方式是在建立表空间时确定的

    段管理方式有auto和manual两种,区管理方式有本地管理和字典管理(已淘汰)两种。

    3.Oracle数据结构

    注意:

    1)如果system表空间是数据字典管理,其他表空间可以是数据字典管理或者本地管理local(本地)

    2)字典管理可以转换为本地管理,但是对于系统表空间,要求执行一些附加步骤,比较麻烦    

    SQL>execute dbms_space_admin.tablespace_migragte_to_local('tablespacename');

  基本操作:

  1)创建表空间:

  sql>create tablespace test datafile '/data/oracle/oradata/orcl/test01.dbf' size 10m; 

  这里可以利用oracle提供的dbms_metadata.get_ddl包看看缺省值都给的是什么? 

SQL>set serverout on;

SQL> declare
aa  varchar2(2000);
begin
select dbms_metadata.get_ddl('TABLESPACE','TEST') into aa FROM dual;
dbms_output.put_line(aa);
end;
/  2    3    4    5    6    7  

结果: CREATE TABLESPACE "TEST" DATAFILE '/data/oracle/oradata/orcl/test01.dbf' SIZE 10485760 LOGGING ONLINE PERMANENT BLOCKSIZE 8192 EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT NOCOMPRESS SEGMENT SPACE MANAGEMENT AUTO ##关注最后一行,两个重要信息是:(1)区本地管理且自动分配空间,(2)段自动管理。
PL/SQL procedure successfully completed.
SQL>

  2)删除表空间  

  SQL>drop tablespace 表空间名 including contents and datafiles;
  contents:包括控制文件和数据字典信息,
  datafiles:这个物理文件

   数据库在open状态的时候不能删除如下表空间:

   1.system  2.active undo tablespace 3.default temporary tablespace 4.default tablespace

  数据库在open状态的时候不能offline的表空间的是:

  1.system 2.active undo tablespace 3.default temporary tablespace

 3)常用的查表空间命令 

1.查看表空间大小
SQL> select TABLESPACE_NAME,sum(bytes)/1024/1024 from dba_data_files group by tablespace_name;

2.查看表空间空闲大小
SQL> select TABLESPACE_NAME,sum(bytes)/1024/1024 from dba_free_space group by tablespace_name;

3.查看表空间(数据文件)是否是自动扩展
SQL> col file_name for a40;
SQL> select file_name,tablespace_name,bytes/1024/1024 mb,autoextensible from dba_data_files;

 4)建立大文件的表空间

  small file:在一个表空间中可以建立多个数据文件(默认)

  bigfile:在一个表空间中只能建立一个数据文件(该数据文件最大可达32T),简化对数据管理 

  SQL> create bigfile tablespace big_tbs datafile '/u01/oradata/prod/bigtbs01.dbf' size 100m;
  试图在该表空间下增加一个数据文件会报错
  SQL> alter tablespace big_tbs add datafile '/u01/oradata/prod/bigtbs02.dbf' size 100m;
  报错:ORA-32771: cannot add file to bigfile tablespace
  查看大文件表空间:
  SQL> select name,bigfile from v$tablespace;     

   大文件表空间

    优势:

    -减少数据库的数据文件个数(每个数据库64个数据文件)

    -方便文件管理,不需要人工干预表空间的文件大小

    -减少数据库对文件头同步开销

  

3.segment(段)

  在oracle中,凡是被分配了空间的对象,都称之为段。

  特点

  1)表空间在逻辑上可以对应多个段,物理上是对应的是多个数据文件,一个段比较大时可以跨多个数据文件。

  2)创建一个表,oralce会为表创建一个(或多个)段,在一个段中保存该表的所有表数据(表数据不能跨段)

  3)段中至少有一个初始区,当这个段数据增加使得区(extent)不够时,将为这个段分配新的后续区。

  临时段:

  1)临时段也叫临时表空间,一般用作排序,(hash,merge... 需要一个中间数据处理区域,) 

  2)只要当oracle内存不够时,oracle才会在临时表空间上创建临时段

  3)临时段上的操作并不会记录redo log

  临时表:

  1)Oracle临时表只存在于某个会话或者事务的生命周期里,此时临时表的数据只对这个会话可见。

  2)临时表经常被用于存放一个操作的中间数据(数据的中间处理环节)

  3)临时表由于不产生redo,故能提高数据操作性能。

  4)临时表上也是可以创建索引的

  创建临时表: 

  语法:
  create global temporary 临时表名 on commit delete rows
  
  on commit delete row:临时表中的数据基于事务的,当事务提交或者回滚时,临时表中的数据将被清空
  on commit preserve row:临时表中的数据基于回话,当回话结束后,临时表中的数据被清空了

  段压缩:

  1) oracle允许对段进行压缩

  2)优点:1.减少存储空间,2.减少处理数据块(减少内存占用、提高io速度、提高查询效率)

  3)缺点:因为要额外地对数据进行处理,在数据插入时,会消耗更多的资源和时间

  语法:

    >create table 表名 compress  as select * from dba_objects;   ##设置压缩

    >alter  table  表名 nocompress ##取消压缩

  段压缩级别:

    1)表空间级别  2)表级(索引) 3)分区  4)子分区

    表空间级别:

      >create table 表名 tablespace 表空间名  as select * from dba_objects; ##这里的表空间是已经压缩过了的,然后再在这个表空间中创建表

      >select table_name,compression from user_tables where table_name='表名‘;

  段的管理方式:

    1)自动管理方式:简称ASSM(Auto segment space management) 采用位图管理段的存储空间

      简单说就是每个段的段头都有一组位图(5个位图),位图描述每个块的满度,根据满度的不同将每个块登记到相应的位图上,位图自动跟踪每个块的使用空间(动态),5个位图的满度按如下定义:满度100%,75%、50%、25%和0%,比如块大小为8k,你要插入一行是3k的表行,那么oracle就给你在满度50%的位图上找个登记的可插入的块。减少热点;

    ASSM的前提是EXTENT MANAGEMENT LOCAL,在ORACLE9I以后,缺省状态为自动管理方式,ASSM废弃pctused属性。

    自动段管理优缺点:

    优点:

      -简化管理,ASSM避免了手动设置参数大量的存储相关的参数,除了唯一的一个uctfree

      -增大并发度,如果有多个事务并发方位一个段,对于MSSM,由于使用freelist列表进行空间管理,导致大量的会话访问这些列表,出现资源的等待和争用,ASSM由于不使用freelist方式管理空间,会有效避免资源哦争用和等待。

      -Rac模式下可以改善并发性能(不需要各个实例间相互访问大量的freelist列表)

    缺点:

      -FTS(全表扫描)

      -大数据的加载,会导致性能下降

      -影响索引的集群因子(clustering factor)

     2) 手动管理方式:简称MSSM(manual segment space management) 采用的是freelist(空闲列表)管理段的存储空间。

      原理是:这时传统的方式,现在也在使用,涉及三个概念:freelist、pctfree、pctused.

     freelist:空闲列表中登记了可以插入数据的可用块,位置在段头,插入表行数据时首先查找该列表。

     pctfree:用来为一个块保留的空间百分比,以防止在今后的更新操作中增加一列或多列值的长度。达到该值,从freelist清除该块信息

     pctused:一个块的使用水位的百分比,这个水位将使该块返回到可用列表中去等待更多的插入操作。达到该值,该块信息登录到freelist

 

 

     pctused这个参数在ASSM下不使用,ASSM使用位图状态位取代了pctused.

    3.Oracle数据结构

    3)创建MSSM对象     

      SQL>create tablespace ts_mssm segment space management manual;
  
      SQL>create table t_m(id int) pctfree 20 pctused 20 storage(freelist 20 next 5M) tablespace ts_mssm;

      SQL>select pct_free,pct_used,freelists from user_tables where table_name='T_M'; ##查看相关信息

     4)手动段管理特点

      优点:1.给与DBM更大的空间管理余地   2.对于一些数据块操作非常敏感的场景依然有用。

      缺点:1.参数设置多. 2.参数设定值困难 3.需要更高水平的DBA

     

 

  

      .

   

  

  

 

  

上一篇:管理undo


下一篇:Oracle Bigfile Tablespace大文件表空间