4_Oracle_Admin_Oracle的启动过程_Oracle Admin

 

首先找加了SIDSPFILE,如果找不到,就找不带SIDSPFILE;如果还是找不到,就找PFILE。如果为startup 指定一个PFILE的路径,则该PFILE会覆盖默认的查找顺序。

 

 

/*=====================演示启动过程==========================*/

 

[oracle@localhost ~]$ cd /oracle/11g/dbs

[oracle@localhost dbs]$ ll

total 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 sysdba

Connected to an idle instance.

 

SQL> startup

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.
-- 默认的启动方式使用的是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.ora

spfile=$ORACLE_HOME/dbs/spfileabc.ora
# 创建一个PFILE,在这个PFILE里面指定SPFILE的路径


 [oracle@localhost dbs]$ ll

total 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 immediate

Database 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.

 

 

4_Oracle_Admin_Oracle的启动过程_START_02

4_Oracle_Admin_Oracle的启动过程_Oracle Admin _03

Unix/Linuxroot用户,或者Windowsadministrator 具有启动关闭数据库的权限;如果Database是基于口令认证的,而某个用户被授予了SYSDBASYSOPER的权限,就可以启动关闭数据库, SYSOPER的权限略小于SYSDBA

 

[oracle@localhost dbs]$ id

uid=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.

 

4_Oracle_Admin_Oracle的启动过程_Oracle Admin _04

 

Instance started是分配SGA,启动后台进程的过程:

4_Oracle_Admin_Oracle的启动过程_Oracle Admin _05

启动时会将很多启动参数写入日志文件,如果启动过程中出现了问题,可以查看相关的日志文件。日志文件中的参数可以拷贝出来构造成一个新的parameterfile

 

 

/*============下面来演示一下startup nomount的状态 ==============*/

[oracle@localhost ~]$ sqlplus /nolog

SQL*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 sysdba

Connected to an idle instance.

 

[oracle@localhost dbs]$ ps -ef | grep oracle

oracle   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 oracle

oracle   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_nam

 
NAME                              TYPE        VALUE
----------------------------------------------- ------------------------------
db_name                              string      orcl

SQL> show parameter db_block_size

 
NAME                              TYPE        VALUE
----------------------------------------------- ------------------------------
db_block_size                        integer     8192

 

 

4_Oracle_Admin_Oracle的启动过程_Oracle Admin _06

Mount的过程就是将实例和数据库建立关联的过程,要mount数据库,首先要找到并打开control files,这个查找的路径由初始化参数中CONTROL_FILES指定。Mount时会读取controlfiles中数据库的nameredo log files等相关信息。

 

这个阶段数据库仍然是关闭状态,普通用户不能访问数据库,只有管理员可以对数据库做一些维护工作,如备份和恢复等。

 

===================演示mount数据库的过程========================

[oracle@localhostdbs]$ strings spfileorcl.ora | more

orcl.__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.

 

 

4_Oracle_Admin_Oracle的启动过程_Oracle Admin _07

此阶段control files中指定的文件如redolog 或联机数据文件等都会打开;普通用户已经可以连接数据库了。

但是在上一次关闭数据库之前就已经处于offline状态的tablespace,此时仍然处于offline状态,如果要使其变成online状态,需要使用相应的启动命令。

如果某些数据文件或redo log files有错误,而导致数据库无法正常打开,那么需要先将数据库调整为mount状态,然后进行一些恢复工作。

 

SQL> alter database open;

 
Database altered.

 

 

4_Oracle_Admin_Oracle的启动过程_Oracle Admin _08

4_Oracle_Admin_Oracle的启动过程_START_09

注意,数据库的启动过程是单向的,即只能从mountopen,但不能从mountnomount

 

[oracle@localhost ~]$sqlplus /nolog

SQL*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 sysdba

Connected 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状态