首页 > 代码库 > 数据库mount阶段

数据库mount阶段

数据库从nomount启动到mount状态后,查看日志:

Wed Dec 17 13:23:19 2014
alter database mount
Wed Dec 17 13:23:23 2014
Successful mount of redo thread 1, with mount id 1394303559
Database mounted in Exclusive Mode
Lost write protection disabled
Completed: alter database mount
Wed Dec 17 13:36:20 2014
db_recovery_file_dest_size of 3882 MB is 0.00% used. This is a
user-specified limit on the amount of space that will be used by this
database for recovery-related files, and does not reflect the amount of
space available in the underlying filesystem or ASM diskgroup.

日志中提示成功加载redo线程。并输出mount id 1394303559 这里在经过多次重启后观察变化,还可以转储控制文件来观察变化。

查看参数中的配置(11g默认产生两个控制文件,一个放在数据目录下,另一个放在闪回区目录下):

SQL> show parameters control_files;
NAME               TYPE                              VALUE
------------------ --------------------------------- ------------------------------
control_files      string                            /DBBK/oracle/oradata/orcl/cont
                                                                       rol01.ctl, /DBBK/oracle/flash_
                                                                       recovery_area/orcl/control02.c
                                                                       tl

当数据库从nomount切换到mount的状态时,数据库首先去读取spfile中指定的路径中的controlfile:

SQL> col status for a10
SQL> select status,name,is_recovery_dest_file,block_size,file_size_blks from v$controlfile;
STATUS     NAME                                                IS_RECOVE BLOCK_SIZE FILE_SIZE_BLKS
---------- --------------------------------------------------- --------- ---------- --------------
           /DBBK/oracle/oradata/orcl/control01.ctl             NO             16384            594
           /DBBK/oracle/flash_recovery_area/orcl/control02.ctl NO             16384            594

当数据库找不到指定的controlfile时会报如下错误:

Wed Dec 17 11:14:06 2014
alter database mount
ORA-00210: cannot open the specified control file
ORA-00202: control file: ‘/DBBK/oracle/product/11.2.0.1.0/dbs/cntrlorcl.dbf‘
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory

为了安全起见也可以自定义增加数据库controlfile的数据,并指定位置,数据库启动前,在pfile中指定多个控制文件,同时拷贝控制文件到对应的路径:

SQL> show parameter control_files;
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
control_files                        string                            /DBBK/oracle/oradata/orcl/cont
                                                                       rol01.ctl, /DBBK/oracle/oradat
                                                                       a/orcl/control03.ctl, /DBBK/or
                                                                       acle/flash_recovery_area/orcl/
                                                                       control02.ctl
SQL> select name,block_size,file_size_blks from v$controlfile;
NAME                                                BLOCK_SIZE FILE_SIZE_BLKS
--------------------------------------------------- ---------- --------------
/DBBK/oracle/oradata/orcl/control01.ctl                  16384            594
/DBBK/oracle/oradata/orcl/control03.ctl                  16384            594
/DBBK/oracle/flash_recovery_area/orcl/control02.ctl      16384            594

修改后再次观察mount状态下的mount id已经发生改变

[oracle@021Y-SH-BKAP trace]$ grep -B2 ‘mount id‘ alert_orcl.log 

alter database mount

Wed Dec 17 13:23:23 2014

Successful mount of redo thread 1, with mount id 1394303559

--

alter database mount

Wed Dec 17 14:28:10 2014

Successful mount of redo thread 1, with mount id 1394319734

按照盖国强《DBA入门书、进阶与诊断案例》中所述启动到mount状态下时,数据库还需要一个重要的文件即口令文件,该文件位于$ORACLE_HOME/dbs下,命名方式为:orapw+SID

[oracle@021Y-SH-BKAP dbs]$ strings orapworcl 

]\[Z

ORACLE Remote Password file

INTERNAL

59F91175308D448B

AB38EDAF3AF77681

tS/C

但通过验证发现11G之后,数据库加载时已经取消了对该密码文件的验证,其实这也可以解释,为什么在11G前修改数据库的SYS用户密码需要通过orapwd命令进行修改,而到了11G仅需要通过alter user sys identified by ‘newpassword‘这样的方式即可以修改密码了。与该文件相关的数据库参数remote_login_passwordfile.

关于orapwd命令的使用,可以通过在终端中直接输入命令的方式获取命令的使用帮助,后续对该命令的使用进一步说明:

Usage: orapwd file=<fname> entries=<users> force=<y/n> ignorecase=<y/n> nosysdba=<y/n>
  where
    file - name of password file (required),
    password - password for SYS will be prompted if not specified at command line,
    entries - maximum number of distinct DBA (optional),
    force - whether to overwrite existing file (optional),
    ignorecase - passwords are case-insensitive (optional),
    nosysdba - whether to shut out the SYSDBA logon (optional Database Vault only).
    
  There must be no spaces around the equal-to (=) character.

另外,在$ORACLE_HOME/dbs目录下还有一些文件如hc_orcl.dat,HC表示Health Check,网上介绍该文件作为instance健康状态检查时参考的文件,该文件中的内容说不要删除或修改他,但实际发现每次重启实例后,该文件会自动被创建出来。

还有一个文件时lkORCL,从命名方式可以看出该文件时实例的锁文件,lk表示LOCK。同样该文件也会在每次实例启动时重新创建,但根据盖国强书中提到的当数据库关闭,锁未释放的情况发生时,会导致后续数据库无法启动。因为没有遇到过类似的问题。这里暂时不在举例。

 

参考:《DBA入门书、进阶与诊断案例》 盖国强著

本文出自 “LinuxOracle” 博客,请务必保留此出处http://onlinekof2001.blog.51cto.com/3106724/1591011

数据库mount阶段