Окт 192012
 

Иногда бывает полезно сделать таблицу доступной только на чтение. В ORACLE 11g с этим проблем нет. Есть штатные команды:

ALTER TABLE cube_tab READ ONLY;
ALTER TABLE cube_tab READ WRITE;

В версиях, предшествующих 11g в режим read only можно перевести только табличное пространство целиком. Чтобы никто не смог изменять таблицу, можно написать простенький триггер:

CREATE TRIGGER 
	cube_tab_readonly
BEFORE 
	INSERT OR UPDATE OR DELETE
ON 
	cube_tab
 
BEGIN
	RAISE_APPLICATION_ERROR (-999999, 'Please call your DBA');
END;
/

Здесь ещё рекомендуют создать ограничение целостности с типом disable validate, т.е. проверка будет производиться только для новых вставляемых или изменяемых данных, а для данных, которые уже были в таблице - не будет. На мой взгляд, этот способ хуже, т.к. при попытке изменить данные вместо информативного сообщения "Свяжитесь с администратором" (текст может быть любым, насколько фантазия позволит), пользователь получит невнятное сообщение ORA-25128. Если пользователь квалифицирован, он может сломать голову, размышляя, откуда взялось это самое ограничение и почему раньше всё работало.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)