ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

3.Oracle数据结构

2021-11-19 22:00:52  阅读:172  来源: 互联网

标签:管理 空间 tablespace oracle SQL Oracle 数据结构 数据


1.前言

  这里说一下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两种,区管理方式有本地管理和字典管理(已淘汰)两种。

    

    注意:

    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)创建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

     

 

  

      .

   

  

  

 

  

标签:管理,空间,tablespace,oracle,SQL,Oracle,数据结构,数据
来源: https://www.cnblogs.com/zmc60/p/15579484.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有