ITPub博客

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

限制DDL操作(二)

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

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

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

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10437747