Scripting

Perl 與 Ksh 的 Unix 數據庫管理

  • January 3, 2013

我意識到這是一個更主觀的問題,但我正在向社區尋求指導。

我們公司在擁有 DBA 方面還很陌生。我們曾經在 IBM 的 iSeries 伺服器上使用 DB2 for i,因此實際上不需要 DBA(至少在操作上),因為作業系統幾乎為我們管理了一切。在過去的幾年裡,我們開始遷移到 AIX 上的 DB2 LUW。因此,產生了對 DBA 的需求。我們三個人有興趣從開發人員轉變為 DBA(我是其中之一)。

因為我們在 AIX 上,所以我們預設使用 ksh 作為數據庫管理功能(創建、部署、操作等)的腳本語言。我發現 ksh 非常強大,但我需要執行的一些功能變得相當複雜。這方面的一個例子是我在 Unix 和 Linux StackExchange 上的問題

基於這個問題,以及閱讀其他 DB2 管理員的部落格,我看到一個普遍的建議,即 Perl 比 ksh 更適合管理腳本。

我知道 Unix/Linux 論壇對這樣的事情會有自己的想法,但我希望從數據庫管理的角度來處理這個問題。

不管 DBMS,哪種腳本語言似乎更適合在 Unix/Linux 平台上進行管理?珀爾?克什?(或者可能是其他?)。作為 DBA,您在使用腳本語言時遇到了哪些優勢和劣勢,為什麼選擇您使用的語言?

我不想要的是一場關於“我的語言比你的語言更好!”的高度主觀的火焰戰。像我以前在開發社區中看到的關於 Java 與 Ruby 等的東西。我正在尋找誠實的、盡可能客觀的資訊,以了解最適合數據庫管理員的需求。

你文章的結尾真的很重要:

有關最適合數據庫管理員需求的資訊。

所以讓我們從那裡開始。

作為 DBA,您的需求是什麼?您通常有兩個操作領域:系統級維護和數據庫級維護(所有操作都只是維護系統以獲得更好的性能……看,不要學究,跟我一起去)。所以你有兩個領域需要考慮。

ksh - Korn Shell是較舊的 Unix 操作 shell 之一,用於控制伺服器。ksh 的目標是管理伺服器,並允許一個人做傳統 Bourne shell(不是大多數人熟悉的 Bourne Again SHell,這是較老的年份)允許的所有事情,但有一些區別(這個 shell更好地支持算術和數組之類的東西,使其在某些方面更容易程式)。它是AIX 上的預設 shell

perl - Perl是一種高級通用程式語言。它被設計為在 shell 之上執行,並且主要是為報告而設計的。它結合了 shell 腳本和 C 的特性,以及正則表達式技術,試圖使它比以前的所有功能更好。地球上的*許多管理員都喜歡 perl,因為它使系統管理更容易,因為結合了 shell 功能和報告生成速度加快(它是一種程式語言)。*Perl 腳本可以像 shell 腳本一樣簡單地執行,在 Unix 世界中甚至有一個約定,第一行指示將執行腳本的內容(熟悉的 hashbang 行)。所以執行 perl 腳本就像執行一個 shell 腳本一樣簡單。

那麼,不同之處在於您需要一門成熟的程式語言,還是需要一個基本的 shell 腳本?然後,答案就變成了使用能滿足您需求的那個,因為兩者都對您非常有用。如果你想要統計數據,那是不可能的,我們每個人都有自己的風格。只需在內部就某事達成一致並稱其為(如果您要設置標準,請將其設置為 perl,因為它具有更多功能,並且您永遠不想因為設置了不切實際的標準而被抓住。Perl 也更具可擴展性將來)。在這種情況下,最好限制自己使用兩種或三種語言。


回到開頭我提到您有兩個選擇:系統級別和數據庫級別。

如果您的目的主要是系統級別,那麼我們已經回答了這裡的所有問題(使用適合您需要的問題)。如果您還需要對數據庫進行程式,那麼您真的需要在 perl 上進行標準化或真正習慣命令行語法,因為 Perl 為地球上某個地方的每個可以想像的數據庫提供了模組,如果一個不存在,它可以被寫入(例如:DBI -> DBD:DB2 -> DB2 客戶端)。


順便說一句,我使用 Microsoft SQL Server 和 C#,所以我生活在 Windows 世界中,我使用 PowerShell 而不是 DOS 批處理文件。PowerShell 在許多方面與 perl 相似,並且比 DOS 批處理程式給了我更多的靈活性(但世界上有很多管理員仍在使用舊的 DOS 腳本來管理他們的系統)。雖然 DOS 批處理系統允許使用數組、循環、變數和所有其他內容,但使用程式語言而不是 shell 腳本進行程式要容易得多,因此我能夠提高工作效率。

歸根結底,真正的問題是您的腳本環境中需要哪些功能,而我們對此無能為力。但我總是會選擇更清晰、可維護性和可擴展性,而不是“這就是盒子裡的東西”。

引用自:https://dba.stackexchange.com/questions/31366