сеанс sqlplus только для чтения - PullRequest
3 голосов
/ 23 июня 2011

В sqlplus я могу создать транзакцию только для чтения.

set transaction read only;

Можно ли создать сеанс только для чтения?

Я хочу подключиться к БД Oracle, выполнить некоторые тесты с UPDATE и INSERT, но не фиксирую их, даже если фиксация выполняется в течение всего сеанса.

Ответы [ 3 ]

5 голосов
/ 24 июня 2011

Вы можете посмотреть следующее

CREATE TABLE dummy 
  (val NUMBER(1) 
       CONSTRAINT dummy_ck CHECK(val =1) DEFERRABLE INITIALLY DEFERRED)
/

insert into dummy VALUES (2);
..<bits here>..
commit;

Если только фактически не удаляется / не обновляется ожидающая запись из DUMMY, транзакция завершится неудачно после COMMIT и будет автоматически откатываться.Если это

INSERT....
COMMIT...
INSERT....

, то первый коммит вызовет сбой / откат, и второй будет успешным.Так что это некрасиво и не особо безопасно.Но это может подойти для ваших нужд

3 голосов
/ 23 июня 2011

Короткий ответ на ваш вопрос - нет, вы не можете создать сеанс «только для чтения».

Вы получите ошибки «недостаточные привилегии», если у вас есть привилегии SELECT только для таблицы, а затем выполните операторы UPDATE / INSERT / DELETE.

Вы также не можете выполнить операторы UPDATE / INSERT / DELETE внутри транзакции только для чтения, вы получите ошибку. Я думаю, это означает, что то, что, по вашему мнению, вы делаете с «установкой транзакции только для чтения», не будет делать то, что, как я понимаю, вы хотите. Вот что действительно произошло бы:

SQL> set transaction read only;

Transaction set.

SQL> update tbl set code = 'ACTIVE' where id = 10;
update tbl set code = 'ACTIVE' where id = 10
                                           *
ERROR at line 1:
ORA-01456: may not perform insert/delete/update operation inside a READ ONLY transaction


SQL>

Для тестирования вам необходимо:

  1. Создайте тестовую базу данных, о которой вы не будете плакать, если ее облажаете.
  2. Используйте База данных флэшбэков , чтобы восстановить исходные данные после каждого теста.
0 голосов
/ 23 июня 2011

Для этого мы создаем нового пользователя с правами только для чтения.

...