深入解析oracle – 数据库的启动和关闭
Author:高进波
Time:2009-11-09
深入解析oracle DBA入门,进阶与诊断案例 学习笔记
第一章 数据库的启动和关闭
数据库的启动
只需要以sysdba/sysoper身份登录,输入startup即可启动
主要包括3个过程:
启动到nomount状态
启动到mount状态
启动到open状态
在启动的第一步,oracle首先寻找参数文件(pfile/spfile),然后根据参数文件中的设置,创建实例,分配内存,启动后台进程。
判断oracle是64位还是32位
file $ORACLE_HOME/bin/oracle
1.启动到nomount状态
1)实例以及进程的创建
sqlplus /nolog
connect /as sysdba
startup nomount;
2)v$process视图
select addr,pid,spid,username,program from v$process;
desc v$process;
ps -ef|grep ora_
如果在操作系统上发现某个进程表现异常,通过操作系统的PID和v$process视图中的spid关联,就可以找到这个OS上的进程在数据库
内部的化身,从而可以进一步跟踪诊断。
3)参数文件的选择
oracle首选spfile<oracle_sid>.ora作为启动参数文件,如果文件不存在,选择spfile.ora文件,如果两个都不存在,oracle将会选择
init<oracle_sid>.ora文件,如果3个都不存在,启动失败
路径为$ORACLE_HOME/dbs目录
show parameter spfile
4)实例启动最小参数需求
在参数文件中,通常需要最少的参数是DB_NAME,设置了这个参数以后,数据库实例就可以启动
测试
cd $ORACLE_HOME/dbs
mv spfilehugwww.ora spfilehugwww.ora.bak
mv init.ora init.ora.bak
export ORACLE_SID=hugwww
sqlplus "/as sysdba"
startup nomount;
!echo "db_name=hugwww">/var/oracle11g/app/dbs/inithugwww.ora
startup nomount;
show parameter background_dump
show parameter dump_dest
5)oracle_sid的含义
在oracle系统中,oracle_sid以环境变量的形式出现,当oracle实例启动时,在操作系统上fork的进程就依据这个oracle_sid来创建,就这是sid的作用
在同一台主机上,oracle也能够创建相同oracle_sid的实例
sysresv -l hugwww hugwww
6)instance_name的含义
oracle数据库内部存在一个初始化参数instance_name,用于标示数据库实例的名称,其缺省值通常就是oracle_sid,但初始化参数instance_name
和oracle_sid可以不同,不同实例可以拥有相同的instance_name
7)db_name与instance_name
db_name代表了实例即将挂接的数据库名称,关系到具体的物理文件,通常缺省的数据库instance_name和db_name可以设置相同,在RAC情况下,可以不同
db_name被记录在数据文件,日志文件和控制文件中,如果数据库实例启动过程中参数文件中的db_name和控制文件中的数据库名称不一致,则数据库不能
启动,一个数据库同时只能被一个实例加载。
8)rman的缺省实例
在使用rman(Recovery Manager)时存在更为特殊的情况,oracle允许在不存在参数文件的情况下启动一个实例,数据库的db_name会被缺省地命名为dummy,这
是最为极端的情况,在某些恢复过程中,这个功能可以帮助用户减少很多麻烦
rman target /
startup nomount;
host ;
sqlplus "/ as sysdba"
show parameter db_name;
nomount过程实质上就是在创建实例,之后oracle就可以导航,完成数据库的加载,打开等工作
2.启动数据库到mount状态
启动到nomount状态后,oracle就可以从参数文件中获得控制文件的位置信息,然后找到控制文件,并且根据控制文件中记录的数据文件位置进行数据文件的
存在性判断。
1)控制文件的定位
startup nomount;
show parameter control_files
alter database mount;
select * from v$controlfile;
2)数据文件的存在性判断
select name from v$datafile;
3)控制文件的HeartBeat
select cphbt from x$kcccp;
4)口令文件的作用
文件位于$ORACLE_HOME/dbs目录下,缺省的名称为orapw<ORACLE_SID>,口令文件存放sysdba/sysoper用户名及口令
strings dbs/orapwhugwww
select * from v$pwfile_users;
当口令文件丢失,sysdba的授权或者远程通过sysdba身份登录都会出现错误,可以使用orapw工具重建口令文件
5)lk<ORACLE_SID>文件及作用
在$ORACLE_HOME/dbs目录下,有个文件lk<ORACLE_SID>,该文件在数据库启动时创建,用于对操作系统对数据库的锁定
当数据库无法启动,出现以下错误时重启服务器即可解决
scummnt:failed to lock /var/oracle11g/app/dbs/lkhugwww exclusive
6)mount相同db_name的数据库
在同一台数据库服务器上,可以启动多个具有相同实例名称的实例,也可以启动具有相同db_name的数据库
步骤(略)
3.启动数据库open阶段
由于控制文件中记录了数据库中数据文件,日志文件的位置信息,检查点信息等重要信息,在数据库的open阶段,oracle将
根据控制文件中记录的这些信息找到这些文件,然后进行检查点及完整性检查。如果不存在问题就可以启动数据库,如果存
在不一致或文件丢失则需要进行恢复。
alter database open;
诊断工具
adrci
help show alert
show alert
show incident;
4.数据库的访问
1)tnsnames.ora文件配置
# tnsnames.ora Network Configuration File: /var/oracle11g/app/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
HUGWWW =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = nginx.hugwww.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = hugwww)
)
)
配置完成后,可以通过tnsping测试
lsnrctl start
tnsping hugwww
lsnrctl status
sql>show parameter service_name
2)listener.ora 配置
# listener.ora Network Configuration File: /var/oracle11g/app/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = nginx.hugwww.com)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /var/oracle11g/app/base
5.数据库的关闭
数据库的启动,通常只需要一个命令startup就完成,实际上在后台oracle是通过nomount,mount,open这3个步骤来完成的
当通过shutdown来关闭数据库时,实际上数据库也经历了close,dimount,shutdown三个步骤
shutdown normal
这种方式几乎无法关闭大量用户连接的数据库,所以很少被采用
shutdown immediate
是最为常用的一种方式,是一种安全的数据库关闭方式
shutdown transactional
所有活动的事务完成后,与immediate同样的方式关闭数据库
shutdown abort
最不推荐采用的方法,在其他方法无法关闭,需要马上断电或维护的情况下使用
完成!