• How to Resolve ORA29760: instance_number parameter not specified


    How to Resolve ORA-29760: instance_number parameter not specified

    ORA-29760

    ORA-29760: instance_number parameter not specified means that Oracle cannot find any INSTANCE_NUMBER for given instance names in the parameter file to startup the instance.

    For a single-instance database, INSTANCE_NUMBER is 0 by default, so we don't need to care about the parameter at all. So we should focus on the misspelled instance name.

    On the other side, INSTANCE_NUMBER is usually used by a RAC database. That why we got ORA-29760 mostly when starting up a RAC database.

    Let's see some cases that generate ORA-29760.

    1. Single-instance Database

    After modifying some initialization parameters, we tried to start up the database, we got the error.

    SQL> startup
    ORA-29760: instance_number parameter not specified

    2. RAC Database

    We got ORA-29760 when we tried to startup a newly created empty RAC database.

    [oracle@primary01 ~]$ srvctl start database -d orclcdb -o nomount
    PRCD-1332 : failed to start database ORCLCDB
    PRCR-1079 : Failed to start resource ora.orclcdb.db
    CRS-5017: The resource action "ora.orclcdb.db start" encountered the following error:
    ORA-29760: instance_number parameter not specified
    . For details refer to "(:CLSN00107:)" in "/u01/app/grid/diag/crs/primary01/crs/trace/crsd_oraagent_oracle.trc".

    CRS-2674: Start of 'ora.orclcdb.db' on 'primary01' failed
    CRS-2632: There are no more servers to try to place resource 'ora.orclcdb.db' on that would satisfy its placement policy
    CRS-5017: The resource action "ora.orclcdb.db start" encountered the following error:
    ORA-29760: instance_number parameter not specified
    . For details refer to "(:CLSN00107:)" in "/u01/app/grid/diag/crs/primary02/crs/trace/crsd_oraagent_oracle.trc".

    CRS-2674: Start of 'ora.orclcdb.db' on 'primary02' failed

    This error may also appear in RMAN when RMAN tries to startup the database.

    Rationale to ORA-29760

    For a 2-node RAC database, the first instance usually takes the value 1 of INSTANCE_NUMBER and the second instance takes the value 2. Therefore, the entries in the parameter file should be:

    <First_Instance_Name>.instance_number=1
    <Second_Instance_Name>.instance_number=2

    In other words, Oracle find the instance name to allocate instance number when starting up. If the instance name listed in the parameter file cannot match with the instance name configured in the database each other, Oracle cannot find the right instance number to startup.

    1. Misspelled Instance Name

    Sometimes, we misspelled $ORACLE_SID or INSTANCE_NAME and made them unmatched.

    Check $ORACLE_SID

    [oracle@primary01 ~]$ echo $ORACLE_SID
    ORCLCDB1

    Check INSTANCE_NAME

    A plain-text parameter file would be very helpful, so we should create one for us.

    SQL> create pfile='/home/oracle/pfile' from spfile='+DATA/ORCLCDB/spfile';

    File created.

    SQL> exit;

    We list the parameter file for further investigation.

    [oracle@primary01 ~]$ cat /home/oracle/pfile
    ...
    ORCLCDB2.instance_number=2
    ORALCDB1.instance_number=1

    As we can see, they don't match. We misspelled the instance name. So the solution is obvious, just correct the instance name in the parameter file to solve it.

    2. Letter Case Issue

    Check RAC Database Configuration

    Let's see both instance names configured in the database.

    [oracle@primary01 ~]$ srvctl config database -d orclcdb
    ...
    Database instances: orclcdb1,orclcdb2
    Configured nodes: primary01,primary02
    ...

    It seems no problem in the cluster configuration of the RAC database.

    Check INSTANCE_NAME

    A plain-text parameter file would be very helpful, so we should create one for us.

    SQL> create pfile='/home/oracle/pfile' from spfile='+DATA/ORCLCDB/spfile';

    File created.

    SQL> exit;

    We list the parameter file for further investigation.

    [oracle@primary01 ~]$ cat /home/oracle/pfile
    ...
    ORCLCDB2.instance_number=2
    ORCLCDB1.instance_number=1

    Basically, two pairs of instance names are the same. Of course, not exactly the same, the only difference is the letter case, the first pair is lowercase, the latter pair is uppercase.

    So the solution is obvious, we should make instance names exactly match with each other including the letter case, it's really nothing to do with instance numbers in this case.

    Solutions to ORA-29760

    Misspelled instance name is easier to solve, just correct the instance name in the parameter file to align with ORACLE_SID.

    Therefore, we focus on the letter case problem, it's a little tricky.

    There're two ways to solve the problems.

    1. Uppercase the instance name in the RAC configuration, or
    2. Lowercase the instance name in the parameter file.

    1. Uppercase the instance name in the RAC configuration

    If you don't want to touch SPFILE, you can uppercase all instance names in the RAC configuration to align with SPFILE.

    First, remove instances from the database

    [oracle@primary01 ~]$ srvctl remove instance -d orclcdb -i orclcdb1
    Remove instance from the database orclcdb? (y/[n]) y
    [oracle@primary01 ~]$ srvctl remove instance -d orclcdb -i orclcdb2
    Remove instance from the database orclcdb? (y/[n]) y

    Then add then back with uppercase instance names.

    [oracle@primary01 ~]$ srvctl add instance -d orclcdb -i ORCLCDB1 -n primary01
    [oracle@primary01 ~]$ srvctl add instance -d orclcdb -i ORCLCDB2 -n primary02

    Let's check the RAC configuration before starting it up.

    [oracle@primary01 ~]$ srvctl config database -d orclcdb
    Database unique name: ORCLCDB
    ...
    Database instances: ORCLCDB1,ORCLCDB2
    Configured nodes: primary01,primary02
    ...

    Good! All instance names are upper-cased. Let's startup the database normally.

    [oracle@primary01 ~]$ srvctl start database -d orclcdb -o nomount
    [oracle@primary01 ~]$ srvctl status database -d orclcdb
    Instance ORCLCDB1 is running on node primary01
    Instance ORCLCDB2 is running on node primary02

    2. Lowercase the instance name in the parameter file

    We lowercase all instance names in the parameter file to align with the RAC configuration:

       Old   ->   New
    --------------------
    ORCLCDB1 -> orclcdb1
    ORCLCDB2 -> orclcdb2

    The result look like this:

    [oracle@primary01 ~]$ vi /home/oracle/pfile
    orclcdb1.__data_transfer_cache_size=0
    orclcdb2.__data_transfer_cache_size=0
    orclcdb2.__db_cache_size=1644167168
    orclcdb1.__db_cache_size=1577058304
    orclcdb1.__inmemory_ext_roarea=0
    orclcdb2.__inmemory_ext_roarea=0
    orclcdb1.__inmemory_ext_rwarea=0
    orclcdb2.__inmemory_ext_rwarea=0
    orclcdb1.__java_pool_size=0
    orclcdb2.__java_pool_size=0
    orclcdb1.__large_pool_size=16777216
    orclcdb2.__large_pool_size=16777216
    orclcdb1.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
    orclcdb2.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
    orclcdb1.__pga_aggregate_target=822083584
    orclcdb2.__pga_aggregate_target=822083584
    orclcdb1.__sga_target=2449473536
    orclcdb2.__sga_target=2449473536
    orclcdb1.__shared_io_pool_size=117440512
    orclcdb2.__shared_io_pool_size=117440512
    orclcdb2.__shared_pool_size=654311424
    orclcdb1.__shared_pool_size=721420288
    orclcdb1.__streams_pool_size=0
    orclcdb2.__streams_pool_size=0
    orclcdb1.__unified_pga_pool_size=0
    orclcdb2.__unified_pga_pool_size=0
    *.audit_file_dest='/u01/app/oracle/admin/ORCLCDB/adump'
    *.audit_trail='db'
    *.cluster_database=true
    *.compatible='19.0.0'
    *.control_files='+DATA/ORCLCDB/control01.ctl','+DATA/ORCLCDB/control02.ctl'
    *.db_block_size=8192
    *.db_name='ORCLCDB'
    *.db_recovery_file_dest='+DATA'
    *.db_recovery_file_dest_size=50g
    *.diagnostic_dest='/u01/app/oracle'
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLCDBXDB)'
    *.enable_pluggable_database=true
    family:dw_helper.instance_mode='read-only'
    orclcdb2.instance_number=2
    orclcdb1.instance_number=1
    *.local_listener='-oraagent-dummy-'
    *.log_archive_format='%t_%s_%r.dbf'
    *.nls_language='AMERICAN'
    *.nls_territory='AMERICA'
    *.open_cursors=300
    *.pga_aggregate_target=779m
    *.processes=1000
    *.remote_login_passwordfile='exclusive'
    *.sga_target=2336m
    orclcdb2.thread=2
    orclcdb1.thread=1
    orclcdb1.undo_tablespace='UNDOTBS1'
    orclcdb2.undo_tablespace='UNDOTBS2'

    We create a new SPFILE for the database.

    [oracle@primary01 ~]$ export ORACLE_SID=orclcdb1
    [oracle@primary01 ~]$ sqlplus / as sysdba
    ...
    SQL> startup nomount pfile='/home/oracle/pfile';
    ...
    SQL> create spfile='+DATA/ORCLCDB/spfile' from pfile='/home/oracle/pfile';

    File created.

    SQL> shutdown immediate;
    ...

    We startup the RAC database normally.

    [oracle@primary01 ~]$ srvctl start database -d orclcdb -o nomount
    [oracle@primary01 ~]$ srvctl status database -d orclcdb
    Instance orclcdb1 is running on node primary01
    Instance orclcdb2 is running on node primary02

    As you can see the instance names are all lower case.

    Conclusions

    Both ways are workable to solve ORA-29760. But I prefer the first one, this is because we used to use uppercase instance names to build a RAC database conventionally.

    Secondly, the error is really irrelevant to INSTANCE_NUMBER, all about INSTANCE_NAME.

  • 相关阅读:
    journalctl命令
    systemctl命令
    AgileConfig
    优化 ASP.NET Core Docker 镜像的大小
    ASP.NET Core 集成 React SPA 应用
    使用SQL-Server分区表功能提高数据库的读写性能
    AgileConfig
    用了很多年Dubbo,连Dubbo线程池监控都不知道,觉得自己很厉害?
    Prometheus为你的SpringBoot应用保驾护航
    在冷风中我凌乱了半小时,只因健康码刷不出来
  • 原文地址:https://www.cnblogs.com/yaoyangding/p/15945662.html
Copyright © 2020-2023  润新知