在logical standby环境下,备库基本上是一个独立的库,如果要在备库,以非sys用户对备库的数据进行DML修改,就会报错 ora-16224
1 2 3 4 |
au10qapap0tels2:ARS2AP:/opt/app/oracle/admin> oerr ora 16224 16224, 00000, "Database Guard is enabled" // *Cause: Operation could not be performed because database guard is enabled // *Action: Verify operation is correct and disable database guard |
我们需要在备库做一些操作,以避免报错。
检查备库状态,我们发现是处于standby状态:
1 2 3 4 5 6 7 |
SQL> select guard_status from v$database; GUARD_S ------- STANDBY SQL> |
改其状态为none:
1 2 3 4 5 6 7 8 9 10 11 12 |
SQL> alter database guard none; Database altered. SQL> SQL> select guard_status from v$database; GUARD_S ------- NONE SQL> |
让应用开发的同事进行DDL修改,如索引创建。
修改回standby状态:
1 |
alter database guard standby; |
在standby或all状态下,所有非sys用户,都无法对logical standby的数据进行修改,关于alter database guard [standby|all|none] 几个参数的解释如下:
1 2 3 |
ALTER DATABASE GUARD ALL - prevents users making any changes - DEFAULT ALTER DATABASE GUARD STANDBY - prevents users making changes to data maintained by data guard sql apply,即对DBMS_LOGSTDBY.SKIP 跳过的表可进行DML操作,而其他需要SQL APPLY的对象都不能进行变更操作。 ALTER DATABASE GUARD NONE - normal security |