<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
    一、數據庫邏輯結構
    ?
    ?
    ?
    ?????????????? 邏輯結構在Oracle體系中的位置
    ?
    ?
    邏輯結構層次:
    數據庫(DataBase-->表空間(TableSpace)-->段(Segment)-->區間(Extent)-->數據塊(Block)
    ?
    ?
    表空間(TableSpace)
    ?
    ??? 表空間是數據庫中的基本邏輯結構,任何數據庫對象在存儲時都必須存儲在某個表空間中。表空間對應于若干個磁盤文件,即表空間是由一個或多個磁盤文件構成的(物理上的一對多關系)。表空間相當于操作系統中的文件夾,也是數據庫邏輯結構與物理文件之間的一個映射。每個數據庫至少有一個表空間,表空間的大小等于所有從屬于它的數據文件大小的總和。
    ???? Oracle10g一般包括以下空間:

    ??? select * from dba_data_files;

    ??? select * from v$tablespace;

    ??? select * from dba_tablespaces;

    ?

    (一)系統表空間(SYSTEM TableSpace
    ??? SYSTEM是每個Oracle數據庫都必須具備的。其功能是在系統表空間中存放諸如表空間名稱、表空間所含數據文件等數據庫管理所需的信息。系統表空間的名稱是不可更改的。系統表空間必須在任何時候都可以用,也是數據庫運行的必要條件。因此,系統表空間是不能脫機的。
    ??? 系統表空間包括數據字典、存儲過程、觸發器和系統回滾段。為避免系統表空間產生存儲碎片以及爭用系統資源的問題,應創建一個獨立的表空間用來單獨存儲用戶數據。
    ?
    (二)SYSAUX表空間(SYSAUX TableSpace
    ??? SYSAUX是隨著數據庫的創建而創建的,它充當SYSTEM的輔助表空間,主要存儲除數據字典以外的其他對象。SYSAUX也是許多Oracle 數據庫的默認表空間,它減少了由數據庫和DBA管理的表空間數量,降低了SYSTEM表空間的負荷。
    ?
    (三)臨時表空間(TEMP TableSpace)
    ??? 相對于其他表空間而言,TEMP主要用于存儲Oracle數據庫運行期間所產生的臨時數據(例如order by時)。數據庫可以建立多個臨時表空間。當數據庫關閉后,臨時表空間中所有數據將全部被清除。除臨時表空間外,其他表空間都屬于永久性表空間。
    ?
    (四)撤銷表空間(UNDOTBS1 TableSpace)
    ??? UNDOTBS1是用于保存Oracle數據庫撤銷信息,即保存用戶回滾段的表空間。
    ?
    ??? 另外10g在創建數據庫的時候還會產生EXAMPLE和USERS表空間,用于存放系統實例和用戶信息,但在實際的操作中一般會將EXAMPLE空間刪去,并且盡量少使用USERS空間。在9i中還會生成另外一些如INDEX、CWMLITE、TOOLS等表空間,但在10g中已經整合到一起。

    段(Segment)
    ??? 段是對象在數據庫中占用的空間,雖然段和數據庫對象是一一對應的,但段是從數據庫存儲的角度來看的。一個段只能屬于一個表空間,當然一個表空間可以有多個段。 表空間和段是邏輯存儲上的一對多的關系,段不直接和數據文件發生關系。一個段可以屬于多個數據文件,關于段可以指定擴展到哪個數據文件上面。

    ??? select * from dba_segments;

    ?
    (一)數據段(Data Segment)
    ??? 對于每一個非聚集的表有一數據段,表的所有數據存放在該段。每一聚集有一數據段,聚集中每一個表的數據存儲在該段中。當創建一個表時,系統自動創建一個以該表的名字命名的數據段。
    ?
    (二)索引段(Index Segment)
    ??? 每一個索引有一個索引段,存儲索引數據。一旦建立索引,系統自動創建一個以該索引的名字命名的索引段。
    ?
    (三)回滾段(Rollback Segment)
    ??? 由DBA建立,用于臨時存儲要撤銷的信息,這些信息用于生成一致性數據庫信息、在數據庫恢復時使用,回滾未提交的事務。當一個事務開始處理時,系統為之分配回滾段,回滾段可以動態創建和撤銷。系統有個默認的回滾段,其管理方式既可以是自動的,也可以是手工的。
    ?
    (四)臨時段(Temporary Segment)
    ??? 當一個sql語句需要臨時工作區時,由oracle建立。當語句執行完畢,臨時段的范圍退還給系統。
    ?
    ?
    ?
    數據區間(Extent)
    ?
    ??? 數據區間是一組連續的數據塊。當一個表、回滾段或臨時段創建或需要附加空間時,系統總是為之分配一個新的數據區,一個數據區不能跨越多個文件,因為它包含連續的數據塊在一個段中可以存在多個區間,區間是為數據一次性預留的一個較大的存儲空間,直到那個區間被用滿,數據庫會繼續申請一個新的預留存儲空間,即新的區間,一直到段的最大區間數(Max Extent)或沒有可用的磁盤空間可以申請。
    ??? 使用區的目的是用來保存特定數據類型的數據,也是表中數據增長的基本單位。在Oracle數據庫中,分配空間就是以數據區為單位的。理論上一個段是可以無窮個區間的,但是多個區間對ORACLE卻是有性能影響的,ORACLE建議把數據分布在盡量少的區間上,以減少ORACLE的管理與磁頭的移動,但是在某些特殊情況下,需要把一個段分布在多個數據文件或多個設備上,適當的加多區間數也是有很大好處的。

    ??? select * from dba_extents;

    ?
    ?
    數據塊(Block)
    ?
    ??? 塊是Oracle最基本的存儲單位,在建立數據庫的時候指定,雖然在初始化文件中可見,但是不能修改。為了保證存取的速度,它是OS數據塊的整數倍。ORACLE的操作都是以塊為基本單位,一個區間可以包含多個塊,如果區間大小不是塊大小的整數倍,ORACLE實際也擴展到塊的整數倍。
    ?
    ??? 塊的大小由初始參數DB_BLOCK_SIZE指定。(默認8K-8192)決定 數據塊大小要考慮以下因素:
    ??? 一是數據庫環境類型。例如,是DSS環境還是OLTP環境?在數據倉庫環境(OLAP或DSS)下,用戶需要進行許多運行時間很長的查詢,所以應當使用大的數據塊。在OLTP系統中,用戶處理大量的小型事務,采用較小數據塊能夠獲得更好的效果。
    ??? 二是SGA的大小。
    ?
    ??? 塊的內部結構與數據的存取方法都是比較復雜的,以表段的塊為例,從簡單的結構上劃分,可以把塊的內部劃分成如下幾個部分:公用頭,表目錄,行目錄,可存取空間等。 以下是一個表塊的大致結構圖:
    ???? ???????11.png
    ?
    (一)塊頭(BLOCK HEADER):包含著關于塊類型(表塊、索引塊等等)的信息、關于塊上活動和過時事務信息、磁盤上塊的地址的信息。
    (二)表目錄(Table directory):如果給出的話,包含著此塊中存儲各行的表的信息(多個表的數據可能保存在同一個塊中)。
    (三)行目錄(Row directory):包含在塊中發現的描述行的信息(如地址等)。
    ?????注:以上3部分為塊的開銷(Block Overhead),剩余部分為可用存儲空間。(一般的8K(8192)的塊可用空間為8168)
    (四)行數據:包括表或索引數據。一行可跨越多個數據塊。
    (五)空閑空間:分配空閑空間是用于插入新的行和需要額外空間的行更新。
    ?
    PCTFREE:
    ??? 表示保留該百分比的可用空間用于以后的行更新,避免行遷移。少于此百分比時,該塊從FREE LIST上撤消下來,不再接收數據。如果pctfree設置得太高,則在全表掃描期間增加I/O,浪費磁盤空間;如果pctfree設置得太低,則會導致行遷移。
    PCTUSED:
    ??? 當數據塊的使用空間低于pctused的值時,此數據塊標志為空閑,該空閑空間僅用于插入新的行。如果數據塊已經達到了由pctfree所確定的上邊界時,Oracle就認為此數據塊已經無法再插入新的行。如果pctused設置過高,則會降低磁盤的利用率導致行遷移;若pctused設置過低,則浪費磁盤空間,增加全表掃描時的I/O輸出。
    ??? 注:PCTFREE與PCTUSED默認分別是10與40,其配置與系統的優化有關,要慎重使用,PCTFREE+PCTUSED不要大于等于100,否則將導致塊不斷的在FREELIST移上移下,嚴重影響性能。若兩者之和低于100,則空間的利用與系統的I/O之間的最佳平衡點是:pctfree與pctused之和等于100%減去一行的大小占塊空間大小的百分比。例如,如果塊大小為2048字節,則它需要100個字節的開銷,而行大小是390字節(為可用塊的20%)。為了充分利用空間,pctfree與pctused之和最好為80%。
    ?
    ?
    ?
    ?
    ?
    ?
    二、關于邏輯結構的操作
    ?
    ?
    1、查詢表空間的文件的對應物理文件:
    SQL> select * from dba_data_files;
    ?
    2、查詢表空間的空閑信息:
    SQL> select * from dba_free_space;
    ?
    3、將表空間設置為離線(offline)狀態:
    設置成離線的狀態,則所有對該表空間內對象的修改將無法同步到數據文件中
    SQL> alter tablespace?***?offline;
    ?
    4、限制某個用戶能夠使用的表空間的大小:
    SQL>alter user *** quota ***M on ***
    ?
    5、指定用戶的臨時表空間:
    SQL>CREATE USER *** IDENTIFIED BY **** TEMPORARY TABLESPACE temp;
    ?
    6、查詢用戶的區間信息:
    SQL> select * from user_extents;
    ?
    7、查詢索引信息:
    SQL> select * from user_indexes;
    ?
    8、查看表空間的具體信息:
    SQL> select * from dba_tablespaces;
    BLOCK_SIZE :數據塊的大小
    INITIAL_EXTENT:初始化時分配的區的大小,其值為BLOCK_SIZE的整數倍
    NEXT_EXTENT:當初始化時分配的區不夠時,下一次擴展的區的大小
    MIN_EXTENTS:區大小的下限
    MAX_EXTENTS:區大小的上限
    ?
    9、查看模式對象(Schema Object):
    SQL> select * from dba_source;
    Oracle模式對象包括了表、索引、約束、過程、函數、觸發器等等應用結構。
    ?
    10、與表空間有關的數據字典匯總:
    dba_tablespaces----------------TableSpace表
    dba_users----------------------User表
    dba_ts_quotas------------------TableSpace配額表
    dba_data_files-----------------TableSpace對應File表,描述了全部數據文件的名稱、文件標識、大小、對應的表空間信息
    dba_extents--------------------Extent表
    dba_free_space-----------------TableSpace剩余空間表
    dba_segments-------------------Segment表
    dba_temp_files-----------------dba_data_files子表
    dba_undo_extents---------------dba_extents子表
    dba_rollback_segs--------------dba_segments子表
    v$backup_datafile--------------此視圖通常用來獲取每個數據文件中非空白數據塊的數量,從而幫助你創建出大小基本相等的備份集。
    v$database_block_corruption----查詢壞塊的視圖
    v$datafile---------------------描述了數據文件的同步信息
    v$datafile_copy----------------包含控制文件中數據庫文件副本的信息。
    v$datafile_header--------------顯示數據文件頭部的數據文件信息
    v$rollstat---------------------本視圖自啟動即保持并記錄各回滾段統計項。
    v$segment_statistics-----------實時監測段級(segment-level)統計項
    v$undostat---------------------本視圖監控當前實例中undo 空間以及事務如何運行
    ?
    11、創建一個表空間:
    SQL> create tablespace?*** nologging
    ? 2? datafile 'D:\oracle\product\10.2.0\oradata\***\***01.ora' size 50m blocksize 8192
    ? 3? extent management local uniform size 256k
    ? 4? segment space management auto;
    ?
    SQL> create temporary tablespace temp
    ? 2? tempfile 'D:\ oracle\product\10.2.0\oradata\***\temp01.ora'
    ? 3? size 500m autoextend off
    ? 4? extent management local uniform size 512k;
    ?
    12、表空間的讀寫控制:
    SQL>alter tablespace?*** read only;
    SQL>alter tablespace?*** read write;
    ?
    13、刪除表空間:
    SQL>drop tablespace *** including contents and datafiles;
    包含空間內的目錄內容和數據文件
    ?
    14、表空間改名:
    SQL>alter tablespace users rename to newusers;
    ?
    15、表空間組:
    (一)在Oracle 10g中增加了一個表空間組的概念,通過使用表空間組用戶可以使用一個以上的表空間存儲臨時段。表空間組是在第一個表空間被指定給該組時,由系統自動隱式創建的。例如:
    SQL> alter tablespace temp tablespace group temp_ts_group;
    ?
    (二)添加一個新表空間到該表空間組:
    SQL> create temporary tablespace temp2
    ? 2? tempfile 'D:\oracle\product\10.2.0\oradata\test\temp201.dbf?' size 20m
    ? 3? tablespace group temp_ts_group;
    ?
    (三)可通過以下SQL查找表空間組的情況:
    SQL> select * from dba_tablespace_groups;
    ?
    (四)將整個表空間組給用戶作為臨時表空間:
    SQL> alter user scott temporary tablespace temp_ts_group;
    SQL> alter database default temporary tablespace temp_ts_group; --設置成默認
    ?
    (五)將表空間移出表空間組:
    SQL> alter tablespace temp2 tablespace group; --后面不寫
    ?
    16、表空間相關查詢:
    ?
    ??? (一)查詢數據文件,表空間名以及大小

    ??? select file_name,tablespace_name,round(bytes/ 1024000 ) MB

    ??? from dba_data_files

    ??? order by file_name;

    ?
    ??? (二)查詢表空間、表空間的文件、分配的空間、空閑空間以及下一個空閑分區

    ??? select ddf.tablespace_name tablespace_name,ddf.file_name file_name,ddf.bytes/ 1024 tablespace_kb,

    ??? sum (fs.bytes)/ 1024 kbytes_free, max (fs.bytes)/ 1024 next_free

    ??? from sys.dba_free_space fs,sys.dba_data_files ddf

    ??? where ddf.tablespace_name=fs.tablespace_name

    ??? group by ddf.tablespace_name,ddf.file_name,ddf.bytes/ 1024

    ??? order by ddf.tablespace_name,ddf.file_name;

    ?
    ??? (三)表空間數據文件的實際大小(與磁盤中大小不同)

    ??? select substr(df.file_name, 1 , 70 ) filename, max (de.block_id*

    ??? (de.bytes/de.blocks)+de.bytes)/ 1024 min_size

    ??? from dba_extents de,dba_data_files df

    ??? where de.file_id=df.file_id

    ??? group by df.file_name;

    ?




    -The End-

    posted on 2008-08-19 22:12 decode360-3 閱讀(359) 評論(0)  編輯  收藏 所屬分類: Oracle
    主站蜘蛛池模板: 日韩欧美亚洲中文乱码| 国内成人精品亚洲日本语音| 中文字幕在线视频免费| 亚洲国产成人久久一区WWW| 野花视频在线官网免费1| www.亚洲精品| 久久99精品免费一区二区| 区久久AAA片69亚洲| 在线播放免费人成毛片乱码| 久久亚洲伊人中字综合精品| 无码一区二区三区免费| 久久久亚洲欧洲日产国码二区| 99ee6热久久免费精品6| 亚洲电影在线播放| 无码中文字幕av免费放| 妇女自拍偷自拍亚洲精品| 亚洲色偷拍区另类无码专区| 花蝴蝶免费视频在线观看高清版| 亚洲成AV人在线观看天堂无码| 18级成人毛片免费观看| 亚洲av一本岛在线播放| 日韩视频免费在线| 97超高清在线观看免费视频| 亚洲高清在线视频| 女人18一级毛片免费观看| 日本特黄特色AAA大片免费| 亚洲无线码一区二区三区| 国产92成人精品视频免费| 国产成人亚洲综合网站不卡| 亚洲精品综合久久| 少妇无码一区二区三区免费| 亚洲妇女无套内射精| 在线观看亚洲精品国产| 亚欧色视频在线观看免费| 色网站在线免费观看| 亚洲黄色免费在线观看| 四虎影视精品永久免费| 99re6在线精品视频免费播放| 国产午夜亚洲精品不卡| 亚洲综合在线视频| 亚洲高清免费视频|