十三、分布式ORACLE系統(tǒng)簡介
1.分布式體系結(jié)構(gòu)的ORACLE
1986年,ORACLE公司推出了它的分布式體系結(jié)構(gòu)的ORACLE數(shù)據(jù)庫系統(tǒng)。該系統(tǒng)是由分布式數(shù)據(jù)庫管理系統(tǒng)(ORACLE RDBMS)、支持多種操作系統(tǒng)和通信協(xié)議的分布式處理環(huán)境軟件SQL*NET、以及與非ORACLE RDBMS聯(lián)接的軟件SQL*CONNECT這三部分組成的一個軟件群。分布式ORACLE采用了典型的開放式體系結(jié)構(gòu),對環(huán)境的適應范圍非常廣泛,可適應多種通信協(xié)議、多種操作系統(tǒng)、多種硬件環(huán)境及多種DBMS和數(shù)據(jù)源。
2.網(wǎng)絡ORACLE的連接過程
網(wǎng)絡ORACLE的連接過程大致包括以下幾步:
(1)確認網(wǎng)絡結(jié)點是否安裝了SQL*NET,如未安裝,則需執(zhí)行:*$SYS@ORACLE:NCONFIG.COM≠進行安裝,并且使用SGAPAD.COM重新鏈接。
(2)確認安裝中選取的網(wǎng)絡驅(qū)動器與操作系統(tǒng)環(huán)境下所配置的通信協(xié)議是否相符。(3)待(1)、(2)兩項均確認后,則可在服務器(Server)結(jié)點上建立一個命令文件。這個命令文件主要完成以下工作:指定ORACLE系統(tǒng)標識碼SID,從而確定將哪一個ORACLE RDBMS作為服務器。這是因為同機上可運行多個ORACLE RDBMS,指定方式為:$ASSIGN〈SID標識碼〉ORACLE$SID指定ORACLE系統(tǒng)所在目錄:$ASSIGN〈目錄名〉SYS$ORACLE指定SQL*NET執(zhí)行代碼的邏輯名$ORASRV=SYS$ORACLE:ORASRV.EXE啟動SQL*NET的執(zhí)行代碼$ORASRV DECNET-NSP:
(4)待完成以后,用戶即可進行遠程訪問。(注意兩個結(jié)點上的ORACLE系統(tǒng)應處于開啟狀態(tài))
(5)為了加強網(wǎng)絡通信管理和避免沖突等原因,可以通過VAX/VMS網(wǎng)絡控制程序NCP建立一和于ORACLE網(wǎng)絡通信的缺省帳號。
3.網(wǎng)絡ORACLE的使用
除了以下實用程序以外,其它ORACLE實用程序和軟件工具均可以通過SQL*NET訪問遠程結(jié)點的ORACLE系統(tǒng)IOR AJI僅供本地使用。另外,用戶通過各種語言編寫的應用程序也可以進行遠程存取。用戶遠程存取的方式非常簡單,僅需要在“用戶名/口令”(ORACLE的合法用戶)后面附上結(jié)點信息。
4.分布式查詢
分布式查詢和數(shù)據(jù)傳輸,主要指用戶在前端機上執(zhí)行本地的進程通過SQL語句或SQLplus命令查詢或傳輸遠程結(jié)點上的數(shù)據(jù)。由于網(wǎng)絡ORACLE系統(tǒng)的分布式查詢功能很強,用戶可以同時查詢多個結(jié)點上的數(shù)據(jù)庫數(shù)據(jù)。傳輸數(shù)據(jù)功能用于兩個結(jié)點之間數(shù)據(jù)及定義的復制,下面將分別介紹。ORACLE系統(tǒng)分布式查詢的功能使得一個結(jié)點上的用戶可以通過SQL查詢語句訪問其它結(jié)點數(shù)據(jù)庫的數(shù)據(jù)。并且用戶還可以同時存取訪問多個結(jié)點(包括本地結(jié)點)的數(shù)據(jù),從而使數(shù)據(jù)庫的查詢功能大大增強。
(1)數(shù)據(jù)庫鏈路(DATABASE LINK)為了使分布式查詢操作更加簡單方便,ORACLE RDBMS為用戶提供了一個新的數(shù)據(jù)定義方式:數(shù)據(jù)庫鏈路。用戶可以通過數(shù)據(jù)庫鏈路定義,在本地結(jié)點和遠程之間進行查詢和連接。進行遠程訪問的用戶需要明確:遠程數(shù)據(jù)庫所在的結(jié)點;遠程結(jié)點上的哪個數(shù)據(jù)庫;遠程數(shù)據(jù)庫的哪個用戶。數(shù)據(jù)庫鏈路即用于標識以上內(nèi)容。用戶通過SQL的CREATE DATABASE LINK語句定義數(shù)據(jù)庫鏈路。其格式為:CREATE[PUBLIC]DATABASE LINK鏈路名CONNECT TO用戶名INENTIFIED BY口令USING‘驅(qū)動器前綴:結(jié)點名““操作系統(tǒng)用戶名口令”””::“““TASK=ORDN后綴.COM”””;如果用戶事先定義一個邏輯名:$ASSIGN結(jié)點名,“““操作系統(tǒng)用戶名口令”””::“““TASK=ORDN后綴.COM”””,邏輯名那么CREATE DATABASE LINK就變得十分簡潔:CREATE[PUBLIC]DATABASE LINK鏈路名CONNECT TO用戶名IDENTIFIED BY口令USING‘驅(qū)動器前綴:邏輯名’;這里PUBLIC代表公用數(shù)據(jù)庫鏈路,只有DBA才能使用PUBLIC限定詞。
(2)遠程查詢操作在數(shù)據(jù)庫鏈路定義以后,遠程查詢就變得非常簡單和方便。用戶訪問查詢數(shù)據(jù)庫的表或視圖時,只要在表名或視圖名后面附上數(shù)據(jù)庫鏈路名即可通過SELECT語句進行查詢。其形式為:SELECT列表達式[,列表達式,…] FROM表名@數(shù)據(jù)庫鏈路名[,表名@數(shù)據(jù)庫鏈路名,…] [WHERE邏輯表達式];
(3)定義同義名用戶可以用同義名來簡化一些繁瑣的表名或視圖名。對于遠程查詢操作,用戶也可以為遠程數(shù)據(jù)庫的表名或視圖名定義相應的同義名。
(4)連接操作在遠程查詢中,用戶可以連接相同(或不同)結(jié)點上數(shù)據(jù)庫中的表。連接(JOIN)操作可以針對以下情況:同一數(shù)據(jù)庫中的兩個表或多個表;同一結(jié)點不同數(shù)據(jù)庫中的兩個表或多個表;不同結(jié)點上數(shù)據(jù)庫中的兩個表或多個表;
(5)查詢遠程數(shù)據(jù)庫中其他用戶的數(shù)據(jù)用戶在通過數(shù)據(jù)庫鏈路進行遠程查詢時,可以訪問其他用戶的數(shù)據(jù)。數(shù)據(jù)庫鏈路的定義中指定一個遠程用戶名及口令,這個用戶名被稱為鏈路用戶名。上面所述的“其他用戶”即指非鏈路用戶。如果鏈路用戶具有訪問其他某一用戶,記為用戶A的權(quán)限,那么,Client用戶就可以通過數(shù)據(jù)庫鏈路查詢服務器用戶A中的數(shù)據(jù)。
(6)遠程子查詢前面介紹的是基于主查詢的遠程訪問。事實上,SQL語句中的子查詢(Sub-query)也可以訪問遠程結(jié)點的數(shù)據(jù)庫數(shù)據(jù)。這種子查詢稱為遠程子查詢?汕度氩樵兊恼Z句有:SELECT INSERT UPDATE CREATE TABLE CREATE VIEW
5.遠程數(shù)據(jù)傳輸
目前網(wǎng)絡ORACLE系統(tǒng)尚不能通過INSERT,UPDATE語句更新遠程結(jié)點的數(shù)據(jù)庫數(shù)據(jù)。但是ORACLE提供結(jié)點之間傳輸數(shù)據(jù)庫數(shù)據(jù)的能力。SQL/plus的COPY命令將用于實現(xiàn)這一功能。用戶使用COPY命令可以進行從一個結(jié)點(稱為源結(jié)點)到另一結(jié)點(稱為目標結(jié)點)之間的數(shù)據(jù)傳輸或復制。使用COPY命令與數(shù)據(jù)庫鏈路的定義類似,需要反映定結(jié)點名、數(shù)據(jù)庫(即命令文件和“用戶名/口令”。其中源描述和目標描述分別用于指示源結(jié)點目標結(jié)點上的結(jié)點名、數(shù)據(jù)庫(即命令文件)和“用戶名/口令”,下面是COPY命令的基本形式:COPY[FROM源名][TO目標名] {APPEND|CREATE|INSERT|REPLACE} 表名[(列名[,列名…])] USING SELECT語句其中源名和目標名分別用于指定源結(jié)點和目標結(jié)點上的結(jié)點名、數(shù)據(jù)庫和“用戶名/口令”,如:用戶名/口令@驅(qū)動器前綴:結(jié)點名“““用戶名口令”””::“““TASK=ORDN后綴.COM”””;如果事先分配了邏輯名,則源描述和目標描述會變得更簡潔一些。如果源結(jié)點為本地,則COPY命令可略去FROM子句。如果目標結(jié)點為本地,則可除去TO子句。COPY命令將傳送數(shù)據(jù)到目標數(shù)據(jù)庫指定表。具體傳輸?shù)臄?shù)據(jù)是子查詢的結(jié)果。其中APPEND、CREATE、INSERT和REPLACE限定詞用于指定傳輸?shù)姆绞?APPEND 將傳輸?shù)臄?shù)據(jù)加在指定表中。如果該表不存在,則先建表,再加入;INSERT 將傳輸?shù)臄?shù)據(jù)加在指定的表中。如果該表不存在,則先建表,再加入數(shù)據(jù);CREATE 建立指定的表,并加入數(shù)據(jù),如果該表存在,則出錯;REPLACE 將傳輸數(shù)據(jù)替換原表中已有的數(shù)據(jù)。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |