千家信息网

如何解决oracle启动时的几个小问题

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章主要介绍了如何解决oracle启动时的几个小问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。oracle在启动时和启动过程中
千家信息网最后更新 2024年09月22日如何解决oracle启动时的几个小问题

这篇文章主要介绍了如何解决oracle启动时的几个小问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

oracle在启动时和启动过程中经常会出现这样那样的错误,简单记录下碰到过的问题,方便备用。

1、启库先起监听,发现监听启动失败

一般常见是/etc/hosts里面配置的主机名称对应IP和你的实际IP不符,改了就OK了。还要检查HOSTNAME和/etc/sysconfig/network里的主机名,都改一致保险。对应的还可检查下:listener和tnsnames里面的HOST名或IP,保持一致。有时只有把listener和tnsnames里面的HOST配成主机名,且hosts文件里的主机名对应IP正确才会启动正常。2、手动修改SPFILE文件报错手动用VI命令修改oracle里面的SPFILE***.ORA文件,数据库就起不来了,报错ORA-27046: file size is not a multiple of logical block size 。原因是动态服务器参数文件(SPFILE)是一个二进制文件,是不可以手工修改的,如果手工改了,该文件就成为了无效文件。可以通过以下方法解决:1、将SPFILE中的参数拷贝到init***.ora文件中 strings spfileCP05PV1DB.ora 查看到后拷贝到init***.ora中 (控制文件也可strings)2、删除DATABASE目录下的SPFILE***.ORA文件。3、启动数据库 (现在应该可以成功启动)4、SQL> create spfile from pfile 生成spfile(pfile文件可自己编写)使用startup命令启动数据库,,Oralce将会按照以下顺序在缺省目录中(9i,10i在oracle_home/database目录下)搜索参数文件:(1)spfile***.ora文件 (2)如果没有spfile***.ora文件就用spfile.ora文件(3) 如果没有spfile.ora文件就用init***.ora(4)如果没有init***.ora文件就用 pfile.ora所以上面我们采取的解决方法是将破坏的spfile中的参数复制到init***.ora中,然后删除spfile文件,这样启动时就会用init***.ora文件启动,然后用create spfile from pfile 命令生成spfile注意如果要修改spfile中的参数,绝对不能手工修改spfile文件,要使用下面命令:alter system set parameter=Value scope=spfile|both|memory 例如:alter system set db_cache_size=24M scope=both;来修改3、路径和名字问题SQL> startupORA-48108: invalid value given for the diagnostic_dest init.ora parameterORA-48140: the specified ADR Base directory does not exist [/home/oracle/102/dbs/]ORA-48187: specified directory does not existLinux Error: 2: No such file or directoryAdditional information: 1SQL>查看$ORACLE_HOME/dbs下的init文件(我的SID名为oracleprod),即initoracleprod.ora,发现该文件中的没有更改过来,当然启动不了了,修改本文件里的所有为绝对路径。结合网上其他技术大拿的经验,并删除diagnostic_dest这行记录。然后再启动数据库SQL> startup nomountSQL> alert database mount此时出错,ORA-00205: error in identifying control file, check alert log for more info还是查看$ORACLE_HOME/dbs/initoracleprod.ora中的内容,发现control_files = (ora_control1, ora_control2)有问题,修改为control_files = ("/u01/oradata/orcl/control01.ctl", "/u01/flash_recovery_area/orcl/control02.ctl")注:上面的control_files以机器上实际路径为准。然后再启动Oracle,即可以了。第二,在上面的过程中,还可能会碰到如ORA-09925: Unable to create audit trail file这样的问题,均于有关,修改之即可。另外,在解决上述问题过程中,还出现了像如下一样的错误:SQL> conn sysSQL> show parameter SP2-0640: Not connectedSQL> conn / as sysdbaERROR:ORA-09925: Message 9925 not found;  product=RDBMS; facility=ORALinux-x86_64 Error: 30: Read-only file systemAdditional information: 9925ORA-01075: you are currently logged onSQL> 如果出现上面的问题,无法手动停止Oracle,于是找到pmon进程,然后再kill之,即可关停Oracle.4、pfile与spfile启动问题在一个节点启动数据库:SQL>startup;ORA-01506: missing or illegal database name因前面是从PFILE启动,再生成SPFILE的,可能是生成文件出错。[root@rac2 dbs]# strings spfileracdb2.ora*.SPFILE='+DATA/racdb/spfileracdb.ora'拷贝RAC1节点的spfileracdb1.ora 为spfileracdb2.ora问题解决。还有一个现象就是路径错也会导致这个错误。比如/u01/app/oracle/admin/CP05PV1DB改错了/u01/app/oracle/admin/CP05MV1DB,导致无法识别数据库名5、SPFILE的错误SQL> startup mountORA-01078: failure in processing system parametersORA-01565: error in identifying file 'E:\oracle\product\10.2.0\db_1/dbs/spfileocl.ora'ORA-27046: file size is not a multiple of logical block sizeOSD-04012: ??????????????O/S-Error: (OS 3516) ?????????????? Windows ??????????尝试将SPFILEORCL.ORA的备份文件改名,启动数据库还是报同样的错误,而不是以前的错误,有些不知所措 幸好是自己的本机 实在不行就重装了,于是开始在google上继续找答案。找了一会就找了的方法 真的要感谢互联网。真是一个好东西。解决方法如下:C:\Documents and Settings\Administrator>sqlplus /nologSQL*Plus: Release 10.2.0.1.0 - Production on 星期三 2月 18 23:42:25 2016Copyright (c) 1982, 2005, Oracle.  All rights reserved.SQL> connect /as sysdba已连接到空闲例程。SQL> create spfile='E:\oracle\product\10.2.0\db_1\dbs\SPFILEORCL.ORA' from pfil='E:\oracle\product\10.2.0\admin\orcl\pfile\init.ora.132009183928';文件已创建。SQL> startupORACLE 例程已经启动。Total System Global Area  167772160 bytesFixed Size                  1247900 bytesVariable Size              62915940 bytesDatabase Buffers          100663296 bytesRedo Buffers                2945024 bytes数据库装载完毕。数据库已经打开。SQL>至此问题得到解决。6、另一例spfile问题SQL> create pfile from spfile;create pfile from spfile*ERROR at line 1:ORA-01565: error in identifying file '?/dbs/spfile@.ora'ORA-27046: file size is not a multiple of logical block sizeAdditional information: 1分析:从错误的提示来看,第一行说系统参数出错第二行详细指出了spfileorcl.ora出现了错误再看第三行,google了一下ORA-27046,原来是spfileorcl.ora文件被损坏,导致spfile文件不可读在spfile文件损坏的时候,如果尝试使用create pfile from spfile,也将收到同样的错误由于告警日志alert_orcl.log之前被清空,故此时未能看到更详细的错误提示 解决办法:由于spfile为二进制文件,因此修复比较困难,所以考虑从备份的spfile中恢复1.spfile备份是否存在,如存在则恢复到原始位置,如放在缺省位置,则为$ORACLE_HOME/dbs,Windows平台为%ORACLE_HOME%/database2.spfile备份文件不存在,也可以从pfile启动,启动时指定pfile参数3.spfile备份文件不存在,pfile也不存在,则从告警日志alert_orcl.log中最后一次正常启动中使用strings命令提取相关参数来手动创建pfile,然后从pfile启动,启动时指定pfile参数。注意从告警日志中复制过来的内容有些需要加单引号,一是所有的路径需要使用单引号括起来,其次是和db_name,db_domain等等4.spfile备份文件不存在,pfile也不存在,也不愿从告警日志中手动创建pfile,则可以使用数据库初始化时的pfile来启动,缺省位置为$ORALCE_BASE/admin/$ORACLE_SID/pfile5.也可以在SQLplus下直接使用create spfile from pfile = '' 来先创建spfile文件,再启动Oracle6.注意从缺省的pfile或数据库初始化的pfile中来启动数据库后,有很多参数不一致,可能会导致一些功能不可用,需要调整建议定期备份参数文件7.更多有关参数文件的详细描述,请参阅:Oracle 参数文件解决:解决示例--本示例直接数据库了初始化数据库时的pfile来启动数据库--启动后收到了有关控制文件的错误提示SQL> startup pfile='/u01/app/oracle/admin/orcl/pfile/init.ora.2292010214348'ORACLE instance started. Total System Global Area251658240 bytesFixed Size1218796 bytesVariable Size83887892 bytesDatabase Buffers163577856 bytesRedo Buffers2973696 bytesORA-00205: error in identifying control file, check alert log for more info --从告警日志中查看控制文件的信息,告警日志提示control03.ctl不存在SQL> ho tail -n 100 /u01/app/oracle/admin/orcl/bdump/alert_orcl.logThu Jul 29 16:52:44 2010ALTER DATABASEMOUNTThu Jul 29 16:52:44 2010ORA-00202: control file: '/u01/app/oracle/oradata/orcl/control03.ctl'ORA-27037: unable to obtain file statusLinux Error: 2: No such file or directory --查看控制文件相关的参数信息中定义了control03.ctlSQL> show parameter control_ NAMETYPEVALUE------------------------------------ ----------- ------------------------------control_file_record_keep_timeinteger7control_filesstring/u01/app/oracle/oradata/orcl/control01.ctl, /u01/app/oracle/oradata/orcl/control02.ctl, /u01/app/oracle/oradata/orcl/control03.ctl SQL> ho ls /u01/app/oracle/oradata/orcl/control03.ctl--查看control03.ctl物理文件不存在ls: /u01/app/oracle/oradata/orcl/control03.ctl: No such file or directory --修改pfile文件SQL> ho vim /u01/app/oracle/admin/orcl/pfile/init.ora.2292010214348 --删除这段,/u01/app/oracle/oradata/orcl/control03.ctl内容 --从修改后的pfile文件启动SQL> startup pfile='/u01/app/oracle/admin/orcl/pfile/init.ora.2292010214348'Total System Global Area251658240 bytesFixed Size1218796 bytesVariable Size83887892 bytesDatabase Buffers163577856 bytesRedo Buffers2973696 bytesDatabase mounted.Database opened. SQL> ho ls /u01/app/oracle/10g/dbs/alert_orcl.logcore_5372init.orainitorcl.oraorapworclcore_5360hc_orcl.datinitdw.oralkORCL --从pfile文件中创建spfileSQL> create spfile from pfile = '/u01/app/oracle/admin/orcl/pfile/init.ora.2292010214348'; File created. --查看spfileorcl.ora已生成SQL> ho ls /u01/app/oracle/10g/dbs/alert_orcl.loghc_orcl.datinitorcl.oraspfileorcl.oracore_5360init.oralkORCLcore_5372initdw.oraorapworcl SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down. SQL> startup--从spfile 启动ORACLE instance started. Total System Global Area251658240 bytesFixed Size1218796 bytesVariable Size83887892 bytesDatabase Buffers163577856 bytesRedo Buffers2973696 bytesDatabase mounted.Database opened. 实际上可以先create spfile from pfile = '', 再从spfile启动,使用alter system 修改相关的参数比直接修改pfile似乎更简单些,比如上面的例子中需要去掉一个控制文件。当然此类问题是仁者见仁,智者见者。总之一条,定期备份参数文件是相当有必要的!

感谢你能够认真阅读完这篇文章,希望小编分享的"如何解决oracle启动时的几个小问题"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

0