All things are difficult before they are easy. 没有软件的裸机是一具僵尸,没有硬件的软件是一个幽灵。2012,专注于Linux和C语言,关注自动化、性能测试,关注开源社区和开源测试工具、方法,尝试测试团队管理!

Oracle的Schema和User

上一篇 / 下一篇  2009-12-20 18:26:49 / 个人分类:数据库

Oracle中的SchemaUser

在产品detail拆分项目中,由于需要将原来的Product表拆分为ProductProduct_detail两个表,数据库采取的方法是新建了一个Schema——alibaba1949。对schema不了解,现在也对其进行了一点学习

Oracle数据库中SchemaUser的关系是一一对应的,也就是说一个Schema只对应一个User,一个User对应一个SchemaOracle中,schema是与拥有此schemauser同名的。Schema可以翻译成“方案”。

不同的schema之间它们没有直接的关系,不同的schema之间的表可以同名,也可以互相引用(但必须有权限),在没有别的schema的操作权限下,每个用户只能操作它自己的schema下的所有的表。不同的schema下的同名的表,可以存入不同的数据(即schema用户自己的数据)。

userOracle中的用户,和所有系统的中用户概念类似,用户所持有的是系统的权限及资源;而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名字>

例子:

1.改变当前sessionschema

ALTER SESSION SET CURRENT_SCHEMA = alibaba1949

之后就可以直接使用alibaba1949这个schema中的表,不用写成alibaba1949.table_name

 2.查询另一个schema或另一个useralibaba)下的table

SELECT * FROM alibaba.product

 3.根据表名查询所有者:

select owner,table_name from all_tables where table_name = Upper('product')

select owner,table_name from all_tables where table_name = Upper('product_detail')

其他参考资料:

user是控制权限的,而schema则是一个容器,非所有者如果需要访问这个容器下的对象,就需要在对象前面写上schemaowner)的名字,如果不想写而又没有创建synonym,此时可以通过alter session set current_schema=schema_name来改变当前sessionschema从而在访问对象时省去schemaowner);最终能否访问对象还是要看是否有访问这个对象的权限而和schema无关。

 The schema (pronounced skee-ma) of a database system is its structure described in a formal language supported by the database management system (DBMS). In a relational database, the schema defines the tables, the fields, relationships, views, indexes, packages, procedures, functions, queues, triggers, types, sequences, materialized views, synonyms, database links, directories, Java, XML schemas, and other elements.

schema: Collection of database objects, including logical structures such as tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links. A schema has the name of the user who controls it.

Synonym(同义词):建立一个同义词可以排除一个对象名字的限制
如果你的数据库有多个用户,USER_A要访问USER_BTABLE1,只能使用USER_B.TABLE1
建一个同义词abc指向USER_B.TABLE1,那你就可以select * from abc,而且public的同义词会直接出现在所有用户的面前。


TAG: 数据库 Oracle Schema

季风的测试生活 引用 删除 jifeng   /   2009-12-21 13:00:07
 

评分:0

我来说两句

smile665

smile665

Stay hungry, stay foolish. 得意之时谨记,一半命运还掌握在上帝手里;失意之时须知,一半命运还掌握在自己手里。

日历

« 2024-03-21  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 951971
  • 日志数: 220
  • 建立时间: 2008-11-06
  • 更新时间: 2012-10-06

RSS订阅

Open Toolbar