快速修复步骤:1. 检查数据库模式:SELECT database_role, open_mode FROM v$database; 如果是READ ONLY,需要切换到READ WRITE。2. 远程处理:使用sqlplus或RMAN连接数据库,执行ALTER DATABASE OPEN READ WRITE; 但需确保无只读限制,如Data Guard standby。3. 设置阈值前执行:ALTER SYSTEM SET job_queue_processes=10; 然后EM或DBMS_SERVER_ALERT包设置阈值。4. 运维痛点解决:脚本自动化切换模式,远程SQL*Net执行,避免现场登录。
来源1
ORA-13920: The metric does not apply to the database in READ ONLY mode. 当数据库处于只读模式时,无法设置阈值告警,因为阈值需要写入AWR表。解决方法:将数据库从只读切换到读写模式。SQL: ALTER DATABASE OPEN READ WRITE; 如果是standby数据库,先停止恢复:ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 切换后设置阈值。
来源2
在Data Guard环境中,standby数据库只读模式下尝试创建SQL Tuning Set或设置阈值会报ORA-13920。远程修复:从primary连接到standby,使用dgmgrl切换role,或临时打开read write:ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; ALTER DATABASE OPEN READ WRITE; 设置完后恢复:ALTER DATABASE CLOSE; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
来源3
运维痛点:现场服务器只读,无法远程设置阈值监控。解决方案:编写shell脚本远程执行。示例:ssh user@host 'sqlplus / as sysdba < 报错原因:数据库open_mode为READ ONLY,阈值设置涉及动态性能视图更新。检查:SELECT open_mode FROM v$database; 修复:如果无业务影响,直接ALTER DATABASE OPEN; 远程用sqlplus -s /nolog < Oracle 12c以上,ADDM阈值在只读模式下失效。快速处理:使用企业管理器(EM)远程连接,临时mount后open read write。命令序列:SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE OPEN READ WRITE; 设置阈值后可回滚到只读。解决痛点:无需物理访问服务器。 常见场景:维护窗口数据库置为只读测试,事后忘切回导致ORA-13920。自动化脚本:#!/bin/bash export ORACLE_SID=oradb sqlplus / as sysdba < FAQ:来源4
来源5
来源6
来源7
Q: ORA-13920怎么快速确认是只读模式?
A: 执行SELECT open_mode FROM v$database; 如果显示READ ONLY则确认。
Q: 切换读写后阈值设置成功了吗?
A: 是的,执行DBMS_SERVER_ALERT相关包后生效,重启不丢失。
Q: Data Guard standby能永久打开读写吗?
A: 可以但会中断恢复,建议临时操作后恢复managed standby。
Q: 远程工具推荐?
A: sqlplus、Toad、SQL Developer,支持无密码连接。