Startup及其他相关命令详解点此链接(Oracle官方文档):
http://docs.oracle.com/cd/B14117_01/server.101/b12170/ch13.htm#BACBIHBD
关于oracle数据库的启动和停止,有必要先了解哪些用户可以对其进行一些列操作!根据操作系统的不同,下面两种情况之一就可以具有对Oracle的管理权限:
- 如果用户已经拥有了操作系统的特权用户,那么该用户就可以启动和关闭数据库。
- 如果数据库是基于口令文件的认证(数据库有两种认证:一种是基于操作系统的认证,另一种是基于口令文件的认证。),而且认证成功的用户他同时具有SYSDBA或者SYSOPER这两个权限,那么该用户就可以启动和关闭数据库。
SYSDBA的权限最大,SYSOPER的权限稍小一些,但是他依然可以去启动和关闭数据库。SYSDBA除了可以启动关闭数据库之外,还可以创建数据库、删除数据库。
其中操作系统验证进行如下假设:操作系统连接已经验证过的用户具有和某些用户相同的权限,这些用户具有相同或类似的名称(取决于OS_AUTHENT_PREFIX初始参数的值)。通过下面的方式进行启动Oracle Instance并没有去输入用户名口令,因为Oracle认为既然该用户可以登录操作系统,也就是说操作系统认为该用户是合法的。所以Oracle就不需要再去认证该用户了。就可以直接输入命令【conn / as sysdba】直接就会连接上来,连接进来执行【startup】命令即可启动数据库。如果是通过远端连接进来的(是指通过远端直接连接数据库)那么这个时候就需要基于口令的认证。
【打开数据库 】
Oracle数据库可以存在以下四种状态:
·SHUTDOWN ->例如服务器刚启动起来,数据库还是处于SHUTDOWN状态
·NOMOUNT ->此时实例开启,分配SGA、启动一些后台程序
·MOUNT ->连接上数据库,但此时仅限数据库管理员操作数据库
·OPEN ->Oracle数据可以真正的对外服务
![bb](http://img.blog.itpub.net/blog/attachment/201511/16/30258496_1447659154VFq4.png?x-oss-process=style/bb)
1.SHUTDOWN-->NOMOUNT
首先,Oracle数据库启动的时候会读取初始化参数文件(SPFILE或PFILE),分配内存、启动后台进程,但是此时没有数据库与之连接,启动的时候根据写日志优先,会先把这些信息写到日志中,如果在启动过程中出现了问题,可以通过查询日志的方法去分析问题,也可以根据日志中的相关信息去构造一个初始化参数文件,指定这个文件启动数据库。
(1)下图数据库处于SHUTDOWN状态是的一些参数:
![bb](http://img.blog.itpub.net/blog/attachment/201511/16/30258496_1447659154FnTf.png?x-oss-process=style/bb)
输入$sqlplus /nolog (仅打开SQL*PLUS客户端,显示版本信息)
![bb](http://img.blog.itpub.net/blog/attachment/201511/16/30258496_14476591541Wmm.png?x-oss-process=style/bb)
在SQL客户端中输入【conn / as sysdba】命令,此时会连接一个空闲的实例,并且通过查询可以发现后台启动了连接进程,如下图:
![bb](http://img.blog.itpub.net/blog/attachment/201511/16/30258496_1447659154lD7C.png?x-oss-process=style/bb)
通过ipcs命令可以发现此时尚无内存分配情况,数据库仍为SHUTDOWN状态,如下图:
![bb](http://img.blog.itpub.net/blog/attachment/201511/16/30258496_14476591548tNN.png?x-oss-process=style/bb)
(2)执行【startup nomount】这时发现Oracle Instance已经启动,为SGA分配内存、启动一些后台进程,这是仍没有数据库与它连接(此时已经读取初始化参数文件)
![bb](http://img.blog.itpub.net/blog/attachment/201511/16/30258496_1447659155F7F4.png?x-oss-process=style/bb)
通过上面一些操作,已经将初始化参数文件读取出来了,可以通过下列命令查询数据库的初始化参数。(并不是所有的参数都可以查询的到,有些参数还没有生效)
![bb](http://img.blog.itpub.net/blog/attachment/201511/16/30258496_1447659156T6Qn.png?x-oss-process=style/bb)
2.MOUNT
首先mount的动作是将一个数据库和一个Instance连接起来(从NOMOUNT到MOUNT状态,这是需要打开控制文件,在初始化参数的控制文件里去找Oracle数据库的控制文件)。首先要找到Control File,并打开他们,在控制文件中有进一步包含了相关信息去获取Data File和Redo Log File。但是这是数据库还处于关闭状态,并且这个时候只有管理员可以操作数据库,管理员可以下在当前状态下做一些维护工作(例如:备份、恢复)
通过之前的学习,我们来看一下初始化参数文件(这里以SPFILE为例)中关于控制文件的相关信息
![bb](http://img.blog.itpub.net/blog/attachment/201511/16/30258496_1447659157V6LY.png?x-oss-process=style/bb)
这里通过【alter database mount】命令可以将数据库转为挂起状态
![bb](http://img.blog.itpub.net/blog/attachment/201511/16/30258496_1447659157GZfz.png?x-oss-process=style/bb)
3.OPEN
通过【alter database open】命令将数据库转为open状态,就是使数据库正常对外服务状态。
![bb](http://img.blog.itpub.net/blog/attachment/201511/16/30258496_1447659157zK7h.png?x-oss-process=style/bb)
STARTUP command
Oracle Instance的启动命令就是【startup】。如果只输入【startup】命令,就是缺省状态,即:将数据库变成OPEN状态也就是合法的用户可以正常访问的状态。
sql代码:- 1.startup
- startup pfile=$ORACLE_HOME/dbs/spfileorcl.ora
startup命令的部分语法如下图:
![bb](http://img.blog.itpub.net/blog/attachment/201511/16/30258496_1447660141oJiL.png?x-oss-process=style/bb)
命令详解点此链接(Oracle官方文档):
http://docs.oracle.com/cd/B14117_01/server.101/b12170/ch13.htm#BACBIHBD
Shutting Down the Database
关闭数据库存在几个阶段,与启动数据库是对应的。
- Close a Database :在该阶段是将SGA缓冲区(Database Buffer Cache)里面的数据(脏数据)写到磁盘文件上,保证磁盘文件(Data File 和 Redo Log File)的完整性,然后将处于online状态的Data File和Redo Log File关闭掉。这个时候Data File和Redo Log File都已经关闭掉了,一般的用户已经无法访问了,但是此时Control File仍然处于打开状态。这时管理员可以做一些维护操作。
- Unmount a Database :在该阶段Oracle将Control File关闭掉,但是此时Instance仍然存在,但是这时没有任何一个数据库与他进行连接。
- Shut Down an Instance :在该阶段Oracle将内存释放掉,将后台进程杀掉。
Shut Down Database有以下四种参数:
- ABORT :该模式不允许新用户连接上来(也就是说不允许建立新的连接),对于已经连接上来的用户会话,会强制删除,当用户的事务未执行完毕时将会终止事务并执行回滚操作,但此时数据库文件没有关闭,也没有将缓冲区中的数据写入到磁盘文件,导致会丢失一些数据文件,需要在下一此启动的时候做一些清理工作(Instance Recovery)。该模式一般应用在数据库实在是关闭不了的情况下,在下次启动数据库的时候需要执行Instance Recovery操作(Instance Recovery是由SMON负责的),还有当Oracle Instance Failure(Oracle实例突然宕机)或者是启动时执行的是STARTUP FORCE这种情况下Oracle在启动的时候,都会自动去做Instance Recovery操作,Oracle会使用Redo Log File中的数据,将上一次没有清理干净的事务做一下回滚(用Undo Segment的数据来回滚没有Commit的事务)、资源被释放掉。使用该模式关闭的数据库称为Inconsistent database(不一致的数据库)或dirty database(脏数据库)。
- IMMEDIATE :使用该模式,不允许新用户连接上来(也就是说不允许建立新的连接),对于已经连接上来的用户会话,会强制删除,当用户的事务未执行完毕时将会终止事务并执行回滚操作,该模式会将SGA缓冲区(Database Buffer Cache)中的数据写入到磁盘文件(Data File),并将磁盘文件关闭。
- TRANSACTIONAL :使用该模式,不允许新用户连接上来(也就是说不允许建立新的连接),对于已经连接上来的用户会话,会强制删除,当用户的事务未执行完毕时将会等待事务提交才会继续数据库关闭动作,该模式会将SGA缓冲区(Database Buffer Cache)中的数据写入到磁盘文件(Data File),并将磁盘文件关闭。
- NORMAL :使用该模式,不允许新用户连接上来(也就是说不允许建立新的连接),对于已经连接上来的用户会话,会等待用户自动退出才会继续数据库关闭操作,当用户的事务未执行完毕时将会等待事务提交才会继续数据库关闭动作,该模式会将SGA缓冲区(Database Buffer Cache)中的数据写入到磁盘文件(Data File),并将磁盘文件关闭。
在实践中经常使用IMMEDIATE方式,立即关闭数据库,只是把这些事务回滚掉了,保证数据库关闭是完整关闭、干净的关闭。
使用【shutdown normal】命令关闭数据库可以参考下面的例子:
此时通过另一个远程终端使用hr账户登入数据库,并执行一些操作
此时在SYSDBA账户通过v$session表查询会话。如下图:
此时在SYSDBA账户通过v$session表查询会话。如下图:
此时hr客户端爱可以进行操作,如下图
直到hr客户端输入【exit】或者【quit】或者【!】,这是数据库才会关闭,如下图:
其他选项不在一一列举了,都如上例类似!
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30258496/viewspace-1839662/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30258496/viewspace-1839662/