今天,改动了oracle数据库实例的启动配置文件,导致数据库不能启动,出现各种错误,幸好在网上搜到了大量的解决方案,虽然不全符合,但综合起来最终解决问题。

首先描述一下问题:

我误改了

D:\oracle\app\Administrator\product\11.2.0\dbhome_1\database\下的SPFILEMYORCL.ORA文件。

“D:\oracle\app\Administrator\product\11.2.0\dbhome_1”是我Oracle的安装路径,SPFILEMYORCL.ORA是我的数据库实例MYORCL的启动文件,是个二进制的文件,我用editplus改了里面的内容,结果导致数据库无法连接。通过检查D:\oracle\app\Administrator\product\11.2.0\dbhome_1\database\下的oradim.log文件(应该是启动数据库的日志文件记录各种启动的信息包括出错信息)得出错误信息为:

“Thu May 30 01:34:54 2013

D:\oracle\app\Administrator\product\11.2.0\dbhome_1\bin\oradim.exe

-startup -sid myorcl -usrpwd * -log oradim.log

-nocheck 0

Thu May 30 01:34:54 2013

ORA-01078: failure in processing system parameters

LRM-00109: ????????????????

'D:\ORACLE\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\SPFILEMYORCL.ORA'”

解决方法:

我觉得问题肯定在SPFILEMYORCL.ORA这个文件上,于是又将它用editplus改回原来的样子,但是还是不行,我估计我应该是因为强行改动二进制文件的内容破坏了其结构,所以必须得换一个新的SPFILEMYORCL.ORA文件。

第一种方法:

利用pfile生成spfile但是oracle11g

不知道pfile在哪(最后才发现是在"D:\oracle\app\Administrator\admin\myorcl\pfile"目录下的init.ora.322013175024),我就新建一个数据库利用新数据库的spfile生成pfile,再修改里面的参数,最后由新的pfile生成目标spfile。新建数据库mydb生成“D:\oracle\app\Administrator\product\11.2.0\dbhome_1\database\SPFILEMYDB.ORA”,设置默认数据库位mydb,用sqlplus语句进入mydb,生成mydb的pfile,语句为:

SQL> CREATE pfile from

spfile='D:\oracle\app\Administrator\product\11.2.0\dbhome_1\database\SPFILEMYDB.ORA';

其中spfile='D:\oracle\app\Administrator\product\11.2.0\dbhome

_1\database\SPFILEMYDB.ORA'表示spfile文件是位于D:\oracle\app\Administrator\product\11.2.0\dbhome_1\database\下的SPFILEMYDB.ORA;此时生成INITmydb.ORA文件,同样在同一目录下。INITmydb.ORA就是所谓的pfile,这个不是二进制文件,可以用editplus打开,如下所示:

mydb.__db_cache_size=373293056

mydb.__java_pool_size=4194304

mydb.__large_pool_size=4194304

mydb.__oracle_base='D:\oracle\app\Administrator'#ORACLE_BASE set

from environment

mydb.__pga_aggregate_target=398458880

mydb.__sga_target=591396864

mydb.__shared_io_pool_size=0

mydb.__shared_pool_size=201326592

mydb.__streams_pool_size=0

*.audit_file_dest='D:\oracle\app\Administrator\admin\mydb\adump'

*.audit_trail='db'

*.compatible='11.2.0.0.0'

*.control_files='D:\oracle\app\Administrator\oradata\mydb\control01.ctl','D:\oracle\app\Administrator\oradata\mydb\control02.ctl'

*.db_block_size=8192

*.db_domain=''

*.db_name='mydb'

*.diagnostic_dest='D:\oracle\app\Administrator'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=mydbXDB)'

*.local_listener='LISTENER_MYDB'

*.memory_target=988807168

*.nls_language='SIMPLIFIED CHINESE'

*.nls_territory='CHINA'

*.open_cursors=300

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.undo_tablespace='UNDOTBS1'

将其中的mydb全部替换成myorcl再保存为INITmyorcl.ORA,这样目标pfile就生成了。接下来就是生成myorcl的spfile了,语句为:

SQL> CREATE spfile from

pfile='D:\oracle\app\Administrator\product\11.2.0\dbhome_1\database\initmyorcl.ora';生成了SPFILEMYORCL.ORA文件,重启myorcl数据库,这时仍然不成功,但错误已经不是

“Thu May 30 01:34:54 2013

D:\oracle\app\Administrator\product\11.2.0\dbhome_1\bin\oradim.exe

-startup -sid myorcl -usrpwd * -log oradim.log -nocheck 0

Thu May 30 01:34:54 2013

ORA-01078: failure in processing system parameters

LRM-00109: ????????????????

'D:\ORACLE\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\SPFILEMYORCL.ORA'”

说明文件可用,问题就快解决了,这时我怀疑是因为pfile是copy mydb的可能会有些数值不合适所以-----

用第二种方法:将pfile文件换成开始说的D:\oracle\app\Administrator\admin\myorcl\pfile"目录下的init.ora.322013175024,再:

SQL> CREATE spfile from

pfile='D:\oracle\app\Administrator\admin\myorcl\pfile\init.ora.322013175024';

重启myorcl数据库,可以连接。

好了,到此结束,第一次写,肯定有很多表述不清的地方,望见谅,如有疑问可留言。

a4c26d1e5885305701be709a3d33442f.png

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