程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> Oracle 體系架構--Oracle存儲

Oracle 體系架構--Oracle存儲

編輯:更多數據庫知識

一,表空間 tablespace
    系統表空間       一定要online
    輔助表空間
    回滾表空間       一定要online
    臨時表空間
    應用表空間
    SELECT * FROM Database_Properties      記錄db級的一些參數的缺省值
    如缺省表空間,缺省臨時表空間,缺省表空間類型
    1,創建表空間:
    create tablespace ts datafile '/u1/oradata/a/ts.dbf' size 10M
    extent management local autoallocate    也可為unifom size 1M
    segment space management auto;      也可為manual
    創建臨時表空間:
    create temporary tablespace mytemp tempfile '/u1/oradata/a/mytemp.dbf' size 10M
    extent management local uniform size 1M
    segment space management manual;
    臨時表空間只可以用uniform size 和 manual
    設定表空間為DB的默認表空間
    alter database default tablespace ts
    設定某臨時表空間為DB的默認表空間
    alter database temporary tablespace mytemp
    查 Database_Properties發現默認表空間改變

    2,臨時表空間組 (10g新特性)
    用於解決同一用戶多個會話表空間爭用問題
    創建臨時表空間組(添加組員):
    alter tablespace mytemp tablespace group g1;
    alter tablespace mytemp2 tablespace group g1;
    產生一個組後產生一個數據字典:SELECT * FROM Dba_Tablespace_Groups 可查
    將用戶的臨時表空間設置成該臨時表空間組
    alter user scott temporary tablespace g1
    將DB默認的臨時表空間設為該臨時表空間
    alter database default temporary tablespace g1;
    將臨時表空間成員從臨時表空間組中刪除
    alter tablespace mytemp tablespace group '';
    v$tempfile 和 dba_temp_files區別?
    v$tempfile 在控制文件中,mount狀態可讀。dba_temp_files在數據文件中
    設計這兩個功能相近的數據字典是為了恢復方便
    3,輔助表空間,
    SELECT * FROM v$sysaux_occupants;  可查看輔助表空間有哪些工具
    二,數據塊
    標准塊:大小和db_block_size一樣的塊
    非標准塊:大小和db_block_size不一樣的塊
    塊的大小
    塊小:每一塊中的記錄少,並發概率小,但是塊比較多,查詢速度慢
    塊大:並發概率大,但是查詢速度快
    若建表是塊大小已經比較大了,事後發現並發量太大如和做?
    調整pct_free
    復合型:
    在內存中每個塊的緩沖區大小show parameter cache_size可查
    若內存中默認cache_size 為8k有一個表的塊大小是16k,則需要在內存中開辟一段空間,器
    cache_size為16k。所以 cache中既有8k的空間又有16k的空間,所以稱為復合型
    alter system set db_32k_cache_size=20M    把32k的cache設置為20M大小
    可用dump oracle最底層剖析來分析
    三,對象管理
    1,表:
    分類:
    a,normal 對表
    b,分區表(方便維護,可以提高性能)
    c,索引組織表(IOT)
    d,簇表  會減少鏈接的代價:當需要兩個表連接時會生成一個簇表,查詢時減少鏈接代價
    表的屬性:    SELECT * FROM Dba_Tables;
    logging :默認寫日志,參照表空間的屬性
    initextent:不指定默認和表空間一致
    pct_free
    pct_used
    ini_trans   事務槽的初始長度
    max_trans   事務槽的最大長度
    事務槽位於塊頭下面,當塊中記錄被修改了事務槽就記錄一條,如事務槽最大長度為200
    那麼當修改第201次記錄且之前事務都沒結束時會報錯
    創建表時指定事務槽大小:
    create table aaa(a int) max_trans=3;
    rowid 邏輯地址:rowid是不存在任何塊中,存在索引中
    前6位:對象ID(表或索引)     Dba_Objects
    7-9位:對象所在文件ID        Dba_Data_Files      v$datafile
    10-15位:數據塊ID,針對數據文件的
    16-18位:塊內行號
    SELECT dbms_rowid.rowid_object(ROWID) AS obj#,
    dbms_rowid.rowid_relative_fno(ROWID) AS file#,
    dbms_rowid.rowid_block_number(ROWID) AS block#,
    dbms_rowid.rowid_row_number(ROWID) AS row#
    FROM scott.dept;
    查dept表中所有記錄的rowid
    rowid 如何映射到塊內的行的?
    通過查詢索引,查到要查信息的rowid。通過rowid的信息查找到塊以及塊內的行號,若塊中那
    行記錄曾經alter並且新記錄沒有記錄在原來的部位,則原來的部位會記錄一個偏移量,從而找到該
    記錄的新位置
    消除碎片的方法:
    (1)move   (8i,9i)
    alter table ts move TBSNAME;
    show parameter user_segment 可查
    注意:move時全表鎖,做完後重建索引
    (2)shink  (10g新特性)
    原理:先排序後釋放空間
    要先讓表有行移動的功能:
    alter table test1 enable row movement
    排序:
    alter table test1 shink space compact
    釋放空間:
    alter table test1 shink space
    shink過程不會引發行級觸發器,但索引要重建

    (3)exp imp  備份恢復技術
    面試題:如何清空一個大表?
    若delete from  要寫日志
    若truncate 只在數據字典中標記,並不刪除數據釋放區間;
    所以要刪除一個大表應該先回落HWL在系統空閒的時候在釋放空間:
    所以先truncate
    然後系統空閒時 alter table scott.tab1 deallocate unused keep 100m  釋放到還剩100m
    alter table scott.tab1 deallocate unused keep 0m    完全釋放
    建表時設定不記錄日志:
    create table scott.tab as select * from dba.objects nologging;
    刪除表並釋放空間:
    truncate table scott.tab1 reuse storage
    2,索引:
    在無索引的情況下:要查找empno=7369的人的name時,要全表掃描,即使找到一個還是要繼
    續掃描全表
    有索引的情況下

 

*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved