千家信息网

ORA-00064 processes设置过大导致数据库打不开

发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,processes设置过大导致数据库打不开在processes设置过大后,可能导致数据库打不开,开启数据库后会报错:SQL> startupORA-00064: object is too large
千家信息网最后更新 2025年02月23日ORA-00064 processes设置过大导致数据库打不开

processes设置过大导致数据库打不开

在processes设置过大后,可能导致数据库打不开,开启数据库后会报错:

SQL> startupORA-00064: object is too large to allocate on this O/S (1,7746920)SQL>

解决办法:

  1. 首先找到pfile位置,然后从pfile启动数据库;

    startup pfile=$ORACLE_BASE/admin/SID/pfile/init.ora.49201715235'

    pfile一般在$ORACLE_BASE/admin/$ORACLE_SID/pfile目录下。

  2. 找到spfile位置。然后用spfile生成pfile;

    create pfile='/tmp/pfile.ora' from spfile='+DATADG/SID/spfileSID.ora'

    spfile文件位置会在文件$ORACLE_HOME/dbs/init${ORACLE_SID}.ora文件中标明。

  3. 修改新生成的pfile,把process值改小后,用pfile生成spfile;

    create spfile='+DATADG/SID/spfileSID.ora' from pfile='/tmp/pfile.ora';

  4. 重启数据库后执行 show parameter spfile,查看当前spfile位置,如果位置和 $ORACLE_HOME/dbs/init${ORACLE_SID}.ora文件中标明的位置不一致,请把当前的spfile别名后,重新启动数据库。

解决步骤示例:

  1. 查看spfile的位置

[oracle@kdb01 ~]$   more /opt/oracle/product/10.2.0/db_1/dbs/initkhadb1.oraSPFILE='+MYDATA/khadb/spfilekhadb.ora'
  1. 用spfile生成pfile

SQL>SQL> startupORA-00064: object is too large to allocate on this O/S (1,7746920)SQL> startup pfile='/opt/oracle/admin/khadb/pfile/init.ora.492017152117';ORACLE instance started.Total System Global Area  343932928 bytesFixed Size          2096152 bytesVariable Size         113247208 bytesDatabase Buffers      222298112 bytesRedo Buffers            6291456 bytesDatabase mounted.Database opened.SQL>SQL> show parameter spfile;NAME                     TYPE    VALUE------------------------------------ ----------- ------------------------------spfile                   stringSQL>SQL> create pfile='/tmp/pfile.ora' from SPFILE='+MYDATA/khadb/spfilekhadb.ora';File created.
  1. 修改新生成的pfile,把process值改小后,用pfile生成spfile

SQL> create SPFILE='+MYDATA/khadb/spfilekhadb.ora' from pfile='/tmp/pfile.ora';File created.
  1. 重启数据库,查看processes设置

SQL> shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL> startupORACLE instance started.Total System Global Area  343932928 bytesFixed Size          2096152 bytesVariable Size         142607336 bytesDatabase Buffers      192937984 bytesRedo Buffers            6291456 bytesDatabase mounted.Database opened.SQL> show parameter processes;NAME                     TYPE    VALUE------------------------------------ ----------- ------------------------------aq_tm_processes              integer     0db_writer_processes          integer     1gcs_server_processes             integer     1job_queue_processes          integer     10log_archive_max_processes        integer     2processes                integer     1000SQL>SQL> show parameter spfile;NAME                     TYPE    VALUE------------------------------------ ----------- ------------------------------spfile                   string  +MYDATA/khadb/spfilekhadb.oraSQL>

原因分析

当 PROCESSES > 1500时,候需要确保ksmg_granule_size=16M or 32M;而ksmg_granule_size大小是根据sga_max_size来决定,当sga_max_size<=1024时,ksmg_granule_size=4M;sga_max_size是根据sga_target来决定的,修改sga_target>=1025M即可;

此处通过下面的方法,先恢复数据库,后续可根据自己规划先修改sga_target后,再修改process值

  1. alter system set sga_target=1200m scope=spfile

    修改sga_target=1200M,重启数据库时,sga_max_size=1200m;


  2. select x.ksppinm name,y.ksppstvl value,x.ksppdesc descbtion from x$ksppi x,x$ksppcv y where x.inst_id=userenv('Instance') and y.inst_id=userenv('Instance') and x.indx=y.indx and x.ksppinm like '%_ksmg_granule%';

    查看ksmg_granule_size大小。当SGA足够大时,我们可以手动设置 _ksmg_granule_size=32MB;

    alter system set "_ksmg_granule_size"=33554432 scope=spfile;


  3. 再根据自己的需求修process大小

alter system set sessions=10000 scope=spfile;

0