在sqlplus中,我可以创建一个只读事务。
set transaction read only;
是否可以创建只读会话?
我想连接到Oracle DB,使用UPDATE和INSERT执行一些测试,但即使在整个会话期间执行了提交,也不提交它们。
答案 0 :(得分:5)
您可以查看以下内容
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....
然后第一次提交将触发失败/回滚,因此第二次提交将成功。所以这很难看,也不是特别安全。但它可能适合您的需求
答案 1 :(得分:3)
对你的问题的简短回答是否定的,你不能创建一个“只读会话”。
如果您对表具有SELECT-only权限,然后发出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>
对于您的测试,您应该:
答案 2 :(得分:0)
为此我们创建一个具有只读权限的新用户。