首先找加了SID的SPFILE,如果找不到,就找不带SID的SPFILE;如果还是找不到,就找PFILE。如果为startup 指定一个PFILE的路径,则该PFILE会覆盖默认的查找顺序。
/*=====================演示启动过程==========================*/
[oracle@localhost ~]$ cd /oracle/11g/dbs
[oracle@localhost dbs]$ lltotal 28
-rw-rw----. 1 oracle oinstall 1544 Sep 9 03:26 hc_orcl.dat
-rw-r--r--. 1 oracle oinstall 2851 May 15 2009 init.ora
-rw-r--r--. 1 oracle oinstall 861 Sep 9 03:27 initorcl.ora
# PFILE
-rw-r-----. 1 oracle oinstall 24 Aug 5 18:28 lkORCL
-rw-r-----. 1 oracle oinstall 1536 Aug 7 16:08 orapworcl
drwx------. 2 oracle oinstall 4096 Aug 5 18:25 peshm_orcl_0
-rw-r-----. 1 oracle oinstall 2560 Sep 8 22:10 spfileorcl.ora
# SPFILE
[oracle@localhost ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Tue Sep 903:26:57 2014
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn / as sysdbaConnected to an idle instance.
SQL> startupORACLE instance started.
Total System Global Area 422670336 bytes
Fixed Size 1336960 bytes
Variable Size 318769536 bytes
Database Buffers 96468992 bytes
Redo Buffers 6094848 bytes
Database mounted.
Database opened.
-- 默认的启动方式使用的是SPFILE文件
[oracle@localhost dbs]$ mkdir old
[oracle@localhost dbs]$ mv spfileorcl.ora old
#将SPFILE移动到old目录下
[oracle@localhost dbs]$ rm -f initorcl.ora
[oracle@localhost dbs]$ cp old/spfileorcl.ora ./spfileabc.ora
[oracle@localhost dbs]$ vim abc123.oraspfile=$ORACLE_HOME/dbs/spfileabc.ora
# 创建一个PFILE,在这个PFILE里面指定SPFILE的路径
[oracle@localhost dbs]$ lltotal 32
-rw-r--r--. 1 oracle oinstall 38 Sep 9 03:38 abc123.ora
-rw-rw----. 1 oracle oinstall 1544 Sep 9 03:32 hc_orcl.dat
-rw-r--r--. 1 oracle oinstall 2851 May 15 2009 init.ora
-rw-r-----. 1 oracle oinstall 24 Aug 5 18:28 lkORCL
drwxr-xr-x. 2 oracle oinstall 4096 Sep 9 03:34 old
-rw-r-----. 1 oracle oinstall 1536 Aug 7 16:08 orapworcl
drwx------. 2 oracle oinstall 4096 Aug 5 18:25 peshm_orcl_0
-rw-r-----. 1 oracle oinstall 2560 Sep 9 03:36 spfileabc.ora
SQL> shutdown immediateDatabase closed.
Database dismounted.
ORACLE instance shut down.
-- 关闭现有的Instance
SQL> startuppfile=$ORACLE_HOME/dbs/abc123.ora-- 启动实例是指定PFILE的路径
ORACLE instance started.
Total System Global Area 422670336 bytes
Fixed Size 1336960 bytes
Variable Size 318769536 bytes
Database Buffers 96468992 bytes
Redo Buffers 6094848 bytes
Database mounted.
Database opened.
Unix/Linux的root用户,或者Windows的administrator 具有启动关闭数据库的权限;如果Database是基于口令认证的,而某个用户被授予了SYSDBA和SYSOPER的权限,就可以启动关闭数据库, SYSOPER的权限略小于SYSDBA;
[oracle@localhost dbs]$ iduid=500(oracle) gid=500(oinstall)groups=500(oinstall),501(dba)context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
SQL> startup-- 这里没有要求输入口令,这是由于当前用户已经登录了操作系统,oracle就默认该用户有启动数据库的权限;如果该用户是远程连接数据库的,那么就会提示输入口令。
ORACLE instance started.
Total System Global Area 422670336 bytes
Fixed Size 1336960 bytes
Variable Size 318769536 bytes
Database Buffers 96468992 bytes
Redo Buffers 6094848 bytes
Database mounted.
Database opened.
Instance started是分配SGA,启动后台进程的过程:
启动时会将很多启动参数写入日志文件,如果启动过程中出现了问题,可以查看相关的日志文件。日志文件中的参数可以拷贝出来构造成一个新的parameterfile。
/*============下面来演示一下startup nomount的状态==============*/
[oracle@localhost ~]$ sqlplus /nologSQL*Plus: Release 11.2.0.1.0 Production on Tue Sep 903:59:30 2014
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn /as sysdbaConnected to an idle instance.
[oracle@localhost dbs]$ ps -ef | grep oracleoracle 1235112347 0 03:16 ? 00:00:00 sshd: oracle@pts/1
oracle 1235212351 0 03:16 pts/1 00:00:00 -bash
oracle 1319712315 0 03:59 pts/0 00:00:00 sqlplus
oracle 13198 13197 0 03:59 ? 00:00:00 oracleorcl(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
# 当前的数据库连接进程
oracle 13204 12352 0 04:00 pts/1 00:00:00 ps -ef
oracle 13205 12352 0 04:00 pts/1 00:00:00 greporacle
[oracle@localhost dbs]$ ipcs# 查看ipcs会发现此时SGA是空的
------ Shared MemorySegments --------
key shmid owner perms bytes nattch status
------ Semaphore Arrays--------
key semid owner perms nsems
------ Message Queues--------
key msqid owner perms used-bytes messages
SQL> startup nomount--以nomount的模式启动
ORACLE instance started.
Total System GlobalArea 422670336 bytes
Fixed Size 1336960 bytes
Variable Size 318769536 bytes
Database Buffers 96468992 bytes
Redo Buffers 6094848 bytes
[oracle@localhost dbs]$ ps -ef | grep oracleoracle 13197 12315 0 03:59 pts/0 00:00:00sqlplus
oracle 13286 1 0 04:04 ? 00:00:00 ora_pmon_orcl
oracle 13288 1 1 04:04 ? 00:00:00 ora_vktm_orcl
oracle 13292 1 0 04:04 ? 00:00:00 ora_gen0_orcl
oracle 13294 1 0 04:04 ? 00:00:00 ora_diag_orcl
oracle 13296 1 0 04:04 ? 00:00:00 ora_dbrm_orcl
oracle 13298 1 0 04:04 ? 00:00:00 ora_psp0_orcl
oracle 13300 1 0 04:04 ? 00:00:00 ora_dia0_orcl
oracle 13302 1 0 04:04 ? 00:00:00 ora_mman_orcl
oracle 13304 1 0 04:04 ? 00:00:00 ora_dbw0_orcl
oracle 13306 1 0 04:04 ? 00:00:00 ora_lgwr_orcl
oracle 13308 1 0 04:04 ? 00:00:00 ora_ckpt_orcl
oracle 13310 1 0 04:04 ? 00:00:00 ora_smon_orcl
oracle 13312 1 0 04:04 ? 00:00:00 ora_reco_orcl
oracle 13314 1 0 04:04 ? 00:00:00 ora_mmon_orcl
oracle 13316 1 0 04:04 ? 00:00:00 ora_mmnl_orcl
oracle 13318 1 0 04:04 ? 00:00:00 ora_d000_orcl
oracle 13320 1 0 04:04 ? 00:00:00 ora_s000_orcl
# Oracle的后台进程都已经启动了
oracle 13323 13197 0 04:04 ? 00:00:00oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 13347 12352 0 04:05 pts/1 00:00:00 ps -ef
oracle 13348 12352 0 04:05 pts/1 00:00:00 greporacle
[oracle@localhost dbs]$ ipcs------ Shared MemorySegments --------
key shmid owner perms bytes nattch status
0x85abc748 425984 oracle 660 4096 0
# 再次查看ipcs的资源,会发现SGA已经分配好了
------ Semaphore Arrays--------
key semid owner perms nsems
0x974edfd4 983042 oracle 660 154
------ Message Queues--------
key msqid owner perms used-bytes messages
/*=========已经可以查看到数据库的部分信息了=========*/
SQL> show parameter db_namNAME TYPE VALUE
----------------------------------------------- ------------------------------
db_name string orcl
SQL> show parameter db_block_sizeNAME TYPE VALUE
----------------------------------------------- ------------------------------
db_block_size integer 8192
Mount的过程就是将实例和数据库建立关联的过程,要mount数据库,首先要找到并打开control files,这个查找的路径由初始化参数中CONTROL_FILES指定。Mount时会读取controlfiles中数据库的name和redo log files等相关信息。
这个阶段数据库仍然是关闭状态,普通用户不能访问数据库,只有管理员可以对数据库做一些维护工作,如备份和恢复等。
===================演示mount数据库的过程========================
[oracle@localhostdbs]$ strings spfileorcl.ora | moreorcl.__shared_pool_size=159383552
orcl.__streams_pool_size=4194304
*.audit_file_dest='/oracle/admin/orcl/adump'
*.control_files='/oracle/oradata/orcl/control01.ctl','/oracle/flash_recovery_area/orcl/control02.ctl'
# 启动项中规定的control files文件的路径
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
SQL> alter database mount;--Mount数据库
Database altered.
此阶段control files中指定的文件如redolog 或联机数据文件等都会打开;普通用户已经可以连接数据库了。
但是在上一次关闭数据库之前就已经处于offline状态的tablespace,此时仍然处于offline状态,如果要使其变成online状态,需要使用相应的启动命令。
如果某些数据文件或redo log files有错误,而导致数据库无法正常打开,那么需要先将数据库调整为mount状态,然后进行一些恢复工作。
SQL> alter database open;Database altered.
注意,数据库的启动过程是单向的,即只能从mount到open,但不能从mount到nomount。
[oracle@localhost ~]$sqlplus /nologSQL*Plus: Release11.2.0.1.0 Production on Tue Sep 9 04:38:48 2014
Copyright (c) 1982, 2009,Oracle. All rights reserved.
SQL> conn / as sysdbaConnected to an idleinstance.
SQL> startup mount;ORACLE instance started.
Total System GlobalArea 422670336 bytes
Fixed Size 1336960 bytes
Variable Size 318769536 bytes
Database Buffers 96468992 bytes
Redo Buffers 6094848 bytes
Database mounted.
SQL> alter databasenomount;alter database nomount
*
ERROR at line 1:
ORA-02231: missing orinvalid option to ALTER DATABASE
-- 不能从mount到nomount状态
SQL> alter database open;Database altered.
-- 但是可以由mount到open状态