Oracle Database 9i/10g/11g程式設計藝術 筆記

志_祥發表於2014-10-31

Oracle Database 9i/10g/11g程式設計藝術

跳轉至: 導航 搜尋

目錄

序言

  1. 11g r1: SKIP LOCKED特性(用於記錄的序列化處理,不同的事務能夠得到不同的記錄)
  2. pragma autonomous_transaction; //在大的事務中強制子事務執行,審計?
  3. 從SQL Server升級的要點:不要開啟多個連線;使用繫結變數(Oracle太自大了,為什麼不能模仿一下SQL Server呢?)
  4. 用SELECT ... FOR UPDATE鎖定資料,以避免併發問題
    事務性不表示一致性,因此需要了解‘併發控制’
  5. Oracle的MVCC:讀一致;查詢不會被寫阻塞
    1. 9i+:閃回查詢 select ... as of scn :scn;(這相當於把資料庫放到一個版本管理系統下了。。。)
    2. exec :scn = dbms_flashback.get_system_change_number;
  6. id:建立trigger?
    1. 更好的方法:create sequence t_seq; insert into ... values(t_seq.nextval,....)
  7. 複製絕不簡單(併發的insert from select例子)
  8. 又:父子表的關聯彙總報表查詢,Oracle提供了:
    1. 子查詢分解(WITH子句)、內聯檢視(select from select)、標量子查詢
    2. 不支援這些特性的資料庫,要麼手工迭代每行執行聚集查詢,要麼使用hash join(浪費空間)?
  9. 每個使用者一個會話?系統設定:
    1. create profile p_one_user_one_session limit sessions_per_user 1;
  10. 細粒度訪問控制(FGAC)

體系結構概述

  1. 一個例項一個資料庫?(授許可權制?)
  2. ‘專用伺服器’程式?
  3. TNS連線字串?
  4. 監聽器:指示埠號,以連線到排程器(有點像ftp?)

檔案

  1. V$PARAMETER
    1. show parameter db_block_s #自動字首匹配
    2. 可供任何使用者用的:dbms_utility.get_parameter_value
  2. SPFILE:索引init.ora?
  3. 重做日誌:ARCHIVELOG
  4. 10g Data Pump:用於取代老的EXP/IMP,--使用XML表示後設資料?

記憶體結構

  1. SGA PGA UGA
  2. 行列轉換(pivot)?

Oracle程式

  1. 11g DRCP
  2. 會話:可暫時中斷物理連線?
  3. 。。。

鎖和閂

  1. 事務是‘核心’
  2. 要延遲到適當時候提交:不提交不會有壓力。。。
  3. 只要需要,長期保持鎖(不是稀有資源)
  4. 不會鎖升級(escalation),但可以轉換(conversion),或提升(promotion)
  5. 3 types:
    1. DML鎖:TX TM
    2. DDL鎖:排他、共享、可中斷
    3. latch(spin lock?)

併發與MVCC

  1. 隔離級別:讀未提交,--Oracle中不允許
  2. 可重複讀:防止‘丟失更新’
  3. 可序列化:ORA-08177錯誤(試圖更新某行,但它自事務開始後已經被修改--一般因為所在資料塊有其他行被修改)
  4. READ ONLY事務
  5. 寫一致:重啟動?

事務

  1. 可後臺提交,因此不能保證永續性
  2. 完整性約束:
    1. IMMDIATE
    2. DEFERRABLE
  3. 無法通過頻繁提交來‘節省’undo空間
  4. !可重啟動:寫操作應該是‘冪等’的?

redo與undo

  1. 與redo不同,undo內部儲存在特殊的段中(rollback segment)
  2. undo:邏輯地恢復!
  3. COMMIT:呼叫LGWR重新整理redo
  4. 關閉redo:NOLOGGING?
  5. 塊清除:刪除所修改資料塊上的‘鎖定’相關資訊
  6. 臨時表(8i 8.1.5+):不會生成redo
  7. 分析undo
    1. ORA-01555: snapshot too old
    2. INSERT生成的undo最少(只需刪除一個rowid),DELETE生成的undo最多(哈)

資料庫表

  1. 9種表型別:
    1. 堆組織的、索引組織的(IOT)、聚簇(index clustered)、雜湊聚簇、sorted雜湊聚簇(10g)、巢狀表、臨時表、物件表、外部表
  2. 列數>254時,使用額外的row piece
  3. 段(佔用磁碟儲存的物件)
    1. MSSM、ASSM
    2. 高水位線(HWM)
    3. MSSM中的FREELIST --這裡的概念有點類似於‘記憶體管理’?
    4. PCTFREE和PCTUSED
  4. IOT:適合於查詢表
  5. *巢狀表(create type):不支援引用完整性約束,不能引用任何表包括自己 --雞肋?
  6. *物件表:create table t of Some_Type; //?

索引

  1. 點陣圖聯合索引(bitmap join index)?
  2. 函式索引:DETERMINISTIC
  3. CBO

資料型別

  1. DATE TIMESTAMP INTERVAL
  2. LOB(大物件):CLOB(=TEXT?)、NCLOB、BLOB、BFILE

分割槽

  1. CREATE TABLE emp ... PARTITION BY HASH(empno) ( ... )
  2. 9i r1:列表分割槽
  3. 11g r1:間隔分割槽、引用分割槽
  4. 組合分割槽 ?

並行執行

  1. 並行查詢是不可擴充套件的 ?
  2. Oracle Exadata
  3. 並行DML(PDML)
  4. PDDL
  5. DIY

資料載入與解除安裝

  1. SQL *Loader(SQLLDR)
  2. 9i+:外部表(直接訪問外部檔案系統)

加密

  1. 11g r1:Oracle錢夾*
  2. 透明表空間加密* 

相關文章