数据库的这三种状态有相似之处,这里简单总结一下。

这一篇介绍RESTRICT状态。

在Oracle中,有时候要执行一些管理性的操作,而这些操作运行的时候不能有其他用户同时访问数据库。对于这种情况可以设置系统进入RESTRICTED SESSION状态禁止普通用户登陆数据库。

数据库可以在启动的时候以RESTRICT方式来启动数据库:

SQL> conn / as sysdba已连接。SQL> shutdown immediate数据库已经关闭。已经卸载数据库。ORACLE例程已经关闭。SQL> startup restrict

ORACLE例程已经启动。

Total System Global Area 5279498240 bytes

Fixed Size 2094528 bytes

Variable Size 3192597056 bytes

Database Buffers 2080374784 bytes

Redo Buffers 4431872 bytes数据库装载完毕。数据库已经打开。SQL> conn test/test

ERROR:

ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege

警告:您不再连接到ORACLE。SQL> conn / as sysdba已连接。SQL> select granted_role from dba_role_privs

2 where grantee = 'TEST';

GRANTED_ROLE

------------------------------------------------------------

CONNECT

RESOURCE

SQL> grant dba to test;

授权成功。

SQL> conn test/test已连接。SQL> conn / as sysdba已连接。SQL> revoke dba from test;

撤销成功。

SQL> grant restricted session to test;

授权成功。

SQL> conn test/test已连接。

可以看到,当数据库以RESTRICT状态启动,或者进入到RESTRICT状态,则Oracle禁止普通用户连接数据库。

而拥有DBA角色的用户,或者拥有RESTRICTED SESSION权限的用户可以登陆数据库。

在Oracle11g的管理员手册文档中有一个地方的描述错误:

Further, when the instance is in restricted mode, a database administrator cannot access the instance remotely through an Oracle Net listener, but can only access the instance locally from the machine that the instance is running on.

根据文档的描述,如果数据库处于RESTRICTED SESSION状态,则禁止用户采用NET服务方式登陆,而必须在服务器上直接登陆,但是测试发现,Oracle并没有这个限制。

SQL> conn / as sysdba已连接。SQL> alter system disable restricted session;

系统已更改。

SQL> conn test/test@test11g已连接。SQL> conn / as sysdba已连接。SQL> alter system enable restricted session;

系统已更改。

SQL> conn test/test@test11g已连接。

无论是在本机通过服务名方式,还是在其他客户端通过服务名方式都可以连接到RESTRICTED SESSION状态的数据库,只要登陆用户拥有RESTRICTED SESSION权限。

下面再来看看RESTRICTED SESSION状态,对于已经登陆数据库的普通用户有何影响:

SQL> conn / as sysdba已连接。SQL> revoke restricted session from test;

撤销成功。

SQL> alter system disable restricted session;

系统已更改。

在会话1,回收TEST用户的RESTRICTED SESSION权限,使其变为普通用户。并将数据库从RESTRICTED SESSION状态转为正常状态。

下面在会话2用TEST用户登陆数据库:

SQL> CONN TEST/test已连接。SQL> SET SQLP 'SQL2> '

SQL2> SELECT * FROM SESSION_PRIVS;

PRIVILEGE

--------------------------------------------------------------------------------

CREATE SESSION

CREATE TABLE

CREATE CLUSTER

CREATE SEQUENCE

CREATE DATABASE LINK

CREATE PROCEDURE

CREATE TRIGGER

CREATE TYPE

CREATE OPERATOR

CREATE INDEXTYPE

已选择10行。

下面回到会话1,将数据库置于RESTRICT SESSION状态:

SQL> alter system enable restricted session;

系统已更改。

执行RESTRICTED SESSION命令很快就返回了,说明命令已经执行成功,下面尝试普通用户登陆:

SQL> conn test/test

ERROR:

ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege

警告:您不再连接到ORACLE。

登陆报错,说明RESTRICT状态已经生效,回到会话2,看看数据库的RESTRICTED SESSION状态对已经登陆的普通会话是否有影响:

SQL2> SELECT * FROM DUAL;

