ORA-25128报错
此时,如果我们对linuxidc表进行DML操作,系统就会报ORA-25128错误,提示“不能对带有禁用和验证约束条件 的表进行插入/更新/删除”。
SQL> insert into linuxidc values(100,'linuxidc');
insert into linuxidc values(100,'linuxidc')
*
第 1 行出现错误:
ORA-25128: 不能对带有禁用和验证约束条件 (linuxidc.READ_ONLY_CONST) 的表进行插入/更新/删除
SQL>
方法四:只读表空间
设置只读表空间的主要目的是为了表空间中的静态数据不被修改,从而能够进行数据库的备份和恢复等操作,还能够保护只读表空间中的数据不被修改。
设置只读表空间的语法:ALTER TABLESPACE <表空间> READ ONLY;
将表空间设置为读写的语法:ALTER TABLESPACE <表空间> READ WRITE;
由上面创建测试用户的语句我们得知,linuxidc用户的默认表空间是users,因此我们将users表空间设为只读表空间。这样,linuxidc用户下的所有表都将会是只读表,包括linuxidc表。
如下所示。
SQL> show user
USER 为 "linuxidc"
SQL> alter table linuxidc drop constraint READ_ONLY_CONST;
表已更改。
SQL>
SQL> conn sys/linuxidc as sysdba
已连接。
SQL>
SQL> alter tablespace users read only;
表空间已更改。
SQL>
SQL> conn linuxidc/hoegh
已连接。
SQL> select * from linuxidc;
ID NAME
---------- --------------------
1 linuxidc
10 linuxidc
ORA-00372& ORA-01110报错
此时,如果我们对linuxidc表进行DML操作,系统就会报ORA-00372& ORA-01110错误,提示无法修改数据文件。
SQL>
SQL> insert into linuxidc values(100,'linuxidc');
insert into linuxidc values(100,'linuxidc')
*
第 1 行出现错误:
ORA-00372: 此时无法修改文件 4
ORA-01110: 数据文件 4: 'E:\ATSTEST\USERS01.DBF'
SQL>
DROP操作不受影响
需要注意的是,只读表空间下是可以执行DROP操作的。
我们知道,每个数据库在运行的时候,都至少会有一个ONLINE表空间,那就是SYSTEM表空间,其中保存了数据字典以及PLSQL中的存储过程、触发器、函数、包等等数据库对象。当进行DDL进行数据库的删除操作的时候,本质是是操作的SYSTEM表空间,ORACLE会在SYSTEM存储的数据字典中,将删除的表设置为DROP状态,等该表空间的状态变成READ WRITE状态的时候,才会真正的从数据库里面删除该表。
方法五: 只读数据库
当一个正常打开的数据库被设置为只读状态时,用户只能查询数据,但不能以任何方式对数据库对象进行修改。处于只读状态,可能保证数据文件和重做日志文件中的内容不被修改,但是并不限制那些不会写入数据文件与重做日志文件的操作。
设置只读命令:alter database open read only;
取消只读命令:alter database open read write;
SQL>
SQL> conn sys/linuxidc as sysdba
已连接。
SQL> alter tablespace users read write;
表空间已更改。
SQL>
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 1258291200 bytes
Fixed Size 2163712 bytes
Variable Size 360446976 bytes
Database Buffers 889192448 bytes
Redo Buffers 6488064 bytes
数据库装载完毕。
SQL>
SQL> alter database open read only;
数据库已更改。
SQL>
SQL> conn linuxidc/hoegh
已连接。
SQL>
SQL> select * from linuxidc;
ID NAME
---------- --------------------
1 linuxidc
10 linuxidc
ORA-01552报错
此时,如果我们对linuxidc表进行DML操作,系统就会报ORA-01552错误,提示非系统表空间 'USERS' 不能使用系统回退段。
SQL>