限制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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/4227/viewspace-558132/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值