您的位置:首页 > 数据库 > Oracle

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

2016-04-11 15:47 411 查看

   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> startup ORA-48108: invalid value given for the diagnostic_dest init.ora parameter ORA-48140: the specified ADR Base directory does not exist [/home/oracle/102/dbs/<ORACLE_BASE>] ORA-48187: specified directory does not exist Linux Error: 2: No such file or directory Additional information: 1 SQL> 查看$ORACLE_HOME/dbs下的init文件(我的SID名为oracleprod),即initoracleprod.ora,发现该文件中的<ORACLE_BASE>没有更改过来,当然启动不了了,修改本文件里的所有<ORACLE_BASE>为绝对路径。 结合网上其他技术大拿的经验,并删除diagnostic_dest这行记录。 然后再启动数据库 SQL> startup nomount SQL> 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这样的问题,均于<ORACLE_BASE>有关,修改之即可。 另外,在解决上述问题过程中,还出现了像如下一样的错误: SQL> conn sys SQL> show parameter  SP2-0640: Not connected SQL> conn / as sysdba ERROR: ORA-09925: Message 9925 not found;  product=RDBMS; facility=ORA Linux-x86_64 Error: 30: Read-only file system Additional information: 9925 ORA-01075: you are currently logged on SQL>  如果出现上面的问题,无法手动停止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 mount ORA-01078: failure in processing system parameters ORA-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 size OSD-04012: ?????????????? O/S-Error: (OS 3516) ?????????????? Windows ?????????? 尝试将SPFILEORCL.ORA的备份文件改名,启动数据库还是报同样的错误,而不是以前的错误,有些不知所措 幸好是自己的本机 实在不行就重装了,于是开始在google上继续找答案。找了一会就找了的方法 真的要感谢互联网。真是一个好东西。解决方法如下: C:\Documents and Settings\Administrator>sqlplus /nolog SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 2月 18 23:42:25 2016 Copyright (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> startup ORACLE 例程已经启动。 Total System Global Area  167772160 bytes Fixed Size                  1247900 bytes Variable Size              62915940 bytes Database Buffers          100663296 bytes Redo 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 size Additional 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%/database 2.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/pfile 5.也可以在SQLplus下直接使用create spfile from pfile = '<dir>' 来先创建spfile文件,再启动Oracle 6.注意 从缺省的pfile或数据库初始化的pfile中来启动数据库后,有很多参数不一致,可能会导致一些功能不可用,需要调整 建议定期备份参数文件 7.更多有关参数文件的详细描述,请参阅:Oracle 参数文件 解决: 解决示例 --本示例直接数据库了初始化数据库时的pfile来启动数据库 --启动后收到了有关控制文件的错误提示 SQL> startup pfile='/u01/app/oracle/admin/orcl/pfile/init.ora.2292010214348' ORACLE instance started.   Total System Global Area251658240 bytes Fixed Size1218796 bytes Variable Size83887892 bytes Database Buffers163577856 bytes Redo Buffers2973696 bytes ORA-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.log Thu Jul 29 16:52:44 2010 ALTER DATABASEMOUNT Thu Jul 29 16:52:44 2010 ORA-00202: control file: '/u01/app/oracle/oradata/orcl/control03.ctl' ORA-27037: unable to obtain file status Linux Error: 2: No such file or directory   --查看控制文件相关的参数信息中定义了control03.ctl SQL> show parameter control_   NAMETYPEVALUE ------------------------------------ ----------- ------------------------------ control_file_record_keep_timeinteger7 control_filesstring/u01/app/oracle/oradata/orcl/c ontrol01.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 bytes Fixed Size1218796 bytes Variable Size83887892 bytes Database Buffers163577856 bytes Redo Buffers2973696 bytes Database mounted. Database opened.   SQL> ho ls /u01/app/oracle/10g/dbs/ alert_orcl.logcore_5372init.orainitorcl.oraorapworcl core_5360hc_orcl.datinitdw.oralkORCL   --从pfile文件中创建spfile SQL> 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.ora core_5360init.oralkORCL core_5372initdw.oraorapworcl   SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down.   SQL> startup--从spfile 启动 ORACLE instance started.   Total System Global Area251658240 bytes Fixed Size1218796 bytes Variable Size83887892 bytes Database Buffers163577856 bytes Redo Buffers2973696 bytes Database mounted. Database opened.   实际上可以先create spfile from pfile = '<dir>', 再从spfile启动,使用alter system 修改相关的参数比直接修改pfile似乎 更简单些,比如上面的例子中需要去掉一个控制文件。当然此类问题是仁者见仁,智者见者。 总之一条,定期备份参数文件是相当有必要的!

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: