我有以下pl / sql:
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> select log_mode, open_mode, database_role from v$database;
LOG_MODE OPEN_MODE DATABASE_ROLE
------------ -------------------- ----------------
ARCHIVELOG READ ONLY WITH APPLY PHYSICAL STANDBY
SQL> DECLARE
tst_row dual%ROWTYPE;
BEGIN
SET TRANSACTION READ ONLY;
END;
/
DECLARE
*
ERROR at line 1:
ORA-16000: database or pluggable database open for read-only access
有人可以解释为什么我在这里得到 ORA-16000 吗?
答案 0 :(得分:0)
最后,这个问题得到了here的回答。
看起来像个错误。我们尝试编译类型定义并将其临时存储在表中(当然不允许这样做)
同样在18和19中转载。即使使用临时撤消或全局临时表,您仍然会得到它。
我为您提供了更多信息。假设您打算做一些“实际的”工作,例如DML等,那么您可以将匿名块重定向到主要对象,例如:
SQL> DECLARE
2 tst_row dual%ROWTYPE;
3 BEGIN
4 null;
5 END;
6 /
DECLARE
*
ERROR at line 1:
ORA-16000: database or pluggable database open for read-only access
SQL> alter session enable adg_redirect_plsql;
Session altered.
SQL> DECLARE
2 tst_row dual%ROWTYPE;
3 BEGIN
4 null;
5 END;
6 /
PL/SQL procedure successfully completed.
但是不幸的是,ADG_REDIRECT_PLSQL
命令仅在Oracle 19c中引入。参见this。
10.2.2.2在Active Data Guard备用数据库上运行顶级PL / SQL操作
在Active Data Guard备用数据库上运行的顶级PL / SQL块(如果它们不包含绑定变量)可以重定向到主数据库并在主数据库上运行。
要将备用数据库上运行的顶级PL / SQL操作重定向到主数据库,请在备用数据库上使用以下命令配置自动重定向:
ALTER SESSION ENABLE ADG_REDIRECT_PLSQL;
您只能在会话级别为顶级PL / SQL操作配置自动重定向。