Oracle 11g 的新特性 唯讀表

2021-06-21 03:24:43 字數 3152 閱讀 7097

上次我們介紹了 oracle 11g 的新特性 —— 虛擬列,今天我們介紹另外乙個新特性 —— 唯讀表。

唯讀表跟普通的表沒有區別,但不允許任何事務對其執行任何dml(insert, update, delete)操作。

在 oracle 11g 之前,「唯讀」只對資料庫和表空間有效,而到了 11g,你可以設定某個表為唯讀表。

在 11g 之前,如果我們要實現乙個唯讀表,必須通過觸發器和約束限制來實現。

1- 表觸發器

下面我們簡單建立乙個表和觸發器來演示這種方法:

01createtableread_only_table (col1 number);

02

03createorreplacetriggerread_only_table_trg

04beforedeleteorinsertorupdate

05onread_only_table

06referencing newasnew oldasold

07foreach row

08declare

09begin

10'table is read only table.');

11end;

12

13insertintoread_only_table

14values(1);

執行這個指令碼你將會得到錯誤資訊:

ora -20001, table is read only table.

2- 檢查約束

使用下面的 sql 語句:

1createtableread_only_table2 (col1 number);

2

3altertableread_only_table2addconstraintread_only_constcheck(0=0) disable validate;

4

5insertintoread_only_table2

6values(1);

執行的報錯資訊:

ora-25128: no insert/update/delete on table with constraint scott.read_only_const) disabled and validated

很麻煩對不對?

而 oracle 11g 可通過語法 alter table table_name raed only;  來實現唯讀表,看看下面 sql 語句:

1createtableread_only_table3 (col1 number);

2altertableread_only_table3readonly;

3insertintoread_only_table3values(1);

執行後的報錯資訊是:

ora-12081: update operation not allowed on table "scott"."read_only_table3"

可是我怎麼知道乙個表是否唯讀表呢?

你可以通過資料字典檢視 (all_tables,dba_tables,user_tables,tabs)中的 read_only 列得知,如:

1selecttable_name, read_onlyfromtabs;

執行結果:

Oracle 11g 新特性 RMAN 壓縮備份

這是我的 oracle 11g 系列的文章之一.用壓縮的方式備份,這其實是乙個 oracle 早就應該有的功能。在 10g 中,終於看到 oracle 實現了這個特性。而 11g 中,又提供了新的可選壓縮方式 rman show all configure compression algorithm...

Oracle 11g 新特性(一) 虛擬列

資料庫版本 oracle database 11g enterprise edition release 11.2.0.2.0 64bit oracle11g 增加了虛擬列的新特性,具體說明如下 1 只能在堆組織表 普通表 上建立虛擬列,不能在索引組織表 外部表 臨時表上建立虛擬列 2 虛擬列不能是...

ORACLE 11g的新特性,使用者名稱密碼錯誤延遲

oracle 11g增加新特性,當有錯誤的使用者名稱和密碼連線資料庫時,如果資料量很大,就會自動延遲登入,會自動記錄延遲時間,相應賬號出現 library cache lock問題 按照官方說法,再次用正確的使用者名稱和密碼連線時,延遲時間會自動清零。但是,如果程式一直不停的用錯誤的使用者名稱,密碼...