Oracle07事务+Oracle访问其他用户下的对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle07事务+Oracle访问其他用户下的对象相关的知识,希望对你有一定的参考价值。

一、事务

回顾什么是事务?
一个不可分割的子操作形成一个整体,该整体要么全部执行成功,要么全部执行失败。例如:转帐

回顾为什么要用事务?
如果不用事务的话,为转帐为例,可能出现一个用户钱增加了,另一个用户钱不变

回顾编程中,事务可用于哪一层?
事务放在业务层

回顾jdbc编程中,如何使用事务?
connection.setAutoCommit(false);
pstmt.executeUpdate();
connection.commit();
connection.rollback();

回顾hibernate编程中,如何使用事务?
transaction.begin();
session.save(new User());
transaction.commit();
transaction.rollback();

回顾spring编程中,如何使用事务?
spring可以分为二种
>编程式事务,藕合
>声明式事务,解藕,提倡

Oracle的事务只针对DML操作,即select/insert/update/delete

回顾mysql的事务开始:start transaction
Oracle的事务开始:第一条DML操作做为事务开始

Oracle的提交事务
(1)显示提交:commit  
(2)隐藏提交:DDL/DCL/exit(sqlplus工具)
注意:提交是的从事务开始到事务提交中间的内容,提交到ORCL数据库中的DBF二进制文件

Oracle的回滚事务
(1)显示回滚:rollback
(2)隐藏回滚:关闭窗口(sqlplus工具),死机,掉电
注意:回滚到事务开始的地方

回顾什么是回滚点?
在操作之间设置的一个标志位,用于将来回滚之用

回顾为什么要设置回滚点?savepoint a;rollback to savepoint a;
如果没有设置回滚点的话,Oracle必须回滚到事务开始的地方,其间做的一个正确的操作也将撤销

/*使用savepoint 回滚点,设置回滚点a */
savepoint a;
/*使用rollback to savepoint,回滚到回滚点a处*/
rollback to savepoint a;

Oracle提交或回滚后,原来设置的回滚点还有效吗?
原回滚点无效了

Oracle之所以能回滚的原因是?
主要机制是实例池

回顾MySQL支持的四种事务隔离级别及能够解决的问题
(1)read uncommitted -- 不能解决任何缺点
(2)read committed   -- 脏读,Oracle默认
(3)reapatable read  -- 不可重复读,脏读,MySQL默认
(4)serializable     -- 幻读,不可重复读,脏读,效率低

注意:jdbc/dbutils速度快,但书写烦
      mybaits速度中等,但书写"中等"
      hibernate速度慢,但书写"爽"
      
Oracle支持的二种事务隔离级别及能够解决的问题?
Oracle支持:read committed 和 serializable

Oracle中设置事务隔离级别为serializable?
set transaction isolation level serializable;

演示二个用户同时操作emp表,删除KING这条记录,会有什么后果?
因为有隔离级别的存在,所以不会出现二个用户都删除了KING这条记录,
一定是一个用户删除KING成功,在该用户没有提交的情况下,另一个用户等待

二、访问其他用户下的对象

在默认情况下,每个用户只能查询自已空间下的对象的权限,不能查询其它用户空间下的对象,这时候,如何访问其他用户下面的对象就显得有用武之地了。

声明:scott或hr叫用户名/方案名/空间名
      scott--tiger
      hr-----lion
      
/*查询当前用户是谁*/
show user;

/*查询scott自己表空间下的所有对象时,可加,或不加用户名select * from emp;*/
select * from emp;
或
select * from scott.emp;

/*以sysdba身份解锁hr普通帐户*/
alter user hr account unlock;

/*以sysdba身份设置hr普通帐户的密码*/
alter user hr identified by lion;

/*当scott查询hr表空间下的所有表时,必须得加用户名*/
select * from hr.jobs;

/*以sysdba身份角色,授予scott用户查询所有用户空间下的对象权限*/
grant select any table to scott;

/*以sysdba身份,撤销scott用户查询所有用户空间下的对象权限*/
revoke select any table from scott;

/*scott自已查看自己所拥有的权限*/
select * from user_sys_privs;

/*从scott用户空间导航到sysdba用户空间*/
conn / as sysdba;

/*从sysdba用户空间导航到scott用户空间*/
conn scott/tiger;

/*从scott用户空间导航到hr用户空间*/
conn hr/lion;

/*查询hr用户空间中的所有对象*/
select * from tab;

/*从hr用户空间导航到scott用户空间*/
conn scott/tiger;

/*在scott用户空间下,查询hr用户空间下的jobs表,必须加上hr用户空间名*/
select * from hr.jobs;

 

以上是关于Oracle07事务+Oracle访问其他用户下的对象的主要内容,如果未能解决你的问题,请参考以下文章

oracle怎么查看其它用户下的表

Oracle系列:(21)访问其他用户下的对象[授权]

MS SSIS 下的 Oracle 事务

无法远程连接linux下的oracle,linux下的oracle可以本地访问,求解

Developer工具新建oracle用户,希望新建用户能只读其他用户下的表或视图,请问权限应该如何设定?

Oracle中的锁