restricted模式: 实现命令: a、当数据库以RESTRICT状态启动,或者进入到RESTRICT状态,则Oracle禁止普通用户连接数据库,错误提示: b、但是请注意:不拒绝已经登录的其他用户的操作,包括对数据库执行修改的dml语句。 c、对于RESTRICTED SESSION状态,RAC环境的各个实例之间是相互独立的,各自的状态完全由各自的实例进行设置。 二、quiesce restricted模式: a、即使拥有了DBA角色,也被QUIESCE状态所禁止,而只有SYS和SYSTEM用户可以对数据库进行管理操作。 b、quiesce似乎和restrict很相似,都是修改数据库的状态,使得DBA用户可以进行管理操作,避免非DBA用户同时访问。但是二者还是有明显的区别的。首先RESTRICT是禁止普通用户登陆,而对已经登陆的用户无能为力。如果要彻底禁止普通用户的访问,就必须通过重启或者手工判断已经连接的普通会话,并执行KILL SESSION的操作。而QUIESCE并不是这样,通过设置系统的QUIESCE RESTRICTED,使得所有的非DBA用户处于等待状态,不管是新登陆的还是已经存在的普通用户会话,都无法执行新的操作,直到系统退出QUIESCE状态。 c、QUIESCE会传播到RAC环境的其他实例。虽然执行QUIESCE命令是ALTER SYSTEM语句,但是QUIESCE命令对整个数据库都是生效的,且RAC的其他实例是无法在QUIESCE状态下启动的。 d、如果有活动动作或者事务,或者某个当前会话(不包括管理员的会话)正在占用数据库任何资源,则alter system quiesce restricted命令也将一直等待所有资源被释放或者事务完成才把数据库更改 为quiesce模式 三、suspend模式 RESTRICT、QUIESCE不同的是,SUSPEND主要是限制数据库IO操作的。而且SUSPEND限制的不仅仅是普通用户,而是数据库中任何的用户。 a、由于数据库已经运行了一段时间,很多数据都在缓存之中,因此无论是DBA用户,还是普通用户,都可以正常登陆,且都可以执行查询操作,只要结果可以在CACHE中找到,不引起物理IO,就不会被阻塞,直到查询引发了物理IO操作,导致会话被挂起。 b、SUSPEND对所有当前运行的RAC实例生效,而新启动的实例,数据库状态并非SUSPEND,而是ACTIVE,但是和文档描述不同的是,这个实例根本无法成功的启动,从这一点上将,SUSPEND还是会对整个数据库起作用的。在任何一个实例上都可以执行RESUME命令,来恢复数据库状态。 |
可以看到,当数据库以RESTRICT状态启动,或者进入到RESTRICT状态,则Oracle禁止普通用户连接数据库。而拥有DBA角色的用户,或者拥有RESTRICTED SESSION权限的用户可以登陆数据库。
虽然数据库处于RESTRICTED SESSION状态,但是数据库中已经登陆的会话可以继续执行任何操作,直到会话断开连接。这个现象说明,如果希望数据库处于RESTRICTED SESSION状态,且此时不希望普通用户登陆数据库,那么最好的方法是采用STARTUP RESTRICT的方式来启动数据库,这样可以确保没有普通用户登陆。而ALTER SYSTEM ENABLE RESTRICTED SESSION的方式虽然可以使得数据库进入RESTRICT状态,但是不能保证现有的连接用户都是具有RESTRICTED SESSION权限的。即使是在STARTUP之后,马上发出ENABLE RESTRICTED SESSION命令也是不可靠的,因为这个时间差可能使得后台JOB运行了。因此如果是使用ENABLE RESTRINCTED SESSION方式,还需要在后台通过ALTER SYSTEM KILL SESSION的方式清除掉所有的普通用户连接。
最后来看看RESTRICTED SESSION状态和RAC环境的关系。
RESTRICTED命令是在实例上执行的,因此Oracle是否将这个命令应用到整个RAC环境需要通过测试来说明。
为了更好的说明情况,下面的测试在一个三节点的RAC环境中进行,其中两个节点处于启动状态,另一个节点关闭。
随后在实例1上发出ALTER SYSTEM ENABLE RESTRICTED SESSION语句,检查这个操作对实例2是否生效,将实例3启动,检查这个限制新启动的实例3是否有效
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30166976/viewspace-1660127/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30166976/viewspace-1660127/