3.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

     

 

  

      .

   

  

  

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM