数据库启动

      使用Oracle,必须要启动数据库。但是很多人只知道启动数据库的命令为SHTARTUP,,但其背后究竟系统是如何工作的,并不清楚。今天跟大家一起分享一下我对数据库开启的理解。

  1. 启动数据库应具有的权限

数据库不是任何用户想启动就能启动的,必须具有一定的权限,Oracle规定具有SYSDBA权限的用户才能启动数据库,SYS和SYSTEM用户可以启动,其他具有SYSDBA权限的用户也可以启动。但是要注意一点,以SYS用户登陆的时候,可以使用SYSDBA或是SYSOPER身份;以SYSTEM用户登录只能使用SYSDBA权限(见下表)。

  SYSDBA SYSOPER NORMAL
SYS ×
SYSTEM × ×
  1. 启动数据库的工具

a)         SQL*Plus

b)         OEM控制台

c)          Recover Manager管理工具

d)         命令行管理方式

通常我使用SQL*Plus启动数据库,但是也可以登录OEM后点击相关图标启动数据库,后两种方式还没有使用过。

  1. 数据库启动模式

数据库的启动可以被看作4个阶段(或3个,不包括SHUTDOWN的话)。

如上图所示,数据库启动的四个阶段为SHUTDOWN,NOMOUNT,MOUNT和OPEN。

模式下面紧跟的文字说明为在此种模式下DBA可对数据库进行的操作,大箭头指的是在左下侧模式切换到右上侧模式时,数据库进行的操作。

 从SHUTDOWN模式切换到NOMOUNT模式,数据库查找初始化参数文件,并启动实例。在NOMOUNT模式下,数据库未被挂载,此时DBA可进行创建新数据库,中间控制文件等操作。

 从NOMOUNT模式切换到MOUNT模式,数据库查找控制文件,加载数据库。在MOUNT模式下,数据库已被加载,但是没有被打开。此时DBA可以进行对数据文件重命名、添加删除重命名重做日志、恢复数据库、改变数据库归档模式等操作。

 从MOUNT模式切换到OPEN模式,执行打开数据库的操作。在OPEN模式下,数据库已被打开。此时DBA可对数据库进行查询修改插入等操作。

 以上的四个模式,如果理解上有困难,我想了一个例子,可能能帮助理解。

 数据库可被看做是一个仓库,实例可以被看作是仓库工人。

                                例子 实际
SHUTDOWN 有一个空仓库,仓库里没有货物,没有管理仓库的工人。 数据库关闭,实例未启动
NOMOUNT 有一个空仓库,仓库里没有货物,但是为仓库找了一些工人(实例)。 数据库关闭,实例启动
MOUNT 运来一些货物,堆在仓库里,仓库里,但是不能搬运这些货物(挂载数据库,但未打开数据库)。工人只能在仓库外活动,不对仓库中货物进行操作 数据库已经加载,但是并未打开。
OPEN 仓库里有货物,仓库外有工人,工人可搬运仓库中的货物(已打开数据库并可进行插入修改等操作) 数据库已加载并打开
  1. 一些必须知道的命令

l   启动到指定模式

SQL>STARTUP NOMOUNT;

SQL>STARTUP MOUNT;

SQL>STARTUP OPEN;

(只写STARTUP默认为STARTUP OPEN)

l   强行启动数据库

SQL>STARTUP MOUNT FORCE;

STARTUP FORCE = STARTUP OPEN FORCE

l   按指定的初始文件启动到相应模式

SQL>STARTUP MOUNT PFILE=d:\oracle\admin\oradb01\pfile\init002.ora;

对SPFILE文件, 用SPFILE命令替换PFILE

此种模式下也可用FORCE

l   在启动模式间转换(只能向上转换)

SQL>STARTUP NOMOUNT;

SQL>ALTER DATABASE MOUNT;

作者:仇实

  1. 有些值得商榷的地方。

    默认情况下system用户仅仅是拥有DBA角色,而没有sysdba权限。默认状况v$pwfile_users中只有SYS用户。
    SQL> select * from v$pwfile_users;

    USERNAME SYSDB SYSOP
    —————————— —– —–
    SYS TRUE TRUE

    我相信在你的数据库中是通过如下命令使system获得sysdba权限:
    grant sysdba to system;

    同样sysoper权限也可以赋予system用户:
    SQL> grant sysoper to system;

    Grant succeeded.

    SQL> select * from v$pwfile_users;

    USERNAME SYSDB SYSOP
    —————————— —– —–
    SYS TRUE TRUE
    SYSTEM FALSE TRUE

  2. Pingback: iOracle : Oracle architecture 翻译

普人特福的博客cnzz&51la for wordpress,cnzz for wordpress,51la for wordpress