1) 定义:
a schema is a collection of database objects (used by a user) Schema objects are the logical structures that directly refer to the database's data.
a user is a name defined in the database that can connect to and access objects.
2) 关系:
oracle 中 一个用户 有一个缺省的 schema,其schema 名 就等于 用户名。
如 用户user1访问表:
select * from user1.emp ---------访问user1 的schema集合中的对象emp
select * from emp -----------------不加集合名,默认访问自己的schema 集合的emp,即 user1 的 emp
select * from user2.emp --------访问 user2的schema集合的对象 emp
3) 比喻
user 是oracle 中的用户,所持有的是系统的权限和资源;
schema 是涵盖了各种对象的集合,包括 表 、函数、和包等对象的 所在地,不包括权限控制。
好比一个房子,里面放满了家具,对这些家具有支配权的是房子的主人(user),而不是房子(schema)。
你可以是一个房子的主人(user),拥有自己的房子(schema).
也可以通过alter session的方式进入别人的房子。如果你没有特别指定的话,你所做的操作都是针对你当前所在房子中的东西。
至于你是否有权限使用(select)、搬动(update)或者拿走(delete)这些家具就看这个房子的主人有没有给你这样的权限了,
或者你是整个大厦(DB)的老大(DBA)。alter session set schema可以用来代替synonyms。
如果你想调用其他schema的对象(有权限的前提下),但并没有建synonym,同时又不想把其他 schema名字放入代码中,
就可以首先使用alter session set schema=<其他schema名字>。