Em versões anteriores do
Oracle ao 11g, não existia a possibilidade de ter tabelas em modo de leitura
(read-only). Para que os usuários do banco de dados pudessem somente ler as
informações das tabelas, o DBA tinha que conceder somente o privilégio de
SELECT na tabela desejada, não permitindo mais operações. A partir da versão
11g o banco de dados permite que as tabelas sejam configuradas somente em modo
de leitura (read-only) usando o comando ALTER TABLE.
Deve-se utilizar:
Para habilitar o modo de leitura:
ALTER TABLE table_name READ ONLY;
Para habilitar o modo de gravação:
ALTER TABLE table_name READ WRITE;
A seguir será demonstrada a criação de uma tabela,
a inserção de uma linha, na sequência a tabela será colocada em modo de leitura
(read-only).
Criando a tabela:
Inserindo uma linha na tabela criada:
INSERT INTO TABELA_LEITURA
VALUES (1);
ALTER TABLE TABELA_LEITURA
READ ONLY;
Depois de alterar a tabela
para o modo de leitura. Qualquer comando DML executado pelo banco de dados que
afete os dados da tabela e o comando “SELECT...FOR UPDATE” apresentarão a
mensagem de erro ORA-12081, indicando que a operação não é
permitida.
ORA-12081: update operation not allowed on table
"string"."string"
SQL> INSERT INTO TABELA_LEITURA VALUES (2);
INSERT INTO TABELA_LEITURA VALUES (2)
*
ERROR at line 1:
ORA-12081: update operation not allowed on table
"DEMO"."TABELA_LEITURA"
SQL> UPDATE TABELA_LEITURA
SET id = 2;
UPDATE TABELA_LEITURA
SET id = 2
*
ERROR at line 1:
ORA-12081: update operation not allowed on table
"DEMO"."TABELA_LEITURA"
SQL> DELETE
FROM TABELA_LEITURA;
DELETE FROM TABELA_LEITURA
*
ERROR at line 1:
ORA-12081: update operation not allowed on table
"DEMO"."TABELA_LEITURA"
Declarações DDL que também afetam os dados
da tabela serão restringidas.
SQL> TRUNCATE
TABLE TABELA_LEITURA;
TRUNCATE TABLE TABELA_LEITURA
*
ERROR at line 1:
ORA-12081: update operation not allowed on table
"DEMO"."TABELA_LEITURA"
SQL> ALTER TABLE TABELA_LEITURA ADD
(description VARCHAR2(50));
ALTER TABLE TABELA_LEITURA ADD (description
VARCHAR2(50))
*
ERROR at line 1:
ORA-12081: update operation not allowed on table "DEMO"."TABELA_LEITURA"
As operações de criação de índices
associados à tabela NÃO são afetadas pela restrição de leitura.
Após a alteração da tabela para o modo
de gravação (read-write) as operações de DML e DDL voltarão ao normal, conforme
demonstrado.
SQL>
ALTER TABLE TABELA_LEITURA READ WRITE;
Table
altered.
Removendo as linhas da tabela:
SQL>
DELETE FROM TABELA_LEITURA;
1 row
deleted.
O status de leitura das tabelas
é exibido através da coluna READ_ONLY nas visões [DBA | ALL | USER]_TABLES.
Rubens Oliveira
DBA Oracle Consultor
olivert.dba@consultant.com