oracle shutdown到nomount

本文详细介绍了Oracle数据库中的两种参数文件pfile和spfile的区别及应用。包括它们的启动优先级、修改方法、如何互相创建等内容,并解释了如何通过简单的参数文件启动Oracle实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

oracle 从停止状态到nomount状态,首先需要参数文件,给oracle分配内存,来启动进程

而这些参数文件都是什么呢?

参数文件分为两种:

pfile和spfile

pfile/spfile区别
    pfile 默认的名称为“init+例程名.ora”文件路径:/u01/app/oracle/product/11.2.0/db_home1/dbs,这是一个文本文件,可以用任何文本编辑工具打开。
    spfile 默认的名称为“spfile+例程名.ora”文件路径:/u01/app/oracle/product/11.2.0/db_home1/dbs以二进制文本形式存在,不能用vi编辑器对其中参数进行修改。
两个文件可以用命令 CREATE PFILE FROM SPFILE或CREATE SPFILE FROM PFILE来互相创建

区别:
1、启动次序 SPfile优先于Pfile。
2、PFILE是静态文件,修改之后不会马上生效,数据库必须重新启动读取这个文件才行。
3、SPFILE是动态参数文件,是二进制文件,不可以直接用记事本等等程序做修改,可以用ALTER命令做修改,不用重起数据库也能生效。
修改方法:
#查看参数信息
sql>show parameter;
#修改参数
sql>alter system set 参数名=值 scope=参数2;
参数2取值有如下三种:
1. scope=spfile: 对参数的修改记录在服务器初始化参数文件中,修改后的参数在下次启动DB时生效。适用于动态和静态初始化参数。
2. scope=memory: 对参数的修改记录在內存中,对于动态初始化参数的修改立即生效。在重启DB后会丟失,会复原为修改前的参数值。
3. scope=both:   对参数的修改会同时记录在服务器参数文件和內存中,对于动态参数立即生效,对静态参数不能用这个选项。
   如果使用了spfile文件,则在执行alter system语句时,scope=both是default的选项。
   如果沒有使用spfile文件,而在执行alter system语句时指定scope=spfile|both都会出错。


oracle启动时,读取参数文件的顺序是:
1.spfile$ORACLE_SID.ORA(
创建数据库时创建的spfile)
2.spfile.ora(oracle
缺省spfile文件
)
3.init$ORACLE_SID.ora(
创建数据库时创建的
pfile)
4.init.ora(oracle
缺省pfile文件)



如何判断使用的是spfile还是静态参数文件?
SYS@abc> show parameter spfile

NAME                                 TYPE        VALUE
--------------------------------- -----------  -----------------------------------------------------------------------
spfile                                  string      /u01/app/oracle/product/11.2.0/db/dbs/spfileorcl11g.ora


如果是null值,就是pfile启动的。

指定初始参数文件启动数据库:startup pfile='/$ORACLE_HOME/dbs/init$ORACLE_SID.ora'

但是请注意,只能指定pfile,不 能指定spfile。


  参数文件之间的转换:
1、通过服务器参数文件spfile文件,创建静态参数文件pfile
SYS@orcl11g> create pfile from spfile;
SYS@orcl11g> create pfile='/home/oracle/init.ora' from spfile;

[oracle@db253 dbs]$ ls $ORACLE_HOME/dbs/initorcl11g.ora
/u01/app/oracle/product/11.2.0/db/dbs/initorcl11g.ora

[oracle@db253 dbs]$ file initorcl11g.ora
initorcl11g.ora: ASCII text

2、还可以通过对应的静态参数文件构建对应的spfile参数文件
SYS@orcl11g> shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SYS@orcl11g> create spfile from pfile;

3、还可以通过内存的状态,创建一个参数文件:(oracle 11g的功能)
SYS@orcl11g> create pfile from memory;
SYS@orcl11g> create spfile from memory;


通过一个简单的参数文件就能启动一个实例:

一个参数的参数文件
[oracle@db253 dbs]$ vi initabc.ora
[oracle@db253 dbs]$ cat initabc.ora
db_name=abc
[oracle@db253 dbs]$ export ORACLE_SID=abc
[oracle@db253 dbs]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Thu Jun 13 09:59:26 2013

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

Connected to an idle instance.

