emergencymanager.activateemergencymode()命令激活应急模式,限制故障蔓延,保障核心业务不受影响。degradationstrategy.activate(degradationlevel.severe)启用核心业务保障机制,优先保证关键业务的最低可用性。收集基础信息:
ORACLE_BASE/diag/rdbms/<数据库名称>/<实例名称>/trace目录下,可通过SELECT * FROM vdiag_info WHERE name = 'Default Trace File'命令快速定位alert_*.log文件,重点查看ORA-开头的错误代码(如ORA-01034: ORACLE not available表示实例未启动)。top(实时查看CPU/内存占用)、df -h(检查磁盘空间)、iostat -x 1(分析磁盘I/O)等命令,确认是否存在资源瓶颈(如内存不足导致ORA-04031: out of shared memory)。线程与活动会话分析:
jstack <pid>导出线程堆栈,分析是否存在锁竞争、死锁或线程阻塞(如deadlock detected)。v$session视图查看当前活动会话(STATUS='ACTIVE'),结合v$lock视图分析锁等待情况(如BLOCK>0表示会话被阻塞),识别长时间持有锁的会话并处理(如ALTER SYSTEM KILL SESSION 'sid,serial#')。检查Oracle实例状态:使用ps -ef | grep ora_pmon命令确认Oracle实例进程是否存在(ora_pmon_<实例名>是实例守护进程)。若实例未启动,需先关闭异常实例(sqlplus / as sysdba → SHUTDOWN ABORT),再尝试启动(STARTUP)。
检查Oracle监听器状态:使用lsnrctl status命令验证监听器是否运行(显示“Listener is running”为正常)。若未启动,执行lsnrctl start;若启动失败,检查listener.ora配置文件(位于ORACLE_HOME/network/admin)的语法正确性(如LISTENER名称、端口配置)。
检查Oracle错误日志:除了查看alert_*.log,还可通过操作系统日志(/var/log/syslog或journalctl -u oracle)获取系统级错误信息(如磁盘故障、权限问题)。
验证数据库参数配置:使用SHOW PARAMETERS命令检查关键参数(如SGA_TARGET、PGA_AGGREGATE_TARGET、PROCESSES)是否符合业务需求。例如,SGA_TARGET过小可能导致ORA-04031,PROCESSES不足可能导致ORA-12516: TNS:listener could not find available handler。
检查表空间与数据文件:通过SELECT * FROM dba_tablespaces查看表空间状态(STATUS='ONLINE'为正常),结合SELECT * FROM dba_data_files确认数据文件是否存在、是否可写(如AUTOEXTENSIBLE=YES表示可自动扩展)。若数据文件损坏,可使用RECOVER DATAFILE 'filename'命令修复。
top命令找出CPU或内存占用高的进程(如ora_dbw0_<实例名>是数据库写入进程),通过v$session和v$process关联分析会话信息,必要时终止异常会话(KILL SESSION)。v$process视图查看PGA使用量(PGA_USED_MEM字段),若某会话PGA占用过高(如超过PGA_AGGREGATE_TARGET的80%),可优化该会话的SQL(如添加索引减少全表扫描)或调整PGA参数。v$session_wait视图中的等待事件(如latch free表示 latch 竞争,library cache lock表示库缓存锁等待),优化SQL或调整数据库参数(如增加OPEN_CURSORS减少库缓存锁)。v$sql视图找出执行慢的SQL(DISK_READS或BUFFER_GETS高),通过EXPLAIN PLAN分析执行计划(如全表扫描导致CPU高),优化SQL(如添加索引)或分批删除索引。MAXSIZE(SELECT file_name, bytes/1024/1024 "Size(MB)", maxbytes/1024/1024 "Max Size(MB)" FROM dba_data_files),若达到上限,可添加新数据文件(ALTER TABLESPACE <表空间名> ADD DATAFILE '/path/filename.dbf' SIZE 100M)或扩展现有数据文件(ALTER DATABASE DATAFILE '/path/filename.dbf' RESIZE 200M)。sudo ufw allow 1521),确认listener.ora中的HOST参数设置为服务器IP或0.0.0.0(允许远程连接),使用telnet <服务器IP> 1521测试端口连通性。SELECT username, profile, expiry_date FROM dba_users WHERE expiry_date < SYSDATE找出密码过期的用户,通过ALTER USER <用户名> IDENTIFIED BY <新密码>修改密码,或修改概要文件(ALTER PROFILE <概要文件名> LIMIT PASSWORD_LIFE_TIME UNLIMITED)取消密码有效期。RMAN备份数据库),避免误操作导致数据丢失。alert_*.log、trace文件及故障描述)。