由于触发器开启导致Oracle表空间不能置为只读

发布时间:  2016-03-03 浏览次数:  95 下载次数:  0
问题描述

在采用XTTS将Oracle从AIX小机迁移X86,当Oracle表空间置为只读时,报错提示有触发器。报错如下:

SQL> ALTER TABLESPACE TBS_OGG READ ONLY
  2  ;
ALTER TABLESPACE TBS_OGG READ ONLY
*
ERROR at line 1:
ORA-30514: system trigger cannot modify tablespace being made read only

 

处理过程

1、用oracle用户登录;

2、编辑sql脚本如下。该脚本会自动生成test.sql脚本。
# vi cr_test.sql
set heading off feedback off trimspool on linesize 500
spool test.sql
select 'alter trigger ' || trigger_name|| ' disable;'
from all_triggers;
spool off

3、然后在sql下执行以下两个SQL脚本,将所有触发器关闭。
SQL>@ cr_test.sql
SQL>@ test.sql

4、然后再次执行将TABLESPACE设为只读,并查看表空间的状态。

SQL> ALTER TABLESPACE TBS_OGG READ ONLY
SQL>select  status  from  dba_tablespaces  where  tablespace_name='TBS_OGG';
如果表空间为只读, status显示READ ONLY

根因
在将表空间置为只读时,需要先将表空间的所有触发器关闭
解决方案
将该表空间的系统触发器关闭

END