Management

數據庫管理的最佳實踐

  • March 26, 2015

管理應用程序數據庫的流行最佳實踐是什麼?

一種選擇是使用 sql 腳本來創建空表,並從硬編碼選項開始。(說所有地點或職業類型)。在升級過程中,您知道裡面有什麼,沒有什麼,所以在伺服器上,執行一個添加列和任何新數據的 sql 腳本。

另一種是以程式方式執行此操作,每次伺服器執行時,它都會檢查數據庫是否存在,如果不存在,則創建它。在添加新列的過程中 - 會有程式碼檢查此模式中是否存在某個列,如果不存在,則使用我選擇的預設值添加它,以及應該需要的任何新數據。

我的限制是:

  • 如果出現任何問題,應該能夠盲目地恢復備份。
  • 最少的人工干預
  • 我計劃 24/7 執行它在添加表和列的情況下:首先升級 SQL 數據庫,然後升級相應欄位的應用程式碼。刪除表/列:首先降級應用程序和 SQL 數據庫。
  • 我沒有使用 ORM。

我是否在這裡遺漏了應該添加到約束中的東西?請澄清您對答案的推理。

另外,我希望由於我要求提供有限制的答案以及來源和推理,因此這不能算作基於意見的問題。

編輯:在添加約束(3)以回應評論。

這些年來,我積累了一些積分。

像這樣的項目總是有風險的——每多出 9 個,你就可以加一個 0!

我的意思是,為了從(比如說)99% 的可靠性提高到 99.9%,您必須將成本乘以 10。

最大限度地減少面向 Web 的數據。始終在您最不忙的時間執行升級。

在執行的伺服器上進行 DDL 很困難。

為了使升級順利進行 -始終將欄位列表放入您的 SQL 中,永遠不要選擇或插入超過您絕對必須做的事情。

即 SELECT f1, f2, f3… FROM tab1…. (不是SELECT * FROM tab1)和

插入 tab1 (f1, f2, f3) 值(插入 tab1 值(f1, f2…fn)

恕我直言,最好的方案是擁有某種複制方案。非常了解您的 RDBMS 的 HA 能力。看看我在這裡的回答(它適用於 MySQL,但一般原則適用於任何系統)。

通常,Master 被複製到 Slave。

在切換時間,Halt Slave。升級奴隸。老奴隸成為新主人。老主人變成了新奴隸。

測試,測試,再測試!

祝你好運。

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