oracle資料庫維護
⑴ Oracle資料庫無響應故障處理方式
Oracle資料庫無響應故障處理方式
Oracle資料庫無響應故障,簡單地講就是資料庫實例不能響應客戶端發起的請求,客戶端提交一個sql後,就一直處於等待資料庫實例返回結果的狀態。更嚴重的現象是客戶端根本不能連接到資料庫,發起一個連接請求後,一直處於等待狀態。Oracle資料庫無響應故障怎麼處理呢?下面跟我一起來學習Oracle資料庫無響應故障的處理方法吧!
無響應的故障現象一般有以下幾種:
1.Oracle的進程在等待某個資源或事件
這種現象一般可以從V$SESSION_WAT、V$LATCH、V$LATCHHOLDER等動態視圖中檢查進程正在等待的資源或事件,而被等待的資源或事件,一直都不能被獲取,甚至是很長時間都不可獲得。如果這個正在等待的進程持有了其他的資源,則會引起其他的進程等待,這樣就很可能引起實例中大范圍的會話發生等待。由於進程在等待資源或事件時,通常都處於SLEEP狀態,消耗的CPU資源非常少(在等待latch時要稍微多消耗一些CPU資源),所以從OS來看,CPU的消耗並不高,甚至是非常低。
這種因為等待而引起的個別進程Hang,相對比較容易處理。
2. OracleProcess Spins
所謂Spin,就是指Oracle進程中的代碼在執行某個過程時,陷入了循環。在V$SESSION視圖中,往往可以看到Hang住的會話,一直處於“ACTIVE”狀態。對於這樣的會話,用“alter system kill session ‘sid,serial#’”命令也不能完全斷開會話,會話只能被標記為“killed”,會話會繼續消耗大量的CPU。進程Spins由於是在做循環,CPU的消耗非常大,從OS上明顯可以看到這樣的進程,通常會消耗整個CPU的資源。
而對於這樣的Hang住的會話,處理起來相對比較復雜,並且為了從根本上解決問題,需要超過DBA日常維護所需要的技能。
從故障范圍來看,無響應故障可以分為以下幾種情況:
1. 單個或部分會話(進程)Hang住
這種情況屬於小范圍的故障,業務影響相對較小,一般來說只會影響業務系統的個別模塊。在一個多應用系統的資料庫上面,如果Hang住的會話比較多,則影響的可能是其中的一個應用系統。這里有一個例外,如果Hang住的進程是系統後台進程,如pmon、smon等,則影響的范圍就非常大了,最終甚至會影響整個資料庫及所有應用系統。還有值得注意的是,即使是少部分會話Hang住,也要及時處理,否則極有可能會擴散到整個系統。
2. 單個資料庫實例Hang住
這種情況造成的影響非常大。在這個實例上的所有應用系統均受到嚴重影響,並且在找到根源並最終解決問題之前,資料庫實例往往須要重啟。
3. OPS或RAC中的多個實例或所有實例都Hang住
在這種情況下,即使是OPS或RAC,都已經沒辦法提供高可用特性了。使用這個資料庫的所有應用系統將不能繼續提供服務,這種情況往往須要重啟。
無響應故障成因分析
Oracle資料庫無響應,一般主要由以下幾種原因引起:
1. 資料庫主機負載過高,嚴重超過主機承受能力
比如應用設計不當,資料庫性能低下,活動會話數的大量增加,導致資料庫主機的負載迅速增加,資料庫不能正常操作,並最終Hang住;主機物理內存嚴重不足,引起大量的換頁,特別是在SGA中的內存被大量換出到虛擬內存時,資料庫實例往往就會Hang住。
2. 日常維護不當、不正確的操作引起資料庫Hang住
比如歸檔日誌的存儲空間滿,導致資料庫不能歸檔,引起資料庫Hang住;在一個大並發的繁忙的系
統上,對DML操作比較多的大表進行move、增加外鍵約束等操作也可能使系統在短時間內負載大幅升高,並引起資料庫系統Hang住;不正確的資源計劃(Resource Plan)配置,使進程得不到足夠的CPU等。
3. Oracle資料庫的Bug
幾乎每個版本都存在著會導致資料庫系統Hang住的Bug,這些Bug會在一些特定的條件下觸發,特別是在RAC資料庫中,引起資料庫Hang住的Bug比較多。
4. 其他方面的一些原因
比如在RAC資料庫中,如果一個節點退出或加入到RAC的過程中,當進行Resource Reconfiguration時,會使系統凍結一段時間,也有可能使系統Hang住。
以上所描述的幾種常見的會導致Oracle資料庫實例Hang住的原因中,大部分的情況是可以避免的,只要維護得當,一般不會出現這種故障。對於Oracle資料庫Bug所導致的資料庫無響應故障,由於是在特定的情況下才會觸發,所以如果能夠盡量對資料庫打上最新版本的補丁,並且熟悉當前版本中會導致系統Hang住的Bug以及觸發條件,就能夠最大限度地避免這種故障的發生,提高系統的可用性。
那麼,在資料庫Hang住的情況下,如何去分析並發現導致問題的根源?一方面,由於系統Hang住會導致業務系統不可用,為了能夠盡快地恢復業務,須快速地判斷問題所在,然後Kill掉引起故障的會話和進程,或者資料庫實例不得不重啟以迅速恢復業務;但另一方面,如果只是重啟資料庫或Kill會話和進程來解決問題,在很多情況下是治標不治本的辦法,在以後故障隨時可能會出現。如何在二者之間進行抉擇呢?對於資料庫Hang故障的處理,首先是盡可能地收集到系統Hang住時的狀態數據,然後盡快地恢復業務,恢復業務後分析收集到的數據,找到資料庫系統Hang住的真正原因,然後再進行相應的處理。下一節將詳細描述資料庫系統Hang住後的處理流程。
無響應故障處理流程
對於Oracle無響應故障的處理,我們可以按下圖所示的流程進行。
值得注意的是,上圖並不是一個完整的Oracle資料庫故障處理流程圖,只是處理Oralce資料庫無響應這一類特定的故障的流程,只列出了針對這一特定類型故障處理時的關鍵處理點。不過既然是故障,所以這類故障的處理流程與其他故障的處理流程,有著非常相似的地方。
下面是整個流程的詳細說明:
1. 在出現資料庫無響應故障後,首先確認系統的影響范圍,如上節所描述的',是部分業務系統或模塊還是所有的業務系統都受影響,是不是整個實例或多個實例都無響應。同時應詢問系統維護和開發人員,受影響的系統在出現故障前是否有過變動,包括主機硬體、操作系統、網路、資料庫以及應用等。有時一個細小的變動就可能導致出現資料庫Hang住這樣嚴重的故障。曾經遇到一個庫,應用只是修改了一個SELECT語句就導致了資料庫Hang住。
2. 為了避免由於網路、資料庫監聽或客戶端因素影響分析,建議都登錄到主機上進行操作。
3. 如果主機不能登錄(為了避免干擾流程主線,這里不討論如網路問題這樣也會導致不能連接的故障),嘗試關閉出現問題的業務系統,甚至是所有的業務系統。如果關閉了所有的業務系統之後,仍然不能連接,則只有考慮重新啟動資料庫主機。在資料庫主機重新啟動後,使用操作系統工具或OSW等長期監控操作系統的資源使用,同時監控Oracle資料庫的性能和等待等。
4. 登錄上主機後,先用top、topas等命令簡單觀察一下系統。看看系統的CPU使用、物理內存和虛擬內存的使用、IO使用等情況。
5. 使用SQLPLUS連接資料庫,如果不能連接,則只能從操作系統上觀察系統中是否有異常的現象,比如佔用CPU過高的進程。使用gdb、dbx等debugger工具對資料庫進行system state mp;使用strace、truss等工具檢查異常進程的系統調用;使用pstack、procstack等工具察看異常進程的call stack等。
6. 使用SQLPLUS連接上資料庫後,進行hanganalyze、system state mp等操作;或檢查等待事件、異常會話等正在執行的SQL等待。
7. 找到故障產生的原因,如果暫時找不到原因,盡量收集數據。
8.確良如果應用急須恢復,可通過Kill會話、重啟資料庫實例等方式,先恢復應用。
9. 根據最終診斷結果,對資料庫升級打補丁,或者修改應用等方式從根本上解決問題。
怎樣避免資料庫出現無響應故障
作為Oracle資料庫DBA,除了處理故障之外,更重要的是如何預防故障的發生。根據前面對資料庫無響應故障的成因分析,在日常的維護工作中,須做到以下幾點:
1. 進行正確的維護操作
很多的資料庫無響應故障都是由於不正確的維護操作引起的。應避免在業務高峰期做大的維護操作,比如像move、加主外鍵約束等會長時間鎖表的操作。如果的確需要,盡量使用正確的操作方法。比如用ONLINE方式重建索引;建主鍵、唯一鍵約束時先建索引,然後在建約束時指定新建的索引,等等。也就是保證系統的並發性、可伸縮性,避免系統串列操作的出現。
2. 優化應用設計,優化資料庫性能
為避免性能問題導致在業務高峰期資料庫不能及時有效處理來自業務的請求,甚至於完全Hang住。對於資料庫中存在串列訪問的部分進行優化,比如latch、enqueue,還包括不合理的sequence設計等。特別是在RAC資料庫中,嚴重串列訪問等待往往更容易引起嚴重的性能問題。優化應用設計,使資料庫具有更好的可伸縮性和並行處理能力,能夠有效地避免性能問題引起的資料庫Hang住。
3. 利用監控系統隨時監控系統負載
遇到系統負載過高,內存不足,OS中虛擬內存換頁很頻繁等情況時,及時採取措施;監控Oracle資料庫的核心進程,如pmon、smon等,看是否有異常,如過高的CPU消耗。出現異常應立即處理;監控歸檔空間和日誌切換;監控資料庫中的等待事件,比如是否有大量的enqueue、log file switch (archiving needed)、resmgr:become active等待事件等。
4. 為資料庫打上補丁
很多的無響應故障是由於Oracle的Bug引起的,資料庫DBA應關注當前版本中有哪些Bug會導致資料庫Hang住,盡量為資料庫打上解決這些Bug的補丁。
;⑵ 動態性能視圖,Oracle資料庫維護的好幫手(一)
動態性能視圖主要是Oracle數據的庫自動收集並記錄當前常式的活動信息 當資料庫管理員啟動某個常式時 資料庫會自動建立動態性能視圖;當停止某個常式時 資料庫又會自動刪除這些動態性能視圖 這表面看起來跟數據字典有異曲同工之妙 但是 兩者信息的來源還是有很大差異的 數據字典的信息是從數據文件中取得;而動態性能視圖的信息則是從SGA內存以及控制文件中取得 所以 兩者所反映的信息還是有很大差異的 資料庫管理員利用這些動態性能視圖 可以了解資料庫運行的一些基本信息 為我們進行資料庫維護以及資料庫性能優化提供一些數據上的支持 一般情況下 我們可以通過動態性能數據掌握兩類重要的資料庫運行信息 一是了解資料庫運行相關的性能數據 如內存的使用量 磁碟排序發生的機率等等 二是取得與磁碟和內存結構相關的其他信息 這些信息將是我們進行資料庫維護與資料庫性能調整的主要參考依據
為了便於資料庫管理員查詢這些動態視圖 Oracle資料庫中的動態性能視圖跟其他資料庫對象有著不同的命名規則 通常情況下 動態性能視圖都是以V_$前綴開頭的 並且Oracle資料庫維每個動態性能視圖提供了相應的同義詞 下面筆者就介紹一些動態性能視圖查詢中的一些技巧以 幫助廣大資料庫管理員提高對Oracle資料庫動態性能視圖的認識
一 知道可用的動態性能視圖
因為動態性能視圖是隨著常式的啟動而啟動 隨著常式的消亡而消亡 其是動態變化的 所以 對於一些動態性能視圖不怎麼了解的資料庫管理員來說 第一步就是需要了解 現在資料庫中到底有哪些動態性能視圖可以用 Oracle資料庫中有一張V_$fixed_table動態性能視圖 這張視圖中紀錄著當前所有可用的動態性能視圖 當資料庫管理員對動態性能不怎麼了解的話 可以先通過這張視圖了解動態性能視圖的概況 並了解哪些動態性能視圖當前是可用的 資料庫管理員可以通過下面的命令查詢當前可用的所有動態性能視圖
在通常情況下 資料庫不同的狀態其動態性能視圖還是有比較大的差異 資料庫管理員掌握這些差異 對於他們藉助這些視圖來管理資料庫可能會有更大的幫助
一是資料庫處於 NOMOUNT 狀態 資料庫啟動常式時 Oracle資料庫會打開參數文件 分配SGA內存並啟動後台進程 此時 其實資料庫還沒有掛栽 此時 動態性呢視圖收集的信息來源只有是SGA 而不會從控制文件中收集相關的信息 所以 動態性能視圖的數量要少得多
二是當資料庫處於MOUNT狀態時 資料庫會根據初始化參數打開所有的控制文件 所以 當常式處於Mount狀態時 動態性能視圖其收集到的信息就要第一個狀態多的多 因為此時 動態性能視圖還會去收集控制文件的相關信息 不過 此時動態性能視圖所收集到的資料還不是最全的
三是當用戶打開資料庫時 Oracle系統會根據控制文件所記載的信息去打開所有的資料庫文件以及重做日誌 此時 資料庫管理員除了可以從SGA和控制文件中獲取信息的動態性能視圖外 還可能訪問與Oracle資料庫性能相關的動態性能視圖 如會話等待時間等視圖 另外需要注意一點 就是只有在這個狀態時 我們才能夠訪問資料庫的數據字典視圖
lishixin/Article/program/Oracle/201311/17253
⑶ 怎樣維護oracle資料庫。。請知道的告訴我下。QQ286073088。可加分哦。 謝謝
1、新手必用的工具
oracle 10G以後,可以用數字型檔自帶的管理軟體維護有網頁版本的和c/s客戶端版本的EM,
如果是新手,建議直接用EM,很好用,和sql server的企業管理器有得一拼。
新建表格、資料庫等等。
資料庫備份、
資料庫用戶管理,許可權管理
當然也可以用網頁版的那個管理軟體,也很方便、尤其是資料庫備份維護,資料庫恢復,超級簡單。只要認識漢字,學過計算機資料庫,搞這個不在話下。
2、你一定要看一下書,了解一下表空間之類的概念
3、以前DB2、oracle都比較側重命令行的操作,但是時代的潮流不可阻擋,圖形化的交互操作將慢慢代替操作麻煩的命令行。
一開始不要老想著用命令來解決問題,現在都走圖形化的界面了,先從簡單的來。
⑷ oracle資料庫,樹形結構維護,添加欄位值
為什麼這樣設計?我認為是設計上不太好。問題的本質是勞動街的爸爸是南崗區,南崗區的爸爸是哈爾濱,哈爾濱的爸爸是黑龍江,這個問題的實質是找到最上層的節點。
建議你首先學習一下Oralce獨有的ConnectBy查詢。特別是level什麼的虛擬欄位要搞懂。
table結構修改成:地區代碼 父地區代碼 地區名稱 足夠了
然後通過connect by 地區代碼=父代碼 找到root的這個記錄的地區名字,問題解決
現在這個結構,假設不找黑龍江,要找到哈爾濱,得了,要吐血了。
===追加一下,假設表已經有了,可以通過視圖修改成父,子結構。用字元函數截取,得到父地區的郵編,同樣也能解決問題。這樣做性能不好,會大量的全表掃描。性能的根本果然在於設計。
⑸ 怎樣管理好ORACLE數據表
ORACLE資料庫中 表是最基本的內容 可以說 表設計的好壞直接跟資料庫的性能相關 所以 在設計表的時候 除了要遵循其固有的資料庫准則之外 還需要看個人的資料庫管理經驗 下面我就把這些經驗分享一下 或許對大家有所幫助 一 表該存放在哪裡? 我們都知道 在ORACLE資料庫中 使利用空間這個概念來管理表對象的 在資料庫創建的時候 資料庫中已經建立了一些表空間 那麼當我們新建立表的時候 這個新表的位置該放在什麼地方呢?這就好像吃飯時的坐的位置一樣 是有講究的 一般來說 我們在新建表的時候 至少要遵循如下建議 一是在資料庫創建的時候 在資料庫中已經有了一個SYSTEM的表空間 一般情況下 這個表空間中 只包含數據字典及Oracle系統對象 如果我們將我們的表建立在這個空間上的話 那是要降低資料庫的性能的 所以 一般我們是不建議用戶把表格建立在這個空間上 但是 若我們不只一個人維護資料庫 如有八個人共同設計資料庫系統時 如何才能保證其他用戶不在SYSTEM表空間中建立資料庫表格呢?最好的辦法就是通過許可權控制 如我們可以給每個資料庫設計人員指定一個默認的表空間 讓他們只能在這個表空間中建立表格 如此的話 就能防止他們在SYSTEM表空間中建立自己的數據表格 從而對資料庫的運行性能產生不良影響 所以 若給每個用戶設置默認表空間的話 那麼用戶在建立具體的表時 不用具體指定表空間了 二是我們在為某個應用設計資料庫的時候 最好先對表的空間進行規劃 一般情況下 不要把數據表隨意的分散到不同的表空間中去 如我們在為一個ERP系統設計資料庫的時候 若把采購部門相關的表跟銷售部門相關的表放到兩個不同的表空間中去 這是不明智的做法 這么處理的話 會降低某些資料庫管理和維護操作的效率 如數據的備份與恢復操作;而且 也無法集中管理屬於某個特定應用的數據 所以 我們一般建議 在規劃資料庫表空間的時候 把相同應用的表放在同一個表空間中去 如果要區分不同部門或者不同模塊的表的話 我們可以在表的命名上動腦子 如我們在設計ERP系統的資料庫中 可以根據其應用模塊的不同 在前面加上前綴來進行識別 如跟系統基本配置相關的表 我們可以用AD為前綴;而跟銷售部門相關的表 我們可以加上SA前綴等等 如此的話 這些表具體是屬於哪個模塊的 就一清二楚了 完全沒有必要為此設置不同的表空間 這是ORACLE資料庫初學者經常會犯的錯誤 主要是對ORACLE表空間的定義不是很熟悉所導致的 二 對預計存儲數量比較大的表時 要給與額外的重視 有些表非常的大 我們這邊說的大 不一定是說結構復雜 而是指在這個表格中 預期會存儲比較多的數據 為了提高對這個表格的處理效率 我們在事先要做出一定的安排 否則的話 後續對這些大表進行查詢 插入等操作的話 速度會很慢 所以 我們就有必要在資料庫設計的時候 先預先估計一下表的數據存儲量 把一些數據量大的表格 做一些額外的設置 如在ERP軟體的資料庫設置中 一般來說 產品數據與物料清單數據這兩個表的數據量會比較大;而從長遠看的話 銷售訂單 采購訂單 生產訂單 記賬憑證等這種單據類相關的表格其數據量也會比較大 一年兩年可能感覺不出來 但是 到十年後 這個紀錄數量就會很龐大 而像ERP系統這種大型的信息化管理項目 用個幾十年時很正常的事情 而且 為了記錄的完整性 也不建議用戶把以前的數據刪除 所以 為這種應用進行資料庫設計的時候 要充分考慮這些大表的性能問題 具體的來說 設計大表的時候 可以考慮遵循如下的建議 一是不要為大表設置存儲的限制 在ORACLE資料庫中 可以為每張表格設置存儲配額限制 如此的話 表最大容量就不能超過這個限制 對於一些數據容量比較小的表格 這么設置時合理的 可以提高空間的利用率 但是 若數據量比較大的話 就不建議事先設置表的存儲空間了 如ERP系統的銷售訂單表 其剛開始可能記錄量很小 第一年預計只有 G的記錄容量 但是 估計在十年後 這個記錄容量就會達到 G了 在這種情況下 我們怎麼來給其設置存儲空間呢?一開就設置 G空間 這也是不合理的 而且 設置存儲空間 就意味著有可能產生存儲碎片 從而影響到數據查詢的效率 所以 在資料庫表的設計過程中 若某些應用的表可能會有比較大的數據容量時 建議不要對其存儲空間做出任何的限制 二是要為這大表分配足夠的臨時空間 如我們使用ERP系統時 要查詢產品資料信息 我們都知道 產品信息的話 有些企業這個紀錄數非常的龐大 而且在查詢時 我們還會經常的進行排序操作 如有時候會按照產品編碼對查詢出來的數據進行排序 當記錄少的話 還好;但是 當記錄多的話 這個排序動作 要求具有比較大的臨時存儲空間 所以 當某個表預計會有很大的記錄數量的時候 我們就要給其分配足夠多的臨時空間 臨時空間的存儲參數設置取決於臨時表空間的默認儲存參數設置 我們可以更改這些參數 以達到我們對要求 若沒有給大表分配足夠多的臨時空間的話 則排序的動作將會很慢 而且很可能不成功 三是要考慮將表與表的索引分離存放 大表所對應的索引通常也比較大 一般來說 索引的數量是隨著表記錄的數量增加而增加 兩者是接近於一個正比例的關系 所以 通常表的記錄容量大的時候 索引數量也會很龐大 針對這種情況 我們考慮突破我們上面講的表空間的規則定義 而考慮把表和他的索引分別存儲於不同的表空間中 甚至在條件允許的情況下 分別存儲於不同的硬碟中 這么做的好處是什麼呢?最大的好處是讓索引比較容易的獲得所需要的連續的存儲空間 從而提高輸入輸入的效率 通俗的說 就是可以提高數據的查詢效率 如不這么處理的話 查詢大容量的記錄的話 資料庫可能需要花費 秒;而如此設計的話 就可能把時間縮短為 秒 這是一個很明顯的性能改善 三 如何給表命名? 上面我在講如何為表分配存儲空間的時候 已經講到過這方面的問題 下面 我就將對這個問題進行詳細的描述 以幫助資料庫管理員掌握一套好的資料庫命名規則 首先 毋庸置疑的 在為標命名的時候 要遵循ORACLE資料庫的基本命名規則 如不能以數字開頭為表命名 如不能利用資料庫的關鍵字為表命名 如表的名字不能重復等等 這些是最基本的要求 就不用我多費口舌了 除了要遵循這些基本的命名規則外 在實際工作中 為了資料庫後續的維護等方面出發 我們還是要遵循一些額外的規則 這些規則跟ORACLE定義的規則不同 我們所講的規則沒有約束力 可以說 只是業界的一些共識而已 你若不怎麼處理 ORACLE資料庫也不會說你錯誤 只是後續維護的時候 會比較麻煩而已 一是在對資料庫命名的時候 最好能跟體現表的分類關系 如最常見的 我們在設計資料庫的時候 表都是按系統的具體模塊來區分的 如根據前端系統要求的不同 資料庫的表大致可以分為系統基本配置表 銷售模塊表 采購模塊表 報表模塊表等等 我們可以根據這些模塊的不同 分別給與不同的前綴來區分 這么做的好處是很明顯的 如一看到表最大名字 就可以知道這個表是屬於哪個應用的 哪個模塊的 這無疑可以提高資料庫設計與前台軟體開發的效率 同時 資料庫中默認的排序規則是按名字來排序的 所以 為表格設置類別前綴的話 可以把同一類的表格排在一起 方便我們察看 二是對表格命名的時候 要考慮可讀性 而不能隨便阿狗阿貓的亂取名字 最常見的是 那些剛學資料庫的人 在表命名的時候 如要建幾張測試表 就會隨便命名如TEST TEST 之類的 雖然這只是測試 但是 也不符合我們的命名過則 要做測試的話 那就以TEST開頭 然後後面加上具體要測試的內容 如此的話 我們才可以通過表的名字知道該表具體的用途 而不用打開表去看裡面具體的結構或者注釋才能知道我們需要的信息 所以 在設計表的名字的時候 還要關注一下其的可讀性 lishixin/Article/program/Oracle/201311/18317
⑹ 你的Oracle資料庫安全嗎
隨著計算機的普及以及網路的發展 資料庫已經不再僅僅是那些程序員所專有的話題 Oracle資料庫更是憑借其性能卓越 操作方便靈活的特點 在資料庫的市場中已經占據了一席之地但是 隨著網路技術的不斷進步 數據信息的不斷增加 數據安全也已經不再是以前的 老生長談 更不是以前書本上那些 可望而不可及 的條條框框
或許很久以前 大家都覺得Oracle資料庫的安全並不存在隱患 因為Oracle公司在 年 月份開始促銷其資料庫軟體時提出的口號是 只有Oracle i能夠做到絕對安全
但是不管它這么說是為了促銷 還是為了擴大知名度 這口號提出僅一個月後 英國的安全專家 David Litchfield就發現的 iAS中存在的程序錯誤導致緩沖溢出漏洞 後來 PenTest Limited和 eEye Digital Security各自提出了一個小的漏洞 所有使用Oracle公司產品的人都不由地緊張了原本鬆弛的大腦——對於用戶來說 畢竟是關繫到了 身家性命
下面筆者將帶著大家走進Oracle數據安全的世界
一 Oracle資料庫的一些基本常識
這里僅僅是為了以後的安全奠定一些基礎 因為我們後面要用到它們
Oracle所包含的組件
Oracle資料庫是指整個Oracle RDBMS環境 它包括以下組件:
·Oracle 資料庫進程和緩沖(實例)
·SYSTEM 表空間包含一個集中系統類目 它可以由一個或多個數據文件構成
·其它由資料庫管理員(DBA)(可選)定義的表空間 每個都由一個或多個數據文件構成
·兩個以上的聯機恢復日誌
·歸檔恢復日誌(可選)
·其它文件(控制文件 Init ora Config ora 等)
每個 Oracle 資料庫都在一個中央系統類目和數據字典上運行 它位於SYSTEM 表空間
關於 日誌
Oracle資料庫使用幾種結構來保護數據:資料庫後備 日誌 回滾段和控制文件 下面我們將大體上了解一下作為主要結構之一的 日誌 :
每一個Oracle資料庫實例都提供日誌 記錄資料庫中所作的全部修改 每一個運行的Oracle資料庫實例相應地有一個在線日誌 它與Oracle後台進程LGWR一起工作 立即記錄該實例所作的全部修改 歸檔(離線)日誌是可選擇的 一個Oracle資料庫實例一旦在線日誌填滿後 可形成在線日誌歸檔文件 歸檔的在線日誌文件被唯一標識並合並成歸檔日誌
·在線日誌:一個Oracle資料庫的每一實例有一個相關聯的在線日誌 一個在線日誌由多個在線日誌文件組成 在線日誌文件(online redo log file)填入日誌項(redo entry) 日誌項記錄的數據用於重構對資料庫所作的全部修改
·歸檔日誌:Oracle要將填滿的在線日誌文件組歸檔時 則要建立歸檔日誌(archived redo log) 其對資料庫備份和恢復的用處如下:a 資料庫後備以及在線和歸檔日誌文件 在操作系統和磁碟故障中可保證全部提交的事物可被恢復 b 在資料庫打開和正常系統使用下 如果歸檔日誌是永久保存 在線後備可以進行和使用
資料庫可運行在兩種不同方式下:NOARCHIVELOG方式或ARCHIVELOG方式 資料庫在NOARCHIVELOG方式下使用時 不能進行在線日誌的歸檔 如果資料庫在ARCHIVELOG方式下運行 可實施在線日誌的歸檔
物理和邏輯存儲結構
Oracle RDBMS是由表空間組成的 而表空間又是由數據文件組成的 表空間數據文件被格式化為內部的塊單位 塊的大小 是由DBA在Oracle第一次創建的時候設置的 可以在 到 個位元組的范圍內變動
當一個對象在Oracle表空間中創建的時候 用戶用叫做長度的單位(初始長度(initial extent) 下一個長度(next extent) 最小長度(min extents)以及最大長度(max extents))來標明該對象的空間大小 一個Oracle長度的大小可以變化 但是要包含一個由至少五個連續的塊構成的鏈
二 Oracle數據安全的維護
記得某位哲學家說過: 事物的變化離不開內因和外因 Oracle數據安全也不例外 分為 內 和 外 兩個部分 我們就先從 內 開始說起:
從Oracle系統本身說起
先拋開令人聞風色變的 hacker 和其他一些外部的原因 來想一下我們的資料庫 硬碟損壞 軟體受損 操作事物…… 一系列由於我們的 疏忽 而造成的系統問題就完全可以讓我們辛苦建立的資料庫中的數據一去不復返 那麼 我們先從自己身上找找原因吧
( ) 解決系統本身問題的方法 資料庫的備份及恢復
首先講資料庫的備份 關於Oracle資料庫的備份 有三種標准辦法:導出/導入(Export/Import) 冷備份 熱備份 導出/導入備份是一種邏輯備份 冷備份和熱備份是物理備份
< >導出/導入(Export/Import)
利用Export可將數據從資料庫中提取出來 利用Import則可將提取出來的數據送回Oracle資料庫中去
a 簡單導出數據(Export)和導入數據(Import)
Oracle支持三種類型的輸出:
(a) 表方式(T方式) 將指定表的數據導出
(b) 用戶方式(U方式) 將指定用戶的所有對象及數據導出
(c) 全庫方式(Full方式) 將資料庫中的所有對象導出
數據導出(Import)是數據導入(Export)的逆過程 它們的數據流向不同
b 增量導出/導入
增量導出是一種常用的數據備份方法 它只能對整個資料庫來實施 並且必須作為SYSTEM來導出 在進行此種導出時 系統不要求回答任何問題 導出文件名預設為export dmp 如果不希望自己的輸出文件定名為export dmp 必須在命令行中指出要用的文件名
增量導出包括三個類型:
(a) 完全 增量導出(Complete)
即備份整個資料庫 比如:
$exp system/manager inctype=plete file= dmp
(b) 增量型 增量導出
備份上一次備份後改變的數據 比如:
$exp system/manager inctype=incremental file= dmp
(c) 累計型 增量導出(Cumulative)
累計型導出方式只是導出自上次 完全 導出之後資料庫中變化了的信息 比如:
$exp system/manager inctype=cumulative file= dmp
資料庫管理員可以排定一個備份日程表 用數據導出的三個不同方式合理高效地完成 比如資料庫的備份任務可作如下安排:
·星期一:完全導出(A)
·星期二:增量導出(B)
·星期三:增量導出(C)
·星期四:增量導出(D)
·星期五:累計導出(E)
·星期六:增量導出(F)
·星期日:增量導出(G)
如果在星期日 資料庫遭到意外破壞 資料庫管理員可按以下步驟來恢復資料庫:
第一步:用命令CREATE DATABASE重新生成資料庫結構;
第二步:創建一個足夠大的附加回段
第三步:完全增量導入A:
$imp system /manager inctype= RECTORE FULL=Y FILE=A
第四步:累計增量導入E:
$imp system/manager inctype= RECTORE FULL=Y FILE =E
第五步:最近增量導入F:
$imp system/manager inctype=RESTORE FULL=Y FILE=F
< >冷備份
冷備份發生在資料庫已經正常關閉的情況下 冷備份是將關鍵性文件拷貝到另外位置的一種說法 對於備份Oracle信息而言 冷備份是最快和最安全的方法 冷備份的優點是:
·是非常快速的備份方法(只需拷貝文件)
·容易歸檔(簡單拷貝即可)
·容易恢復到某個時間點上(只需將文件再拷貝回去)
·能與歸檔方法相結合 作資料庫 最新狀態 的恢復
·低度維護 高度安全
但冷備份也有如下不足:
·單獨使用時 只能提供到 某一時間點上 的恢復
·在實施備份的全過程中 資料庫必須要做備份而不能做其它工作 也就是說 在冷備份過程中 資料庫必須是關閉狀態
·若磁碟空間有限 只能拷貝到磁帶等其它外部存儲設備上 速度會很慢
·不能按表或按用戶恢復
如果可能的話(主要看效率) 應將信息備份到磁碟上 然後啟動資料庫(使用戶可以工作)並將所備份的信息拷貝到磁帶上(拷貝的同時 資料庫也可以工作) 冷備份中必須拷貝的文件包括:
·所有數據文件
·所有控制文件
·所有聯機REDO LOG文件
·Init ora文件(可選)
值得注意的是冷備份必須在資料庫關閉的情況下進行 當資料庫處於打開狀態時 執行資料庫文件系統備份是無效的
下面是做冷備份的完整例子:
a 關閉資料庫$sqldba lmode=y
SQLDBA >connect internal;
SQLDBA >shutdown normal;
b 用拷貝命令備份全部的時間文件 重做日誌文件 控制文件 初始化參數文件
SQLDBA >! cp < file > < backup directory >
c 重啟Oracle資料庫
$sqldba lmode=y
SQLDBA >connect internal;
SQLDBA >startup;
< >熱備份
熱備份是在資料庫運行的情況下 採用Archivelog mode方式備份數據的方法 所以 如果你有昨天夜裡的一個冷備份而且又有今天的熱備份文件 在發生問題時 就可以利用這些資料恢復更多的信息 熱備份要求資料庫在Archivelog方式下操作 並需要大量的檔案空間 一旦資料庫運行在Archivelog狀態下 就可以做備份了 熱備份的命令文件由三部分組成:
a 數據文件一個表空間一個表空間地備份
(a) 設置表空間為備份狀態
(b) 備份表空間的數據文件
(c) 恢復表空間為正常狀態
b 備份歸檔log文件
(a) 臨時停止歸檔進程
(b) log下那些在archive redo log目標目錄中的文件
(c) 重新啟動archive進程
(d) 備份歸檔的redo log 文件
c 用alter database backup controlfile命令來備份拷貝文件
熱備份的優點是:
·可在表空間或數據文件級備份 備份時間短
·備份時資料庫仍可使用
·可達到秒級恢復(恢復到某一時間點上)
·可對幾乎所有資料庫實體作恢復
·恢復是快速的 在大多數情況下在資料庫仍工作時恢復
熱備份的不足是:
·不能出錯 否則後果嚴重
·若熱備份不成功 所得結果不可用於時間點的恢復
lishixin/Article/program/Oracle/201311/18027
⑺ 實例講解Oracle密碼文件的使用與維護
在Oracle系統中 用戶使用特權用戶身份(INTERNAL/SYSDBA/SYSOPER)登錄Oracle有兩種身份驗證方法
使用與操作系統集成的身份驗證
使用Oracle資料庫的密碼文件進行身份驗證
因此 管理好密碼文件 對於控制授權用戶從遠端或本機登錄Oracle資料庫系統 執行資料庫管理工作 具有重要的意義
Oracle資料庫的密碼文件存放有超級用戶INTERNAL/SYS的口令及其他特權用戶的用戶名/口令 它一般存放在ORACLE_HOME\DATABASE目錄下
一 密碼文件的創建
在使用Oracle Instance Manager創建一資料庫實例的時侯 在ORACLE_HOME\DATABASE目錄下還自動創建了一個與之對應的密碼文件 文件名為PWDSID ORA 其中SID代表相應的Oracle資料庫系統標識符 此密碼文件是進行初始資料庫管理工作的基礎 在此之後 管理員也可以根據需要 使用工具ORAPWD EXE手工創建密碼文件 命令格式如下
C \ >ORAPWDFILE=< FILENAME >PASSWORD
=< PASSWORD > ENTRIES=< MAX_USERS >
各命令參數的含義為
FILENAME 密碼文件名
PASSWORD 設置INTERNAL/SYS帳號的口令
MAX_USERS 密碼文件中可以存放的最大用戶數 對應於允許以SYSDBA/SYSOPER許可權登錄資料庫的最大用戶數 由於在以後的維護中 若用戶數超出了此限制 則需要重建密碼文件 所以此參數可以根據需要設置得大一些
有了密碼文件之後 需要設置初始化參數REMOTE_LOGIN_PASSWORDFILE來控制密碼文件的使用狀態
二 設置初始化參數REMOTE_LOGIN_PASSWORDFILE
在Oracle資料庫實例的初始化參數文件中 此參數控制著密碼文件的使用及其狀態 它可以有以下幾個選項
NONE 指示Oracle系統不使用密碼文件 特權用戶的登錄通過操作系統進行身份驗證
EXCLUSIVE 指示只有一個資料庫實例可以使用此密碼文件 只有在此設置下的密碼文件可以包含有除INTERNAL/SYS以外的用戶信息 即允許將系統許可權SYSOPER/SYSDBA授予除INTERNAL/SYS以外的其他用戶
SHARED 指示可有多個資料庫實例可以使用此密碼文件 在此設置下只有INTERNAL/SYS帳號能被密碼文件識別 即使文件中存有其他用戶的信息 也不允許他們以SYSOPER/SYSDBA的許可權登錄 此設置為預設值
在REMOTE_LOGIN_PASSWORDFILE參數設置為EXCLUSIVE SHARED情況下 Oracle系統搜索密碼文件的次序為 在系統注冊庫中查找ORA_SID_PWFILE參數值(它為密碼文件的全路徑名) 若未找到 則查找ORA_PWFILE參數值 若仍未找到 則使用預設值ORACLE_HOME\DATABASE\PWDSID ORA 其中的SID代表相應的Oracle資料庫系統標識符
三 向密碼文件中增加 刪除用戶
當初始化參數REMOTE_LOGIN_PASSWORDFILE設置為EXCLUSIVE時 系統允許除INTERNAL/SYS以外的其他用戶以管理員身份從遠端或本機登錄到Oracle資料庫系統 執行資料庫管理工作 這些用戶名必須存在於密碼文件中 系統才能識別他們 由於不管是在創建資料庫實例時自動創建的密碼文件 還是使用工具ORAPWD EXE手工創建的密碼文件 都只包含INTERNAL/SYS用戶的信息 為此 在實際操作中 可能需要向密碼文件添加或刪除其他用戶帳號
由於僅被授予SYSOPER/SYSDBA系統許可權的用戶才存在於密碼文件中 所以當向某一用戶授予或收回SYSOPER/SYSDBA系統許可權時 他們的帳號也將相應地被加入到密碼文件或從密碼文件中刪除 由此 向密碼文件中增加或刪除某一用戶 實際上也就是對某一用戶授予或收回SYSOPER/SYSDBA系統許可權
要進行此項授權操作 需使用SYSDBA許可權(或INTERNAL帳號)連入資料庫 且初始化參數REMOTE_LOGIN_PASSWORDFILE的設置必須為EXCLUSIVE 具體操作步驟如下
創建相應的密碼文件
設置初始化參數REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
使用SYSDBA許可權登錄
CONNECTSYS/internal_user_passswordASSYSDBA
啟動資料庫實例並打開資料庫
創建相應用戶帳號 對其授權(包括SYSOPER和SYSDBA)
授予許可權 GRANTSYSDBATOuser_name
收回許可權 REVOKESYSDBAFROMuser_name
現在這些用戶可以以管理員身份登錄資料庫系統了
四 使用密碼文件登錄
有了密碼文件後 用戶就可以使用密碼文件以SYSOPER/SYSDBA許可權登錄Oracle資料庫實例了 注意初始化參數REMOTE_LOGIN_PASSWORDFILE應設置為EXCLUSIVE或SHARED 任何用戶以SYSOPER/SYSDBA的許可權登錄後 將位於SYS用戶的Schema之下 以下為兩個登錄的例子
以管理員身份登錄
假設用戶scott已被授予SYSDBA許可權 則他可以使用以下命令登錄
CONNECTscott/tigerASSYSDBA
以INTERNAL身份登錄
CONNECTINTERNAL/INTERNAL_PASSWORD
五 密碼文件的維護
查看密碼文件中的成員
可以通過查詢視圖V$PWFILE_USERS來獲取擁有SYSOPER/SYSDBA系統許可權的用戶的信息 表中SYSOPER/SYSDBA列的取值TRUE/FALSE表示此用戶是否擁有相應的許可權 這些用戶也就是相應地存在於密碼文件中的成員
擴展密碼文件的用戶數量
當向密碼文件添加的帳號數目超過創建密碼文件時所定的限制(即ORAPWD EXE工具的MAX_USERS參數)時 為擴展密碼文件的用戶數限制 需重建密碼文件 具體步驟如下
(a)查詢視圖V$PWFILE_USERS 記錄下擁有SYSOPER/SYSDBA系統許可權的用戶信息
(b)關閉資料庫
(c) 刪除密碼文件
(d) 用ORAPWD EXE新建一密碼文件
(e) 將步驟a中獲取的用戶添加到密碼文件中
修改密碼文件的狀態
密碼文件的狀態信息存放於此文件中 當它被創建時 它的預設狀態為SHARED 可以通過改變初始化參數REMOTE_LOGIN_PASSWORDFILE的設置改變密碼文件的狀態 當啟動資料庫事例時 Oracle系統從初始化參數文件中讀取REMOTE_LOGIN_PASSWORDFILE參數的設置 當載入資料庫時 系統將此參數與口令文件的狀態進行比較 如果不同 則更新密碼文件的狀態 若計劃允許從多台客戶機上啟動資料庫實例 由於各客戶機上必須有初始化參數文件 所以應確保各客戶機上的初始化參數文件的一致性 以避免意外地改變了密碼文件的狀態 造成資料庫登陸的失敗
修改密碼文件的存儲位置
密碼文件的存放位置可以根據需要進行移動 但作此修改後 應相應修改系統注冊庫有關指向密碼文件存放位置的參數或環境變數的設置
刪除密碼文件
在刪除密碼文件前 大家應當確保當前運行的各資料庫實例的初始化參數REMOTE_LOGIN_PASSWORDFILE皆設置為NONE
lishixin/Article/program/Oracle/201311/18956
⑻ oracle資料庫維護的介入時期最好是
維護,說白了,就是管理資料庫,人家操作資料庫都會經過你的手,你得管理大家的資料庫,責任重大,而且問題很多,容易出錯,特別是數據備份,還原等。
⑼ 資料庫手冊:Oracle維護常用SQL語句二
回滾段查看 select rownum sys dba_rollback_segs segment_name Name v$rollstat extentsExtents v$rollstat rssize Size_in_Bytes v$rollstat xacts XActs v$rollstat gets Gets v$rollstat waits Waits v$rollstat writes Writes sys dba_rollback_segs status status from v$rollstat sys dba_rollback_segs v$rollname where v$rollname name(+) = sys dba_rollback_segs segment_name andv$rollstat usn (+) = v$rollname usn order by rownum 耗資源的進程(top session) select s schemaname schema_name decode(sign( mand) to_char(mand) Action Code # || to_char(mand) ) action statussession_status s osuser os_user_name s sid p spid s serial# serial_num nvl(s username [Oracle process] ) user_name s terminal terminal s program program st value criteria_value from v$sesstat st v$session s v$process pwhere st sid = s sid and st statistic# = to_number( ) and ( ALL = ALL or s status = ALL ) and p addr = s paddr order by st value desc p spid asc s username asc s osuser asc 查看鎖(lock)情況 select /*+ RULE */ ls osuser os_user_name ls username user_name decode(ls type RW Row wait enqueue lock TM DML enqueue lock TX Transaction enqueue lock UL User supplied lock ) lock_type o object_name object decode(ls lmode null Row Share Row Exclusive Share Share Row Exclusive Exclusive null)lock_mode o owner ls sid ls serial# serial_num ls id ls id from sys dba_objects o ( select s osuser s username l type l lmode s sid s serial# l id l id from v$session s v$lock l where s sid = l sid ) ls where o object_id = ls id and o owner<> SYS order by o owner o object_name 查看等待(wait)情況 SELECT v$waitstat class v$unt count SUM(v$sysstat value) sum_valueFROM v$waitstat v$sysstat WHERE v$sysstat name IN ( db block gets consistent gets ) group by v$waitstat class v$unt 查看sga情況 SELECT NAME BYTES FROM SYS V_$SGASTAT ORDER BY NAME ASC 查看catched object SELECT owner name db_link namespace type sharable_mem loads executions locks pins kept FROM v$db_object_cache 查看V$SQLAREA SELECT SQL_TEXT SHARABLE_MEM PERSISTENT_MEM RUNTIME_MEM SORTS VERSION_COUNT LOADED_VERSIONS OPEN_VERSIONS USERS_OPENING EXECUTIONS USERS_EXECUTING LOADS FIRST_LOAD_TIME INVALIDATIONS PARSE_CALLS DISK_READS BUFFER_GETS ROWS_PROCESSED FROM V$SQLAREA 查看object分類數量 select decode (o type# INDEX TABLE CLUSTER VIEW SYNONYM SEQUENCE OTHER ) object_type count(*) quantity fromsys obj$ o where o type# > group by decode (o type# INDEX TABLE CLUSTER VIEW SYNONYM SEQUENCE OTHER ) union select COLUMN count(*) from l$ union select DB LINK count(*) from 按用戶查看object種類 select u name schema sum(decode(o type# NULL)) indexes sum(decode(o type# NULL)) tables sum(decode(o type# NULL))clusters sum(decode(o type# NULL)) views sum(decode(o type# NULL)) synonyms sum(decode(o type# NULL)) sequences sum(decode(o type# NULL NULL NULL NULL NULL NULL ))others from sys obj$ o sys user$ u where o type# >= and u user# =o owner# and u name <> PUBLIC group by u name order bysys link$ union select CONSTRAINT count(*) from n$ 有關connection的相關信息 )查看有哪些用戶連接select s osuser os_user_name decode(sign( mand) to_char(mand) Action Code # || to_char(mand) ) action p program oracle_process status session_status s terminal terminal s program program s username user_name s fixed_table_sequence activity_meter query memory max_memory cpu_usage s sid s serial# serial_numfrom v$session s v$process p where s paddr=p addr and s type = USER order by s username s osuser )根據v sid查看對應連接的資源佔用等情況select n name v value n class n statistic#from v$statname n v$sesstat vwhere v sid = andv statistic# = n statistic#order by n class n statistic# )根據sid查看對應連接正在運行的sqlselect /*+ PUSH_SUBQ */mand_type sql_text sharable_mem persistent_mem runtime_mem sorts version_count loaded_versions open_versions users_opening executions users_executing loads first_load_time invalidations parse_calls disk_reads buffer_gets rows_processed sysdate start_time sysdate finish_time > || address sql_address N statusfrom v$sqlareawhere address = (select sql_address from v$session where sid = ) 查詢表空間使用情況select a tablespace_name 表空間名稱 round((nvl(b bytes_free )/a bytes_alloc)* ) 佔用率(%) round(a bytes_alloc/ / ) 容量(M) round(nvl(b bytes_free )/ / ) 空閑(M) round((a bytes_alloc nvl(b bytes_free ))/ / ) 使用(M) Largest 最大擴展段(M) to_char(sysdate yyyy mm dd hh :mi:ss ) 采樣時間 from (select f tablespace_name sum(f bytes) bytes_alloc sum(decode(f autoextensible YES f maxbytes NO f bytes)) maxbytesfrom dba_data_files fgroup by tablespace_name) a (select f tablespace_name sum(f bytes) bytes_freefrom dba_free_space fgroup by tablespace_name) b (select round(max(ff length)* / ) Largest ts name tablespace_namefrom sys fet$ ff sys file$ tf sys ts$ tswhere ts ts#=ff ts# and ff file#=tf relfile# and ts ts#=tf ts#group by ts name tf blocks) cwhere a tablespace_name = b tablespace_name and a tablespace_name = c tablespace_name 查詢表空間的碎片程度 select tablespace_name count(tablespace_name) from dba_free_space group by tablespace_namehaving count(tablespace_name)> ;alter tablespace name coalesce;alter table name deallocate unused;create or replace view ts_blocks_v asselect tablespace_name block_id bytes blocks free space segment_name from dba_free_spaceunion allselect tablespace_name block_id bytes blocks s lishixin/Article/program/Oracle/201311/18531
⑽ 資料庫是什麼Oracle又是啥玩意
經常會有人問我資料庫是幹啥的,其實一開始我是拒絕回答的,因為我也不能做到通俗易懂的表達出來,畢竟我接觸這個概念也沒有多長時間,但隨著問的人多了,我覺得是時候腦補一下我的第一堂課了,萬一哪天冒出來個貨跟你掰扯這事兒,你沒分分鍾給他說清,最後弄個丟里兒丟面兒,好尷尬呀。
資料庫,說白了就是按照數據結構來組織、存儲和管理數據的倉庫,這些數據是結構化的,並可為多種應用服務。也就是說,資料庫是使用計算機伺服器來存儲數據的,專門用來提供各種數據服務。可以這樣想像,過去一個公司的所有財務數據都是放在保險櫃裡面,而現在我們就可以針對這些財務數據搭建一個資料庫放在某台計算機或伺服器上面;再比如,企業或事業單位的人事部門常常要把本單位職工的基本情況(職工號、姓名、年齡、性別、籍貫、工資、簡歷等)存放在表中,這張表就可以看成是一個資料庫。有了這個"數據倉庫"我們就可以根據需要隨時查詢某職工的基本情況,也可以查詢工資在某個范圍內的職工人數等等。這些工作如果都能在計算機上自動進行,那我們的人事管理就可以達到極高的水平。此外,在財務管理、倉庫管理、生產管理中也需要建立眾多的這種"資料庫",使其可以利用計算機實現財務、倉庫、生產的自動化管理。最常見的資料庫有:銀行儲蓄系統、手機話費系統、美容美發會員系統、超市會員積分系統、水電費系統、機票或火車票系統等,這些都需要後台資料庫基礎設施的支撐。舉了這么多例子,應該是把資料庫說明白了,至少能在大腦裡面有個概念,知道這個東西是幹啥的。
現在大數據被炒的紅得發紫,而大數據的基礎也是數據,由此可見,數據是一個企業的核心資源,說它是企業的立身之本、發展之基都不為過,因此,維護資料庫的資料庫管理員(DBA)是企業不可或缺的。
目前市面上的資料庫產品有很多,單從規模上分可分為大型、中型、小型幾種,典型的資料庫產品如下:
大型資料庫:Oracle、DB2、Sybase;
中型資料庫:MySQL、SQLServer、Infomix;
小型資料庫:Access、VisualFoxpro。在眾多的資料庫產品中,Oracle資料庫一直處於行業領導先地位,也是當今最流行的關系型資料庫。Oracle可翻譯成"甲骨文",它是一家以資料庫為主業的全球化公司,是全球第二大軟體公司(第一名是微軟公司),目前Oracle在資料庫軟體市場已經排名第一,資料庫軟體市場份額達到48.6%,遙遙領先於第二名佔有率僅為20.7%的IBM公司的DB2。在中國市場上的計算機專業系統後台所使用的資料庫尤以Oracle資料庫居多。但是購買Oracle資料庫需要很大一筆費用,一般的大型企業使用,需要有專業人員進行管理和維護,中小企業承擔不起。中小企業為了節省成本,一般使用MySQL、PostgreSQL這類免費開源的資料庫,所以Oracle資料庫相關的工作崗位一般是在大型企業中。
對於為什麼選擇Oracle資料庫,而不是其他的資料庫?
第一,是因為Oracle資料庫占據最大的市場份額,並且越來越大,市場需要很多Oracle資料庫方面的人才,中國有句老話說"做對事,選對人",是同樣的道理;第二,是很多非Oracle資料庫的老系統正往Oracle資料庫遷移,其他資料庫市場佔有率在減少,其他資料庫工作者有面臨失業的風險;第三,Oracle有大量的官方學習文檔,還有部分中文文檔,可以有效地進行學習;第四,Oracle有大量的從業人員,有共同方向的朋友可以互相幫助,不再是孤膽英雄;第五,是可以很容易地從Oracle官方網站下載功能齊全的資料庫最新版本進行學習,可以讓你了解資料庫方面的最新發展趨勢等。
在此說明,以後的所有內容都是基於Oracle11g資料庫產品的,下面我們就簡單介紹一下Oracle11g的系列產品:
企業版(EnterpriseEdition)此版本包含了資料庫的所有組件,並且能夠通過購買選項和程序包來進一步對其增強。
能支持例如大業務量的在線事務處理OLTP(On-LineTransactionProcessing聯機事務處理系統)環境、查詢密集的數據倉庫和要求苛刻的互聯網應用程序。
標准版1(StandardEditionOne)此版本為工作組、部門級和互聯網、內聯網應用程序提供了前所未有的易用性和性價比。從針對小型商務的單伺服器環境到大型的分布式部門環境,該版本包含了構建重要商務應用程序所必需的全部工具。它僅許可在最高容量為2個處理器的伺服器上使用,支持Windows/Linux/UNIX操作系統,並支持64位平台操作系統。
標准版(StandardEdition)此版本提供了StandardEditionOne所不具有的易用性、能力和性能,並且利用真正的應用集群(RAC)提供了對更大型計算機和服務集群的支持。它可以在最高容量為4個處理器的單台伺服器上、或者在一個支持最多4個處理器的集群上使用,可支持Windows、Linux和UNIX操作系統,並支持64位平台操作系統。
簡化版此版本支持與標准版1、標准版和企業版完全兼容的單用戶開發和部署。通過將Oracle資料庫獲獎的功能引入到個人工作站中,該版本提供了結合世界上最流行的資料庫功能的資料庫,並且該資料庫具有桌面產品通常具有的易用性和簡單性,可支持Linux和Windows操作系統。
從存儲結構上來說,目前流行的資料庫主要包含以下兩種:
RDBMS:關系型資料庫,是指採用了關系模型來組織數據的資料庫;
NoSQL資料庫,是指那些非關系型的、分布式的資料庫。簡單來說,關系模型指的就是二維表格模型,而一個關系型資料庫就是由二維表及其之間的聯系所組成的一個數據組織。
關系型資料庫優點:
1、容易理解
二維表結構是非常貼近邏輯世界的一個概念,關系模型相對網狀、層次等其他模型來說更容易理解。
2、使用方便
通用的SQL語言使得操作關系型資料庫非常方便。
3、易於維護
豐富的完整性大大減低了數據冗餘和數據部移植的概率。
4、事務安全
所有關系型資料庫都不同程度的遵守事物的四個基本屬性,因此對於銀行、電信、證券等交易型業務是不可或缺的。
關系型資料庫的瓶頸:
1、高並發讀寫需求
網站的用戶並發性非常高,往往達到每秒上萬次讀寫請求,對於傳統型資料庫來說,硬碟I/O是一個很大的瓶頸。
2、海量數據的高效率讀寫
互聯網上每天產生的數據量是巨大的,對於關系型資料庫來說,在一張包含海量數據的表中查詢,效率是非常低的。
3、高擴展性和可用性
在基於WEB的結構中,資料庫是最難進行橫向擴展的,當一個應用系統的用戶量和訪問量與日俱增的時候,資料庫卻沒有辦法像WEBServer和APPLICATIONServer那樣簡單的通過添加更多的硬體和服務節點來擴展性能和負載能力。對於很多需要提供24小時不間斷服務的網站來說,對資料庫系統進行升級和擴展是非常痛苦的事情,往往需要停機維護和數據遷移。
NoSQL資料庫
NoSQL一詞首先是CarloStrozzi在1998年提出的。2009年再次提出了NoSQL一詞,用於指那些非關系型的、分布式的,且一般不保證遵循ACID原則的數據存儲系統。
NoSQL具有以下特點:
1、可以彌補關系型資料庫的不足
2、針對某些特定的需求而設計,可以具有極高的性能
3、大部分都是開源的,由於成熟度不夠,存在潛在的穩定性和維護性問題。
關系型資料庫適用於結構化數據,而非關系型資料庫適用於非結構化數據,二者優勢互補,相得益彰。
Oracle資料庫未來的發展方向是提供結構化、非結構化、半結構化的解決方案,實現關系型資料庫和NoSQL共存互補。值得強調的是,目前關系型資料庫仍是主流資料庫。
雖然NoSQL資料庫打破了關系型資料庫存儲的觀念,可以很好地滿足WEB2.0時代數據的存儲要求,但NoSQL資料庫也有自己的缺陷。在現階段的情況下,可以將關系型資料庫和NoSQL資料庫結合使用,相互彌補各自的不足。
關於資料庫及其代表產品Oracle今天就介紹這么多,有興趣的可以繼續深挖,希望我的介紹能讓你對資料庫有一個更深入的認識。如果有志於在這方面發展的話,就讓我們一起跟往事乾杯從頭再來。