1个mysql可以几个只读_只读数据库的限制条件(一)

数据库只读打开,除了最常见的DML和DDL语句被禁止外,还有一些其他的限制。

被禁止的操作包括最常见的INSERT、UPDATE、DELETE和MERGE。

SQL> shutdown immediate 数据库已经关闭。已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup mount

ORACLE 例程已经启动。

Total System Global Area 806133760 bytes

Fixed Size 2099064 bytes

Variable Size 455669896 bytes

Database Buffers 343932928 bytes

Redo Buffers 4431872 bytes数据库装载完毕。

SQL> alter database open read only;

数据库已更改。

SQL> conn yangtk/yangtk已连接。

SQL> desc t

名称 是否为空?类型

—————————————————————– ——– ————–

ID NUMBER

NAME VARCHAR2(30)

CODE NUMBER

SQL> select count(*) from t;

COUNT(*)

———-

101

SQL> insert into t values (1, ‘a’, 5);

insert into t values (1, ‘a’, 5)

*第 1 行出现错误:

ORA-16000: 打开数据库以进行只读访问

SQL> delete t;

delete t

*第 1 行出现错误:

ORA-16000: 打开数据库以进行只读访问

SQL> update t set name = upper(name);

update t set name = upper(name)

*第 1 行出现错误:

ORA-16000: 打开数据库以进行只读访问

除了最常见的DML语句,DDL语句也是不允许的:

SQL> create table t1 (id number);

create table t1 (id number)

*第 1 行出现错误:

ORA-00604: 递归 SQL 级别 1 出现错误

ORA-16000: 打开数据库以进行只读访问

SQL> drop table t1 purge;

drop table t1 purge

*第 1 行出现错误:

ORA-16000: 打开数据库以进行只读访问

SQL> truncate table t;

truncate table t

*第 1 行出现错误:

ORA-00604: 递归 SQL 级别 1 出现错误

ORA-16000: 打开数据库以进行只读访问

SQL> alter table t move;

alter table t move

*第 1 行出现错误:

ORA-00604: 递归 SQL 级别 1 出现错误

ORA-16000: 打开数据库以进行只读访问

虽然TEMP表的存储在TEMP表空间上,且TEMP表空间上的修改不记录日志,在只读数据库中,GLOBAL TEMPORARY TABLE仍然是不可写的:

SQL> select table_name from user_tables

2 where temporary = ‘Y’;

TABLE_NAME

——————————

T_TEMP

TEST

SQL> desc t_temp

名称 是否为空? 类型

—————————————————————– ——– ————

ID NUMBER

SQL> insert into t_temp values (1);

insert into t_temp values (1)

*第 1 行出现错误:

ORA-16000: 打开数据库以进行只读访问

查询语句虽然可以执行,但是查询中访问序列的NEXTVAL是禁止的:

SQL> select sequence_owner, sequence_name, last_number from dba_sequences

2 where sequence_owner = ‘CATALOG_USER’;

SEQUENCE_OWNER SEQUENCE_NAME LAST_NUMBER

—————————— —————————— ———–

CATALOG_USER RMAN_SEQ 1961

SQL> select catalog_user.rman_seq.currval from dual;

select catalog_user.rman_seq.currval from dual

*第 1 行出现错误:

ORA-08002: 序列 RMAN_SEQ.CURRVAL 尚未在此会话中定义

SQL> select catalog_user.rman_seq.nextval from dual;

select catalog_user.rman_seq.nextval from dual

*第 1 行出现错误:

ORA-00604: 递归 SQL 级别 1 出现错误

ORA-16000: 打开数据库以进行只读访问

访问PLAN表的EXPLAIN PLAN语句也是无法执行的:

SQL> explain plan for select count(*) from t;

explain plan for select count(*) from t

*第 1 行出现错误:

ORA-00604: 递归 SQL 级别 2 出现错误

ORA-16000: 打开数据库以进行只读访问

普通的LOCK TABLE不会报错,但是SELECT FOR UPDATE语句会报错:

SQL> lock table t in exclusive mode;

表已锁定。

SQL> rollback;

回退已完成。

SQL> lock table t in share mode;

表已锁定。

SQL> rollback;

回退已完成。

SQL> select * from t for update;

select * from t for update

*第 1 行出现错误:

ORA-16000: 打开数据库以进行只读访问

对于过程、包和函数,只要涉及到修改,不管是修改数据还是修改结构,都是只读数据库所禁止的:

SQL> select * from user_jobs;

未选定行

SQL> declare

2 v_job number;

3 begin

4 dbms_job.submit(v_job, ‘null;’, sysdate);

5 commit;

6 end;

7 /

declare

*第 1 行出现错误:

ORA-16000: 打开数据库以进行只读访问

ORA-06512: 在 “SYS.DBMS_JOB”, line 150

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget

官方微博

TechTarget中国

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值