数据库启动/关闭原理

来源:互联网 发布:maxwell 3d软件 编辑:程序博客网 时间:2024/04/29 17:38

一、系统权限:SYSDBA、SYSOPER

    SYSDBA和SYSOPER是数据库中的两个超级权限,同属于系统权限,Oracle允许在数据库没有打开的情况下,拥有这2个权限的用户访问实例,在执行重大的数据库操作(尤其是数据库的启动和关闭)时,需要这两个权限。
    SYSDBA可以执行下面的任务:
启动、关闭数据库(startup、shutdown)
修改数据库(alter database), 包括打开、装载、备份、改变字符集等
创建数据库(create database)
删除数据库(drop database)
创建服务器参数文件(create spfile)
改变归档模式(alter database archivelog)
执行数据库恢复(alter database recover)

   SYSOPER的权限比SYSDBA的小,不能创建数据库。


二、数据库启动
    数据库的启动经历了3个阶段:启动实例、装载数据库、打开数据库。
    1、启动数据库
当启动一个实例时,Oracle会读取一个参数文件,这个文件可以是初始化参数文件(PFILE),也可以是服务器端参数文件(SPFILE),我们把这两者都称为参数文件。Oracle根据参数文件(PFILE、SPFILE)中的参数,分配相应大小的一片内存区域叫系统全局区(SGA), 然后启动一系列的后台进程(DBWR、LGWR、CKPT、SMON、PMON、ARCH)等。实例启动完成以后,数据库就处于NOMOUNT状态,数据库还没有和实例关联,这个时候,数据库是不可访问的,这个阶段主要用于数据库的维护(如重建控制文件)。参数文件(PFILE、SPFILE)指定了控制文件的位置。
将数据库启动到非装载状态:startup nomount
    2、装载数据库
Oracle根据参数文件(PFILE或者SPFILE)中的参数(CONTROL_FILES)找到控制文件(Control File),然后打开控制文件。从控制文件中获取数据文件(Datafile)和重做日志文件(Redo Log FIle)的名字及位置。这个时候,数据库处于MOUNT阶段,实例和数据库关联起来了,主要用于数据库的维护(如恢复数据库等)。
将数据库启动到装载状态:startup mount
将数据库从非装载状态修改为装载状态:alter database mount
    3、打开数据库
Oracle打开数据文件(Datafiles)和重做日志文件(Redo Log File),这个时候数据库可以是用,普通用户可以登录数据库,并对数据库进行操作。
将数据库启动到打开状态:startup
将数据库从非装载状态修改为打开状态:
alter database mount;
alter database open;
将数据库从装载状态修改为打开状态:alter database open;
    4、重启数据库
重启数据库先调用shutdown abort来关闭数据库,然后再用startup命令,按照正常方式启动数据库。
重启数据库命令:startup force;
    5、只读模式
在只读模式下,数据文件和重做日志文件都禁止写操作。整个数据库是只读的,允许执行数据库恢复及其他不会产生回滚的操作。
执行命令:startup open read only;

三、关闭数据库
    数据库启动要经历三个阶段,数据库关闭也要经历三个阶段。
    1、关闭数据库
关闭数据库的时候,Oracle首先把SGA中的数据写到数据文件盒重做日志文件中,然后关闭所有的数据文件和重做日志文件。这个时候数据库已经不可访问,控制文件仍然处于代开状态。
    2、卸载数据库
Oracle将分离数据库和实例之间的联系,实例仍然存活在内存中,控制文件被关闭。
    3、关闭实例
Oracle将从内存中移出SGA并终止正在运行的后台进程,数据库关闭完成。

    数据库关闭有四种方式:NORMAL、IMMEDIATE、TRANSACTIONAL、ABORT。

    NORMAL是数据库关闭最慢的方式,重启数据库是不需要实例恢复。使用NORMAL关闭数据库时:
允许新的用户注册(登录)数据库。
要等所有用户自动退出Oracle以后,Oracle才关闭数据库。如果数据库中存在一个用户,那么Oracle就一直等待,直到该用户退出,Oracle才关闭数据库。
执行命令:shutdown normal  或者shutdown
    IMMEDIATE:使用频率最高的数据库关闭方式。关闭数据库的过程比较慢,也是最安全的数据库关闭方式,不需要实例恢复。使用此方式关闭数据库时:
新的用户不能注册(登录)数据库
未提交的事务将被回滚
Oracle不会等待所有用户(连接)退出数据库
执行命令:shutdown immediate
    TRANSACTIONAL:关闭数据库比较慢,它不会使客户端的数据丢失,不需要实例恢复。以TRANSACTIONAL方式关闭数据库时:
不允许新的用户注册(登录)数据库;
不允许建立新的事物
所有的事物完成以后才关闭数据库
一个用户(会话)执行完手里的事务后将被强行断开与数据库的联机
执行命令:shutdown transactional
    ABORT:以ABORT方式关闭数据库是最快的一种方式,也是最不安全的关闭方式,只有数据库出现问题的时候,才使用这种方式关闭数据库,数据库重启时需要实例恢复(Oracle后台执行)。以ABORT方式关闭数据库时:
不允许启动新的连接和新的事务。
客户端的SQL语句立刻中止
未提交的事务不被回滚
Oracle立刻中止所有连接(会话)
执行命令:shutdown abort
0 0
原创粉丝点击