您的位置:首页 > 数据库 > Oracle

Oracle11g学习笔记_20170511_停顿Oracle数据库

2017-04-20 10:49 411 查看
1、背景:

有时数据库DBA需要在不关闭数据库((很多数据库应用系统要求7*24小时处于工作状态))的情况下对数据库进行一些排除其他用户活动的操作,主要有以下两种情况:

(1)当多个用户并发访问同一相同对象时将会出现异常操作,例如:向表中添加一个字段时,若是有其他用户在使用该表,则可能会导致操作失败

(2)有些操作执行的中间结果不应该让其他用户看到,例如:要通过多步操作来重组一个表,首先要导出表中的数据,然后将表删除,最后再导入表中数据。此时若是有其他用户在删除表之后、未导入数据之前访问该表,则会得到错误的结果

2、停顿数据库的优势

(1)停顿数据库代价比关闭数据库低

(2)停顿数据库不会打断用户操作,也不会中断数据库的运行

(3)数据库停顿状态时,Database Resource Manager将阻止非DBA会话变成激活状态,任何试图修改当前资源的计划都将阻塞在队列中,直至系统转为非停顿状态

说明:以上所提到的DBA仅包括SYS和SYSTEM两个用户,其他用户需要被授予DBA角色,但是只要没有Alter System Quiesce Database语句的权限,就不能在停顿数据库状态下执行数据库操作

3、停顿数据库命令:Alter System Quiesce Restricted

说明:在数据停顿状态下,不能对其进行冷备份,但是在线数据文件可以访问,也可以执行数据库在线备份

4、查看被停顿阻塞的会话信息

查询语句:select a.sid,user,osuser,type,program from v$blocking_quiesce a,v$session b where a.sid=b.sid;

说明:

活动会话指正处于事务、查询或PL/SQL语句中的会话,或者正持有任何共享资源的会话

5、从数据库停顿状态恢复到正常状态

(1)命令:Alter System Unquiesce

(2)完整执行过程:

首先执行如下命令将数据库由正常状态切换到停顿状态:Alter System Quiesce Restricted

其次执行如下命令查询数据库实例当前状态:select active_state from v$instance

再次执行如下命令将数据库由停顿状态切换到正常状态:Alter System Unquiesce

最后执行如下命令查询数据库实例活动状态:select active_state from v$instance

说明:在数据库正常操作状态时允许执行所有非DBA活动,视图v$instance中的active_state字段表示实例当前状态,取值信息如下,

(1)Normal:表示正常的非停顿状态

(2)Quiescing:正在切换到停顿状态,但是一些非DBA会话仍然处于活动状态

(3)Quiesced:停顿状态,没有活动的DBA会话
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  instance 实例 数据库