DU

--

X

SQL2> CREATE TABLE T1 (ID NUMBER);

CREATE TABLE T1 (ID NUMBER)

*第1行出现错误:

ORA-01536:超出表空间'YANGTK'的空间限额

SQL2> CREATE OR REPLACE PROCEDURE P AS

2 BEGIN

3 NULL;

4 END;

5 /

过程已创建。

虽然建表语句失败了,但是这时由于刚才回收DBA角色,导致UNLIMITED TABLESPACE权限被连带回收造成的,与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是否有效。

bash-2.03$ srvctl status db -d testrac

Instance testrac1 is running on node racnode1

Instance testrac2 is running on node racnode2

Instance testrac3 is running on node racnode3

bash-2.03$ srvctl stop inst -d testrac -i testrac3

bash-2.03$ srvctl status db -d testrac

Instance testrac1 is running on node racnode1

Instance testrac2 is running on node racnode2

Instance testrac3 is not running on node racnode3

bash-2.03$ sqlplus test/test@testrac1

SQL*Plus: Release 10.2.0.3.0 - Production on星期四2月19 23:09:47 2009

Copyright (c) 1982, 2006, Oracle. All Rights Reserved.

连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production

With the Partitioning, Real Application Clusters, OLAP and Data Mining options

SQL> select * from session_privs;

PRIVILEGE

----------------------------------------

CREATE SESSION

UNLIMITED TABLESPACE

CREATE TABLE

CREATE CLUSTER

CREATE SYNONYM

CREATE VIEW

CREATE SEQUENCE

CREATE DATABASE LINK

CREATE PROCEDURE

CREATE TRIGGER

CREATE MATERIALIZED VIEW

CREATE TYPE

CREATE OPERATOR

CREATE INDEXTYPE

已选择14行。

SQL> select instance_name from v$instance;

INSTANCE_NAME

----------------

testrac1

将实例1变为RESTRICTED SESSION状态:

SQL> conn sys@testrac1 as sysdba输入口令:已连接。SQL> alter system enable restricted session;

系统已更改。

SQL> conn test/test@testrac1

ERROR:

ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege

警告:您不再连接到ORACLE。SQL> conn test/test@testrac2已连接。SQL> select instance_name from v$instance;

INSTANCE_NAME

----------------

testrac2

显然实例1上的设置与实例2无关,对于实例3而言其实都不用测试,因为数据库启动的时候没有指定STARTUP RESTRICT,自然不会启用RESTRICTED SESSION状态,不过为了严谨,还是测试一下:

SQL> host

$ srvctl start inst -d testrac -i testrac3

$ exit

SQL> conn test/test@testrac1

ERROR:

ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege

警告:您不再连接到ORACLE。SQL> conn test/test@testrac3已连接。SQL> select instance_name from v$instance;

INSTANCE_NAME

----------------

testrac3

SQL> select instance_name, status, logins from gv$instance;

INSTANCE_NAME STATUS LOGINS

---------------- ------------ ----------

testrac3 OPEN ALLOWED

testrac2 OPEN ALLOWED

testrac1 OPEN RESTRICTED

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

