天天看點

生産系統中隻讀表的實作思路

在生産系統中有些時候需要保證一些表的隻讀特性,不允許表的資料被輕易修改。可能有一下的場景比較适用。

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級别,如果重新導入其他的環境,又需要耗費相當多的空間,對于系統也是極大的複雜,線上業務來說不敢想象,這個時候可以考慮使用外部表。不會有實體的資料存儲空間占用,外部表加載基本都是毫秒級的速度,是以對系統影響很小。同時外部表是隻讀的,限定了不能做資料修改。就算删除了外部表,真實的資料也不會删除, 這對于第二種場景是比較适用的,如果條件允許,對于第一種場景也是比較合适的。