ORA-49601: syntax error: found "%s": expecting one of: "%s" etc..

oracle启动数据库的时候报如下错误:

SQL> startup
ORA-49601: syntax error: found "%s": expecting one of: "%s" etc..
SQL> 

以nomount启动也报错一样

SQL> startup nomount
ORA-49601: syntax error: found "%s": expecting one of: "%s" etc..
SQL> 

问题出现的原因,之前为了测试oracle11g新特性密码验证延迟效果,设置了event事件错误,当时设置执行的命令有误,NAME CONTEXT之间应该有空格,导致重启数据库的时候出现标题错误,错误的语句如下:

ALTER SYSTEM SET EVENT = '28401 TRACE NAMECONTEXT FOREVER, LEVEL 1' SCOPE = SPFILE;

为了解决此问题,找到initorcl.ora的文件。

/u01/app/oracle/product/11.2.0/db_1/dbs
[root@localhost dbs]# ls
hc_DBUA0.dat  init.ora      lkORCL     spfileorcl.ora
hc_orcl.dat   initorcl.ora  orapworcl

[root@localhost dbs]# cat initorcl.ora 
orcl.__db_cache_size=92274688
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=142606336
orcl.__sga_target=272629760
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=155189248
orcl.__streams_pool_size=8388608
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oraData/orcl/control01.ctl','/u01/app/oracle/flash_recovery_area/orcl/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.event='28401 TRACE NAMECONTEXT FOREVER, LEVEL 1'
*.memory_target=415236096
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
[root@localhost dbs]# 

可以看到倒数第六行的event是错误的,编辑该文件,删除此event配置或者改写正确的,我是改写正确的,如下

*.event='28401 TRACE NAME CONTEXT FOREVER, LEVEL 1'

因为之前执行过 create pfile from spfile;命令,所以spfileorcl.ora文件其实也是有问题的
在这里插入图片描述

本来以为修改spfileorcl.ora文件,重建pfile,重启下即可解决问题的,但是启动报如下错误了:

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

后面网上查找资料,spfile文件是二进制文件,不能手工修改的,修改的话会变成无效文件。
查看资料https://blog.csdn.net/shendeguang/article/details/24744695

此时可以通过以下方法解决:
1。将SPFILE中的参数拷贝到initorcl.ora文件中
2。删除DATABASE目录下的spfileorcl.ora文件。
3。启动数据库 (现在应该可以成功启动)
4。SQL> create spfile from pfile 生成spfile
使用startup命令启动数据库,,Oralce将会按照以下顺序在缺省目录中(9i,10i在oracle_home/database目录下)搜索参数文件:(1)spfileorcl.ora文件 (2)如果没有spfileorcl.ora文件就用spfile.ora文件(3) 如果没有spfile.ora文件就用initorcl.ora(4)如果没有initorcl.ora文件就用 pfile.ora
所以上面我们采取的解决方法是将破坏的spfile中的参数复制到initorcl.ora中,然后删除spfile文件,这样启动时就会用initorcl.ora文件启动,然后用create spfile from pfile 命令生成spfile

由于我们上面的操作已经把initorcl.ora文件的event改写正确了,所以直接删除spfileorcl.ora文件即可。操作如下:

[root@localhost dbs]# pwd
/u01/app/oracle/product/11.2.0/db_1/dbs
[root@localhost dbs]# ls
hc_DBUA0.dat  init.ora      lkORCL     spfileorcl.ora
hc_orcl.dat   initorcl.ora  orapworcl
[root@localhost dbs]# rm -rf spfileorcl.ora 
SQL> startup
ORACLE instance started.

Total System Global Area  413372416 bytes
Fixed Size		    2213896 bytes
Variable Size		  314574840 bytes
Database Buffers	   92274688 bytes
Redo Buffers		    4308992 bytes
Database mounted.
Database opened.

再次生成spfile文件。

SQL> create spfile from pfile;

File created.

发现spfileorcl.ora重新生成了。

[root@localhost dbs]# pwd
/u01/app/oracle/product/11.2.0/db_1/dbs
[root@localhost dbs]# ls
hc_DBUA0.dat  hc_orcl.dat  init.ora  initorcl.ora  lkORCL  orapworcl  spfileorcl.ora

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄宝康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值