共計 2851 個字符,預計需要花費 8 分鐘才能閱讀完成。
本篇文章為大家展示了 Oracle 中 Database name、Instance Name、ORACLE_SID 的區別是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
數據庫名、實例名、數據庫域名、全局數據庫名、服務名
一、數據庫名
1、什么是數據庫名?
數據庫名就是一個數據庫的標識,就像人的身份證號一樣。用參數 DB_NAME 表示,如果一臺機器上裝了多全數據庫,那么每一個數據庫都有一個數據庫名。在數據庫安裝或創建完成之后,參數 DB_NAME 被寫入參數文件之中。格式如下:
DB_NAME=orcl
在 創建數據庫時就應考慮好數據庫名,并且在創建完數據庫之后,數據庫名不宜修改,即使要修改也會很麻煩。因為,數據庫名還被寫入控制文件中,控制文件是以 二進制型式存儲的,用戶無法修改控制文件的內容。假設用戶修改了參數文件中的數據庫名,即修改 DB_NAME 的值。但是在 Oracle 啟動時,由于參數文 件中的 DB_NAME 與控制文件中的數據庫名不一致,導致數據庫啟動失敗,將返回 ORA-01103 錯誤。
2、數據庫名的作用
數據庫名是在安裝數據庫、創建新的數據庫、創建數據庫控制文件、修改數據結構、備份與恢復數據庫時都需要使用到的。
有很多 Oracle 安裝文件目錄是與數據庫名相關的,如:
winnt: e:/oracle/product/10.1.0/oradata/DB_NAME/…
Unix: /home/app/oracle/product/10.1.0/oradata/DB_NAME/…
參數文件 pfile:
winnt: e:/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/…
如果控制文件損壞或丟失,數據庫將不能加載,這時要重新創建控制文件,方法是以 nomount 方式啟動實例,然后以 create controlfile 命令創建控制文件,當然這個命令中也是指指 DB_NAME。還有在備份或恢復數據庫時,都需要用到數據庫名。總之,數據庫名很重要,要準確理解它的作用。
3、查詢當前數據名
方法一:select name from v$database;
方法二:show parameter db
方法三:查看參數文件。
4、修改數據庫名
建議:應在創建數據庫時就確定好數據庫名,數據庫名不應作修改,因為修改數據庫名是一件比較復雜的事情。那么現在就來說明一下,如何在已創建數據之后,修改數據庫名。步驟如下:
1. 關閉數據庫。
2. 修改數據庫參數文件中的 DB_NAME 參數的值為新的數據庫名。
3. 以 NOMOUNT 方式啟動實例,修建控制文件(關于創建控制文件的命令語法,請參考 oracle 文檔)
二、數據庫實例名
1、什么是數據庫實例名?
實例是訪問 oracle 數據庫所需的一部分計算機內存和輔助處理后臺進程,是由進程和這些進程所使用的內存(SGA)所構成的一個集合,它根本不需要一個與其相關的數據庫,沒有任何數據文件也可以啟動實例。
啟動過程如下:
sqlplus / as sysdba
sql startup nomount # 啟動了一個實例,現在 SGA 分配了,進程在運行,除數據庫所有的東西都啟動了
sql alter database mount # 查找以及加載控制文件 (init.ora 文件中指定),然后利用控制文件定位重做日志文件、數據文件、臨時文件
sql alter database open #oracle 將打開所有聯機的數據文件及重做日志文件,供用戶訪問。
大家訪問 oracle 都是訪問一個實例,但這個實例如果關聯了數據庫文件,就是可以訪問的,如果沒有,就會得到實例不可用的錯誤。
實例名指的是用于響應某個數據庫操作的數據庫管理系統的名稱,它同時也叫 sid。實例名是由參數 instance_name 決定的。如果這個參數不被制定(即 instance_name 沒有被指定任何值),那么實例的名字由該用戶的環境變量 ORACLE_SID(注意這里是大寫) 決定。
2、實例和數據庫
實例和數據庫的區別:
1)實例是臨時的,它只在相關的進程和內存集合存在時存在,數據庫是永久的,只要文件存在它就存在。
2)一個實例在生存周期內可安裝和打開單個數據庫;數據庫可以被很多實例安裝和打開,或者一個接一個的實例安裝和打開,每個實例都打開同一個數據庫。
數據庫實例名用于對外部連接。在操作系統中要取得與數據庫的聯系,必須使用數據庫實例名。要去連接一個數據庫服務器,就必須知道其數據庫實例名,只知道數據庫名是沒有用的。與數據庫名不同,在數據庫安裝或創建數據庫之后,實例名可以被修改。數據庫名和實例名可以相同也可以不同。一般情況下,數據庫名和實例名是一對一的關系,但如果在 oracle 并行服務器架構(oracle 實時應用集群)中,數據庫名和實例名是一對多的關系(一個數據庫對應多個實例,同一時間內用戶只有一個實例相聯系,當某一實例出現故障,其它實例自動服務,以保證數據庫安全運行)。
3、查詢當前數據庫實例名
方法一:select instance_name from v$instance;
方法二:show parameter instance;
三、ORALCE_SID
在實際中,對于數據庫實例的標識有時使用實例名,有時使用 ORACLE_SID,它們有什么區別?
(ORACLE_SID)
OS —————- ORACLE 數據庫 ——–(Instance_name(實例名))
上圖表示實例 instance_name、ORACLE_SID 與數據庫及操作系統之間的關系,雖然這里列出的兩個參數都是數據庫實例名,但是 instance_name 參數是 ORACLE 數據庫的參數,此參數可以在參數文件中查到;而 ORACLE_SID 參數則是操作系統環境變量,與 ORACLE_BASE、ORACLE_HOME 用法相同,用于和操作系統交互。也就是說,在操作系統中要想得到實例名,就必須使用 ORACLE_SID。切 ORACLE_SID 必須與 instance_name 的值一致,否則,你將會收到一個錯誤,在 UNIX 平臺,是“ORACLE not available ”, 在 winnt 平臺,是“TNS 協議適配器錯誤”。
上述內容就是 Oracle 中 Database name、Instance Name、ORACLE_SID 的區別是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注丸趣 TV 行業資訊頻道。