SYS@abc> startup nomount;
ORACLE instance started.

Total System Global Area 167395328 bytes
Fixed Size 1343640 bytes
Variable Size 113250152 bytes
Database Buffers 50331648 bytes
Redo Buffers 2469888 bytes
SYS@abc> 



  能够在nomount查看哪些信息?
V$PARAMETER / V$SPPARAMETER / V$SGA
V$SGASTAT / V$BH / V$INSTANCE / V$OPTION
V$VERSION / V$PROCESS / V$SESSION


  SYS@orcl11g>select name,value,isses_modifiable,issys_modifiable from v$parameter where name='nls_date_format';

NAME VALUE ISSES ISSYS_MOD
--------------------- -------------------- ----- ---------
nls_date_format (null) TRUE FALSE

SYS@orcl11g>desc v$parameter;
ISSES_MODIFIABLE VARCHAR2(5): -- 表示能否使用alter session修改这个参数,会话级别的参数修改(true/false)
ISSYS_MODIFIABLE VARCHAR2(9): -- 表示这个参数能够在实例级别进行修改alter system
■ IMMEDIATE -- 表示可以修改,并且立即生效
■ DEFERRED -- 表示可以修改,但是下一个会话生效,或是重启实例生效(alter system set..deferred)
■ FALSE -- 表示使用scope=spfile选项修改,但是下一次实例启动才生效

通过上述方式,来查看哪些参数可以使用会话级别修改,还是系统(实例)级别来修改,
需要查看 ISSES_MODIFIABLE,ISSYS_MODIFIABLE 在v$parameter里确定


  SYS@orcl11g> alter system set nls_date_format='yyyy-mm-dd hh24:mi:ss' scope=spfile; --此时重启实例即可实现日期格式的修改
SYS@orcl11g> alter system reset nls_date_format scope=spfile; --将参数改回默认值 

spfile和pfile参数文件内容是一样的,下面是他们的意思

*下面的参数描述了实例相关池的分配情况*/
    orcl.__db_cache_size=251658240
    orcl.__java_pool_size=4194304
    orcl.__large_pool_size=4194304
    orcl.__shared_pool_size=142606336
    orcl.__streams_pool_size=0
 
    *.audit_file_dest='/u01/app/oracle/admin/orcl/adump'            /*警告日志路径*/
    *.background_dump_dest='/u01/app/oracle/admin/orcl/bdump'   /*后台进程日志路径*/
    *.compatible='11.2.0.3.0'                                       /*版本兼容号*/
    *.control_files='/u01/app/oracle/oradata/orcl/control01.ctl'              /*控制文件的信息*/
    *.core_dump_dest='/u01/app/oracle/admin/orcl/cdump'            /*服务器进程相关的日志路径*/
    *.db_block_size=8192                                            /*内存块的大小*/
    *.db_create_file_dest='/u01/app/oracle/oradata/orcl'              /*tablespace ,datafile路径*/
    *.db_create_online_log_dest_1='/u01/app/oracle/disk1'             /*联机日志文件路径*/
    *.db_create_online_log_dest_2='/u01/app/oracle/disk2'            /*联机日志文件路径*/
    *.db_domain=''                                                 /域名/
    *.db_file_multiblock_read_count=16                             /*一次可读取块的大小:*8k = 128kb*/
    *.db_name='orcl'                                                /数据库标识符/
    *.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'   /*闪回路径*/
    *.db_recovery_file_dest_size=2147483648                        /*闪回区可使用的大小GB*/
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'             /*共享服务器的配置参数*/
    *.job_queue_processes=10                                            /*当前作业进程数*/
    *.open_cursors=600                                                      /*可打开的游标数*/
    *.pga_aggregate_target=135266304                                   /*服务器进程大小*/
    *.processes=250                                                             /*描述当前可以运行的进程数*/
    *.remote_login_passwordfile='EXCLUSIVE'                        /*远程登陆是否要用密码文件*/
    *.sga_target=406847488                                                  /*定义了sga的大小*/
    *.undo_management='AUTO'                                              /*Undo表空间的管理方式为自动管理*/
    *.undo_tablespace='UNDOTBS1'                                       /*指定使用哪一个undo表空间*/
    *.user_dump_dest='/u01/app/oracle/admin/orcl/udump'            /*用户进程的调试追踪文件路径*/




<think>好的,我现在要回答用户关于Oracle数据库初始化和关闭过程的问题。首先,我需要理解用户的需求。他们遇到了ORA-01033错误,想知道初始化和关闭的具体流程,以及如何解决这个问题。根据用户提供的引用资料,错误通常发生在数据库启动或关闭未完成时,可能由于数据文件被误删或其他原因导致。 首先,我应该解释数据库的初始化过程。根据引用3,启动过程分为三个步骤:启动实例、挂载数据库、打开数据库。需要详细说明每个阶段做了什么,比如实例启动时分配内存和启动后台进程,挂载时读取控制文件,打开时检查数据文件和日志文件的状态。 然后是关闭过程。同样引用3提到,关闭有几种模式:immediate、normal、transactional、abort。需要分别说明每种模式的区别和应用场景,比如abort是强制关闭,可能导致需要恢复。 接下来,用户遇到的错误可能是因为数据库没有正确完成启动或关闭,比如数据文件丢失。根据引用2,误删数据文件会导致服务启动失败。解决方案方面,引用3和4提到使用startup命令分步骤处理,或者使用恢复日志来打开数据库。需要将这些步骤整理成清晰的解决方案,比如先启动到mount状态,执行恢复,再打开数据库。 还要注意用户提供的解决方案中的具体命令,比如ALTER DATABASE OPEN RESETLOGS,以及重启服务和监听。可能需要提醒用户操作前的备份和权限问题。 最后,生成相关问题,帮助用户进一步理解错误原因、启动模式区别、数据文件恢复等。确保问题覆盖用户可能遇到的其他疑问。 总结回答结构:先介绍初始化和关闭的流程,分步骤说明,然后分析错误原因,给出解决步骤,最后相关问题。需要引用提供的资料来支持每个部分,比如引用3中的启动步骤,引用4中的恢复命令。同时保持语言简洁,技术细节准确,符合中文表达。</think>### Oracle数据库初始化与关闭过程详解 #### 一、初始化过程 Oracle数据库初始化分为三个阶段: 1. **实例启动(STARTUP NOMOUNT)** 分配内存结构(SGA、PGA),启动后台进程(如PMON、SMON)[^3]。此时仅读取参数文件(`spfile`/`pfile`),未加载控制文件。 示例命令: ```sql STARTUP NOMOUNT ``` 2. **挂载数据库(MOUNT)** 加载控制文件,验证数据文件和日志文件的存在性,但尚未验证一致性[^3]。 示例命令: ```sql ALTER DATABASE MOUNT ``` 3. **打开数据库(OPEN)** 检查所有数据文件和联机日志文件的状态。若存在不一致,需通过恢复机制(如应用归档日志)完成一致性校验[^4]。 示例命令: ```sql ALTER DATABASE OPEN ``` #### 二、关闭过程 关闭模式分为四种: 1. **SHUTDOWN NORMAL** 等待所有会话主动断开,禁止新连接,无需实例恢复。 2. **SHUTDOWN TRANSACTIONAL** 等待活动事务提交/回滚后关闭,避免数据中断。 3. **SHUTDOWN IMMEDIATE** 强制终止当前活动会话,回滚未提交事务,需要实例恢复。 4. **SHUTDOWN ABORT** 强制终止所有进程,可能导致数据不一致,需通过日志恢复。 #### 三、ORA-01033错误分析 当出现`ORACLE initialization or shutdown in progress`错误时,可能原因包括: 1. 数据库未完成启动(如卡在MOUNT阶段)[^1] 2. 关键文件(如控制文件、数据文件)丢失或损坏[^2] 3. 异常关闭后未完成恢复 #### 四、解决方案 1. **分步启动检查** ```sql STARTUP NOMOUNT; ALTER DATABASE MOUNT; ALTER DATABASE OPEN; ``` 若在`MOUNT`阶段报错,需检查控制文件路径[^2]。 2. **数据文件恢复** 若因文件丢失导致错误(如引用2场景): ```sql RECOVER DATABASE USING BACKUP CONTROLFILE; ALTER DATABASE OPEN RESETLOGS; -- 需备份后执行 ``` 3. **服务重启** 完成修复后重启Oracle服务与监听: ```bash lsnrctl stop lsnrctl start ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值