限制DDL操作(三)
出於安全性或避免影響效能的考慮,在產品資料庫中有時候會禁止或者在一定時間段內限制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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 限制DDL操作(四)
- 限制DDL操作(二)
- 限制DDL操作(一)
- Oracle 觸發器 限制DDL操作Oracle觸發器
- MySQL DDL操作表MySql
- 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
- 【Oculus Interaction SDK】(三)限制可操作物體的移動 / 旋轉
- OGG單向DDL複製操作
- 記錄資料庫所有ddl操作資料庫
- 如果comment不是ddl操作多好
- Oracle高可用環境之DDL操作Oracle
- MySQL的DDL和DML操作語法MySql
- logmnr挖掘中間有DDL的操作示例-對於執行DDL前的操作無法挖掘
- Oracle DBLINK 抽數以及DDL、DML操作Oracle
- 使用Logminer工具分析DML和DDL操作
- 資料庫觸發器,禁止DDL操作資料庫觸發器
- DML, DDL操作的自動提交問題
- 限制訪問表的FOR UPDATE操作
- 記錄一次 Online DDL 操作
- 配置支援DML和DDL操作同步的GoldenGateGo
- 【GoldenGate】Oracle GoldenGate(三) DDL同步配置GoOracle
- GoldenGate配置(三)之DDL複製配置Go
- Mysql系列第四講 DDL常見操作彙總MySql
- 透過觸發器禁止模式物件的DDL操作觸發器模式物件
- DDL,DML操作對結果快取的影響快取