两个用户是否访问同一个数据库或不同?

时间:2013-05-27 05:40:37

标签: oracle

我在我的系统上安装了Oracle,所以现在orcl是SID,它是我的数据库实例的唯一标识符。

现在,初始数据库是作为安装的一部分创建的。我使用系统帐户创建了2个用户user1和user2。

使用SQL开发人员我正在访问用户,这向我展示了与表,存储过程视图等所有数据库对象的2个不同连接。

所以

使用这两个用户时,我是否访问了同一个数据库?我通过登录user1或user 2来提供所有ddl命令,所有这些数据是否都进入同一个.dbf文件?

数据库实例只能连接到一个数据库,这实际上意味着每次我创建一个新数据库,使数据库实例指向它时,我需要进行配置更改吗?

1 个答案:

答案 0 :(得分:3)

根据我对Oracle的经验,典型的划分单位是架构。 Oracle中的模式更像是在SQL Server或PostgreSQL中使用数据库。它们代表用户和对象的逻辑分离。 物理分离通常使用表空间来完成。表空间是一组存储数据的物理文件。模式可以共享或使用不同的表空间。每个模式有一个表空间是不常见的;它们通常共享一些表空间,或者通常只有一个表空间。

考虑到这一点,更直接地回答您的问题,

1)与任何其他数据库一样,您可以指定对象所属的架构:

CREATE TABLE MY_SCHEMA.TABLE_X ( X NUMBER )

如果两个CREATE语句中的模式不同,那么它将创建不同的对象。 Oracle的不同之处在于每个用户的默认架构都会发生变化。默认架构始终是当前连接的架构/用户。所以如果省略这样的架构:

CREATE TABLE TABLE_X ( X NUMBER )

然后隐含的架构是当前连接的架构/用户。因此,如果我以MY_SCHEMA身份登录,则上述内容与第一个示例相同。当作为两个不同的用户连接时,隐含的架构将是不同的,并且DDL在两个用户之间等效。因此,如果未指定架构,则运行相同的语句将创建两个不同的对象

如果两个对象位于同一个表空间中,则它们可以存储在同一个物理文件中。 (如果你没有显式地创建一个并且在创建模式时没有指定不同的默认表空间,它们很可能在USERS表空间中。)无论如何,它们仍然是两个完全独立的对象。

如果您在第一个示例中明确指定了架构,则无论执行者是谁,DDL都是等效的(尽管权限可能会阻止某些用户执行它)。因此,它会导致创建一次对象,并且尝试再次创建它将导致错误,除非您使用CREATE OR REPLACE或类似的东西。

2)我不知道这个问题的答案,但正如我所说,在Oracle中,分离的基本单位通常是模式,而不是数据库。我相信你问的问题很大一部分原因是模式的使用方式。在同一台机器/实例上拥有多个实际数据库在Oracle中比在其他数据库中要困难得多(如果不是不可能的话),因此拥有一个包含许多模式的单个数据库要简单得多。