生產系統中只讀表的實現思路

dbhelper發表於2014-11-26
在生產系統中有些時候需要保證一些表的只讀特性,不允許表的資料被輕易修改。可能有一下的場景比較適用。
1) 一些系統中有一些類似資料字典資訊的表。這些表的資訊基本都是穩定的,不會輕易的改變。
2) 可能需要從一些外部系統中複製一些資料做比對和參考,不希望這些“臨時”表的資料被認為修改。
3) 系統的核心表資料不想被人為的誤刪。

對於以上的場景可以有下面的實現思路。
1) 首先就是通過role,privilege來做限定。我們可以建立一些連線使用者,這些連線使用者中只存在同義詞,如果只需要有隻讀許可權,只在role中賦予select許可權,或者只賦予select許可權就可以了。針對第三種場景比較適用,也是比較通用的。
2)
透過物化檢視,對於一些表的資訊,如果是穩定的,不會變化的,而且透過其他的連線使用者都無法直接做更改,可以考慮使用物化檢視。這對第一種場景是比較適用的。
3)
alter table read only,在11g中有一個新特性,可以保證表出於只讀狀態,任何dml操作對它都是無效的。這對第2中場景是比較適用的
        比如表TEST,如果需要設定為read only,可以寫如下的sql語句。
        alter table TEST read only;       
4)外部
         外部表
在資料遷移中,如果大家接觸過比較多的遷移專案,可能就會有很真實的感受,總是有一些主鍵約束的資料,這些資料又很難在資料遷移之前排查出來。有些表可能比   較大,百G上T級別,如果重新匯入其他的環境,又需要耗費相當多的空間,對於系統也是極大的複雜,線上業務來說不敢想象,這個時候可以考慮使用外部表。不會有物理的資料儲存空間佔用,外部表載入基本都是毫秒級的速度,所以對系統影響很小。同時外部表是隻讀的,限定了不能做資料修改。就算刪除了外部表,真實的資料也不會刪除, 這對於第二種場景是比較適用的,如果條件允許,對於第一種場景也是比較合適的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1347082/,如需轉載,請註明出處,否則將追究法律責任。

相關文章