限制DDL操作(二)
出於安全性或避免影響效能的考慮,在產品資料庫中有時候會禁止或者在一定時間段內限制DDL語句的發生。Oracle也提高了很多方法來實現這個功能,這個簡單介紹一下。
這篇介紹DISABLE TABLE LOCK語句。
限制DDL操作(一):http://yangtingkun.itpub.net/post/468/479244
Oracle支援在表級禁止DDL語句,透過設定表的DISABLE TABLE LOCK,可以禁止DDL操作修改表:
SQL> CREATE TABLE T (ID NUMBER, NAME VARCHAR2(30));
表已建立。
SQL> ALTER TABLE T DISABLE TABLE LOCK;
表已更改。
SQL> ALTER TABLE T ADD AGE NUMBER(3);
ALTER TABLE T ADD AGE NUMBER(3)
*
第 1 行出現錯誤:
ORA-00069: 無法獲得鎖 -- T 禁用了表鎖定
SQL> CREATE INDEX IND_T_NAME ON T(NAME);
索引已建立。
SQL> ALTER TABLE T RENAME TO T_TEST;
ALTER TABLE T RENAME TO T_TEST
*
第 1 行出現錯誤:
ORA-00069: 無法獲得鎖 -- T 禁用了表鎖定
SQL> DROP TABLE T PURGE;
DROP TABLE T PURGE
*
第 1 行出現錯誤:
ORA-00069: 無法獲得鎖 -- T 禁用了表鎖定
可以看到,設定了DISABLE TABLE LOCK之後,無論是ALTER TABLE還是DROP TABLE都無法成功,但是這種方法並不妨礙索引在這個表上的建立,同樣,建立檢視、觸發器、同義詞等操作都是允許的:
SQL> CREATE VIEW V_T AS SELECT * FROM T;
檢視已建立。
SQL> CREATE TRIGGER T BEFORE INSERT ON T
2 BEGIN
3 NULL;
4 END;
5 /
觸發器已建立
SQL> CREATE SYNONYM S_T FOR T;
同義詞已建立。
這個操作只是禁止了在表上獲取鎖:
SQL> LOCK TABLE T IN EXCLUSIVE MODE;
LOCK TABLE T IN EXCLUSIVE MODE
*
第 1 行出現錯誤:
ORA-00069: 無法獲得鎖 -- T 禁用了表鎖定
因此手工鎖表的操作也是被禁止的。
SQL> ALTER TABLE T ENABLE TABLE LOCK;
表已更改。
SQL> DROP TABLE T PURGE;
表已刪除。
恢復表的TABLE LOCK設定,則可以對錶進行DDL操作。
這種方法來限制DDL的好處是可以粒度是物件級,而且設定和取消都十分方便。
缺點是隻能用來限制表的DDL,其他DDL沒有辦法限制,甚至連表上的索引相關的DDL都無法禁止。
需要注意上面的測試是在10g中進行的,在9i中,則結果會有所區別:
SQL> CREATE TABLE T (ID NUMBER, NAME VARCHAR2(30));
表已建立。
SQL> ALTER TABLE T DISABLE TABLE LOCK;
表已更改。
SQL> CREATE INDEX IND_T_NAME ON T(NAME);
CREATE INDEX IND_T_NAME ON T(NAME)
*
第 1 行出現錯誤:
ORA-00069: 無法獲得鎖定 -- T禁用了表鎖定
SQL> DROP TABLE T;
DROP TABLE T
*
第 1 行出現錯誤:
ORA-00069: 無法獲得鎖定 -- T禁用了表鎖定
SQL> SELECT * FROM V$VERSION;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for 32-bit Windows: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production
在9i中,禁止了表的鎖,則在表上是無法建立索引的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-558132/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 限制DDL操作(四)
- 限制DDL操作(三)
- 限制DDL操作(一)
- Oracle 觸發器 限制DDL操作Oracle觸發器
- MySQL DDL操作表MySql
- oracle hash partition雜湊分割槽(二)_操作限制Oracle
- clob欄位對於parallel ddl的限制Parallel
- 配置GoldenGate啟動DDL支援同步DDL操作Go
- DDL操作的自動提交
- oracle追蹤誤操作DDLOracle
- DML操作 DDL觸發器觸發器
- 11.2.0.3.0 comment 操作不再是ddl操作???
- DDL、DML、DCL、DQL相關操作
- Mysql 基礎操作 DDL DML DCLMySql
- 資料庫DDL操作審計資料庫
- 禁止使用者的DDL操作
- 資料庫操作語言DDL資料庫
- MySQL5.7 InnoDB線上DDL操作MySql
- 04 MySQL 表的基本操作-DDLMySql
- 控制DDL許可權及紀錄DDL操作的Trigger
- OGG單向DDL複製操作
- 記錄資料庫所有ddl操作資料庫
- 如果comment不是ddl操作多好
- Oracle高可用環境之DDL操作Oracle
- MySQL的DDL和DML操作語法MySql
- logmnr挖掘中間有DDL的操作示例-對於執行DDL前的操作無法挖掘
- DDL觸發器設定導致DDL無法執行(二)觸發器
- Oracle DBLINK 抽數以及DDL、DML操作Oracle
- 使用Logminer工具分析DML和DDL操作
- 資料庫觸發器,禁止DDL操作資料庫觸發器
- DML, DDL操作的自動提交問題
- 限制訪問表的FOR UPDATE操作
- 記錄一次 Online DDL 操作
- 配置支援DML和DDL操作同步的GoldenGateGo
- Mysql系列第四講 DDL常見操作彙總MySql
- 透過觸發器禁止模式物件的DDL操作觸發器模式物件
- DDL,DML操作對結果快取的影響快取
- Oracle12c 新特性 - log記錄DDL操作Oracle