ASM下修改并重建spfile

    今天遇到一个问题,回来后做了个实验,在ASM下,修改参数文件后,模拟数据无法启动到mount状态,并进行还原参数,使其重新启动。

一、实验环境

服务器环境:
  1. [oracle@LINUX10 ~]$ lsb_release -a
  2. LSB Version:    :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
  3. Distributor ID:    OracleServer
  4. Description:    Oracle Linux Server release 6.5
  5. Release:    6.5
  6. Codename:    n/a
数据库环境:
  1. SQL> select * from v$version;

  2. BANNER
  3. --------------------------------------------------------------------------------
  4. Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
  5. PL/SQL Release 11.2.0.3.0 - Production
  6. CORE    11.2.0.3.0    Production
  7. TNS for Linux: Version 11.2.0.3.0 - Production
  8. NLSRTL Version 11.2.0.3.0 - Production
数据库的相关介质文件时存放在ASM磁盘组上的
  1. SQL> show parameter spfile;

  2. NAME                 TYPE     VALUE
  3. ------------------------------------ ----------- ------------------------------
  4. spfile                 string     +DATA/orcl/spfileorcl.ora

  5. SQL> select file_name from dba_data_files;

  6. FILE_NAME
  7. --------------------------------------------------------------------------------
  8. +DATA/orcl/datafile/users.259.876759593
  9. +DATA/orcl/datafile/undotbs1.258.876759593
  10. +DATA/orcl/datafile/sysaux.257.876759593
  11. +DATA/orcl/datafile/system.256.876759593
  12. +DATA/orcl/datafile/example02.dbf
  13. +DATA/orcl/datafile/tbstest01.dbf
  14. +DATA/orcl/datafile/undotbs2_01
二、修改memory_target
    修改memory_target,使其值大于memory_max_target的值,模拟下次数据库启动时无法启动状态,及修改 memory_target(2G)> memory_max_target(804M)
  1. SQL> show parameter memory

  2. NAME                 TYPE     VALUE
  3. ------------------------------------ ----------- ------------------------------
  4. hi_shared_memory_address     integer     0
  5. memory_max_target         big integer 804M
  6. memory_target             big integer 804M
  7. shared_memory_address         integer     0
  8. SQL>
  9. SQL>
  10. SQL> alter system set memory_target=2G scope=spfile;

  11. System altered.
三、关闭数据库,并重新启动数据库到nomount状态
  1. SQL> shutdown immediate;
  2. Database closed.
  3. Database dismounted.
  4. ORACLE instance shut down.
  5. SQL> startup nomount
  6. ORA-00845: MEMORY_TARGET not supported on this system
四、查看参数文件
    1、进入参数文件所在的目录      
  1. [oracle@LINUX10 trace]$ ls $ORACLE_HOME/dbs/
  2. hc_orcl.dat init.ora initorcl.ora lkORCL orapworcl snapcf_orcl.f
    发现没有spfileorcl.ora文件,说明启动数据库是根据“pfile=initorcl.ora”来启动的

    2、查看 initorcl.ora 文件内容
  1. [oracle@LINUX10 trace]$ more /u01/app/oracle/product/11.2.3/oracle/dbs/initorcl.ora
  2. SPFILE='+DATA/orcl/spfileorcl.ora'
    确定了在ASM环境下,单实例是根据pfile文件来调用ASM磁盘组中的 spfileorcl.ora 文件的;
    说明下面我需要将ASM磁盘中的“+DATA/orcl/spfileorcl.ora” 文件进行修改还原 memory_target<=804M 即可

五、拷贝ASM下面的参数文件
    应用ASM实例的环境变量,例如 "[oracle@LINUX10 ~]$ echo $ORACLE_SID" 的值是 +ASM,进入 asmcmd,对服务器参数文件进行拷贝到操作系统上
  1. [oracle@LINUX10 ~]$ asmcmd
  2. ASMCMD> cp +DATA/orcl/spfileorcl.ora /tmp/spfile.ora
  3. copying +data/orcl/spfileorcl.ora -> /tmp/spfile.ora
六、根据拷贝出来的 /tmp/spfile.ora,创建pfile.ora文件
      将环境变量切换回来,使其成为数据库实例相关的环境变量 ,例如 "[oracle@LINUX10 ~]$ echo $ORACLE_SID" 的值是 orcl
  1. [oracle@LINUX10 ~]$ sqlplus / as sysdba

  2. SQL*Plus: Release 11.2.0.3.0 Production on Sun May 10 00:01:11 2015

  3. Copyright (c) 1982, 2011, Oracle. All rights reserved.

  4. Connected to an idle instance.

  5. SQL> create pfile='/tmp/orcl.ora' from spfile='/tmp/spfile.ora';

  6. File created.
    编辑创建出来的 orcl.ora 文件,将 MEMORY_TARGET的值设置小于等于804M即可,我这里设置的是800M

七、根据/tmp/orcl.ora 启动数据
  1. SQL> startup pfile=/tmp/orcl.ora
  2. ORACLE instance started.

  3. Total System Global Area 835104768 bytes
  4. Fixed Size         2232960 bytes
  5. Variable Size         629149056 bytes
  6. Database Buffers     201326592 bytes
  7. Redo Buffers         2396160 bytes
  8. Database mounted.
  9. Database opened.

  10. SQL> show parameter spfile

  11. NAME                  TYPE        VALUE
  12. --------------------- ----------- ------------------------------
  13. spfile                string    
  14. SQL>
    根据创建出来的pfile启动的数据,在spfile参数是没有值的。

八、创建spfile文件(spfile放在ASM磁盘组上),并通过spfile启动数据库
  1. SQL> create spfile='+DATA/orcl/spfileorcl.ora' from pfile='/tmp/orcl.ora';

  2. File created.

  3. SQL> shutdown immediate
  4. Database closed.
  5. Database dismounted.
  6. ORACLE instance shut down.
  7. SQL> startup
  8. ORACLE instance started.

  9. Total System Global Area 835104768 bytes
  10. Fixed Size         2232960 bytes
  11. Variable Size         633343360 bytes
  12. Database Buffers     197132288 bytes
  13. Redo Buffers         2396160 bytes
  14. Database mounted.
  15. Database opened.
至此,ASM磁盘组上的服务器参数文件已经重新修改并且创建成功,且数据库实例也已经可以重新启动了。
本实验主要是记录如何修改ASM磁盘组上的服务器参数文件,与普通操作系统上的文件系统上的修改spfile稍微有点差别,需要先将asm磁盘组上的参数文件cp下来,再来创建pfile。
请使用浏览器的分享功能分享到微信等