往期内容
参数管理
控制文件添加
启动
在启动Oracle数据库时,我们一般会使用如下命令:
startup
虽然命令只有一个,但其中却是经历了3个阶段,从下面执行 startup 命令返回也可以看出来。

总结为3个阶段:
- nomount(未挂载)
- mount(已挂载)
- open(打开)
过程如下图所示:
下面是对每个阶段的说明:
nomount 可以用如下命令,进入到 nomount 状态 startup nomount nomount阶段加载了spfile参数文件中的相关信息,但此时还未读取控制文件中的信息。此时已经在内存中生成了数据库实例,但是还没有加载数据库(文件存储结构) mount 可以用如下命令,从 nomount 切换到 mount 状态。 alter database mount mount阶段加载了控制文件中的相关信息,并且将相关的数据库信息(文件存储结构)挂载。且为下一阶段open做准备。此时是可以查询到数据库文件和redo等相关信息,但无法查询数据文件中的具体数据。 open 可以用如下命令,从 mount 状态 切换到 open状态 alter database open open阶段,Oracle服务验证是否可以打开所有的数据文件和redo日志文件,检查数据库的一致性。检查无误后打开所有文件,此时数据库可以正常为业务系统所用。 |
关闭
Oracle有几种不同的关闭选项,下面分别和大家分享。
一致性关闭 shutdown immediate shutdown immediate 立即关闭 这是最常用的关闭命令。 此时Oracle会抛弃尚未完成的SQL语句; 且Oracle不等待当前连接到数据库服务器的用户先断开,直接断开连接; 且Oracle实例关闭前,Oracle服务器会关闭并 unmount 数据库; 且下次启动时,不需要进行实例恢复。 shutdown transactional shutdown transactional 以保证事务的方式关闭数据库 此关闭命令,可以防止客户端丢失数据,包括其当前活动会话的结果。 此时,没有客户端可以在此实例上启动新事务; 此时,当客户端结束正在进行的事务后,客户端连接将断开; 在完成所有的事务后,将立即关闭; 且下次启动时,不需要进行实例恢复。 shutdown normal shutdown normal 正常关闭模式 此时,无法建立新的连接; 且Oracle在关闭之前会等待所有用户断开连接; 且db_buffer_cache 和 redo_log_buffer 中的数据被写入磁盘; 且后台进程终止后,会从内存中删除sga; 且Oracle实例关闭前,Oracle服务器会关闭并 unmount 数据库; 且下次启动时,不需要进行实例恢复。 shutdown shutdown 未指定任何模式 此时 shutdown 和 shutdown normal 一样,normal是默认的关机模式 非一致性关闭 shutdown abort shutdown abort 如果在normal、transactional、immediate模式下关闭都不起作用的时候(控制文件损坏丢失等故障发生时就无法进行一致性关闭),可以强制关闭当前数据库实例。 如果使用shutdown abort Oracle服务器正在处理的当前SQL立即终止; 且Oracle服务器不等待当前连接到数据库的用户自己断开,直接断开连接; 且db_buffer_cache 和 redo_log_buffer 中的数据未写入磁盘; 且未提交的事务不会发生回滚; 且该实例将终止而不会关闭文件; 下次启动时需要进行实例恢复,此恢复会由Oracle自动进行。 |
应急启动
当参数文件丢失后,数据库实例都无法启动到nomount状态,任何操作都做不了。
此时可以进行应急启动
startup force nomount
上面就相当于使用pfile启动实例至nomount
startup nomount pfile='/u01/app/oracle/product/19c/db_1/dbs/initorcl.ora'