天天看點

oracle 執行個體名和服務名以及資料庫名差別

一、資料庫名

什麼是資料庫名?

資料庫名就是一個資料庫的辨別,就像人的身份證号一樣。他用參數DB_NAME表示,如果一台機器上裝了多全資料庫,那麼每一個資料庫都有一個資料庫名。在資料庫安裝或建立完成之後,參數DB_NAME被寫入參數檔案之中。格式如下:

DB_NAME=myorcl

...

建立資料庫時就應考慮好資料庫名,并且在建立完資料庫之後,資料庫名不宜修改,即使要修改也會很麻煩。因為,資料庫名還被寫入控制檔案中,控制檔案是以二

進制形式存儲的,使用者無法修改控制檔案的内容。假設使用者修改了參數檔案中的資料庫名,即修改DB_NAME的值。但是在Oracle啟動時,由于參數檔案

中的DB_NAME與控制檔案中的資料庫名不一緻,導緻資料庫啟動失敗,将傳回ORA-01103錯誤。

DB_NAME和instance_name在\oracle\admin\szcg\pfile\下的init.ora檔案中,其中szcg是資料庫名

資料庫名的作用

資料庫名是在安裝資料庫、建立新的資料庫、建立資料庫控制檔案、修改資料結構、備份與恢複資料庫時都需要使用到的。

有很多Oracle安裝檔案目錄是與資料庫名相關的,如:

winnt: d:\oracle\product\10.1.0\oradata\DB_NAME\...

Unix: /home/app/oracle/product/10.1.0/oradata/DB_NAME/...

pfile:

winnt: d:\oracle\product\10.1.0\admin\DB_NAME\pfile\ini.ora

Unix: /home/app/oracle/product/10.1.0/admin/DB_NAME/pfile/init$ORACLE_SID.ora

跟蹤檔案目錄:

winnt: /home/app/oracle/product/10.1.0/admin/DB_NAME/bdump/...

另外,在建立資料時,careate database指令中的資料庫名也要與參數檔案中DB_NAME參數的值一緻,否則将産生錯誤。

同樣,修改資料庫結構的語句alter database,當然也要指出要修改的資料庫的名稱。

如果控制檔案損壞或丢失,資料庫将不能加載,這時要重新建立控制檔案,方法是以nomount方式啟動執行個體,然後以create controlfile指令建立控制檔案,當然這個指令中也是指指DB_NAME。

還有在備份或恢複資料庫時,都需要用到資料庫名。

總之,資料庫名很重要,要準确了解它的作用。

查詢目前資料名

方法一:select name from v$database;

方法二:show parameter db

方法三:檢視參數檔案。

select global_name from global_name;

修改資料庫名

前面建議:應在建立資料庫時就确定好資料庫名,資料庫名不應作修改,因為修改資料庫名是一件比較複雜的事情。那麼現在就來說明一下,如何在已建立資料之後,修改資料庫名。步驟如下:

1.關閉資料庫。

2.修改資料庫參數檔案中的DB_NAME參數的值為新的資料庫名。

3.以NOMOUNT方式啟動執行個體,修建控制檔案(有關建立控制檔案的指令文法,請參考oracle文檔)

二、資料庫執行個體名

什麼是資料庫執行個體名?

資料庫執行個體名是用于和作業系統進行聯系的辨別,就是說資料庫和作業系統之間的互動用的是資料庫執行個體名。執行個體名也被寫入參數檔案中,該參數為instance_name,在winnt平台中,執行個體名同時也被寫入系統資料庫。

資料庫名和執行個體名可以相同也可以不同。

在一般情況下,資料庫名和執行個體名是一對一的關系,但如果在oracle并行伺服器架構(即oracle實時應用叢集)中,資料庫名和執行個體名是一對多的關系。這一點在第一篇中已有圖例說明。

查詢目前資料庫執行個體名

方法一:select instance_name from v$instance;

方法二:show parameter instance

方法三:在參數檔案中查詢。

Unix下可以這樣看:

$ ps -ef|grep ora_

程序的最後幾個字母就是sid

在oracle的安裝目錄下,如D:/oracle/product/10.2.0/db_1/dbs,看檔案名如SPFILEORCL.ORA,那麼就是orcl,也就是說檔案名字是 "SPFILE******.ORA ",那種的 "**** "就是SID

D:/oracle/product/10.2.0/oradata/SID檔案夾...

或D:/oracle/product/10.2.0/db_1/dbs/SPFILESID名稱.ORA

資料庫執行個體名與ORACLE_SID

然兩者都表是oracle執行個體,但兩者是有差別的。instance_name是oracle資料庫參數。而ORACLE_SID是作業系統的環境變量。

ORACLD_SID用于與作業系統互動,也就是說,從作業系統的角度通路執行個體名,必須通過ORACLE_SID。在winnt不

台,ORACLE_SID還需存在于系統資料庫中。

且ORACLE_SID必須與instance_name的值一緻,否則,你将會收到一個錯誤,在unix平台,是“ORACLE not available”,在winnt平台,是“TNS:協定擴充卡錯誤”。

資料庫執行個體名與網絡連接配接

資料庫執行個體名除了與作業系統互動外,還用于網絡連接配接的oracle伺服器辨別。當你配置oracle主機連接配接串的時候,就需要指定執行個體名。當然8i以後版本的網絡元件要求使用的是服務名SERVICE_NAME。這個概念接下來說明。

三、資料庫域名

什麼是資料庫域名?

在分布式資料庫系統中,不同版本的資料庫伺服器之間,不論運作的作業系統是unix或是windows,各伺服器之間都可以通過資料庫鍊路進行遠端複制,資料庫域名主要用于oracle分布式環境中的複制。舉例說明如:

全國交通運政系統的分布式資料庫,其中:

福建節點: fj.jtyz

福建廈門節點: xm.fj.jtyz

江西: jx.jtyz

江西上饒:sr.jx.jtyz

這就是資料庫域名。

資料庫域名在存在于參數檔案中,他的參數是db_domain.

查詢資料庫域名

方法一:select * from v$parameter where name = 'db_domain';

方法二:show parameter domain

全局資料庫名

全局資料庫名=資料庫名+資料庫域名,如前述福建節點的全局資料庫名是:oradb.fj.jtyz

四、資料庫服務名

什麼是資料庫服務名?

從oracle9i版本開始,引入了一個新的參數,即資料庫服務名。參數名是SERVICE_NAME。

如果資料庫有域名,則資料庫服務名就是全局資料庫名;否則,資料庫服務名與資料庫名相同。

查詢資料庫服務名

方法一:show parameter service_name

方法二:在參數檔案中查詢(查資料庫名)。