空間管理您的位置: ITPUB個人空間 » Oracle學習之路 » 日誌世上什麼事都可以發生,就是不會發生不勞而獲的事
轉自:http://space.itpub.net/?uid-693532-action-viewspace-itemid-716180
一、資料庫名
1.db_name
資料庫名(db_name)就是一個資料庫的標識,就像人的社會安全號碼一樣。如果一台機器上裝了多全資料庫,那麼每一個資料庫都有一個資料庫名。在資料庫安裝或建立完成之後,參數DB_NAME被寫入參數檔案之中。格式如下:
###########################################
# Database Identification
###########################################
db_domain=""
db_name=orcl
在建立資料庫時就應考慮好資料庫名,並且在建立完資料庫之後,資料庫名不宜修改,即使要修改也會很麻煩。因為,資料庫名還被寫入控制檔案中,控制檔案是以 二進位型式儲存的,使用者無法修改控制檔案的內容。假設使用者修改了參數檔案中的資料庫名,即修改DB_NAME的值。但是在Oracle啟動時,由於參數文
件中的DB_NAME與控制檔案中的資料庫名不一致,導致資料庫啟動失敗,將返回ORA-01103錯誤。
2.資料庫名的作用
資料庫名是在安裝資料庫、建立新的資料庫、建立資料庫控制檔案、修改資料結構、備份與恢複資料庫時都需要使用到的。
有很多Oracle安裝檔案目錄是與資料庫名相關的。
3.修改資料庫名
建議:應在建立資料庫時就確定好資料庫名,資料庫名不應作修改,因為修改資料庫名是一件比較複雜的事情。
現在就來說明一下,如何在已建立資料之後,修改資料庫名。步驟如下:
(1)關閉資料庫。
(2)修改資料庫參數檔案中的DB_NAME參數的值為新的資料庫名。
(3)以NOMOUNT方式啟動執行個體,修建控制檔案(有關建立控制檔案的命令文法,請參考oracle文檔)
4.查詢當前資料庫名
方法一: select name from v$database;
方法二:show parameter db
方法三:查看參數檔案
二、資料庫執行個體名
1.資料庫執行個體名的概念
先來解釋以下,執行個體是什麼東西。執行個體是訪問Oracle資料庫所需的一部分電腦記憶體和輔助處理後台進程,是由進程和這些進程所使用的記憶體(SGA)所構成一個集合,它根
本不需要一個與其相關聯的資料庫,沒有任何資料檔案也可以啟動執行個體。下面是Oralce的啟動過程:
sqlplus / as sysdba
sql>startup nomount #啟動了一個執行個體,現在SGA分配了,進程在運行,除資料庫所有的東西都啟動了
sql>alter database mount #利用控制檔案(init.ora檔案中指定)定位重作檔案、資料檔案、臨時檔案
sql>alter database open #資料庫可供任何人通過這個執行個體訪問。
所以可以這麼理解:大家訪問Oracle都是訪問一個執行個體,但這個執行個體如果關聯了資料庫檔案,就是可以訪問的,如果沒有,就會得到執行個體停用錯誤。
執行個體名指的是用於響應某個資料庫操作的資料庫管理系統的名稱。她同時也叫SID。執行個體名是由參數instance_name決定的。如果這個參數不被指定
(即instance_name沒有被指定為任何值),那麼執行個體的名字由該使用者的環境變數ORACLE_SID(注意這裡是大寫)決定。在windows 平台下,則是註冊表中oracle_sid值決定。
2.執行個體和資料庫
執行個體和資料庫之間的區別如下:
(1)執行個體是臨時的,它只在相關的進程和記憶體集合存在時存在;資料庫是永久的,只要檔案存在它就存在
(2)一個執行個體在其生存期內可安裝和開啟單個資料庫;資料庫可以被很多執行個體安裝和開啟,或者一個接一個的執行個體安裝和開啟,或者由多個執行個體同時安裝和開啟(RAC)
順便提一下RAC,簡單來說RAC就是多個執行個體同時開啟一個資料庫檔案的系統,在結構上是多台機器,每天機器運行一個執行個體,每個執行個體都開啟同一個資料庫(這個是用磁碟共用技術實現的),這些執行個體之間需要同步快取,這樣保證多個執行個體是完全一致的,不會相互衝突乃至覆蓋。
資料庫執行個體名(instance_name)用於對外部串連。在作業系統中要取得 與資料庫的聯絡,必須使用資料庫執行個體名。例如,要去串連一個資料庫伺服器,就必須知道其資料庫執行個體名,只知道資料庫名是沒有用的。與資料庫名不同,在資料
安裝或建立資料庫之後,執行個體名可以被修改。資料庫名和執行個體名可以相同也可以不同。在一般情況下,資料庫名和執行個體名是一對一的關係,但如果在oracle並 行伺服器架構(即oracle即時應用叢集)中,資料庫名和執行個體名是一對多的關係(一個資料庫對應多個執行個體,同一時間內使用者只一個執行個體相聯絡,當某一執行個體 出現故障,其它執行個體自動服務,以保證資料庫安全運行) 。
3.查詢當前資料庫執行個體名
方法一:select instance_name from v$instance;
方法二:show parameter instance
三、ORACLE_SID
在實際中,對於資料庫執行個體的標識有時使用執行個體名,有時使用ORACLE_SID,它們有什麼區別呢?
instance_name參數是ORACLE資料庫的參數,此參數可以在 參數檔案中查詢到;而ORACLE_SID參數則是作業系統環境變數,與ORACLE_BASE、ORACLE_HOME等用法相同,用於和作業系統交 互。也就是說,在作業系統中要想得到執行個體名,就必須使用ORACLE_SID。且ORACLE_SID必須與instance_name的值一致,否則,
你將會收到一個錯誤,在unix平台,是“ORACLE not available”,在winnt平台,是“TNS:協議適配器錯誤”。
四、資料庫網域名稱與全域資料庫名
1.概念與聯絡
使用資料庫名(da_name)對一個資料庫進行唯一標識,這種表示對於單個資料庫是足夠的,但是隨著由多個資料庫構成的分散式資料庫的普及,這種命令數 據庫的方法給資料庫的管理造成一定的負擔,因為各個資料庫的名字可能一樣,造成管理上的混亂。為瞭解決這種情況,引入了db_domain參數,這樣在數 據庫的標識是由db_name和db_domain兩個參數共同決定的,避免了因為資料庫重名而造成管理上的混亂。這類似於互連網上的機器名的管理。我們 將db_name和db_domain兩個參數用‘.’串連起來,表示一個資料庫,並將該資料庫的名稱稱為global_name,即它擴充了
db_name。db_name參數只能由字母、數字、’_’、’#’、’$’組成,而且最多8個字元。
資料庫網域名稱(db_domain):定義一個資料庫所在的域,該域的命名同互連網的’域’沒有任何關係,只是資料庫管理員為了更好的管理分散式資料庫而根據實際情況決定的。當然為了管理方便,可以將其等於互連網的域。
全域資料庫名(global_name):對一個資料庫(Oracle database)的唯一標識,oracle建議用此種方法標識資料庫。該值是在建立資料庫時決定的,預設值為db_name. db_domain。在以後對參數檔案中db_name與db_domain參數的任何修改不影響global_name的值,如果要修改 Global_name,只能用alter database rename global_name to <db_name.db_domain>命令進行修改,然後修改相應參數。
2.查詢資料庫網域名稱
方法一:select value from v$parameter where name = 'db_domain';
方法二:show parameter domain
方法三:在參數檔案中查詢
3.例子
全國交通GIS系統的分散式資料庫,其中:
吉林節點: jl.jtgis
吉林長春節點: cc.jl.jtgis
河北節點: hb.jtgis
河北石家莊節點:sjz.hb.jtgis
這些就是資料庫網域名稱,資料庫網域名稱在存在於參數檔案中,她的參數是db_domain.
全域資料庫名=資料庫名+資料庫網域名稱,如前述福建節點的全域資料庫名是:orcl.jl.jtgis
五、資料庫服務名
該參數是oracle8i新引進的。在8i以前,我們用SID來表示資料庫的一個執行個體,但是在Oracle的並行環境中,一個資料庫對應多個執行個體,這樣就 需要多網路服務名,設定繁瑣。為了方便並行環境中的設定,引進了service_name參數。該參數對應一個資料庫,而不是一個執行個體,而且該參數有許多 其它的好處。
該參數的預設值為db_name.db_domain,即等於global_name.如果資料庫有網域名稱,則資料庫服務名就是全域資料庫名;否則,資料庫 服務名與資料庫名相同。一個資料庫可以對應多個service_name,以便實現更靈活的配置。該參數與SID沒有直接關係,即 service_name 不必與SID一樣。
從Oracle8i開始的oracle網路組件,資料庫與用戶端串連的主機字串使用的是資料庫服務名。之前用的是SID,即資料庫執行個體名。
查詢資料庫服務名
方法一:select value from v$parameter where name = 'service_name';
方法二:show parameter service_name
六、網路服務名
網路服務名(net_service_name),又可以稱為資料庫別名(database alias)。是用戶端程式訪問資料庫時所需要,屏蔽了用戶端如何串連到伺服器端的細節,實現了資料庫的位置透明的特性。網路服務名被記錄在tnsnames.ora檔案中。
網路服務名是從用戶端的角度出發,當用戶端串連遠端資料庫或其他服務時,可以指定網路服務名。因此需要使用一個或多個命名方法將此Net服務名解析為串連資料庫或其他服務的串連描述符,看下面:
[本地]——將儲存在本地客戶機的tnsnames.ora檔案中的網路服務名解析為串連描述符。
[Oracle Names]——由Oracle名字伺服器提供為網路上的每個Oracle Net服務提供解析方法
[主機名稱]——通過TCP/IP環境中的主機別名串連到Oracle資料庫服務
[Sun NIS]/[DCE CDS]——專用系統用的,在Windows 2000系統內容下不適用