如何在特定 RDBMS 中啟用只讀(被動)模式?
正如你們大多數人所注意到的,幾天前所有 StackExchange 站點都處於維護/恢復狀態,因此它們開啟了只讀模式。從他們的部落格中,我知道他們曾經使用 MS SQL Server 2008,最近又轉向了 SQL 2012。
問題是如何在特定的 RDBMS 中切換只讀模式,從而在維護期間保持服務正常執行?
由於我大部分時間都使用 CUBRID RDBMS,我知道它們在CUBRID Broker中間件(這在 HA 環境中特別有用。
cubrid_broker.conf
據我所知,在 MySQL 中,即使您上交
read_only=1
,my.cnf/my.ini
具有複製權限的使用者仍然可以寫入只讀伺服器。SUPER
我想知道這是如何在其他關係數據庫中完成的。SO如何做到這一點?
我將嘗試為 Oracle 回答這個問題。
從歷史上看,Oracle 從未支持只讀數據庫。
可以將表空間設為只讀:http ://docs.oracle.com/cd/B28359_01/server.111/b28310/tspaces006.htm
單個表可以設為只讀:http ://www.oracle-base.com/articles/11g/read-only-tables-11gr1.php
或者,可以創建一個僅選擇角色並將其分配給登錄的使用者,而不是普通的讀寫角色。
在 SQL Server 中是:
ALTER DATABASE <dbname> SET READ_ONLY;
但是,如果您希望它對使用者不顯眼,那麼完整的解決方案也將依賴於應用程序。大多數應用程序將一直記錄數據,即使使用者沒有明確地“寫入”到數據庫(SE 頁面上的“已查看”統計數據就是一個明顯的例子)所以只是將數據庫設置為只讀可能會結束除非已編寫應用程序來解決此問題,否則會將許多錯誤返回給使用者。