寫在前面的話:
我從97
年畢業後開始做的是程式設計工作,
99年開始接觸
oracle
資料庫程式設計,慢慢的工作重心向資料庫方向轉移,並且隨著時間的推移也越來越喜歡資料庫。很多時候遇到問題的時候,容易從資料庫的角度去考慮問題的解決方法。我對「創新應用」、「行業借鑑經驗」、「應用難點技巧」理解可能不太深刻,因為我不能夠很清晰的將這幾個方面分開來,所以,可能我寫的內容相互都有關係吧。
創新性應用: 應用
1 :將
" 特情資訊
" 應用到資料庫中來
特情資訊是公安行業的乙個保密很強的資訊,目前很多地方都只有偵察員自己掌握情況。但是隨著資訊量的增多,這種管理方式的弊病也日益突出,資訊不能有效共享。
2023年12
月某市公安局與我討論將資訊存放在
oracle
資料庫中的可行性,乙個根本要求是保密性要特別強。經過仔細考慮,我為該專案提供了下面的思路:
1.
採用vpd
策略資料庫,不同的
oracle
使用者嚴格控制可查詢許可權。
2.
對錶中的關鍵字段進行加密。例如嫌疑人姓名、住址等。前台錄入資料是正常錄入的,只是在存入的時候對加密字段呼叫加密儲存過程,然後將其加密後再存入資料庫。前端顯示的時候顯示解密後的內容。
3.
加密、解密的儲存過程本身用
wrap
程式加密,並且儲存過程需要傳遞正確的解密密碼。這樣,即使是
oracle dba
使用者,也無法通過後台檢視關鍵字段的真實內容,即使知道用哪個解密函式,也不知道該使用什麼解密密碼。而且由於儲存過程的加密,入侵者也不可能根據儲存過程來逆推,從而充分的在資料庫一級保障了資訊的安全。
4.
如果開發網路版程式,則為了控制網路傳輸的安全,採用
ssl和數字證書。
通過以上措施,並且簡單的給使用者做了個演示例子,使用者表示滿意,目前此專案正處於業務調研階段。 應用
2 :實現自己的
" 網格
"(grid)
計算oracle 10g
的乙個核心概念叫做
"網格計算
",簡單的來說也就是很多機器、資源共同服務,好像乙個庫一樣。我在實際工作中,還沒有聽到網格這個概念的時候,已經在某專案中簡單的實現了類似的功能。
專案簡介:
公安業務資料通過計算機採集已經有多年的歷史,積累了大量寶貴的資料。如何充分利用這些資料就顯得更加重要。近幾年,針對這些原始資料的資料探勘需求不斷增加,很多公司也把精力放在了這個上面。乙個簡單需求例子是:根據某個特定的案子,查詢到庫中相似的案子或線索。我們稱之為乙個"比對
",下同。因此,專案的成功與否關鍵在於是否對業務有深刻的了解,以及實現的模式是否符合公安網路的實際情況。通過仔細考慮,我們認為市面上的資料探勘工具因為成本、靈活性等原因並不適合刑偵業務,因為影響判斷的因素太多,必須盡量讓計算機具有
"破案專家
"的頭腦來考慮方方面面的情況。這就需要廣泛建同義詞庫,根據各種情況為符合條件的結果加權,綜合排名後將排名考前的資訊提供給使用者。拋開業務上的需求,考慮到每乙個提交的比對(不是具體
sql語句),都可能需要分成上百個
sql查詢,因此伺服器效能就很重要。
我的方案是: 1.
10臺計算機上安裝
oracle
伺服器,然後開發乙個用於抽取關鍵資料應用程式,分別安裝在這
10臺計算機上,每一台機器我們稱之為乙個「比對器」,定期從業務資料伺服器抽取資料到各自的資料庫。 2.
安裝乙個接收查詢請求的資料庫,我們稱之為中心查詢庫,並開發程式來接收前端應用程式傳送的比對請求。 3.
使用者在前端發出比對請求,然後進入等待狀態,每隔一段時間自動詢問中心查詢庫,檢視比對是否完成。 4.
中心查詢庫接到比對請求後,查詢比對器的狀態,找到比較閒的比對器,將比對提交給該比對器。 5.
比對器完成比對後,將結果反饋給中心查詢庫。 6.
這個方案的具有如下優點: 1.
10個比對器都可以用來查詢,不會對業務資料庫造成負擔,而且可以根據需求隨時增加或減少 2.
成本低,實現簡單。
通過向公司領導匯報、與開發組論證,最終選定了這個方案,目前本專案在進一步的業務調研,開發也同時進行。
說到行業借鑑經驗,其實很多都不是和資料庫相關的,而是具體的業務。業務上我不能過多涉及,一是跑題,二是有一些保密的東西。從資料庫上仔細想了想,感覺我能想到的更像是常識,寫下來僅供參考。 1.
資料庫結構設計 ø
如果查詢需要,可以考慮設計冗餘欄位來提高查詢效能。例如對姓名的查詢,有的人可能用同音查詢,因此可以考慮乙個表內也有拼音這個字段。或者不同表關聯的時候,如果行是一對一的情況,而且經常一起查詢,也可以考慮將從表的字段冗餘。 ø
關於索引,並不是說每個查詢都用到的字段都要建索引。這是一些結構設計中最容易犯的錯誤。例如,如果系統中的查詢基本上都是有6到
8個條件,涉及到5到
6以上張表,每個查詢條件欄位都有索引,有的時候是災難性的。因為
oracle
很可能選擇錯的索引而導致查詢很慢。怎樣來判斷
oracle
選擇了正確的還是錯誤的索引呢?乙個最簡單的方法是看執行計畫,通常,我們期望
oracle
第一步驟用到的索引最大幅度的篩選掉記錄。這樣就會使
i/o少,讀一致性塊也需要相對少,一般速度也很快。乙個通用的規則是,如果乙個經常用於查詢的字段唯一值很少,而且經常和其它的篩選性更大的條件在一起使用,那麼該欄位一般不要用所引,如性別。 ø
表名和欄位名盡可能的規範,欄位的長度要夠用但避免過大。 ø
結構設計好了之後,盡可能多建一些全方面的測試資料,並有針對性的進行一下資料庫優化。 2.
資料庫安全性的考慮
除了常規的能夠想道的安全方面的問題,如使用者和口令、資料庫補丁、作業系統補丁之外,還可從以下幾個方面來考慮: ø
如果系統採用三層架構方式,或者是瀏覽器
/伺服器方式,那麼可以考慮把資料庫伺服器放到乙個私有網路裡面,這樣外網就無法直接訪問到資料庫,也就更無法進行攻擊了。進一步的考慮還可以更改預設的***的埠號,也就是說,正常情況下,資料庫只對中間層開放,從而進一步提高安全性。 ø
硬體安全性、系統安全的考慮:磁碟陣列櫃,高階複製,
dataguard
,rac
等等高可用措施,都要根據使用者的具體需求加以考慮。 3.
備份資料庫和定期資料庫健康檢查
一定要制定適合需求的備份計畫,否則一旦出現問題,後果可能非常嚴重。資料庫健康檢查也屬於日常工作了,包括效能方面,儲存方面等等,都應該有可行的日常規範,這樣通常能夠在問題發生之前就把隱患解決掉了,這是作為
dba的乙個基本職業素養。
應用難點技巧:
現在,日常中我維護的資料庫一般都很穩定。我現在感覺
oracle
的管理和維護實際上是很簡單的,我想從最常見的系統出現硬故障和軟故障談談我的看法。 1.
所謂的硬故障,就是指資料庫崩潰,或者硬體出現問題,或者如果問題不能解決,應用程式就無法急需的問題。這類問題解決起來很簡單,大致上可以遵循下面的方法: ø
硬體故障首先解決硬體故障 ø
如果資料庫崩潰嘗試用
sqlplus
或者svrmgrl
手動啟動資料庫,檢視具體的報錯資訊。 ø
其它問題檢視發生問題時的
oracle
錯誤號,檢視
alert
日誌和跟蹤日誌來進一步定位。 ø
根據錯誤號,自己掌握的就解決,如果不懂,則可以在網際網路上查詢,通常可以解決。我在網上查詢問題解決方法的順序通常是: ²
是最好的良師益友,善於用
,可以讓你的水平在同事的驚訝眼光中迅速提高水平。我的絕大部分問題基本上都是在
上解決的。 ²
metalink
metalink
是oracle
官方技術**,權威性不言而喻。 ²
專業**發貼求助。如
www.itpub.net
等。 ø
查詢到解決方法後實施。但實施前如果有危險的操作一定要注意資料庫的備份。 2.
對於軟故障,我主要指效能方面的問題。這個可能需要更多的理論和實踐知識了。可以通過系統的學習來不斷提高優化資料庫的能力。不過如果還沒掌握優化技巧的人也不要著急,可以首先學會怎樣為資料庫做
statspack
報告——這個很簡單,幾分鐘可能就能夠掌握了,然後需要做的是把
statspack
報告放到一些大型論壇上去,如前文提到的
itpub
,自然有好多專家來幫你解答。
張召忠談讀書
張召中談讀書 第乙個,讀書最重要是要有選擇性 第二個,讀書要有針對性 第三個,站在書上讀 批判性地讀 每個人要結合自己的特長,結合自己的專業,結合自己的事業,結合自己的短板,有針對性地去讀書,這一點非常重要。這本書拿過來以後,我知道這是大偉教授寫的,我的好朋友寫的。我拿過來閱讀的時候,我絕不會說,我...
創新談 鄒建
在國內,資料庫管理員 英文是 database administrator 簡稱dba 算是乙個新生的,或者從業人員較少的職位。本人從事 dba的職位,也僅僅有 1年的時間。關於 dba應該做些什麼,應該是沒有乙個準確的定義,根據網上的一些資料,結合自己做 dba所經歷的具體事務,個人對 dba的職...
創新談 夏雲蘭
創新性應用 對於資料庫的創新性應用,我本人覺得自己在工作中並沒有什麼創新性的應用,但是我一直在考慮是不是可以通過資料庫對所有的excel 進行管理,即檔案管理結合到資料庫中。因為現在很多公司都是用excel 用的多,像我們公司,幾乎所有的業務都有用到excel,但是沒有集中管理,分散在各人手中,如果...