熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle9i數據庫設計指引全集一

2022-06-13   來源: Oracle 

   數據庫物理設計原則
  
   數據庫環境配置原則
  
   操作系統環境
  
  對於中小型數據庫系統采用linux操作系統比較合適對於數據庫冗余要求負載均衡能力要求較高的系統可以采用Oraclei RAC的集群數據庫的方法集群節點數范圍在對於大型數據庫系統可以采用Sun Solaris SPARC 位小型機系統或HP 系列小型機系統RAD 適合只讀操作的數據庫RAD 適合OLTP數據庫
  
   內存要求
  
  對於linux操作系統下的數據庫由於在正常情況下Oracle對SGA的管理能力不超過G所以總的物理內存在G以下SGA的大小為物理內存的%—%對於位的小型系統Oracle數據庫對SGA的管理超過G的限制SGA設計在一個合適的范圍內物理內存的%—%當SGA過大的時候會導致內存分頁影響系統性能
  
   交換區設計
  
  當物理內存在G以下的情況下交換分區swap為物理內存的當物理內存>G的情況下swap大小為物理內存的
  
   其他環境變量參考Oracle相關的安裝文檔和隨機文檔
  
   數據庫設計原則
  
   數據庫SID
  
  數據庫SID是唯一標志數據庫的符號命名長度不能超過個字符對於單節點數據庫以字符開頭的個長度以內字串作為SID的命名對於集群數據庫當命名SID後各節點SID自動命名為SIDnn其中nn為節點號例如racracrac
  
   數據庫全局名
   
  數據庫全局名稱
  
  <sid>domain
  
   數據庫類型選擇
  
  對於海量數據庫系統采用data warehouse的類型對於小型數據庫或OLTP類型的數據庫采用Transaction Processing類型
   
   數據庫連接類型選擇
  
  Oracle數據庫有專用服務器連接類型和多線程服務器MTS連接類型對於批處理服務需要專用服務器連接方式而對於OLTP服務則MTS的連接方式比較合適由於采用MTS後可以通過配置網絡服務實現某些特定批處理服務采用專用服務器連接方式所以數據庫設計時一般采用MTS類型
   
   數據庫SGA配置
  
  數據庫SGA可以采用手工配置或按物理內存比例配置在數據庫初始設計階段采用按比例配置方式在實際應用中按系統調優方式修改SGA
   
   數據庫字符集選擇
  
  為了使數據庫能夠正確支持多國語言必須配置合適的數據庫字符集采用UTF字符集
  
  注意如果沒有大對象在使用過程中進行語言轉換沒有什麼影響具體過程如下(切記設定的字符集必須是ORACLE支持不然不能start)
  
  SQL> shutdown immediate;
  
  SQL> startup mount;
  
  SQL> alter system enable restricted session;
  
  SQL> alter system set job_queue_processes=;
  
  SQL> alter database open;
  
  SQL> alter database character set internal_use weisop;
  
  SQL> shutdown immediate;
  
  SQL> startup
  
   數據庫其他參數配置
  
   DB_FILES
  
  Db_files是數據庫能夠同時打開的文件數量默認值是當數據庫規劃時文件數量FILES接近或超過個時候按以下估計值配置:
  
  DB_FILES = FILES *
  
   Db_block_size
  
  一個extent要是個blocks的倍數為好一個blocks是字節那一個extent就是MM或M為好Db_block_size是數據庫最小物理單元一旦數據庫創建完成該參數無法修改db_block_size按以下規則調整
  
  數據倉庫類型 db_block_size盡可能大采用
  
  OLTP類型 db_block_size 用比較小的取值范圍
  
  Blocks推薦是系統操作的塊倍數(裸設備塊大小是字節NTFS是 K使用K的方式在大部分系統上通用)
  
   數據庫控制文件配置
  
   控制文件鏡象
  
  多個控制文件存放在不同的物理位置
  
   控制文件配置
  
  控制文件中參數設置最大的數據文件數量不能小於數據庫參數db_files
  
   數據庫日志文件配置
  
   日志文件大小
  
  日志文件的大小由數據庫事務處理量決定在設計過程中確保每分鐘切換一個日志文件所以對於批處理系統日志文件大小為幾百M 到幾G的大小對於OLTP系統日志文件大小為幾百M以內
  
   日志文件組數量
  
  對於批處理系統日志文件組為對於OLTP系統日志文件組為 每組日志大小保持一致對於集群數據庫系統每節點有各自獨立的日志組
  
   日志成員數量
  
  為了確保日志能夠鏡象作用每日志組的成員為
  
   數據庫回滾段配置
  
  在Oraclei數據庫中設計Undo表空間取代以前版本的回滾段表空間
  
  Undo 表空間大小的設計規范由以下公式計算
  
  Undospace = UR * UPS *db_block_size+ 冗余量
  
  UR 表示在undo中保持的最長時間數(秒)由數據庫參數UNDO_RETENTION值決定
  
  UPS表示在undo中每秒產生的數據庫塊數量
  
  例如在數據庫中保留小時的回退數據假定每小時產生個數據庫塊則Undospace = * * * K = G
  
   數據庫臨時段表空間配置
  
  數據庫臨時段表空間根據實際生產環境情況調整其大小表空間屬性為自動擴展
  
   數據庫系統表空間配置
  
  系統表空間大小G左右除了存放數據庫數據字典的數據外其他數據不得存儲在系統表空間
  
   數據庫表空間設計原則
  
   表空間大小定義原則
  
  當表空間 大小小於操作系統對最大文件限制時表空間由一個文件組成如果表空間大小大於操作系統對最大文件限制時該表空間由多個數據文件組成表空間的總大小為估算為
  
  Tablespace + sum (數據段+索引段)*%
  
   表空間擴展性設計原則
  
  表空間數據文件采用自動擴展的方式擴展容量快大小按的整數倍(MMMMMMM)進行擴展創建表空間時盡量采用nologing選項表空間的最大限制一般采用unlimited除非確切知道表空間數據文件的最大使用范圍(一般windows 32位系統的文件最大2G64位的unix系統系統文件最大128G但也要注意文件格式設定的文件大小)建議最大為G表空間采用local管理方式例如
  
  CREATE TABLESPACE TBS_USERINFO
  DATAFILE
  /oradata/tbs_userinfodbf
  SIZE M
  REUSE
  AUTOEXTEND ON
  NEXT M
  MAXSIZE UNLIMITED
  NOLOGGING
  EXTENT MANAGEMENT
  LOCAL
  AUTOALLOCATE
  SEGMENT SPACE MANAGEMENT AUTO;
  
   裸設備的使用
  
  一個scsi設備可以 個分區unix操作系統個分區性能比文件系統方式高%左右空間大於要小於(實際分區大小減兩個ORACLE的數據塊)比如M大於為K推薦在unix使用軟連接(ln)方式把裸設備形成文件用加入表空間時加resue 選項當然也可只接把設備加入表空間移動裸設備使用dd命令
  
  對於windows平台oracle提供軟連接工具實現裸設備的使用計算一條記錄的長度
  
   數據庫邏輯設計原則
  
   命名規范
  
   表屬性規范
  
   表名
  
  前綴為Tbl_ 數據表名稱必須以有特征含義的單詞或縮寫組成中間可以用_分割例如tbl_pstn_detail表名稱不能用雙引號包含
  
   表分區名
  
  前綴為p 分區名必須有特定含義的單詞或字串
  
  例如 tbl_pstn_detail 的分區p表示該分區存儲 時段的數據
  
   字段名
  
  字段名稱必須用字母開頭采用有特征含義的單詞或縮寫不能用雙引號包含
  
   主鍵名
  
  前綴為PK_主鍵名稱應是 前綴+表名+構成的字段名如果復合主鍵的構成字段較多則只包含第一個字段表名可以去掉前綴
  
   外鍵名
  
  前綴為FK_外鍵名稱應是 前綴+ 外鍵表名 + 主鍵表名 + 外鍵表構成的字段名表名可以去掉前綴
  
   索引
  
   普通索引
  
  前綴為IDX_索引名稱應是 前綴+表名+構成的字段名如果復合索引的構成字段較多則只包含第一個字段並添加序號表名可以去掉前綴
  
   主鍵索引
  
  前綴為IDX_PK_索引名稱應是 前綴+表名+構成的主鍵字段名在創建表時候用using index指定主鍵索引屬性
  
   唯一所以
  
  前綴為IDX_UK_索引名稱應是 前綴+表名+構成的字段名
  
   外鍵索引
  
  前綴為IDX_FK_索引名稱應是 前綴+表名+構成的外鍵字段名
  
   函數索引
  
  前綴為IDX_func_索引名稱應是 前綴+表名+構成的特征表達字符
  
   蔟索引
  
  前綴為IDX_clu_索引名稱應是 前綴+表名+構成的簇字段
  
   視圖
  
  前綴為V_按業務操作命名視圖
  
   實體化視圖
  
  前綴為MV_按業務操作命名實體化視圖
  
   存儲過程
  
  前綴為Proc_ 按業務操作命名存儲過程
  
   觸發器
  
  前綴為Trig_ 觸發器名應是 前綴 + 表名 + 觸發器名
  
   函數
  
  前綴為Func_ 按業務操作命名函數
  
   數據包
  
  前綴為Pkg_ 按業務操作集合命名數據包
  
   序列
  
  前綴為Seq_ 按業務屬性命名
  
   表空間
  
   公用表空間
  
  前綴為Tbs_ 根據存儲的特性命名例如 tbs_parameter
  
   專用表空間
  
  Tbs_<表名稱>_nn該表空間專門存儲指定的某一個表或某一表的若干個分區的數據
  
   數據文件
  
  <表空間名>nndbf nn =…等
  
   普通變量
  
  前綴為Var_ 存放字符數字日期型變量
  
   游標變量
  
  前綴為Cur_ 存放游標記錄集
  
   記錄型變量
  
  前綴為Rec_ 存放記錄型數據
  
   表類型變量
  
  前綴為Tab_ 存放表類型數據
  
   數據庫鏈
  
  前綴為dbl_ 表示分布式數據庫外部鏈接關系
  
   命名
  
   語言
  
  命名應該使用英文單詞避免使用拼音特別不應該使用拼音簡寫命名不允許使用中文或者特殊字符
  
  英文單詞使用用對象本身意義相對或相近的單詞選擇最簡單或最通用的單詞不能使用毫不相干的單詞來命名
  
  當一個單詞不能表達對象含義時用詞組組合如果組合太長時采用用簡或縮寫縮寫要基本能表達原單詞的意義
  
  當出現對象名重名時是不同類型對象時加類型前綴或後綴以示區別
  
   大小寫
  
  名稱一律大寫以方便不同數據庫移植以及避免程序調用問題
  
   單詞分隔
  
  命名的各單詞之間可以使用下劃線進行分隔
  
   保留字
  
  命名不允許使用SQL保留字
  
   命名長度
  
  表名字段名視圖名長度應限制在個字符內(含前綴)
  
   字段名稱
  
  同一個字段名在一個數據庫中只能代表一個意思比如telephone在一個表中代表電話號碼的意思在另外一個表中就不能代表手機號碼的意思
  
  不同的表用於相同內容的字段應該采用同樣的名稱字段類型定義
  
   數據類型
  
   字符型
  
  固定長度的字串類型采用char長度不固定的字串類型采用varchar避免在長度不固定的情況下采用char類型如果在數據遷移等出現以上情況則必須使用trim()函數截去字串後的空格
  
   數字型
  
  數字型字段盡量采用number類型
  
   日期和時間
  
   系統時間
  
  由數據庫產生的系統時間首選數據庫的日期型如DATE類型
  
   外部時間
  
  由數據導入或外部應用程序產生的日期時間類型采用varchar類型數據格式采用YYYYMMDDHHMISS
  
   大字段
  
  如無特別需要避免使用大字段(blobcloblongtextimage等)
  
   唯一鍵
  
  對於數字型唯一鍵值盡可能用系列sequence產生
  
   設計
  
   范式
  
  如無性能上的必須原因應該使用關系數據庫理論達到較高的范式避免數據冗余但是如果在數據量上與性能上無特別要求考慮到實現的方便性可以有適當的數據冗余但基本上要達到NF如非確實必要避免一個字段中存儲多個標志的做法表示個標志的一種取值這往往是增加復雜度降低性能的地方
  
   表設計
  
   邏輯段設計原則
  
   Tablespace
  
  每個表在創建時候必須指定所在的表空間不要采用默認表空間以防止表建立在系統表空間上導致性能問題對於事務比較繁忙的數據表必須存放在該表的專用表空間中
  
   Pctused
  
  默認pctused導致數據庫物理空間利用率非常低%左右對於update比較少或update不導致行增大的表pctused可設置在之間對於update能夠導致行增大的表update設置在之間
  
   Initrans
  
  對於需要並行查詢或者在RAC數據庫中需要並行處理的表initrans設置為的倍數否則不設該值
  
   Storage
  
   Initial
  
  盡量減少表數據段的extents數量initial的大小盡量接近數據段的大小KKMMMMM 等按的倍數進行圓整例如表或分區數據段大小為M則initial取M
  
   Next
  
  表或分區擴展extents的大小按上述方法進行圓整當表或分區數據段無法按Initial接近值進行圓整的情況下其大小可以按 Initial+Next進行圓整此時必須設置Minextents=例如表或分區數據段大小為M則Initial=MNext=MMinextents=
  
   Minextents
  
  該參數表示表創建時候Extents的初始數量一般取
  
   Pctincrease
  
  表示每個擴展Extents的增長率設置pctincrease=能夠獲得較好的存儲性能
  
   特殊表設計原則
  
   分區表
  
  對於數據量比較大的表根據表數據的屬性進行分區以得到較好的性能如果表按某些字段進行增長則采用按字段值范圍進行范圍分區如果表按某個字段的幾個關鍵值進行分布則采用列表分區對於靜態表則采用hash分區或列表分區在范圍分區中如果數據按某關鍵字段均衡分布則采用子分區的復合分區方法
  
   聚蔟表
  
  如果某幾個靜態表關系比較密切則可以采用聚蔟表的方法
  
   完整性設計原則
  
   主鍵約束
  
  關聯表的父表要求有主健主健字段或組合字段必須滿足非空屬性和唯一性要求對於數據量比較大的父表要求指定索引段
  
   外鍵關聯
  
  對於關聯兩個表的字段一般應該分別建立主鍵外鍵實際是否建立外鍵根據對數據完整性的要求決定為了提高性能對於數據量比較大的標要求對外健建立索引對於有要求級聯刪除屬性的外鍵必須指定on delete cascade
  
   NULL值
  
  對於字段能否null應該在sql建表腳本中明確指明不應使用缺省由於NULL值在參加任何運算中結果均為NULL所以在應用程序中必須利用nvl()函數把可能為NULL值得字段或變量轉換為非NULL的默認值例如NVL(sale
  
   Check條件
  
  對於字段有檢查性約束要求指定check規則
  
   觸發器
  
  觸發器是一種特殊的存儲過程通過數據表的DML操作而觸發執行起作用是為確保數據的完整性和一致性不被破壞而創建實現數據的完整約束
  
  觸發器的before或after事務屬性的選擇時候對表操作的事務屬性必須與應用程序事務屬性保持一致以避免死鎖發生在大型導入表中盡量避免使用觸發器
  
   注釋
  
  表字段等應該有中文名稱注釋以及需要說明的內容
  
   索引設計
  
  對於查詢中需要作為查詢條件的字段可以考慮建立索引最終根據性能的需要決定是否建立索引對於復合索引索引字段順序比較關鍵把查詢頻率比較高的字段排在索引組合的最前面在分區表中盡量采用local分區索引以方便分區維護
  
  除非時分區local索引否則在創建索引段時候必須指定指定索引段的tablespacestorage屬性具體參考內容
From:http://tw.wingwit.com/Article/program/Oracle/201311/17381.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.