ITPub博客

首页 > 数据库 > 数据库开发技术 > 数据库启动和关闭

数据库启动和关闭

原创 数据库开发技术 作者:risingsunczl 时间:2007-01-25 00:21:51 0 删除 编辑

数据库启动和关闭

数据库关闭方式的验证

[@more@]
1、nomount状态
此步骤只启动instance,即建立内存和相应的进程
a、数据库启动时寻找参数文件的顺序:
spfile.ora--->spfile.ora--->init.ora,如果这三个文件都没有找到,则无法启动数据库实例instance
b、参数文件最少且必须要有一个参数,即db_name(RMAN情况不需要任何参数,db_name默认为DUMMY),启动后,我们可以执行如下语句:
show parameter 参数名
此种方法也可以作为检测各种参数的默认设置
2、mount状态
在前面的基础上,执行如下:
alter database mount;
此步骤需要找到控制文件并锁定控制文件,同时向控制文件中记录mount id,启动heartbeat(每隔一段时间改变mount id),另外需要找到口令文件,如果找不到这两类文件(控制文件有3个一样的,如果同时都找不到,则...),则无法mount
如何验证呢?可在mount前后执行如下语句:
select * from v$controlfile;
口令文件的作用:在没有启动数据库之前登录数据库,进而启动数据库,否则内建用户在数据库启动之前是无法登录的
3、open状态
1、从上一次的启动和关闭文章中,很容易得出如下结论:
启动到nomount状态需要参数文件
启动到mount状态需要控制文件和口令文件
启动到open状态需要控制文件和日志文件
2、sqlplus "/ as sysdba"
a、在没有启动任何实例之前,执行此命令
b、在nomount状态后,执行此命令
c、在mount状态后,执行此命令
d、在open状态后,执行此命令
在上述四种情况下都可以连接
3、启动命令的顺序及参数
在nomount状态下,必须执行:
alter database mount;
alter database open;
两个步骤才行,不能直接open
同样,在mount状态下,只须执行:
alter database open;
或者,直接startup (open)
------------------------------
startup nomount 不带参数
startup mount (dbname)
startup nomount (dbname)
4、深入一点的启动过程,如何找参数文件
首先修改了注册表ora_sid项的值,此时启动到nomount状态,提示启动失败。经查明原因如下:启动到nomount状态时,系统根据注册表的ora_sid的值,在ora_home/database路径下寻找init.ora文件,依据此文件中的内容找到参数文件(此路径也就是注册表中ORA_sid_PFILE键的值),如果在上述过程中找不到任何一个文件,启动都会失败
5、如何得知数据库的启动状态
两种方法:
select status from v$instance;(分别对应:started,mounted,open)
select open_mode from v$database;(分别对应:出错,mounted,read write)
1、常见的启动方式
(1)startup nomount
非安装启动,这种启动方式下可执行:重建控制文件、重建数据库和启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。
(2)startup mount dbname
安装启动,这种启动方式下可执行:数据库日志归档、数据库恢复和重新命名一些数据库文件。

(3)startup open dbname
先执行“nomount”,然后执行“mount”,再打开包括Redolog文件在内的所有数据库文件,这种方式下可访问数据库中的数据。

(4)startup等于以下三个命令
startup nomount
alter database mount
alter database open

(5)startup restrict
约束方式启动,这种方式能够启动数据库,但只允许具有一定特权的用户访问,非特权用户访问时,会出现以下提示:
ERROR:
ORA-01035: Oracle 只允许具有RESTRICTED SESSION权限的用户使用。

(6)startup force
强制启动方式,当不能关闭数据库时,可以用startup force来完成数据库的关闭,先关闭数据库,再执行正常启动数据库命令。

(7)startup pfile=参数文件名
带初始化参数文件的启动方式,先读取参数文件,再按参数文件中的设置启动数据库。
例:startup pfile=E:Oracleadminoradbpfileinit.ora

(8)startup exclusive
SQL>conect internal
作为internal连接时,connect命令不需要口令,因为其授权是由操作系统隐式提供的。Internal连接等价于sys连接,它们都是拥有Oracle数据字典的用户。
注意:oracle9i以后不支持internal用户
2、常见的关闭方式
(1)shutdown normal(正常关闭数据库)
在正常关闭情况下,Oracle在关闭数据库前,等待所有与之相连接的用户正常结束其对话。于是在下次启动数据库时,就不需要恢复实例。

(2)shutdown immediate(立即方式关闭数据库)
当选择Immediate关闭方式时,即实现直接关闭。在SVRMGRL中执行shutdown immediate,数据库并不立即关闭, 而是在Oracle执行某些清除工作后才关闭(终止会话、释放会话资源),当使用shutdown不能关闭数据库时,shutdown immediate可以完成数据库关闭的操作。
该关闭方式主要用于下列情况:
①马上停电;
②Oracle正在非正规的运行数据库或一个数据库应用。
该方式关闭数据库过程如下:
①Oracle结束当前正在处理的SQL语句;
②回滚未提交的事务;
③Oracle不等待与之相连接的用户退出连接,就直接中断他们,使用这种关闭方式,下次启动数据库时,Oracle应自动执行实例恢复。

(3)shutdown abort(撤消实例方式关闭数据库)
这是一种最快的关闭方式,它主要用于下列情况:
①一分钟后就要停电;
②Oracle正在非正规的运行数据库或一个数据库应用,并且其它的关闭方式失效;
③启动一个数据库实例时碰到问题。
该方式关闭数据库的过程如下:
①Oracle不等待调用完成,直接中断正在处理的SQL语句;
②回滚未提交事物。
使用这种关闭方式,下次启动数据库时,Oracle应自动执行实例恢复。启动和关闭实例和数据库的操作需要connect internal系统特权,安装和打开数据库的操作还要有alter database系统特权。直接关闭数据库,正在访问数据库的会话会被突然终止,如果数据库中有大量操作正在执行,这时执行shutdown abort后,重新启动数据库需要很长时间。

(4)SHUTDOWN TRANSACTIONAL
该选项仅在Oracle 8i后才可以使用。该命令常用来计划关闭数据库,它使当前连接到系统且正在活动的事务执行完毕,运行该命令后,任何新的连接和事务都是不允许的。在所有活动的事务完成后,数据库将和SHUTDOWN IMMEDIATE同样的方式关闭数据库。
数据库关闭方式的验证
我们知道数据库有4种关闭方式:
shutdown (normal)
shutdown transactional
shutdown immediate
shutdown abort
其中后面2种基本上属于强行关闭,而前面2种是有条件限制的,我们来验证一下 :
1、shutdown (normal)
第一步,打开sqlplus,以一个正常的用户进入,此时不需要作任何操作
第二步,在命令行中或者sqlplus中以sys用户(sysdba身份)进入,然后执行:shutdown (normal),此时系统没有了任何反应
第三步,如果我们在第一步的窗口中退出,此时数据库会立即关闭
说明:如果有任何会话连接数据库,则不能以shutdown (normal)关闭数据库,直到全部会话退出
2、shutdown transactional
第一步,打开sqlplus,以一个正常的用户进入,此时假设我们更新一个表的一行数据,但是没有提交
第二步,在命令行中或者sqlplus中以sys用户(sysdba身份)进入,然后执行:shutdown transactional,此时系统没有了任何反应
第三步,如果我们在第一步的窗口中提交或回滚,此时数据库会立即关闭
说明:如果有任何事务没有结束,则不能以shutdown (normal)关闭数据库,直到所有事务结束

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/653579/viewspace-893434/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    128
  • 访问量
    1797685