Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1364873
  • 博文数量: 239
  • 博客积分: 5909
  • 博客等级: 大校
  • 技术积分: 2715
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-24 20:19
文章分类

全部博文(239)

文章存档

2014年(4)

2013年(22)

2012年(140)

2011年(14)

2010年(59)

我的朋友

分类: Oracle

2012-07-18 18:08:50

一、restricted模式:

实现命令:
1、实例启动时
sql>startup restrict;
2、以管理员身份登录后
sql>alter system [enable/disable] restricted session;

sql> grant restricted session to common_user;

a、当数据库以RESTRICT状态启动,或者进入到RESTRICT状态,则Oracle禁止普通用户连接数据库,错误提示:
ORA-01035:ORACLE only available to users with restricted session privilege
而拥有DBA角色的用户,或者拥有RESTRICTED SESSION权限的用户可以登陆数据库。
通常在要执行一些管理性的操作,而这些操作运行的时候不能有其他用户同时访问数据库时,启用restrict模式。

b、但是请注意:不拒绝已经登录的其他用户的操作,包括对数据库执行修改的dml语句。
因此如果想彻底不让不用访问数据库,最好是startup restrict。

c、对于RESTRICTED SESSION状态,RAC环境的各个实例之间是相互独立的,各自的状态完全由各自的实例进行设置。

二、quiesce restricted模式:
实现命令:
sql>alter system quiesce restricted;
sql>alter system unquiesce;
此模式下,其他用户登录和执行sql语句都不提示错误,而是一直等待。在命令行表现为语句或登录行为停着不动了,不被执行,一直持续到管理员更改系统为unquiesce.

a、即使拥有了DBA角色,也被QUIESCE状态所禁止,而只有SYS和SYSTEM用户可以对数据库进行管理操作。

b、quiesce似乎和restrict很相似,都是修改数据库的状态,使得DBA 用户可以进行管理操作,避免非DBA用户同时访问。但是二者还是有明显的区别的。首先RESTRICT是禁止普通用户登陆,而对已经登陆的用户无能为力。 如果要彻底禁止普通用户的访问,就必须通过重启或者手工判断已经连接的普通会话,并执行KILL SESSION的操作。而QUIESCE并不是这样,通过设置系统的QUIESCE RESTRICTED,使得所有的非DBA用户处于等待状态,不管是新登陆的还是已经存在的普通用户会话,都无法执行新的操作,直到系统退出 QUIESCE状态。
因此QUIESCE状态对于7*24环境是十分有帮助的,对于其他用户而言,只是操作的等待时间变得很长,而并不会报错。9i数据库必须配置资源管理Resource Management,10g取消了这个限制。

c、QUIESCE会传播到RAC环境的其他实例。虽然执行QUIESCE命令是ALTER SYSTEM语句,但是QUIESCE命令对整个数据库都是生效的,且RAC的其他实例是无法在QUIESCE状态下启动的。

d、如果有活动动作或者事务,或者某个当前会话(不包括管理员的会话)正在占用数据库任何资源,则alter system quiesce restricted命令也将一直等待所有资源被释放或者事务完成才把数据库更改

为quiesce模式

三、suspend模式
实现命令:
sql>alter system quiesce suspend;
sql>alter system resume;

RESTRICT、QUIESCE不同的是,SUSPEND主要是限制数据库IO操作的。而且SUSPEND限制的不仅仅是普通用户,而是数据库中任何的用户。

a、由于数据库已经运行了一段时间,很多数据都在缓存之中,因此无论是DBA用户,还是普通用户,都可以正常登陆,且都可以执行查询操作,只要结果可以在CACHE中找到,不引起物理IO,就不会被阻塞,直到查询引发了物理IO操作,导致会话被挂起。

b、SUSPEND对所有当前运行的RAC实例生效,而新启动的实例,数据库状态并非 SUSPEND,而是ACTIVE,但是和文档描述不同的是,这个实例根本无法成功的启动,从这一点上将,SUSPEND还是会对整个数据库起作用的。在 任何一个实例上都可以执行RESUME命令,来恢复数据库状态。
9i administrator guide中的原话:
The suspend command is not specific to an instance. In an Oracle Real Application Clusters environment, when you issue the suspend command on one system, internal locking mechanisms propagate the halt request across instances, thereby quiescing all active instances in a given cluster. However, if someone starts a new instance another instance is being suspended, the new instance will not be suspended.

c、Do not use the ALTER SYSTEM SUSPEND statement as a substitute for placing a tablespace in hot backup mode. Precede any database suspend operation by an ALTER TABLESPACE BEGIN BACKUP statement.

可以select active_state from v$instance来确定当前的模式.

select database_status from v$instance;

转自:

阅读(2175) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~