数据库启动与关闭
过程一定是Nomount –mount—open—close—dismount—shutdown
Open—根据控制文件中记录的数据,日志文件个数,位置,版本一致性验证。若不一致,则判断数据文件是否最新,最新就看undo是否有事务未提交,undo结合redo日志对此未完成的事务取消,这也叫回退。当数据文件不一致,有事务提交未写入数据文件中,undo中记录了未写入数据文件的修改的block更改过程,重做一遍,将修改的block重新写入block,这也叫前滚。回退和前滚是用来在数据库不一致性关闭时候来做实例恢复的。
Mount—实例的控制文件已经打开,物理结构与控制文件开始关联,实例开始关联库,此时控制文件中记录的库名与实例中的由参数文件定义的db_name,必须一致+根据参数文件中定义的控制文件的个数,路径,版本一致性验证通过才能mount。在此状态可以操作物理结构,对数据库进行归档、闪回等操作。还可以查看很多视图如v$controlfile等
Nomount—参数文件生效,实例已经启动
Shutdown
10g
Sqlplus / as sysdba
Select open_mode from v$database;
Shutdown immediate
Alter database nomount;
Alter database mount;
Alter database open;
关于一致性关闭数据库
Shutdown immediate 一致性关闭,触发CKPT,事务强行结束
Shutdown transactional 一致性关闭,触发CKPT,等待事务结束
Shutdown normal 一致性关闭,触发CKPT,等待事务结束,等待会话结束
一致性关闭时,回退未提交的更改,数据库缓冲区高速缓存会写入数据文件,启动时不需要恢复实例。
10g
Sqlplus / as sysdba
Shutdown abort
Startup
Shutdown abort
Startup mount
Alter database archivelog;此时报错,未一致性关闭,需要实例恢复
Alter database open;只要正常打开,一致性关闭一下,再次启动便恢复了实例
Shutdown immediate
Startup mount
Alter database archivelog;正常
Alter database noarchivelog;
A终端:
10g
Sqlplus scott/tiger
B终端:
10g
Sqlplus / as sysdba
Shutdown normal 无法关闭因为A会话未结束,一旦结束便会关闭
A终端:
10g
Sqlplus scott/tiger
Update emp set sal=sal+1;
B终端:
10g
Sqlplus / as sysdba
Shutdown transactional 无法关闭因为A事务未结束,一旦结束便会关闭,若A此时rollback,便会立即关闭