dg環境連接ORA-00604,ORA-16000: database open for read-only access


報錯信息

根據客戶提供的報錯信息,

ORA-00604: error occurred at recursive SQL level 1
ORA-16000: database open for read-only access

懷疑是觸發器導致的問題,自己的測試環境進行測試。

 

測試一、dg環境開啟審計參數是否影響

[oracle@adg1 dbs]$ sqlplus tt/tt@adgtns
SQL*Plus: Release 11.2.0.4.0 Production on Sat May 4 16:56:55 2019
SQL> 
audit_trail string OS

SQL> alter system set audit_trail=db scope=spfile;
System altered.
SQL> startup force;
DG環境,備庫如果開啟審計功能,配置db將自動轉換為OS

 

SQL> audit select,insert,update,delete on scott.emp by access;
Audit succeeded

SQL> conn tt/tt
Connected.
SQL> select * from scott.emp where rownum=1;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- --------------------
7369 SMITH CLERK 7902 17-DEC-80 800 20
SQL> conn / as sysdba
Connected.
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/tt/adump

測試發現,備庫開啟審計功能,並不會導致無法連接。
Sat May 4 17:31:00 2019 +08:00
LENGTH: "267"
SESSIONID:[10] "4294967295" ENTRYID:[1] "1" STATEMENT:[1] "1" USERID:[2] "TT" USERHOST:[4] "adg1" TERMINAL:[5]
"pts/1" ACTION:[3] "100" RETURNCODE:[1] "0" COMMENT$TEXT:[26] "Authenticated by: DATABASE" OS$USERID:[6]
"oracle" DBID:[10] "1969706720" PRIV$USED:[1] "5"
Sat May 4 17:31:40 2019 +08:00
LENGTH: "263"
SESSIONID:[10] "4294967295" ENTRYID:[1] "2" STATEMENT:[2] "10" USERID:[2] "TT" USERHOST:[4] "adg1" TERMINAL:[5]
"pts/1" ACTION:[1] "3" RETURNCODE:[1] "0" OBJ$CREATOR:[5] "SCOTT" OBJ$NAME:[3] "EMP" OS$USERID:[6]
"oracle" DBID:[10] "1969706720" PRIV$USED:[2] "47"
經過測試,備庫開啟審計,不會影響連接。

 

測試二、手工創建登錄觸發器

主庫創建觸發器
create table UC_LOGON_OFF ( user_id VARCHAR2(
30), session_id NUMBER(8), host VARCHAR2(30), last_program VARCHAR2(48), last_action VARCHAR2(32), last_module VARCHAR2(32), logon_day DATE, logon_time VARCHAR2(10), logoff_day DATE, logoff_time VARCHAR2(10), elapsed_minutes NUMBER(8), sid NUMBER(8), serial NUMBER(8) ) tablespace USERS pctfree 10 initrans 1 maxtrans 255; CREATE OR REPLACE TRIGGER TRIG_LOGON_AUDIT AFTER LOGON ON DATABASE BEGIN INSERT INTO sys.uc_logon_off select USER, SYS_CONTEXT ('USERENV', 'SESSIONID'), SYS_CONTEXT ('USERENV', 'HOST'), NULL, NULL, NULL, SYSDATE, TO_CHAR (SYSDATE, 'yyyy-mm-dd hh24:mi:ss'), NULL, NULL, NULL, NULL, null from dual; END; alter table uc_logon_off modify logon_time varchar2(30); SQL> alter system switch logfile;

 

--備庫開啟MRP同步應用,測試前tt可以連接
recover managed standby database disconnect from session;
SQL> conn tt/tt
ERROR:
ORA-00604: error occurred at recursive SQL level 1
ORA-16000: database open for read-only access
ORA-06512: at line 2
Warning: You are no longer connected to ORACLE.

alert.log 
Sat May 04 17:10:33 2019
Errors in file /u01/app/oracle/diag/rdbms/tt/tt/trace/tt_ora_16392.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-16000: database open for read-only access
ORA-06512: at line 2

 

主庫處理,禁用觸發器
SQL> select OWNER,TRIGGER_NAME,TRIGGERING_EVENT,TABLE_OWNER,TABLE_NAME,STATUS,ACTION_TYPE from dba_triggers where TRIGGER_NAME='TRIG_LOGON_AUDIT' OWNER TRIGGER_NAME TRIGGERING_EVENT TABLE_OWNER TABLE_NAME STATUS ACTION_TYPE ---------- ------------------------------ -------------------- ------------------------------ ------------------------------ -------- ----------- SYS TRIG_LOGON_AUDIT LOGON SYS ENABLED PL/SQL ALTER TRIGGER "SYS"."TRIG_LOGON_AUDIT" DISABLE; --備庫OK SQL> conn tt/tt Connected.

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM