[英]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.