限制DDL操作(三)

yangtingkun發表於2009-02-28

出於安全性或避免影響效能的考慮,在產品資料庫中有時候會禁止或者在一定時間段內限制DDL語句的發生。Oracle也提高了很多方法來實現這個功能,這個簡單介紹一下。

這篇介紹DML_LOCKS初始化引數。

限制DDL操作(一):http://yangtingkun.itpub.net/post/468/479244

限制DDL操作(二):http://yangtingkun.itpub.net/post/468/479277

 

 

前面介紹了觸發器和ALTER TABLE DISABLE TABLE LOCK的方式,這裡在介紹一種對整個資料庫系統有效的方法,設定DML_LOCKS初始化引數。

SQL> SHOW PARAMETER DML_LOCKS

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------------------
dml_locks                            integer     748
SQL> ALTER SYSTEM SET DML_LOCKS = 0 SCOPE = SPFILE;

系統已更改。

SQL> SHUTDOWN IMMEDIATE
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE
例程已經關閉。
SQL> STARTUP
ORACLE
例程已經啟動。

Total System Global Area  177282664 bytes
Fixed Size                   454248 bytes
Variable Size             109051904 bytes
Database Buffers           67108864 bytes
Redo Buffers                 667648 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> CREATE TABLE T (ID NUMBER);

表已建立。

SQL> ALTER TABLE T ADD NAME VARCHAR2(30);
ALTER TABLE T ADD NAME VARCHAR2(30)
*
ERROR
位於第 1 :
ORA-00062:
無法獲得 DML 全表鎖定;DML_LOCKS 0


SQL> CREATE INDEX IND_T_ID ON T(ID);
CREATE INDEX IND_T_ID ON T(ID)
                         *
ERROR
位於第 1 :
ORA-00062:
無法獲得 DML 全表鎖定;DML_LOCKS 0


SQL> RENAME T TO T_TEST;
RENAME T TO T_TEST
*
ERROR
位於第 1 :
ORA-00062:
無法獲得 DML 全表鎖定;DML_LOCKS 0


SQL> DROP TABLE T;
DROP TABLE T
           *
ERROR
位於第 1 :
ORA-00062:
無法獲得 DML 全表鎖定;DML_LOCKS 0


SQL> CREATE VIEW V_T AS SELECT * FROM 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

可以看到,設定DML_LOCKS引數為0後,在對DDL語句的禁止效果上相當於對系統中所有的表都執行了ALTER TABLE DISABLE TABLE LOCK語句。

這個操作仍然是禁止了表的修改的DDL語句,而不會禁止其他DDL語句的發生。

這個方法的優點是可以方便的禁止整個系統中所有表的修改。

缺點就是粒度太過粗糙,而且和ALTER TABLE DISABLE TABLE LOCK方法一樣,只能針對表的修改,而無法處理其他型別的DDL操作。

 

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

相關文章