ORA-09817: Write to audit file failed
原因:Oracle安装目录或审计文件所在磁盘空间耗尽,无法写入审计日志。
解决方法:通过df -h命令定位磁盘空间不足的分区,删除无用文件(如临时文件、旧日志)或扩展磁盘空间,重启数据库使配置生效。
TNS-12542: TNS:address already in use
原因:监听端口(默认1521)被其他进程占用,或主机名与IP地址配置冲突(如多IP对应同一主机名)。
解决方法:使用netstat -tulnp | grep 1521命令找出占用端口的进程,杀掉无关进程;检查/etc/hosts文件,确保主机名与IP地址一一对应,修改后重启数据库。
ORA-04031: unable to allocate shared memory
原因:SGA(共享全局区)或PGA(进程全局区)内存不足,无法满足数据库缓存需求。
解决方法:通过ALTER SYSTEM命令调整内存参数(如sga_target、pga_aggregate_target),例如:
alter system set sga_target=8g scope=spfile;
alter system set pga_aggregate_target=4g scope=spfile;
修改后执行ALTER SYSTEM FLUSH SHARED_POOL刷新共享池,重启数据库使参数生效。
ORA-01078: failure in processing system parameters, LRM-00109: could not open parameter file
原因:ORACLE_SID环境变量设置错误,或参数文件(如initsid.ora)路径不正确。
解决方法:执行echo $ORACLE_SID确认SID是否正确,修改~/.bash_profile或/etc/profile中的ORACLE_SID变量,使其与实际SID一致;检查参数文件路径(通常位于$ORACLE_HOME/dbs目录下),确保文件存在且权限正确。
ORA-00001: unique constraint violated
原因:插入或更新的数据违反了表或索引的唯一性约束(如主键、唯一索引)。
解决方法:检查插入的数据是否与现有数据重复,使用SELECT * FROM table_name WHERE unique_column = 'value'查询重复记录,修改数据或调整约束(如删除重复记录后重新插入)。
ORA-00060: deadlock detected while waiting for resource
原因:多个会话互相等待对方持有的锁,形成死锁循环(常见于并发事务操作同一资源)。
解决方法:通过DBMS_MONITOR.BLOCKED_SESSIONS视图或V$LOCK、V$SESSION视图定位死锁会话,使用ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;终止其中一个会话,打破死锁循环。
ORA-01555: snapshot too old
原因:UNDO表空间不足或UNDO_RETENTION参数设置过小,导致查询无法获取一致的快照数据(常见于长事务或高并发场景)。
解决方法:增大UNDO表空间大小(如添加数据文件):
ALTER TABLESPACE undotbs1 ADD DATAFILE '/u01/app/oracle/oradata/orcl/undotbs1_02.dbf' SIZE 10G;
调整UNDO_RETENTION参数(单位:秒),例如设置为3600秒(1小时):
alter system set undo_retention=3600 scope=both;
注意:需确保UNDO表空间有足够空间支持该参数设置。
TNS-12170: TNS:connect timeout occurred
原因:客户端与数据库服务器之间的网络连接慢,或防火墙、路由器阻止了连接请求(超时报文未及时返回)。
解决方法:使用ping命令测试网络连通性,traceroute命令定位网络瓶颈;检查防火墙设置(如iptables、Windows防火墙),开放1521端口;调整sqlnet.ora文件中的SQLNET.INBOUND_CONNECT_TIMEOUT和SQLNET.SEND_TIMEOUT参数,增大超时时间(如设置为60秒)。
ORA-12560: TNS:protocol adapter error
原因:ORACLE_HOME或ORACLE_SID环境变量未正确设置,或libaio(异步I/O库)缺失(Linux系统必备)。
解决方法:执行echo $ORACLE_HOME和echo $ORACLE_SID确认环境变量设置,修改~/.bash_profile或/etc/profile文件,添加以下内容:
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
执行source ~/.bash_profile使变量生效;安装libaio包(CentOS/RHEL):
yum install -y libaio
重启数据库或客户端。