Alguna vez te haz preguntado como puedes hacer para que los datos de una tabla no sean modificados durante un período de tiempo "x" y que no tengas que proceder a quitar privilegios a roles o usuarios, para prevenir un DDL o DML, durante este tiempo, ya sea por mantenimiento o cualquier otra razón.?
Pues hay una forma fácil y rápida de hacerlo. Puedes utilizar el comando ALTER TABLE y poner una tabla en modo sólo lectura y luego volverla a su estado normal.
Aplican Restricciones: "Tengan en cuenta que el comando "drop table" no pierde su funcionamiento. O sea si ponemos una tabla en modo Read-Only, aún así, podemos borrarla del esquema en el cuál estamos trabajando."
Cómo?
Aquí va el ejemplo:
[oracle@rac1 ~]$ sqlplus hr/hr
SQL*Plus: Release 11.2.0.3.0 Production on Wed Sep 26 13:55:06 2012
Copyright (c) 1982, 2011, Oracle. All rights reserved.
SQL*Plus: Release 11.2.0.3.0 Production on Wed Sep 26 13:55:06 2012
Copyright (c) 1982, 2011, Oracle. All rights reserved.
SQL> connect hr/hr;
SQL> create table tabla_mantenimiento( campo1 number);
Table created.
SQL> insert into tabla_mantenimiento values (&valor);
Enter value for valor: 1
old 1: insert into tabla_mantenimiento values (&valor)
new 1: insert into tabla_mantenimiento values (1)
1 row created.
SQL> /
Enter value for valor: 2
old 1: insert into tabla_mantenimiento values (&valor)
new 1: insert into tabla_mantenimiento values (2)
1 row created.
SQL> /
Enter value for valor: 3
old 1: insert into tabla_mantenimiento values (&valor)
new 1: insert into tabla_mantenimiento values (3)
1 row created.
SQL> commit;
Commit complete.
SQL> select * from tabla_mantenimiento;
CAMPO1
----------
1
2
3
SQL> alter table tabla_mantenimiento read only;
Table altered.
SQL> insert into tabla_mantenimiento values(4);
insert into tabla_mantenimiento values(4)
*
ERROR at line 1:
ORA-12081: update operation not allowed on table "HR"."TABLA_MANTENIMIENTO"
SQL> alter table tabla_mantenimiento add ( campo2 char(2));
alter table tabla_mantenimiento add ( campo2 char(2))
*
ERROR at line 1:
ORA-12081: update operation not allowed on table "HR"."TABLA_MANTENIMIENTO"
SQL> delete from tabla_mantenimiento;
delete from tabla_mantenimiento
*
ERROR at line 1:
ORA-12081: update operation not allowed on table "HR"."TABLA_MANTENIMIENTO"
SQL> alter table tabla_mantenimiento read write;
Table altered.
SQL> alter table tabla_mantenimiento add ( campo2 char(2));
Table altered.
SQL> update tabla_mantenimiento set campo2='A';
3 rows updated.
SQL> commit;
Commit complete.
SQL> select * from tabla_mantenimiento;
CAMPO1 CA
---------- --
1 A
2 A
3 A
SQL>