若故障导致业务中断,需优先采取应急措施:
emergencymanager.activateemergencymode()命令限制故障蔓延,防止问题扩大。degradationstrategy.activate(degradationlevel.severe)启用核心业务保障机制,确保关键业务正常运行。2.1 收集基础信息
ORACLE_BASE/diag/rdbms/<数据库名>/<实例名>/trace目录下,可通过SELECT * FROM vdiag_info WHERE name = 'Default Trace File';命令快速定位alert_*.log文件,重点查看ORA-开头的错误代码(如ORA-12541监听器未启动、ORA-01653表空间空间不足)。top(查看CPU占用)、df -h(查看磁盘空间)、free -m(查看内存使用)、vmstat 1 5(查看磁盘I/O)等命令,确认系统资源是否充足(如SGA/PGA设置过大导致内存溢出、磁盘空间耗尽导致写入失败)。2.2 线程与活动分析
jstack <PID>导出线程堆栈,分析是否存在线程阻塞、死锁(如deadlock关键字)或长时间等待(如WAITING状态超过1分钟)。v$session视图查看当前活动会话(STATUS='ACTIVE'),结合v$lock视图分析锁等待情况(如BLOCK>0表示阻塞其他会话),识别长时间运行的事务(SQL_EXEC_START时间较早)或未提交的事务。3.1 实例状态检查
使用ps -ef | grep ora_pmon命令确认Oracle实例是否运行(ora_pmon_<实例名>进程存在表示实例正常)。若实例未启动,需先通过sqlplus / as sysdba登录,执行SHUTDOWN IMMEDIATE关闭可能存在的异常实例,再执行STARTUP启动实例。
3.2 监听器状态检查
使用lsnrctl status命令检查监听器是否运行(显示“Listener is running”表示正常)。若未启动,执行lsnrctl start启动;若启动失败,需检查$ORACLE_HOME/network/admin/listener.ora配置文件(如端口冲突、主机名错误)。
3.3 参数配置检查
使用SHOW PARAMETERS;命令查看关键参数设置(如SGA_TARGET、PGA_AGGREGATE_TARGET、PROCESSES、SESSIONS),确认是否符合当前业务需求(如PROCESSES过小会导致并发连接失败,SGA_TARGET过大可能导致内存交换)。
3.4 表空间与数据文件检查
使用SELECT * FROM dba_tablespaces;查看表空间状态(STATUS='ONLINE'表示正常),结合SELECT * FROM dba_data_files;检查数据文件是否存在(STATUS='AVAILABLE')、是否脱机(OFFLINE状态需处理)。若表空间空间不足,可通过ALTER TABLESPACE <表空间名> ADD DATAFILE '/path/to/newfile.dbf' SIZE 1G;扩展表空间。
ADMINISTER MANAGE ADR DATABASE;命令管理ADR,通过adrci命令行工具分析诊断数据(如adrci> show incident;查看故障事件)。ALTER SESSION SET sql_trace = TRUE;开启当前会话的跟踪,或通过DBMS_MONITOR包开启会话跟踪(如BEGIN DBMS_MONITOR.SESSION_TRACE_ENABLE(session_id=>123, serial_num=>456); END;),使用tkprof工具格式化跟踪文件(如tkprof tracefile.trc output.txt)。libaio1、libaio-dev,使用sudo apt-get install libaio1 libaio-dev安装),并正确设置环境变量(ORACLE_HOME、ORACLE_SID、LD_LIBRARY_PATH,编辑~/.bashrc文件后执行source ~/.bashrc生效)。若使用Oracle Instant Client,需通过alien工具转换RPM包为deb包(如sudo alien -i oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm)。ping <监听器IP>测试客户端与服务器的网络连通性,使用telnet <监听器IP> <监听器端口>(如telnet 192.168.1.100 1521)测试端口是否可达。若无法连通,需检查防火墙设置(如iptables或ufw,允许对应端口通过)。RMAN备份:rman target /,执行BACKUP DATABASE FORMAT '/backup/%U.bak';),避免修复过程中数据丢失。