首页 文章

Oracle:数据库来自用户或用户是否属于数据库?

提问于
浏览
2

我也使用过MY SQL和Oracle,但是我有一个很大的困惑 . 在oracle中,用户来自数据库或数据库 . 因为我使用sql命令在oracle中创建了一个新用户 . 然后我创建了表但我还没有创建任何数据库,那么这些新表在哪里?

我认为表与oracle中的用户相关联,就像创建表的人是表的所有者而没有其他用户可以访问表,因此不需要先通过创建数据库然后在其下创建表来区分它们 .

但是在MYSQL中(使用PhpMyAdmin),首先我们必须创建一个数据库,然后在该数据库中我们必须创建表 .

但是在oracle中我们只需要使用具有授予权限的有效用户登录,我们就可以在不创建数据库的情况下开始创建表 . 但这些数据库在哪个数据库中?

如果我们考虑MySQL的Java JDBC连接

Connection con=DriverManager.getConnection( "jdbc:mysql://localhost:3306/mydb","USERNAME","PASSWORD");

这里我们指定 mydb 作为数据库名称,但是我们考虑了Oracle 11g xpress版本的JDBC连接:

Connection con=DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:xe","USERNAME","PWD");

没有数据库名称提到它只包含ip,port,sid,用户名和密码,但我们仍然可以访问表名 .

所以我的问题是oracle有什么问题?为什么我们不必指定数据库名称,是否不需要在oracle中创建数据库,默认数据库概念是否存在且足够?

正如我们可以看到jdbc连接语法没有提到数据库名称,所以我应该假设表可以根据哪个用户创建它而不是在哪个数据库下区分 . 如果上面的查询得到解决...请教我如何使用SQL命令查看当前用户下可用数据库的数量,在oracle中更改数据库的命令 .

目前我正在使用Oracle 11g快递版

3 回答

  • 1

    Q: So my question is, What is wrong with Oracle? Why we don't have to specify database name, does there is no need of creating database in oracle, default database concept is there and its enough?"

    A: 在考虑"user"和"database"的MySQL概念方面,将这些概念转换为Oracle ...

    在Oracle中,这些是相同的 . 他们是一样的 .

    在MySQL中,您可以使用数据库名称限定对表名的引用:

    SELECT * FROM mydatabasename.mytablename ;
    

    在Oracle中,我们可以使用表的“所有者”限定表名:

    SELECT * FROM mytableowner.mytablename ;
    

    当我们引用一个tablename而没有在MySQL中对它进行限定时,它被解释为对“当前数据库”中的表的引用 .

    在Oracle中,非限定表引用被解释为对当前用户“拥有”的表的引用 . (如果该名称的对象不归当前用户所有,则Oracle会在特殊的PUBLIC所有者下查找该名称的对象 . )


    为了增加混淆...... Oracle术语"database"与MySQL中的含义有很大不同...... Oracle数据库与MySQL数据库不同 .


    在Oracle中,要查看当前用户拥有的表,可以查询 USER_TABLES 视图 .

    要查看当前用户拥有权限的表(包括其他用户拥有的表),请查询 ALL_TABLES 视图 . 此视图还返回 OWNER 列,该列显示拥有该表的用户 .

    如果当前用户具有 SELECT_CATALOG_ROLE 权限,则可以查询 DBA_TABLES 以查看所有用户拥有的所有表,无论您是否拥有这些表的权限 . 该视图还包括 OWNER 列 .

    USER_ALL_DBA_ 的命名约定适用于所有字典视图,而不仅仅是 _TABLES .

  • 1

    在这方面,Oracle可能会有点混乱 . documentation非常善于解释这些概念 .

    简而言之 . 数据库是表示数据库的一堆物理文件的集合 . 与其他系统一样,将数据库视为备份和恢复的单位很方便 .

    你不问一个实例 . 这本质上是一个服务器,服务器只能运行一个数据库 . 通常,数据库和实例是可互换的,尽管“数据库”指的是数据,“实例”指的是连接 .

    数据库本身包含模式,模式包含表,视图和存储过程等对象 . 模式可能“看起来像”其他系统中的数据库,因为它们具有名称并包含表 . 模式通常以用户命名,因为每个用户都有自己的命名空间 . 用户通常被授予特定于给定命名空间的特权 .

    也就是说,模式/命名空间是安全的单位,但不是备份/恢复 .

    因此,数据库包含用户 . 用户表示包含表的模式 . 用户可以在同一数据库中的模式内和模式之间拥有角色和权限 .

    并且,为了进一步混淆事物,用户可以在多个数据库之间共享,但这是另一回事 .

  • 0

    我会说Oracle用户来自数据库 .

    数据库通常在Oracle Database软件安装期间创建 . 显然,您可以稍后创建它(例如,如果您只安装了软件)或添加另一个 .

    当您登录数据库时,您使用:

    sqlplus username/password@SID
    

    SID标识数据库实例(数据库名称实例编号) . 例如,如果您的dbname是“mydatabase”并且实例编号是“1”,则SID是“mydatabase1” .

    因此,当您稍后创建新表时,它属于您的用户,并且该用户属于该数据库 . 稍后您可以像这样选择此表:

    select * from username.your_table_name;
    

    使用JDBC连接进行连接时,也会给出SID:

    jdbc:oracle:thin:@[HOST][:PORT]:[SID]
    

相关问题