oracle数据库的启动和关闭
Oracle数据库的启动
Oracle启动分为三个过程:
1.启动实例==》nomount状态
2.挂载数据库==》mount状态
3.打开数据库==》open状态
过程一:启动实例==》nomount状态
这里有三个阶段:读取参数文件(pfile/spfile)、分配SGA内存、启动后台进程。
Oracle要想启动数据库,必须有一个参数文件,此文件内包含了要启动的数据库的控制文件,数据库的名字,数据库的内存设置参数等一系列重要信息。ORACLE根据系统中ORACLE_SID来寻找此参数文件,根据寻找到的参数文件建立数据库实例,之后,分配内存,后台进程依次被启动,这样,数据库就进入了nomount状态。
这一过程并不会涉及到数据库的物理数据文件(.DBF),即使没有数据库文件,该过程也可以顺利完成。
如果在这里启动出错,可能的原因:
1.可能你的服务没有启动或者你的oracle_sid与实际的不符合。解决方法:启动服务或者修改注册表中的oracle_sid的值。也可以执行 set oracle_sid=xxx;
2.读取的参数文件出错。确认你的参数文件没有问题。
过程二:加载数据库==》mount状态
Oracle在这一过程,才真正涉及到数据库的物理数据文件。
通过参数文件内指定的控制文件的位置信息,Oracle例程找到并打开控制文件,读取到数据文件和日志文件的位置,加载数据文件和日志文件,另外,控制文件中还记录了检查点信息。但若例程没有找到控制文件,则会提示错误,并停止mount过程。
这个过程除了会检测控制文件的存在性以及正确性外,还会检查几个文件。
1. 口令文件
Orapw<ORACLE_SID>,此文件位于$ORACLE_HOME/dbs目录下,存放SYSDBA/SYSOPER用户的用户名及口令。在Oracle9i时代,该文件丢失,会提示错误,mount失败退出;而在Oracle10g之后,该文件丢失也不会影响mount,只是不能远程登陆以及进行授权操作。
口令文件的查找机制:
寻找Orapw<ORACLE_SID>,若此文件没找到,则继续寻找Orapw文件。若两者都查找失败,Oralce例程就会做出处理了。
2. 锁文件
lk<ORACLE_SID>,此文件位于$ORACLE_HOME/dbs目录下,在数据库启动时创建,用于操作系统对数据库的锁定。当数据库启动时锁定,当数据库关闭时释放。
如果在这里启动出错,可能的原因就是你的控制文件坏掉了。可以查看跟踪文件里面的信息,看看具体是否是控制文件的问题。一般我们的控制文件都有镜像,可以通过copy手段覆盖原来的坏文件。
过程三:打开数据库==》open状态
Oracle在这一过程,将打开上一过程中挂载的数据文件和日志文件,然后进行检查点及完整性检查,若正常,则启动数据库;若异常,则需要进行修复。
Oracle数据库的关闭
数据库关闭就是数据库启动的逆过程,同样分为3个阶段。分别是CLOSE,DISMOUNT,SHUTDOWN。
介绍下几种不同的关闭方式。
方式一:shutdown normal
此方式是正常关闭数据库,也是shutdown指令默认行为。发出该命令后,数据库将阻止任何新的连接,并开始等待,直到当前的所有连接都断开后,才关闭数据库。这是对数据一致性而言最安全的关闭方式,但可能要等待很长时间。
方式二:shutdown immediate
此方式经常使用,指令发出后,所有事务中断,未提交的事务回滚,强制断开连接的用户并使其退出。接下来,执行检查点,将数据写回数据文件,关闭数据库。
方式三:shutdown transactional
此方式阻止任何新连接和新事务的发起,并在完成当前事务后关闭数据库。
方式四:shutdown abort
此方式等于服务器断电。强制断开连接,中断所有事务,立即关闭数据库。对于连接到数据库的所有数据库不作任何检查,也不作数据库完整性检查。未完成事务不回滚,数据库不执行检查点。下次启动需要进行实例恢复。
此外,除了启动数据库本身,还必须启动数据库监听服务,否则客户端无法正常使用数据库。
启动监听程序:lsnrctl start。这里主要是配置监听程序配置文件listener.ora
关闭监听程序:lsnrctl stop。
当你启动不了你的监听程序的时候,去检查下你的listener.ora和tnsnames.ora中的host值是否和你的计算机名相符合。