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

81次阅读
没有评论

共计 7353 个字符,预计需要花费 19 分钟才能阅读完成。

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

   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
查看 $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, 导致无法识别数据库名

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 数据库装载完毕。数据库已经打开。至此问题得到解决。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 从缺省的 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 似乎 更简单些,比如上面的例子中需要去掉一个控制文件。当然此类问题是仁者见仁,智者见者。总之一条,定期备份参数文件是相当有必要的!

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

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计7353字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)