oralce 一些問題

1.爲什麼我用oracle創建了兩個數據庫 卻只用一個端口1521

在TCP/IP網絡中,(IP,端口號)可以唯一確定一個進程的地址,oracle監聽器也是一個TCP/IP網絡中的進程,默認的端口號是1521。
oracle監聽器進程可以同時爲多個數據庫服務。
客戶端進程通過listener.ora 獲得oracle監聽器進程的(IP,端口)
oracle監聽器進程通過1521端口接收所有客戶聯接請求,並從客戶聯接請求中分理出客戶希望聯接的數據庫進程的相關信息,比如SID,SERVICE_NAME,DB_NAME。根據這些信息,通過查詢一個本地文件(tnsnames.ora),oracle監聽器進程可以得到客戶想要聯接的數據庫主進程的相關連結信息,並把這些信息返回給客戶端,客戶端根據返回的聯接信息,重新聯接到對應的數據庫主進程。
通過查詢本地配置文件tnsnames.ora,一個oracle監聽器進程就可以同時爲多個數據庫(主進程)服務。

創建2個數據庫是2個。但是oracle的端口指的是監聽端口
也就是用戶客戶端連接過來的端口。
所以是可以在一個監聽中監聽2個數據庫的。
當然如果你希望分開的話也可以修改$ORACLE_HOME/network/admin/listener.ora文件來配置2個監聽,具體要配置詳細的ORACLE_BASE和ORALCE_SID
然後起2個不同的LISTENER名字,啓動時候專門指定監聽名。
例如:lsnrctl start <listener_name>
2.使用多個監聽器時的附加配置

連接時故障切換特性

此特性允許客戶在TNSNAMES。ORA中指定多個監聽器,如果連接到第一個監聽器失敗,則嘗試連接下一個監聽器。
TNSNAMES.ORA示例如下:

ORCL =

(DESCRIPTION =
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP) ( HOST = DBPROD ) ( PROT = 1521 ))
(ADDRESS = (PROTOCOL = TCP) ( HOST = DBFAIL ) ( PROT = 1521 ))     ##多了一個監聽器地址
)
(CONNECT_DATA = (SERVICE_NAME = PROD ) ( SERVER = DECIATED)
)
)

 

3.透明應用故障切換(Transparent Application Failover)特性

它用於高可用性環境,它允許客戶應用軟件在當前連接出現故障時,自動重新連接到數據庫,而且可選的繼續執行一條已在運行的SQL語句。
PROD的數據庫在DBPROD和DBFAIL這兩個服務器上必須相同,本例才能工作。具體示例如下:

ORCL =

(DESCRIPTION = 
(FAILOVER = ON
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP) (HOST=DBPROD) (PORT = 1521))
(ADDRESS = (PROTOCOL = TCP ) ( HOST = DBFAIL) (PORT = 1521))
)
(CONNECT_DATA= (SERVICE_NAME = PROD) (SERVER = DEDICATED)
(FAILOVER_MODE= (TYPE=SELECT) ( METHOD = BASICE))
)
)

4.客戶負載平衡(Client Load Balancing)

該特性允許客戶從一個監聽器列表中隨機地挑選,以達到平衡連接請求的效果。
該用特性需要添加LOAD_BALANCE參數,具體示例如下

ORCL =

(DESCRIPTION =
(LOAD_BALANCE= ON)
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP) (HOST = MWEISHAN-DELL) (PORT=1522))
(ADDRESS = (PROTOCOL = TCP) (HOST = MWEISHAN-DELL) (PROT=1521))
)
(CONNECT_DATA = 
(SERVICE_NAME=ORCL)
)
)

5 數據庫名、實例名、服務名有何區別?

數據庫名必須是一個不超過8個字符的文本串,在數據庫創建過程中被記錄在數據庫文件、日誌文件、控制文件中。如果數據庫實例啓動過程中參數文件中 的DB_NAME和控制文件中的數據庫名不一致,則數據庫不能啓動。

 數據庫名是用於區分數據的內部標識,是以2進制方式存儲在控制文件中的參數,在數據庫安裝和創建之後不得修改,在數據庫安裝完成後,該參數被寫入數據庫參數文件pfile中。

 參數文件中的服務名應該是對外提供的一個服務名,默認爲db_name.db_domain.該參數與tnsnames中使用的服務名沒有依存關係,service_name取決於listener.ora中的global_name的值。

  數據庫的實例名用於和操作系統之間的聯繫,用於對外部連接時使用,在操作系統中要取得與數據庫的聯繫必須使用實例名,例如要和一個數據庫的servicer連接,就必須知道數據庫的實例名,只知道數據庫名是不夠的。但是實例名可以修改,數據庫名和實例名的關係:一般是一一對應關係。 


oracle建表爲什麼不在用戶指定的表空間裏面


爲用戶指定表空間時,同時還需要爲該用戶在指定的表空間中分派定額才能在指定的表空間中創建表.你爲用戶授予了DBA的權限,自然就擁有了SYS用戶的權限,所以可以往system表空間中寫入數據.當你沒有授予DBA權限時,是絕對不會在你所指定的表空間中創建表的.表空間ems_temp與ems是屬於不同的表空間.
SQL>revoke dba from ONEZERO;/*撤消DBA權限
SQL>grant create session,create table to ONEZERO;/*爲用戶分派適當的權限
SQL>alter user ONEZERO default tablespace ems_temp quota unlimited on ems_temp;/*爲用戶ONEZERO在ems_temp表空間中分派定額,這裏是無限限的unlimited,即用戶可以無限制的使用該表空間.也可以爲其指定相應的大小.
提問者評價
謝謝你。我用onezero賬號,用Normal登錄建表就可以。用SYSDBA登錄就出現上面的情況

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章