原網址:http://www.cnblogs.com/advocate/archive/2010/08/20/1804063.html
http://blog.csdn.net/haiross/article/details/13614041
----------------------------------------------------------------------------------------------------------------------------------
我的總結:ORACLE_SID是在開啟數據庫startup的時候找默認的參數文件(spfile<ORACLE_SID>)
只是為了方便找到參數文件,這也就是為什么在只安裝數據庫軟件的時候可以指定ORACLE_SID的原因,因為它和數據庫和實例沒有根本的關系,只是為了方便
數據庫中的instance_name可以和ORACLE_SID不同,也可以和db_name不同
Linux命令 ps -ef|grep ora_ 后台進程
ora_smon_orcl
ora oracle數據庫進程
smon進程名
orcl 數據庫服務器實例名 --老師講錯了,應該是ORACLE_SID
----------------------------------------------------------------------------------------------------------------------------------
數據庫名(DB_NAME)、實例名(Instance_name)、以及操作系統環境變量(ORACLE_SID)
在ORACLE7、8數據庫中只有數據庫名(db_name)和數據庫實例名(instance_name)。在ORACLE8i、9i中出現了新的參數,即數據庫域名(db_domain)、服務名(service_name)、以及操作系統環境變量(ORACLE_SID)。這些都存在於同一個數據庫中的標識,用於區分不同數據庫的參數。
一、什么是數據庫名(db_name)?
數據庫名是用於區分數據的內部標識,是以二進制方式存儲於數據庫控制文件中的參數,在數據安裝或創建之后將不得修改。數據庫安裝完成后,該參數被寫入數據庫參數文件pfile中,格式如下:
.........
db_name="orcl" #(不允許修改)
db_domain=dbcenter.toys.com
instance_name=orcl
service_names=orcl.dbcenter.toys.com
control_file=(...............
.........
在每一個運行的ORACLE8i數據庫中都有一個數據庫名(db_name),如果一個服務器程序中創建了兩個數據庫,則有兩個數據庫名。其控制參數據分屬在不同的pfile中控制着相關的數據庫。
二、什么是數據庫實例名(instance_name)
數據庫實例名則用於和操作系統之間的聯系,用於對外部連接時使用。在操作系統中要取得與數據庫之間的交互,必須使用數據庫實例名。例如,要和某一個數據庫server連接,就必須知道其數據庫實例名,只知道數據庫名是沒有用的,與數據庫名不同,在數據安裝或創建數據庫之后,實例名可以被修改。數據庫安裝完成后,該實例名被寫入數據庫參數文件pfile中,格式如下:
db_name="orcl" #(不允許修改)
db_domain=dbcenter.toys.com
instance_name=orcl #(可以修改,可以與db_name相同也可不同)
service_names=orcl.dbcenter.toys.com
control_file=(...............
.........
數據庫名與實例名之間的關系。
數據庫名與實例名之間的關系一般是一一對應關系,有一個數據庫名就有一個實例名,如果在一個服務器中創建兩個數據庫,則有兩個數據庫名,兩個數據庫實例名,用兩個標識確定一個數據庫,用戶和實例相連接。
但在8i、9i的並行服務器結構中,數據庫與實例之間不存在一一對應關系,而是一對多關系,(一個數據庫對應多個實例,同一時間內用戶只一個實例相聯系,當某一實例出現故障,其它實例自動服務,以保證數據庫安全運行。)
三、操作系統環境變量(ORACLE_SID)
在實際中,對於數據庫實例名的描述有時使用實例名(instance_name)參數,有時使用ORACLE_SID參數。這兩個都是數據庫實例名,它們有什么區別呢?(經常弄混)
(ORACLE_SID)
OS<----------------> ORACLE 數據庫 <--------(Instance_name(實例名))
上圖表示實例名instance_name、ORACLE_SID與數據庫及操作系統之間的關系,雖然這里列出的兩個參數都是數據庫實例名,但instance_name參數是ORACLE數據庫的參數,此參數可以在參數文件中查詢到,而ORACLE_SID參數則是操作系統環境變量。
操作系統環境變量ORACLE_SID用於和操作系統交互。也就是說,在操作系統中要想得到實例名,就必須使用ORACLE_SID。此參數與ORACLE_BASE、ORACLE_HOME等用法相同。在數據庫安裝之后,ORACLE_SID被用於定義數據庫參數文件的名稱。如:$ORACLE_BASE/admin/DB_NAME/pfile/init$ORACLE_SID.ora。
定義方法:
export ORACLE_SID=orcl
如果在同一服務器中創建了多個數據庫,則必然同時存在多個數據庫實例,這時可以重復上述定義過程,以選擇不同實例。
還可以用
[oracle@Datacent]$ . oraenv
來切換不同的ORACLE_SID來通過操作系統來啟動不同的實例(instance)
Oracle數據庫系統中實例名(即SID)和ORACLE_SID的區別
小結:
ORACLE_SID是一個環境變量,而數據庫實例名就是instance_name,或說system identifier (SID)。
當有多個數據庫存在時,我們可以通過“set ORACLE_SID=你所要登錄的那個數據庫的數據庫實例名”,之后就可以通過如sqlplus / as sysdba 登錄到你所要登錄的那個數據庫上。這個就是ORACLE_SID這個環境變量的作用。
至於說為什么可以通過“set ORACLE_SID=你所要登錄的那個數據庫的數據庫實例名”就可以 登錄到你所要登錄的那個數據庫上,其本質原因表述如下:
oracle數據庫軟件系統通過當前的ORACLE_SID值來找到對應參數文件(即spfile<ORACLE_SID>.ora),通過讀取參數文件里的各個參數值(如instance_name、buffer_cache等)來創建一個數據庫實例。所以,如果參數文件spfile<ORACLE_SID>.ora里的參數instance_name的值與ORACLE_SID值相同,那么通過“set ORACLE_SID=你所要登錄的那個數據庫的數據庫實例名instance_name”自然是可以 登錄到你所要登錄的那個數據庫上去,而如果參數文件spfile<ORACLE_SID>.ora里的參數instance_name的值與ORACLE_SID值不相同,那么通過“set ORACLE_SID=你所要登錄的那個數據庫的數據庫實例名instance_name”則會登錄到參數文件spfile<ORACLE_SID>.ora里的參數instance_name的值對應的那個數據庫上去。
上述也就是對創建一個數據庫實例過程的表述。
2012-11-21 11:26:30| 分類:Oracle| 標簽:|字號大中小訂閱
首先介紹幾個關於Oracle的基本概念:instance、SID和ORACLE_SID。
instance(Oracle官方給出的定義)
Every running Oracle database is associated with an Oracle instance. When a database is started on a database server (regardless of the type of computer), Oracle allocates a memory area called the System Global Area (SGA) and starts an Oracle process. This combination of the SGA and an Oracle process is called an instance. The memory and the process of an instance manage the associated database's data efficiently and serve the one or more users of the database.
system identifier (SID)(同樣是Oracle官方給出的定義)
A unique name for an Oracle instance.(前面的一句是重點,后面的以我們現在討論的話題沒有直接的關系) To switch between Oracle databases, users must specify the desired SID. The SID is included in theCONNECT DATA parts of the connect descriptor in a tnsnames.ora file, and in the definition of the network listener in a listener.ora file.
ORACLE_SID (同樣是Oracle官方給出的定義)
Specifies name of Oracle9i database instance on host computer. The value of this parameter is the SID for the instance. Default value is specified by entry in the Database Identification window of Oracle Universal Installer.(最后一句說:ORACLE_SID的默認值是你安裝Oracle時在“數據庫標識”窗口所輸入的SID的值)。
ORACLE_SID的值會保存在registry(注冊表)中,當你把注冊表中ORACLE_SID的值清空的時候,系統的默認值是你安裝Oracle時在“數據庫標識”窗口所輸入的SID的值。
從上面的定義,我們可以很清楚地知道:SID是Oracle數據庫實例的唯一名稱標識(A unique name for an Oracle instance.)。
了解了上面的概念之后,我們可以來討論一下SID和ORACLE_SID的區別了。首先,我們是通過Oracle實例來完成對Oracle數據庫的管理的。而我們又知道SID是Oracle實例的唯一名字標識。換言而言之,我們是通過SID來指定我們將要進行管理的數據庫是數據庫系統中的哪個數據庫的。這也是為什么需要SID的一個重要的原因。那么,ORACLE_SID呢?別急,讓我們再來看一段Oracle的官方提供文字:
Updating ORACLE_SID in the Registry
If this is the first database on the system or if you intend to make the new database the default database, then you must make a change in the registry.
1. Start Registry Editor at the command prompt:
2. C:\> regedt32
The Registry Editor window appears.
2. Choose subkey \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0 for the first Oracle home on your computer. For subsequent installations to different Oracle homes on the same computer, the path is \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEID where ID is the unique number identifying the Oracle home.
See Also:
"Configuration Parameters and the Registry" in Oracle9i Database Getting Started for Windows for more information on subkey locations for multiple Oracle homes
3. Locate parameter ORACLE_SID on the right side of the Registry Editor window.
4. Double-click the parameter name and change the data to the new SID, which is prod in this example.
If you do not yet have parameter ORACLE_SID, because this is the first database on your system, then you must create it.
To create parameter ORACLE_SID:
1. Choose Add Value from the Edit menu.
The Add Value dialog box appears:
Text description of the illustration addvalue.gif
2. Enter ORACLE_SID in the Value Name text box.
3. Select REG_EXPAND_SZ (for an expandable string) in the Data Type list box.
4. Click OK.
A string editor dialog box appropriate for the data type appears:
Text description of the illustration stringre.gif
5. Enter prod in the String Editor dialog box.
6. Click OK.
Registry Editor adds parameter ORACLE_SID.
7. Choose Exit from the Registry menu.
Registry Editor exits.
看完這段說明,我們可以看到:如果你想讓你新建的數據庫成為Oracle服務器默認的數據庫(即是當你不指定要連接的數據庫(實例)時,Oracle服務器默認幫你連接的數據庫(實例)),你必須修改注冊表中ORACLE_SID的值——把ORACLE_SID的值設置為你新建的數據庫的實例名。(if you intend to make the new database the default database, then you must make a change in the registry.)。從上面的表述,我們不難發現:ORACLE_SID是用來指定Oracle服務器默認的數據庫(實例)的。
現在,我們可以很清楚地看到SID和ORACLE_SID的區別了。
ps:我是Oracle數據庫初學者,如果上文有什么錯誤,歡迎各位指出。謝謝!!!
最后,附上Oracle9i Database Online Documentation
(Release 2 (9.2))的鏈接:http://download.oracle.com/docs/cd/B10501_01/index.htm
oracle sid,instance_name,db_name,oracle_sid之間的關系
【一】對ORACLE_SID的理解
--------------------------------------------------------------------------------
Oracle中SID的作用類似於一個“開關變量”---引導Oracle在實例啟動時如何去默認位置下讀取適當的參數文件並加載,以正確啟動實例。
我們知道實例的啟動需要指定pfile/spfile(Oracle9i之前是使用pfile--即init文件,從9i開始就默認使用spfile--即服務器端參數文件這兩個文件的存放位置為:
A.pfile:名字為init<ORACLE_SID>.ora
B.spfile:名字為spfile<ORACLE_SID>.ora
我們看到init文件和spfile文件都帶有ORACLE_SID的標識,這就是SID的作用了:
【1】當我們要啟動一個實例時,我們首先通過:set ORACLE_SID = XXX 或者export ORACLE_SID = XXX 的方式告訴Oracle接下來要啟動的實例
【2】當我們執行startup nomount時,由於已經指定了SID,那么Oracle知道了如何去默認的目錄下查找該實例對應的參數文件--就是靠SID去匹配每個init/spfile文件
【3】當Oracle找到該文件后(init/spfile),就會讀取該文件的內容,將一系列參數用於分配內存空間,構建后台進程等實例的啟動過程
【4】當這個實例成功啟動后,我們又可以重新執行 set ORACLE_SID = XXX 或 export ORACLE_SID = XXX 命令再次將“開關撥向”另一個SID,然后重復以上步驟
從上面的過程我們看到Oracle SID的作用是一個明顯的“開關變量”,它拔向那一邊,那么Oracle就會去找和它對應的參數文件來啟動實例。其次SID也起到進程隔離的作用--即SID會在實例的一系列后台進程中得到體現,如ora_dbw0_paullin,ora_dbw0_boblin。通過SID來命名后台進程。
操作系統也必須通過SID來和Oracle實例打交道,操作系統並不知道什么INSTANCE_NAME,只知道ORACLE_SID,在Oracle內部由Oracle自己根據這個SID去識別不同的實例。所以ORACLE_SID更多的是“Oracle和外部操作系統溝通的一個窗口”。
【二】對INSTANCE_NAME的理解
--------------------------------------------------------------------------------
相比於ORACLE_SID這樣的“開關變量”,INSTANCE_NAME則是一個實實在在的參數。它是在init/pfile文件中配置的(db_name)。用於標識數據庫實例的名稱,其缺省值就是ORACLE_SID。
INSTANCE_NAME就像一個人的名稱一樣,而SID則是這個人的身份證號碼。通過SID我們找到對應的init/spfile文件,而init/spfile文件中又通過instance_name這個參數告訴我們對應的實例叫什么名字。這樣就把ORACLE_SID、參數文件、INSTANCE_NAME聯系起來了。
造成ORACLE_SID不同,但INSTANCE_NAME相同的原因通常是因為復制了原有的參數文件,但忘記了修改其中的INSTANCE_NAME參數的值。不過在10G之后INSTANCE_NAME這個參數以及從init/spfile中消失了,以免引起混亂。
【三】對DB_NAME的理解
--------------------------------------------------------------------------------
我們已經知道了ORACLE_SID是一個“開關變量”,INSTANCE_NAME是用來描述實例的。那么DB_NAME則是描述實例掛載的數據庫名稱,通過這個DB_NAME我們可以知道對應的磁盤上的控制文件、日志文件、數據文件的位置。
DB_NAME在創建數據庫時被指定,默認情況下和ORACLE_SID的名字一樣。但和INSTANCE_NAME一樣。DB_NAME一旦被確定下來就不能修改了,因為它會同時存儲在init/spfie,控制文件,日志文件,數據文件。你只能修改init/spfile文件中DB_NAME參數的值,但是不能手工修改其它文件的值。所以一旦修改后引起幾個文件的值不匹配那么數據庫的啟動就會失敗。
A.一個實例可以MOUNT並打開任何數據庫(通過init/spfile中配置DB_NAME參數),但是同一時間一個實例只能打開一個數據庫。
B.一個數據庫可以被一個或多個實例所MOUNT並打開(只能是在RAC環境下,普通環境下一個數據庫只能同時被一個實例MOUNT並打開)。
那么如何知道實例應該掛載到那個數據庫並打開呢?就是靠init/spfile中的“control_files”參數來告訴Oracle去那里讀取控制文件,而控制文件中又記錄了數據文件的位置。所以最終形成一個完整的鏈條:
ORACLE_SID --> init/spfile文件 --> instance_name、db_name、control_files --> 實例名、數據庫名、控制文件 --> 數據文件 --> 完成掛載並打開
【四】ORACLE_SID、INSTANCE_NAME、DB_NAME對應關系
--------------------------------------------------------------------------------
我們已經知道ORACLE_SID是用來隔離同一個ORACLE_HOME下不同的實例的。但對於不同的ORACLE_HOME呢?能否有相同名稱的SID呢?
實際上這就和文件系統的規則是一樣的:在同一個目錄下不允許有同名的文件存在,但不同的目錄下可以有同名的文件。同樣的在同一個ORACLE_HOME下不能有相同的SID存在,而不同的ORACLE_HOME下可以有重名的SID(即便是同一台機,只要ORACLE_HOME不同就可以)。
那么對於INSTANCE_NAME呢?默認情況下INSTANCE_NAME和ORACLE_SID是相同的,也可以是不同的;而且不同的實例可以具有相同的實例名。這聽起來有點混亂是不?其實我們可以用一個簡單的生活化例子來解析:
在一個班級Class_1里面,有兩個學生,他們的名稱都叫張三,但他們的學號肯定不同。在這里“張三”就是INSTANCE_NAME,而學號就是SID。所以INSTANCE_NAME重復沒關系,只要SID不同就可以區分開來。
但是在另外一個班級Class_2里面,也有學號相同的學生,這時候就出現了我們說的SID相同的問題,那么如何區分呢?別忘了我們還有班級這個概念啊!對應於ORACLE就是ORACLE_HOME了。
至於INSTANCE_NAME和DB_NAME的對應關系,這個很好理解了,不同的實例可以掛載到不同的DB,也可以掛載到相同的DB嘛。可以把這理解為“多個進程同時對同一份磁盤文件的競爭性訪問”。
A. 相同ORACLE_HOME下,INSTANCE_NAME可以相同,但ORACLE_SID必須唯一。通過ORACLE_SID來區分不同的實例
B. 不同ORACLE_HOME下,ORACLE_SID可以相同,通過ORACLE_HOME來區分不同的SID
C.不同INSTANCE_NAME可以對應不同的DB_NAME,也可以對應相同的DB_NAME。但是如果不是在RAC環境下,只能同時啟動實例而不能同時掛載
【五】Oracle實例啟動過程的相關參數文件
--------------------------------------------------------------------------------
前面說到Oracle實例啟動時,需要指定pfile/spfile參數,對應的就是init文件和spfile文件。那么當這兩個文件同時存在時Oracle如何決定讀取那個呢?
以Oracle 9i為例,由於默認采用了spfile來啟動實例,所以查找的順序是:
spfile<ORACLE_SID>.ora ---> spfile.ora ---> init<ORACLE_SID>.ora
即默認加載和SID對應的參數文件,如果找不到則采用默認的參數文件,再找不到就用舊的init文件,如果還是找不到則實例無法啟動。
service Name和SID的區別
數據庫名(DB_NAME)、實例名(Instance_name)、以及操作系統環境變量(ORACLE_SID)
在ORACLE7、8數據庫中只有數據庫名(db_name)和數據庫實例名(instance_name)。在ORACLE8i、9i中出現了新的參數,即數據庫域名(db_domain)、服務名(service_name)、以及操作系統環境變量(ORACLE_SID)。這些都存在於同一個數據庫中的標識,用於區分不同數據庫的參數。
一、什么是數據庫名(db_name)?
數據庫名是用於區分數據的內部標識,是以二進制方式存儲於數據庫控制文件中的參數,在數據安裝或創建之后將不得修改。數據庫安裝完成后,該參數被寫入數據庫參數文件pfile中,格式如下:
.........
db_name="orcl" #(不允許修改)
db_domain=dbcenter.toys.com
instance_name=orcl
service_names=orcl.dbcenter.toys.com
control_file=(...............
.........
在每一個運行的ORACLE8i數據庫中都有一個數據庫名(db_name),如果一個服務器程序中創建了兩個數據庫,則有兩個數據庫名。其控制參數據分屬在不同的pfile中控制着相關的數據庫。
二、什么是數據庫實例名(instance_name)
數據庫實例名則用於和操作系統之間的聯系,用於對外部連接時使用。在操作系統中要取得與數據庫之間的交互,必須使用數據庫實例名。例如,要和某一個數據庫server連接,就必須知道其數據庫實例名,只知道數據庫名是沒有用的,與數據庫名不同,在數據安裝或創建數據庫之后,實例名可以被修改。數據庫安裝完成后,該實例名被寫入數據庫參數文件pfile中,格式如下:
db_name="orcl" #(不允許修改)
db_domain=dbcenter.toys.com
instance_name=orcl #(可以修改,可以與db_name相同也可不同)
service_names=orcl.dbcenter.toys.com
control_file=(........................
數據庫名與實例名之間的關系
數據庫名與實例名之間的關系一般是一一對應關系,有一個數據庫名就有一個實例名,如果在一個服務器中創建兩個數據庫,則有兩個數據庫名,兩個數據庫實例名,用這兩個標識(數據庫名和實例名)確定一個數據庫,用戶和實例相連接。
但在8i、9i的並行服務器結構中,數據庫與實例之間不存在一一對應關系,而是一對多關系,(一個數據庫對應多個實例,同一時間內用戶只一個實例相聯系,當某一實例出現故障,其它實例自動服務,以保證數據庫安全運行。)
三、操作系統環境變量(ORACLE_SID)
在實際中,對於數據庫實例名的描述有時使用實例名(instance_name)參數,有時使用ORACLE_SID參數。這兩個都是數據庫實例名,它們有什么區別呢?(經常弄混)
(ORACLE_SID)
OS<----------------> ORACLE 數據庫 <--------(Instance_name(實例名))
上圖表示實例名instance_name、ORACLE_SID與數據庫及操作系統之間的關系,雖然這里列出的兩個參數都是數據庫實例名,但instance_name參數是ORACLE數據庫的參數,此參數可以在參數文件中查詢到,而ORACLE_SID參數則是操作系統環境變量。
操作系統環境變量ORACLE_SID用於和操作系統交互。也就是說,在操作系統中要想得到實例名,就必須使用ORACLE_SID。此參數與ORACLE_BASE、ORACLE_HOME等用法相同。在數據庫安裝之后,ORACLE_SID被用於定義數據庫參數文件的名稱。如:
$ORACLE_BASE/admin/DB_NAME/pfile/init$ORACLE_SID.ora。
定義方法:
export ORACLE_SID=orcl
如果在同一服務器中創建了多個數據庫,則必然同時存在多個數據庫實例,這時可以重復上述定義過程,以選擇不同實例。
還可以用
[oracle@Datacent]$ . oraenv
來切換不同的ORACLE_SID來通過操作系統來啟動不同的實例(instance)
===================================================================================
數據庫名:db_name
數據庫實例名:instance_name
操作系統環境變量:oracle_sid
數據庫服務名:service_names
數據庫域名:db_domain
全局數據庫名:global_db_name
在oracle7、oracle8數據庫中只有數據庫名以及實例名,在oracle8i、oracle9i中出現了數據庫域名、服務名以及全局數據庫名。
數據庫名(db_name):用於區分一個數據的內部標識,是oracle的內部標記,是以二進制方式存儲於數據庫控制文件的參數。
數據庫名的作用:數據庫名是數據庫的內部管理標記,在安裝數據庫、創建新的的數據庫、創建數據庫控制文件、修改數據庫結構、使用數據庫備份與恢復工具進行數據庫備份時都需要使用數據名。
數據庫安裝完成后,數據庫名稱存儲在參數文件(pfile,spfile)中,同時以二進制方式存儲在控制文件中,兩者必須匹配。如果兩者不匹配,數據庫在啟動時提示ORA-01103號錯誤。
■ 對數據名稱的查詢:
1、查詢參數文件 db_name的數值
2、select name from v$database
3、SQL>show parameter db_name
■ 修改數據庫名(修改復雜,建議不要修改)
1、修改參數文件的數據庫名稱。
2.重建數據庫的控制文件。
數據庫實例名(instance_name):用於和操作系統之間的聯系。
操作系統與數據庫之間的交互則必須使用數據庫實例名。數據庫安裝完成后,數據庫實例名稱存儲在參數文件中,同時存儲在注冊表中。
數據庫名與實例名一般是一一對應的關系,即:有一個數據庫名就有一個實例名,而在oracle9i的並行服務器結構中是一對多的關系,即:一個數據庫對應多個實例。
■ 對數據名稱的查詢:
1、查詢參數文件 instance_name的數值
2、select instance_name from v$instance
3、SQL>show parameter instance_name
操作系統環境變量(oracle_sid):用於與數據庫實例名相對應。instance_name是oracle數據庫參數 -oracle_sid是操做系統環境變量,即在操作系統要得到實例名必須通過操做系統環境變量oracle_sid,oracle_sid與 instance_name必須相同。
是數據庫和操作系統的接口,由操作系統使用,是操作系統區分多個數據庫的依據。oracle_sid存儲在注冊表中。如果數據庫的oracle_sid與實際的instance_name不同,在操作系統下運行的oracle所有命令將產生錯誤。
■ 對數據實例名的定義:
SQL>set oracle_sid=數據庫實例名
數據庫域名(db_domain):在數據庫名稱后增加域名構成,使得數據庫的取名在整個網絡環境中惟一,主要用於oralce分布式環境中數據的遠程復制。數據庫域名存儲在參數文件中。
以下情況要考慮使用數據庫域名:1、在oracle分布式環境下,兩個數據庫之間要通過數據鏈路進行數據的遠程傳輸。2、在同一網絡環境下,兩個數據庫名相同。
■ 對數據庫域名的查詢:
1、查詢參數文件 db_domain的數值
2、select value from v$parameter where name='db_domain'
3、SQL>show parameter db_domain
■ 修改數據庫域名:
1、關閉數據庫
2、修改數據庫參數文件中的db_domain、service_names。
數據庫服務名service_names:數據庫名+數據庫域名,意義與全局數據庫名相同。
數據庫服務名存儲在參數文件中。
■ 對數據庫服務名的查詢:
1、查詢參數文件 service_names的數值
2、select value from v$parameter where name='service_names'
3、SQL>show parameter service_names
全局數據庫名global_db_name:數據庫名+數據庫域名。
數據庫實例名、服務名與網絡連接
ORACLE服務器版本 客戶端網絡驅動
ORACLE7 (支持實例名) SQL_NET(支持實例名)
ORACLE8 (支持實例名) NET8 (支持實例名)
ORACLE8i
(支持實例名、服務名) NET8i (支持實例名、服務名)
ORACLE9i
(支持實例名、服務名) ORACLE NET SERVICE
(支持實例名、服務名)
對於網絡連接字符串使用實例名、服務名的問題,需要根據客戶端驅動的版本和oracle服務器的版本共同確定,即兩者都支持實例名和服務名的使用服務名,否則使用實例名。
====================================================================================
1. SID是實例名,實例名指的是用於響應某個數據庫操作的數據庫管理系統的名稱。實例名是由初始化參數文件的參數instance_name決定的。如果這個參數不被指定(即instance_name沒有被指定為任何值),那么實例的名字由該用戶的環境變量ORACLE_SID(注意這里是大寫)決定。在windows平台下,則是注冊表中oracle_sid值決定。
2. SERVICE_NAME指的是listener中的全局數據庫名:這個名字是由listener.ora中GLOBAL_DBNAME參數決定的。這個名字代表的是客戶端連接到數據庫時,tnsnames.ora中SERVICE_NAME參數所對應的值。
3. 連接字符串
配置tnsname.ora時,可以用SID,也可以用SERVICE_NAME. 注意這兩個值不一定相同,具體要看數據庫服務器中的配置。
connect_str =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = xx.xx.xx.xx)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = xxxx
)
)
connect_str =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = xx.xx.xx.xx)(PORT = 1521))
)
(CONNECT_DATA =
(SID = xxx)
(SERVER = DEDICATED)
)
)
Oracle實例名與ORACLE_SID的區分測試一
windows上的Oracle環境是依賴於服務而存在的。而Oracle環境的初始化是通過oracle.exe <oracle_sid>來完成的,至於實例和數據庫是否隨服務啟動要依賴注冊表的設置。
我們可以通過手工來初始化任意的Oracle環境。
開啟命令窗口1,建立操作系統服務
C:\Documents and Settings\IBM>oracle julia
Hit any key to exit server:
在命令窗口2中,就可以使用該系統服務了
C:\Documents and Settings\IBM>set oracle_sid=julia
C:\Documents and Settings\IBM>sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.1.0 - Production on 星期二 3月 11 13:53:52 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
已連接到空閑例程。
SQL> startup nomount;
ORA-01078: failure in processing system parameters
LRM-00109: N^7(4r?*2NJ}ND<~ 'D:\ORACLE\ORA92\DATABASE\INITJULIA.ORA'
SQL> startup nomount;
ORACLE 例程已經啟動。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> alter database mount;
alter database mount
*
ERROR 位於第 1 行:
ORA-01990: ??????'D:\oracle\ora92\DATABASE\PWDjulia.ORA'???
ORA-27041: ??????
OSD-04002: N^7(4r?*ND<~
O/S-Error: (OS 2) O5M3UR2;5=V86(5DND<~!#
SQL> host
Microsoft Windows XP [版本 5.1.2600]
(C) 版權所有 1985-2001 Microsoft Corp.
C:\Documents and Settings\IBM>orapwd
Usage: orapwd file=<fname> password=<password> entries=<users>
where
file - name of password file (mand),
password - password for SYS (mand),
entries - maximum number of distinct DBA and OPERs (opt),
There are no spaces around the equal-to (=) character.
C:\Documents and Settings\IBM>orapwd file=D:\oracle\ora92\DATABASE\PWDjulia.ORA password=oracle entries=5
C:\Documents and Settings\IBM>exit
SQL> alter database mount;
alter database mount
*
ERROR 位於第 1 行:
ORA-01100: ??????
SQL> alter session set nls_language=american;
Session altered.
SQL> alter database mount;
alter database mount
*
ERROR at line 1:
ORA-01100: database already mounted
SQL> alter database open;
Database altered.
SQL> select name from v$database;
NAME
---------
ORA
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
julia
SQL> show parameter db_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string ora
SQL> show parameter instance_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string orasid
SQL> show parameter service_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string ora
SQL>
可見,ORACLE_SID的作用就是設置一個Oracle環境窗口,通過這個環境變量來標識和命名系統進程,此后Oracle的活動可以由此展開。
我們看一下這里所出現的所有“xx名”
操作系統服務名:julia
ORACLE_SID:julia
db_name:ora
數據字典v$instance中的instance_name:julia
PFILE中的instance_name:orasid
ORACLE_SID用於標識進程,它所對應的操作系統服務名稱為OracleService<ORACLE_SID>;而INSTANCE_NAME用於標識實例,二者名稱可以不同。而在配置NET SERVICE時,使用的是service_names。
二者的區別大致如此,只是不知道為什么數據字典v$instance中的實例名也是julia?