在一定程度上,這取決於你的意思是「應用程序」,因爲這是一個非常有彈性的術語。這還取決於您是否在討論創建新用戶,然後擁有特定應用程序的所有表,或者您是否在討論創建將用於登錄數據庫的新用戶,但這些用戶可以訪問到存儲在單獨的(並且可能更小的)用戶模式集合中的對象。
如果50歲以上的應用意味着你有50+自足集,由一般的獨立代碼50個分開帥哥訪問的表,創建單獨的用戶和不同的模式爲每個應用程序是非常合理的。它可以更容易地跟蹤哪些應用程序使用最多的磁盤空間,哪些應用程序正在創建性能問題等。它還使得鎖定每個帳戶的特權相對容易,因爲每個帳戶只需要訪問一個模式中的數據並且任何系統級權限授予都將針對特定的應用程序。另一方面,如果你有50多個應用程序碰到同一個數據庫,這些應用程序可能更像是一個更大的應用程序的組件,它們最終需要共享對各種對象的訪問。例如,如果您有一個應用程序讓人力資源輸入關於新員工,終止,辭職等的數據,另一個讓經理人員輸入員工評論的應用程序以及讓人力資源管理組織結構圖的第三個應用程序,那麼很可能所有這三個應用程序都需要訪問相同的基本表格集合,這可能會帶來一些例外情況。如果一個用戶擁有員工表,而另一個用戶擁有存儲組織層次結構的表,並且第三個用戶擁有存儲員工評論的表,則會非常惱人。在技術上構建這種系統是可能的,但管理同義詞,權限授予和構建過程可能會很快變得難以實現,除了使不同的應用程序在不同的應用程序中放入基本相同的數據時引入數據完整性問題的可能性更大因爲他們沒有意識到某個其他應用程序已經擁有該實體的表。
此外,你必須要考慮的事情,如應用程序如何部署。如果您擁有50個小型Java應用程序,例如連接到單個Oracle數據庫的2臺應用程序服務器,則有50個獨立的Oracle用戶將使連接池面臨挑戰。即使每個連接池只有5個數據庫連接,當您添加應用程序服務器或應用程序並隨着用戶負載增加而創建更多連接時,您仍然在討論50 * 5 * 2 = 500個數據庫連接。雖然支持數百或數千個連接到數據庫當然是可能的,但這種方法也會產生各種行政頭痛。
根據管理員的具體目標,可能還有更好的方法(代替或除了單獨的數據庫帳戶之外)。例如,Oracle提供DBMS_APPLICATION_INFO
軟件包,應用程序可輕鬆使用該軟件包添加工具來顯示DBA數據庫會話當前正在執行的操作。這可以爲DBA提供更多細粒度的信息,而不僅僅是擁有單獨的數據庫帳戶。例如,如果您有三層應用程序,那麼在從連接池中取出連接以傳遞實際用戶名時,可以很方便地調用SET_CLIENT_INFO
過程,並且可以定義當前應用程序,甚至可以定義當前應用程序的哪一部分用戶目前處於這個狀態。然後,將這些信息放置在DBA已經查詢的各種視圖中,並且使DBA能夠深入瞭解正在消耗大量資源的會話,以查看人類用戶是「JustinCave 「他目前在」InventoryManagement「應用程序的」QuarterlyReporting「模塊中,DBA可能從經驗或上下文中知道該模塊是否合理地發出長時間運行但仍然重要的查詢。即使您有可供查閱的應用程序日誌以獲取所有這些信息,使其可直接提供給DBA,也可以使故障排除更加高效,並幫助開發組和支持組之間的溝通更高效。例如,DBA可以告訴應用程序開發人員,某個特定應用程序的特定模塊似乎正在創建性能問題,或詢問爲什麼有人在月中的QuarterlyReporting模塊中,而不是簡單地說「InventoryManagement應用程序很慢「或者要求其他人通過應用程序日誌來了解特定時間點發生了什麼。
這對他的故障診斷能力有意義,但在應用方面沒有意義。爲什麼每個人都喜歡爲他們的應用實施SSO(單點登錄)功能? – Annjawn