Oracle 中的 SCHEMA 和 USER 是一回事吗?

Posted

技术标签:

【中文标题】Oracle 中的 SCHEMA 和 USER 是一回事吗?【英文标题】:Are SCHEMA and USER the same thing in Oracle? 【发布时间】:2017-09-26 05:20:51 【问题描述】:

在 Oracle 中 SCHEMA 和 USER 是一回事吗?是否存在单个用户可以拥有两个或多个架构的情况?

【问题讨论】:

这里已经有了很好的答案:) enter link description here Difference between a user and a schema in Oracle?的可能重复 【参考方案1】:

严格来说,SCHEMA 是 USER 拥有的一组对象。但是,一个 USER 只能有一个 SCHEMA,因此人们经常可以互换使用这些术语。

这是 USER 和 SCHEMA 之间的区别。用户“A”已将其 PRODUCT 表的权限授予用户“B”。用户“B”没有该名称的表。

SQL> show user
USER is "B"
SQL> select count(*) from products
  2  /
select count(*) from products
                     *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> select count(*) from a.product
  2  /

  COUNT(*)
----------
         2

SQL> 

如果没有同义词“B”,则需要为架构添加前缀以引用 PRODUCT 表。除非他们选择更改当前架构:

SQL>  alter session set current_schema = "A"
  2  /

Session altered.

SQL> select count(*) from product
  2  /

  COUNT(*)
----------
         2

SQL> show user
USER is "B"
SQL>

现在用户是“B”,但当前(默认)架构是“A”。在引用自己的表时,他们需要在架构前添加哪些menas!

SQL> select table_name from user_tables;

TABLE_NAME
------------------------------
YOUR_TABLE

SQL> select count(*) from your_table;
select count(*) from your_table
                     *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> select count(*) from b.your_table;

  COUNT(*)
----------
         6

SQL> 

“是否可以在没有任何用户的情况下单独创建模式。”

没有。 SCHEMA 必须属于 USER。当我们create user Oracle 会自动创建一个空模式。

令人困惑的是create schema 语法,但这只是在一个语句中创建多个表(和索引)的简写。 Find out more。

【讨论】:

感谢您的回复。但是我有一个进一步的说明,是否可以在没有任何用户的情况下单独创建模式。如果是这样,请告诉我创建 Schema 的语法。 @JLP 不,不能单独创建模式。如果您愿意,您可以创建一个用户并锁定该帐户而不授予CREATE SESSION 权限,因此存在架构但用户无法访问它;但是,仍然必须有用户。

以上是关于Oracle 中的 SCHEMA 和 USER 是一回事吗?的主要内容,如果未能解决你的问题,请参考以下文章

oracle导出数据库的时候提示:这些对象由***导出,而不是当前用户

oracle数据库

数据库中User和Schema的关系

lightdb22.3-oracle系统视图兼容增强

数据库中Schema和Database有什么区别

oracle中的表空间(tablespace)方案(schema)段(segment)区(extent)块(block)