mysql 表里restrict_数据库的三种状态RESTRICT、QUIESCE和SUSPEND(一)相关推荐

  1. ORACLE数据库的三种状态:RESTRICT、QUIESCE和SUSPEND

    在Oracle中,有时候要执行一些管理性的操作,而这些操作运行的时候不能有其他用户同时访问数据库.对于这种情况可以设置系统进入RESTRICTED SESSION状态禁止普通用户登陆数据库. 数据库可 ...

  2. php连接mysql_PHP连接MySQL数据库的三种方式

    本篇文章给大家介绍一下PHP连接MySQL数据库的三种方式(mysql.mysqli.pdo),结合实例形式分析了PHP基于mysql.mysqli.pdo三种方式连接MySQL数据库的相关操作技巧与 ...

  3. php 复制mysql数据库_PHP连接MySQL数据库的三种方式

    本篇文章给大家介绍一下PHP连接MySQL数据库的三种方式(mysql.mysqli.pdo),结合实例形式分析了PHP基于mysql.mysqli.pdo三种方式连接MySQL数据库的相关操作技巧与 ...

  4. php连接虚拟机中mysql数据库吗,PHP连接MySQL数据库的三种方式

    本篇文章给大家介绍一下PHP连接MysqL数据库的三种方式(MysqL.MysqLi.pdo),结合实例形式分析了PHP基于MysqL.MysqLi.pdo三种方式连接MysqL数据库的相关操作技巧与 ...

  5. .net mysql和php mysql数据库连接_浅谈PHP连接MySQL数据库的三种方式

    本篇文章给大家介绍一下PHP连接MySQL数据库的三种方式(mysql.mysqli.pdo),结合实例形式分析了PHP基于mysql.mysqli.pdo三种方式连接MySQL数据库的相关操作技巧与 ...

  6. mysql 安装在路由器_MySQL如何安装?安装MySQL数据库的三种方法

    MySQL如何安装?安装MySQL数据库的三种方法 目录 安装MySQL的方式常见的有三种: rpm包形式 通用二进制形式 源码编译 1,rpm包形式 (1) 操作系统发行商提供的 (2) MySQL ...

  7. MySQL、SqlServer、Oracle 三种数据库的优缺点总结

    MySQL.SqlServer.Oracle 三种数据库的优缺点总结 一.MySQL 二.SqlServer 三.Oracle 一.MySQL 优点: 体积小.速度快.总体拥有成本低,开源: 支持多种 ...

  8. 连接mysql数据库的三个接口_数据库的三种接口

    数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要 ...

  9. Hibernate---对象的三种状态

    Hibernate---对象的三种状态 简而言之,hibernate本就是面向对象的基于ORM的框架,位于dao层,对数据进行操作的框架.我就谈谈hibernate的对象的三种状态.他们分别为:游离, ...

最新文章

  1. python基础系列:类
  2. 两个服务之间的调用请求
  3. 接口自动化测试_Python自动化测试学习路线之接口自动化测试「模块四」
  4. iPad网页开发教程及规则
  5. python线程安全_线程,线程安全与python的GIL锁
  6. 4.1 - 《机器学习基石》Home Work 1 Q.15-17
  7. 《JDBC与Java数据库编程》pdf 附下载链接
  8. Java汉字转GB2312编码【工具类】
  9. 增强 扫描王 源码_camscanner(扫描全能王)功能解析与复现 - 页面增强
  10. 国外最顶级的人工智能网站资源
  11. 解决 shiro 多次调用 redis 的问题
  12. 转移到ios下载安卓_转移到iOS下载-转移到iOS安装器(安卓转移苹果软件)下载v2.10.0 安卓版-当易网...
  13. Verilog:【7】超详细WaveDrom教程,时序图绘制利器,看这一篇就够了。
  14. IIS6.0+Tomcat整合(java,C++等教程免费下载)
  15. 基于微信小程序音乐播放器
  16. win7下制作ubuntu安装u盘
  17. 无法启动计算机丢失s7EPAAPI,200smart编程软件无法启动提示s7epaapi.dll丢失。-工业支持中心-西门子中国...
  18. Java代码实现多线程卖票
  19. EnhancerAtlas:人和小鼠的增强子数据库
  20. 基于MaxCompute+开放搜索的电商、零售行业搜索开发实践

热门文章

  1. 〈灰色系统理论及其应用〉第7版,刘思峰 P153例7.3.1
  2. 哥们家大宝贝,超可爱 大家帮忙投票啊
  3. 【回看2022 展望2023】一个普通大学生的2022回忆录
  4. 算法(一):Josephus问题
  5. jar包使用ex4j生成exe文件
  6. 关注微信公众号二维码可以带参数吗?
  7. Win11怎么把任务栏调到左边 Win11任务栏在下面怎么调到左边
  8. 下载Youku视频观看
  9. 服务器内存型号说明,服务器内存条型号
  10. 医学图像配准软件 ANTs(Advanced Normalization Tools)的安装和使用说明