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