[第138期] DBA大討論:數據庫應用與故障排除
不知不覺中,人們已經進入了一個數據爆炸的時代,曾經,我們買一個32MB的U盤就需要幾百元,如今,600元就可以買到1.5TB的移動硬盤了。這種數據量的大幅增加,給數據的存儲帶來了前所未有的壓力。數據的交換越來越頻繁,而數據作為新的企業資產,企業的決策者同樣希望這些新的資產能夠給企業帶來新的利潤和增長空間。于是,對于數據的管理成為企業信息化關注的焦點,目前,數據庫的種類繁多,而牽扯到數據庫應用和部署的技術也紛繁復雜。在這種情況下,數據庫管理與故障排除的重要性日益重要。
技術門診是51CTO社區品牌欄目,每周邀請一位客座專家,為廣大技術網友解答疑問。從熱門技術到前沿知識,從技術答疑到職業規劃。每期一個主題,站在最新最熱的技術前沿為你引航!
本期門診邀請了資深DBA李濤與我們一起討論數據庫在企業中的應用與故障排除。
專家介紹:
姓 名:李濤
擅長領域:數據庫、項目管理
BEC企業全球化及本地化工程師,微軟資深講師,企業信息化與解決方案專家。主要從事企業信息化產品研發、實施與管理,企業高端IT培訓。專注數據庫、信息系統、EIP和.NET平臺等技術。多年來為政府和企業開發部署了多種信息化平臺,近千名學生遍布政府機關、中小企業和世界500強。
查看本期門診精彩實錄:http://doctor.51cto.com/develop-151.html
參與最新技術門診:http://doctor.51cto.com/
精選本期網友提問與專家解答,以供網友學習參考。
Q:李老師你好,我們公司的informix數據庫每天早上都要手動登錄,使用onstat - oncheck -pr 等命令進行數據庫運行及備份狀態的監控,并發送報告郵件。雖說工作量不大,但這樣下來每天都是重復性的操作。我想使用自動化工具來實現informix數據庫的監控及發送報告。我想了解一下,是否有這樣的工具,效果怎么樣?謝謝!
A: 你好,數據庫的自動化管理一直都是信息工作者煩惱的事情。針對你這個問題,解決辦法有多種,其一可以設計一個定時器來解決問題。定時器負責處理監控狀態、生成LOG、備份等業務邏輯,在Linux環境下可以讓開發人員設計一個Linux守護進程來實現定時器,如果在Windows環境下則可以開發一個 Windows服務實現,Windows服務也屬于守護進程,就像是一個機器人幫助你做事情一樣。另外也有一些共享軟件可以使用,像 DBRichTool,Aqua Data Studio等
Q:老師你好,我想當一個網絡工程師,要不要學習數據庫,如果學習需要學習到什么程度?
A: 你好,網絡工程師可以先學習下系統,比如Windows,Linux等,因為網絡和系統結合的更緊密些,其次可以學習數據庫等。最好的選擇是先專精后專多,可以根據自己興趣和實際工作需求來決定。一般學習數據庫可以先從開發入手,然后學習管理,周期一般都在6個月到1年才能熟練,而實際經驗只能從工作中慢慢摸索了。
Q:李老師,您好!我一直存在一個困惑就是 oracle stream在實例化數據庫的時候,采取那一種方式呢?export/import,rman,hot/cold backup,因為在一次實施過程中失敗了。報錯與是未能提供實例化SCN。我當時用的是exp /imp,數據量是200G,錯誤信息為未能提供實例化的SCN,我很郁悶,難道EXP后數據的sCN還會一致,不可能,既然不可能,那為什么會報"未能提供實例化的SCN"呢?希望專家幫我這只菜鳥解決這個問題。謝謝!
A: advanced replication和stream實現的機制不同,再挖局日志時需要SCN的輔助,可以過一遍DBMS_APPLY_ADM.SET_INSTANTIATION_SCN。
Q:專家您好!mysql備份通常都是使用mysqldump,生成的sql文件這個文件直接放到別的數據庫產品里面執行嗎?
A: 雖然各種數據庫廠商都說自己遵從了ANSI的SQL標準,但事實上每個數據庫系統都已有不同的標準。所以這種方法基本沒戲,但可以在這個基礎上修改,省不少時間。不過每個數據庫都提供了一些數據源驅動程序,比如你可以利用ODBC通過導入導出向導把MySqL的數據導入到SQLServer中。
Q:專家您好!我問個很菜的問題。我用本地企業管理器為何無法遠程連接數據庫?
A: 遠程數據庫在那里?如果是在托管商那里,是獨立主機的話,基本不會有問題,如果是虛擬主機,一般需要在托管商的網站配置你的自己的IP地址。如果你的遠程數據庫是在局域網里面這種問題可有很多,信任的問題,安全的問題,都有可能,一般不會出現這種情況,連接的時候選擇具體實例就可以了。你參考如下步驟看看:
1、先保證ping通
2、在dos下寫入telnet ip 1433不會報錯
3、用ip連如企業管理器:
企業管理器-->右鍵SQlserver組-->新建sqlserver注冊-->下一步-->寫入遠程實例名(IP,機器名)-->下一步-->選Sqlserver登陸-->下一步-->寫入登錄名與密碼(sa,password)-->下一步-->下一步-->完成
4、如果還不行:
sqlserver服務器-->開始菜單-->SQLserver-->服務器網絡實用工具-->啟用 WinSock代理-->代理地址:(sqlserver服務器IP)-->代理端口-->1433-->OK了
5、如果還不行:
sqlserver客戶端-->開始菜單-->SQLserver-->客戶端網絡實用工具-->別名-->添加 -->寫入別名如"51CTO"-->"網絡庫"選tcp/ip-->服務器名稱寫入遠程ip或實例名-->OK了
Q:李老師你好,我想問一下,面向對象的數據庫現在具體運用在哪些方面,廣泛嗎?還有,又沒有versant的學習資料,嘿嘿
A: 從關系模型到面向對象模型,是數據庫發展的一個過程,本質上是數據庫系統設計時使用的算法有了改變,目前數據庫的大部分應用都在關系算法這一塊上,實際的開發中,可以利用ORM映射設計處更容易理解和控制模型。對象的好處在于,它具有屬性,方法等,對表示事物更容易理解,可以隨時變化,可以更好的控制。面向對像數據庫這幾年發展的也很火,主要由于計算機輔助,人工智能等高密集型數據存儲的技術領域,需要面向對象的數據庫來更好的理解對象的定義和存儲。
Q:專家你好,我想請問一下DBA在linux方面的應用有哪些。Linux掌握到什么時候開始學習DBA比較好。謝謝專家指點。
A: 數據庫系統本身就屬于系統軟件,如果你對操作系統原理,數據結構,數據庫原理等比較熟悉,就奠定了成為DBA的扎實基礎。如果你的數據庫開發和管理工作是在 Linux上完成的,那么Linux系統本身對你很重要,像對Linux系統的理解,管理等,Shell編程,都算是比較基礎的東西。DBA在Linux 下主要工作就是管理數據庫,包裹I/O,性能優化,安全,監控,高可用性,災難恢復等等。
Q:我想問一下學習數據庫應該如何入手,ACCESS 還可以,SQL懂點網站設計用的簡單語句,不知道想學的高深點應該 學些什么?入手選擇MySql 還是 MsSql好?
A: 可以根據自身情趣和具體工作,比如你們上的項目用到了MySQL數據庫,可以先學習MySQL,如果是SQL Server,就可以先學習SQL Server。從入門到熟練開發的學習周期二者都不長,但后期的深度提高就靠實際經驗來不斷磨合了。如果數據庫理論扎實,ANSI SQL語法很熟悉,二者都學習也可以,甚至DB2,Oracel等都可以學習,關鍵是看你的職業規劃,和你所處的團隊是什么情況,一般在一個團隊里面學習一個產品的用法,通過實際的項目經驗,很快就能熟悉。其實就用一個數據庫而言,不需要太長的時間就上手了,MySQL比較小巧,上手非常快,直接去 MySQL的官方下載個5.0的,相關的工具也很多,MySQL官方也提供了一套。而SQL Server從開發到管理,再到BI提供了一整套的功能,適合企業級的應用,可以先學習開發,基本3個月的周期,然后學習SQL Server的管理,基本也是3各月的周期,正所謂入門容易提高難,后期的需要自己多研究,多在實際工作中積累經驗。
Access實際上是一個不錯的數據庫,在企業應用中也很普遍,總之針對不同的項目,不同的客戶,選擇合適的數據庫才是硬道理。
真正想成為數據庫設計的專家,我的建議,一開始最重要的是學習數據庫理論,數據庫建模等,具體的數據庫系統是次要的。
#p#
Q:請問一下,DBA主要學習的內容有哪些?初級應該掌握哪些?中級應該掌握哪些?什么樣的水平才能叫高級DBA?
偶現在管單位的一個小數據庫,是一個軟件開發公司給偶們單位開發的,平時基本不需要維護,所以不知道DBA的職責有哪些?DBA的工作是干嘛?要什么樣的水平才能叫合格?
A: 一個有優秀的DBA首先是職業素養,其次是興趣。從技術層面講,DBA要學習一條線的知識,比如相關的系統平臺,其次是基于這個平臺的信息系統領域,最后才是數據庫系統。一般來講,一個優秀的DBA也必須是數據庫開發的高手,中級DBA要達到對這個數據庫系統及其相關平臺,以及工具有很好的認識和使用熟練過程,有相當經驗的數據庫實際維護工作。高級DBA必須是一個系統方面的高手,說到底數據庫就是一個系統級別的產品,如果你對系統原理,系統實現研究很深,那么DBA后期的路子走起來會順的多。
從軟件開發角度講,DBA的知識可有可無,就用一個數據庫產品做開發講而言,現在主流的數據庫你只需要一到兩周,都可以上手,只是時間問題。但要做一個優秀的開發者,DBA的知識必須要具備的。
Q:李老師,對于一個數據庫初學者來說,我對于品類繁多的數據庫軟件中選擇一款適合的數據庫還是有一定的困難,我現在正在學習linux,但是聽人說只會 linux是沒用的,要學習linux上的應用,比如集群,中間件,數據庫應用等等。所以想選擇一款數據庫,你覺得在linux上面哪一種數據庫應用最廣泛呢,最有發展前景呢。
之前聽到一位年薪217萬的專家分析,"根據我對數據庫的理解,目前市場上雖然有Oracle,DB2,Informix,Sybase和SQL Server數據庫,但Informix數據庫已經被IBM收購,而Sybase數據庫在技術和市場上正走向沒落,占據市場主要份額的就是 Oracle,DB2和SQL Server數據庫。SQL Server數據庫非常好,但是很遺憾的是只能在Windows平臺使用。所以如果你深入研究SQL Server數據庫,我只能說獲取高薪的概率稍低,而且坦白的說,使用SQL Sever數據庫的企業一般是中小企業居多。而國內做Oracle數據庫的人太多,如果你想在Oracle領域出人頭地,難度極大。但是,做DB2數據庫的人反而不太多,物以稀為貴。況且,DB2數據庫廣泛應用在銀行、電信、制造行業、零售行業、保險行業等"高薪"領域中,所以我強烈建議學習DB2數據庫 "而在這其中也沒有提到mysql,你可以就其分析一下嗎?
非常感謝李濤老師,原諒一個初學者的諸多疑問。
A: 根據你的情況,可以從Oracel,DB2中選一個作為職業發展的技術方向,努力學精。DB2在國內不溫不火,但市場占有率也沒想象的那么差,Oracel 的市場份額最高,MySQL使用的公司也很多,從每年招聘的數量來看,這三個中可以選擇Oracel和MySQL搭配學習,或者DB2和MySQL學習,任意一個組合學好了,高薪都不是問題(但高薪和技術的關系不是成正比的)。當然SQL Server也是一樣,大小公司都在用,因為你選擇了Linux,所以不推薦你學習SQL Server。在開發平臺中,比如.NET平臺,JAVA平臺上,ORACEL,SQL Server,DB2,MySQL,Sybase,Informix等等中的任何數據庫都可以被用到,ORACEL,SQL Server在國內應該是最多的。DB2在電信,金融方面用的比較多,尤其是配合IBM的OS。
選擇一個路子,自己認真的走下去,就是對的。祝你好遠。
Q:SQL Server 2008 相比2005有什么新特性?謝謝!
A: 從開發,管理,高可用性,性能優化等方面都有一些新東西加入,而且加入了很多比較新穎的東西。google一下吧
Q:老師:你好!我對安全工程師感興趣! 不知道得學習什么知識?
A: 安全是個很大的話題,看你對那方面感性趣了,比如網絡 ,系統,分層架構等。
Q:老師你好,我是做弱電工程的,裝考勤機的時候經常需要連數據庫,但是有的時候,老是提示我違反唯一性原則,連不上數據庫,老師,這是為什么?
A: 唯一性原則?應該是考勤軟件本身報的異常,開發人員在開發這個軟件的時候,會有異常判斷,如果代碼或者不合理的操作產生異常時,就會拋出這個異常,給最終用戶友好的提示。仔細的分析下這個軟件的運行條件,合理的配置,最終會解決問題的。
Q:你好,李老師,能不能講下SQL SERVER高級的開發功能,尤其是存儲過程,觸發器和自定義函數。謝謝了!
A: 你好,由于篇幅的問題,你的問題在這里不做深入的回答了,活動結束后,通過博文來解答你這個問題吧。
Q:李老師你好,今天早上我在公司需要修改一些數據的時候,右鍵點擊表open table->return all rows 出現查詢設計器遇到查詢錯誤 未指定的錯誤 所有的表都這樣,但是用select * from 可以查詢數據,數據庫是SQL Server 7,請問如何解決,只能重裝嗎?
A: 不用,重啟一下你的服務器,釋放下內存。應該就沒問題了
Q:李老師你好,我以前遇到一個很奇怪的問題,現在都想不出怎樣解決。在一間有5臺電腦的公司里裝了一套C/S的系統,其中有一臺電腦是作數據庫(SQL SERVER2000)的,其它電腦就連那臺的數據庫。但是有一臺電腦就是連不上。PING那臺數據庫的PC是通的,在那連不上數據庫的電腦上裝SQL SERVER客戶端還是連不上。但過一個小時后它又可以連上,用了不久還是會斷。網絡一直是通的。為什么呢?
A: 數據庫服務器可能存在負載的問題,對服務器性能進行性能測試,如果不是性能的問題,那么可以按最初的軟件配置方法,對數據庫連接重新配置。
Q:李老師!你好看到你的樣子太親切了!呵呵~-~在此我想問做為一個網絡工程師來說!對于數據庫的學習從那些方面入手!同時關于數據庫與WEB開發之間的關系!謝謝你。
A: 先學習SQL的開發吧。選一個你感興趣的數據庫,比如SQL Server ,Oracel等,堅持一個月基本就上手了,然后學習該數據庫的管理特性,工具等等,勤實踐,多動手。數據庫是存儲數據的地方,WEB開發的后端一般都會用數據庫存儲數據,另外也可以用XML,特定文件來存儲數據,不一定非要用數據庫。
Q:李老師,您好。我企業有一ERP系統,SAP BUSINESS ONE。其數據庫有一張表的記錄達到近三百萬條,而且,每次在ERP系統中執行相關查詢操作時,系統就會變慢甚至死機。請問,對于這種比較大的表,有什么好辦法增加查詢效率嗎?謝謝!
A: 從2個方面進行優化,第一,針對ERP系統本身,如果是你們自主開發的,那么在編寫查詢語句的代碼時,可以對SQL語句進行優化,最好使用存儲過程,啟用相關開發平臺的緩存功能。第二,對數據庫本身優化,可以嘗試使用分區表,分割數據庫文件,維護索引等方面進行優化。
Q:老師,你好!我想了解一下 數據庫安全方面的問題! 我是學網絡安全的!對于管理網絡安全 或者網站后臺安全 應學習哪方面的知識!還有能給我推薦寫資源嗎?比如網站 或者電子書之類的!
A: 網絡安全這個概念太大了,網絡安全理論,網絡安全產品,相關系統平臺,和網絡有關的組件要非常熟悉,網站后臺安全包裹系統和網路配置的安全,數據庫安全,WEB程序的代碼安全等。建議你選擇一個平臺,做某個平臺的網絡安全專家,先專后全面發展。基本功最重要,可以閱讀下TCP/IP協議,共三冊。
Q:李老師您好!我想問一下,關于企業級的網絡管理員對于數據庫的理解級別應為?如果現在工作當中去學習應該多學習哪些關于數據庫方面的問題?謝謝!
A: 網路管理員,可以偏重系統一些,數據庫可以作為了解,如果你是偏重系統管理的網絡管理員,數據庫也可以學習下,先學習SQL語句,然后學習下它的基本管理,像數據庫安全,備份和還原等,基本2個月就熟悉了。
【編輯推薦】