Oracle四大應用服務之間的密切關係

來源:互聯網
上載者:User

首先簡單總結一下:

1. service name 服務名其實揍是:資料庫名),裝 ORACLE 時肯定要指定的一個名字

2. tablespace 資料表空間,資料庫物件的磁碟儲存位置

3. schema 方案,資料庫物件的邏輯分類

4. user 使用者,等同於 schema

5. service name > tablespace > schema(user)

詳細說明:

schema 為資料庫物件的集合,為了區分各個集合,我們需要給這個集合起個名字,這些名字就是我們在企業管理器的 schema 下看到的許多類似使用者名稱的節點,這些類似使用者名稱的節點其實就是一個schema,schema 裡麵包含了各種對象如:tables,views,sequences,stored procedures,synonyms,indexes,clusters,and database links。

一個使用者user)一般對應一個 schema,該使用者的 schema 名等於使用者名稱,並作為該使用者預設的 schema。這也就是我們在企業管理器的 schema 下看到 schema 名都為資料庫使用者名稱的原因。Oracle 資料庫中不能新建立一個 schema,要想建立一個 schema,只能通過建立一個 user 的方法解決Oracle 中雖然有 create schema 語句,但是它並不是用來建立一個 schema 的),在建立一個 user 的同時為這個 user 建立一個與使用者名稱同名的 schem 並作為該使用者的預設 shcema。即 schema 的個數同 user 的個數相同,而且 schema 名字同 user 名字一一對應並且相同,所有我們可以稱 schema 為 user 的別名,雖然這樣說並不準確,但是更容易理解一些。

一個 user 有一個預設的 schema,其 schema 名就等於使用者名稱,當然一個 user 還可以使用其他的 schema。如果我們訪問一個表時,沒有指明該表屬於哪一個 schema 中的,系統就會自動給我們在表上加上預設的 sheman 名。比如我們在訪問資料庫時,訪問 scott 使用者下的 emp 表,通過select * from emp; 其實,這 sql 語句的完整寫法為 select * from scott.emp。在資料庫中一個對象的完整名稱為 schema.object,而不屬 user.object。類似如果我們在建立對象時不指定該對象的 schema,在該對象的 schema 為 user 的預設 schema。這就像一個 user 有一個預設的 tablespace,但是該 user 還可以使用其他的 tablespace,如果我們在建立對象時不指定 tablespace,則Object Storage Service在預設 tablespace 中,要想讓Object Storage Service在其他 tablespace 中,我們需要在建立對象時指定該對象的 tablespace。

舉例如下:

 
  1. SQL> Gruant dba to scott   
  2. SQL> create table test(name char(10));   
  3. Table created.   
  4.  
  5. SQL> create table system.test(name char(10));   
  6. Table created.   
  7.  
  8. SQL> insert into test values('scott');   
  9. 1 row created.   
  10.  
  11. SQL> insert into system.test values('system');   
  12. 1 row created.   
  13.  
  14. SQL> commit;   
  15. Commit complete.   
  16.  
  17. SQL> conn system/manager   
  18. Connected.   
  19.  
  20. SQL> select * from test;   
  21. NAME   
  22. ----------   
  23. system   
  24.  
  25. SQL> ALTER SESSION SET CURRENT_SCHEMA = scott; --改變使用者預設schema名   
  26. Session altered.   
  27.  
  28. SQL> select * from test;   
  29. NAME   
  30. ----------   
  31. scott   
  32.  
  33. SQL> select owner ,table_name from dba_tables where table_name=upper('test');   
  34. OWNER TABLE_NAME   
  35. ------------------------------ ------------------------------   
  36. SCOTT TEST   
  37. SYSTEM TEST  

--上面這個查詢就是將 schema 作為 user 的別名的依據。實際上在使用上,shcema 與 user 完全一樣,沒有什麼區別,在出現 schema 名的地方也可以出現 user 名。

schema 和 user 一般是一致的,建立一個 user 後即可得到一個 schema,如:HR 使用者建立後便有 HR 方案,接下來建立表、索引等資料庫物件時,要指定其屬於哪個 schema,也要指定其存放在哪個 tablespace 裡。

也可以這樣理解,schema 是資料庫物件的邏輯歸屬和分類,而 tablespace 是資料庫物件的物理和實際存放位置。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.