miércoles, 26 de septiembre de 2012

Tablas en modo sólo lectura ( Read-Only Tables )


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>

Todos los Sábados a las 8:00PM

Optimismo para una vida Mejor

Optimismo para una vida Mejor
Noticias buenas que comentar