簡體   English   中英

Oracle:數據庫屬於用戶還是用戶屬於數據庫?

[英]Oracle: Does database comes under user or user comes under database?

我也使用過 MY SQL 和 Oracle,但我有一個很大的困惑。 在oracle 中,用戶屬於數據庫還是數據庫屬於用戶。 因為我使用 sql 命令在 oracle 中創建了一個新用戶。 然后我創建了表,但我還沒有創建任何數據庫,那么新表去哪里了?

我猜表與oracle中的用戶相關聯,就像創建表的人是表的所有者,沒有其他用戶可以訪問該表,因此無需通過先創建數據庫然后在其下創建表來區分它們。

但是在 MYSQL(使用 PhpMyAdmin)中,首先我們必須創建一個數據庫,然后在該數據庫中我們必須創建表。

但是在oracle中,我們只需使用具有授予權限的有效用戶登錄,我們就可以開始創建表而無需創建數據庫。 但是這些表在哪個數據庫中?

如果我們考慮過 MySQL 的 java JDBC 連接

連接 con=DriverManager.getConnection(
"jdbc:mysql://localhost:3306/mydb","用戶名","密碼");

這里我們指定了mydb作為數據庫名稱,但我們考慮了 Oracle 11g xpress 版本的 JDBC 連接:

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

沒有提到數據庫名稱,它只包含 ip、端口、sid、用戶名和密碼,但我們仍然可以訪問表名。

所以我的問題是 oracle 有什么問題? 為什么我們不必指定數據庫名稱,不需要在oracle中創建數據庫,默認數據庫概念就在那里並且就足夠了?

正如我們所看到的 jdbc 連接語法沒有提到數據庫名稱,所以我應該假設表只能根據創建它的用戶來區分,而不是根據它在哪個數據庫下。 如果上述查詢已解決...請告訴我如何使用 SQL 命令查看當前用戶下可用數據庫的數量,在 oracle 中更改數據庫的命令。

目前我使用的是 Oracle 11g express edition

Oracle 在這方面可能有點混亂。 文檔非常擅長解釋這些概念。

簡而言之。 數據庫是一組代表數據庫的物理文件的集合。 與其他系統一樣,將數據庫視為備份和恢復單元是很方便的。

您不會詢問實例。 這本質上是一台服務器,服務器只能運行一個數據庫。 通常,數據庫和實例是可以互換的,盡管“數據庫”指的是數據,而“實例”指的是連接性。

數據庫本身包含架構,其中包含表、視圖和存儲過程等對象。 模式可能“看起來像”其他系統中的數據庫,因為它們有名稱並包含表。 模式通常以用戶命名,因為每個用戶都有自己的命名空間。 用戶通常被授予特定於給定命名空間的特權。

也就是說,模式/命名空間是一個安全單位,但不是備份/恢復的單位

因此,數據庫包含用戶。 用戶表示包含表的模式。 並且用戶可以在同一數據庫上的架構內和架構之間擁有角色和權限。

而且,更令人困惑的是,用戶可以在多個數據庫之間共享,但那是另一回事。

問:所以我的問題是,Oracle 有什么問題? 為什么我們不需要指定數據庫名稱,oracle 中不需要創建數據庫,默認數據庫概念有就夠了?”

A:就MySQL的“用戶”和“數據庫”概念而言,將這些概念轉換為Oracle...

在 Oracle 中,這些是同一回事 他們是一樣的。

在 MySQL 中,您可以使用數據庫名稱限定對表名的引用:

SELECT * FROM mydatabasename.mytablename ;

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

SELECT * FROM mytableowner.mytablename ;

當我們引用一個表名而不在 MySQL 中限定它時,它被解釋為對“當前數據庫”中的表的引用。

在 Oracle 中,未限定的表引用被解釋為對當前用戶“擁有”的表的引用。 (如果當前用戶不擁有該名稱的對象,則 Oracle 會在特殊的 PUBLIC 所有者下查找該名稱的對象。)


為了增加混亂...甲骨文術語“數據庫”擁有比它在MySQL的一個非常不同的含義...... Oracle數據庫是一樣的事,作為一個MySQL數據庫。


在 Oracle 中,要查看當前用戶擁有的表,可以查詢USER_TABLES視圖。

要查看當前用戶擁有權限的表,包括其他用戶擁有的表,請查詢ALL_TABLES視圖。 此視圖還返回一個OWNER列,該列顯示擁有該表的用戶。

如果當前用戶具有SELECT_CATALOG_ROLE權限,您可以查詢DBA_TABLES以查看所有用戶擁有的所有表,無論您是否擁有這些表的權限。 此視圖還包括OWNER列。

USER_ALL_DBA_的命名約定適用於所有字典視圖,而不僅僅是_TABLES

我會說在 Oracle 用戶屬於數據庫。

數據庫通常在 Oracle 數據庫軟件安裝期間創建。 顯然,您可以稍后創建它(例如,如果您只安裝了軟件)或添加另一個。

當您登錄到您使用的數據庫時:

sqlplus username/password@SID

SID 標識數據庫實例(數據庫名稱 + 實例編號)。 例如,如果您的 dbname 是“mydatabase”並且實例編號是“1”,那么 SID 是“mydatabase1”。

因此,當您稍后創建新表時,它屬於您的用戶,而該用戶屬​​於數據庫。 稍后您可以像這樣選擇此表:

select * from username.your_table_name;

當您使用 JDBC 連接進行連接時,您也會提供 SID:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM