sqlplus会话只读

时间:2011-06-23 14:25:16

标签: oracle sqlplus

在sqlplus中,我可以创建一个只读事务。

set transaction read only;

是否可以创建只读会话?

我想连接到Oracle DB,使用UPDATE和INSERT执行一些测试,但即使在整个会话期间执行了提交,也不提交它们。

3 个答案:

答案 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>

对于您的测试,您应该:

  1. 创建一个测试数据库,如果搞砸了就不会哭了。
  2. 使用Flashback Database在每次测试后恢复到基线。

答案 2 :(得分:0)

为此我们创建一个具有只读权限的新用户。