ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 限制DDL操作(三)

限制DDL操作(三)

原创 Linux操作系统 作者:yangtingkun 时间:2009-02-28 23:16:27 0 删除 编辑

出于安全性或避免影响性能的考虑,在产品数据库中有时候会禁止或者在一定时间段内限制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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10455678