oracle跨數據庫
發布時間:2021-10-31 09:40:501. Oracle如何實現跨數據庫查詢
網絡連通的情況下,可以使用DBLink
用戶名identifiedby密碼using
'(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.111)(PORT=1521))
)
(CONNECT_DATA=
(SERVICE_NAME=實例名)
)
)';
--查詢的時候直接使用
select*from用戶名.表名@db1;
2. 數據庫oracle的誇跨庫連接怎么弄,要注意什么
分布式查詢可能一條SQL語句中有不同遠程庫的表,相關概念lz可以網上查找,使用時注意下面幾點。
-
使用collocated內聯視圖—也就是sql要對引用不同遠程庫的表,要組織好,將相同庫的表放一起組織成內聯視圖,這樣oracle就很容易知道這個內聯視圖里的表是在同一遠程庫作完查詢
后再返回給本地庫,這樣減少了本地庫與遠程庫的交互次數和傳輸結果集的數量和次數。 -
了解cbo優化器對分布式查詢的處理(cbo也是盡量轉為collocated內聯視圖),它可能是不高效的,這時候得用其他的方法,比如使用HINT,改造SQL,改造分布式查詢的方法(遠程庫用視圖)等
-
使用hint,特別是driving_site hint(如:parallel,use_hash,full等,它能指定執行計划在遠程還是本地做),特別是本地小結果集,遠程大結果集的時候,總體結果集較小,希望計划在遠程驅動,這樣遠程執行完畢,將結果集傳輸到本地,這樣避免大結果集的傳輸。
lz還要學會看執行計划,這很重要,有問題再追問。
3. oracle跨庫操作
是可以的,方法很多。我就說幾種比較常用的方法吧。
1、在程序中實現:如 java 語言, 使用JDBC在B上連接C的數據庫.需要用到如下參數
Driver : oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:C的iP:1521:orcl
username : 連接數據庫的用戶名
password: 密碼
2、在B上使用工具 如(PLSQL Developer )
先在B上使用 oracle 的 net configuration assistant 工具(安裝完ORACLE后就有)配置C的數據庫連接,然后用 PLSQL Developer 連接就可以了 注意 數據庫這一欄要填剛才配置的別名 不是本地的數據庫名
4. oracle跨數據庫統計問題
A視圖和b表示一一對應的嘛?
有沒有可能一個項目號對應多個記帳號?
你說的直接統計c表:
直接統計select sum(金額)from c where 記賬類型=k and 日期=XXX
具體怎么統計的?你怎么知道遠遠大於?
你是直接統計的C表總數?
還有一種可能是你執行第一次查詢和第二次查詢中間表的數據發生了變化。
5. PL/SQL怎么建立跨庫(ORACLE)
Oracle dblink詳解
Oracle日常管理
database link概述
database link是定義一個數據庫到另一個數據庫的路徑的對象,database link允許你查詢遠程表及執行遠程程序。在任何分布式環境里,database都是必要的。另外要注意的是database link是單向的連接。
在創建database link的時候,Oracle再數據字典中保存相關的database link的信息,在使用database link的時候,Oracle通過Oracle Net用用戶預先定義好的連接信息訪問相應的遠程數據庫以完成相應的工作。
建立database link之前需要確認的事項:
確認從local database到remote database的網絡連接是正常的,tnsping要能成功。
確認在remote database上面有相應的訪問權限。
database link分類
類型Owner描述
Private 創建database link的user擁有該database link 在本地數據庫的特定的schema下建立的database link。只有建立該database link的schema的session能使用這個database link來訪問遠程的數據庫。同時也只有Owner能刪除它自己的private database link。
Public Owner是PUBLIC. Public的database link是數據庫級的,本地數據庫中所有的擁有數據庫訪問權限的用戶或pl/sql程序都能使用此database link來訪問相應的遠程數據庫。
Global Owner是PUBLIC. Global的database link是網絡級的,When an Oracle network uses a directory server, the directory server automatically create and manages global database links (as net service names) for every Oracle Database in the network. Users and PL/SQL subprograms in any database can use a global link to access objects in the corresponding remote database.
Note: In earlier releases of Oracle Database, a global database link referred to a database link that was registered with an Oracle Names server. The use of an Oracle Names server has been deprecated. In this document, global database links refer to the use of net service names from the directory server.
創建dblink所需的權限
PrivilegeDatabaseRequired For
CREATE DATABASE LINK Local Creation of a private database link.
CREATE PUBLIC DATABASE LINK Local Creation of a public database link.
CREATE SESSION Remote Creation of any type of database link.
database link的使用
基本語法
CREATE [SHARED][PUBLIC] database link link_name
[CONNECT TO [user][current_user] IDENTIFIED BY password]
[AUTHENTICATED BY user IDENTIFIED BY password]
[USING 'connect_string']
說明:
1) 權限:創建數據庫鏈接的帳號必須有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系統權限,用來登錄到遠程數據庫的帳號必須有CREATE SESSION權限。這兩種權限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK權限在DBA中)。一個公用數據庫鏈接對於數據庫中的所有用戶都是可用的,而一個私有鏈接僅對創建它的用戶可用。由一個用戶給另外一個用戶授權私 有數據庫鏈接是不可能的,一個數據庫鏈接要么是公用的,要么是私有的。
2)link : 當source端的數據庫GLOBAL_NAME=TRUE時,link名必須與遠程數據庫的全局數據庫名global_name)相同;否則,可以任意命名。
3)current_user使用該選項是為了創建global類型的dblink。在分布式體系中存在多個數據庫的話。如果想要在每一個數據庫中都可以使用同樣的名字來訪問數據庫a,那在每個數據庫中都要創建一個到數據庫a的db_link,太麻煩了。所以現在有這個選項。你只要創建一次。所有的數據庫都可以使用這個db_link來訪問了。要使用這個特性,必須有oracle nameserver或者ORACLE目錄服務器。並且數據庫a的參數global_names=true.具體我也沒有創建過,沒有這個環境。
4)connectstring:連接字符串,tnsnames.ora中定義遠程數據庫的連接串,也可以在創建dblink的時候直接指定。
5)username、password:遠程數據庫的用戶名,口令。如果不指定,則使用當前的用戶名和口令登錄到遠程數據庫,當創建connected user類型的dblink時,需要如果采用數據字典驗證,則需要兩邊數據庫的用戶名密碼一致。
創建database link選項說明
取值說明
不指定 默認值建立一個dedicated的連接,每一個使用database link的本地session都會對應有一個遠程數據庫的session。
SHARED 創建一個共享的數據庫連接,同時要指定database link_authentication。
使用shared方式的 database link是數據庫會限制到遠程數據庫的連接的數量,這樣以避免過多的連接對遠程數據庫造成太大的壓力。在使用shared database link的時候,到database link的連接會在連接以后與本地連接斷開,為防止未授權的session使用此鏈接而要求在創建shared database link的時候必須要指定database link_authentication。
(from Oracle document: A shared database link is a link between a local server process and the remote database. The link is shared because multiple client processes can use the same link simultaneously.)
共享鏈接更多資料
共享數據庫鏈接是指該鏈接的多個用戶可以共享同一個底層網絡連接。例如,在有四位用戶的MTS(多線程服務器)環境下,每一個共享服務器進程都將與遠程服務器有一個物理鏈接,這四位用戶共享這兩個鏈接。
表面上,共享鏈接乍一聽起來像是一件好事。在某些環境下的確如此,但是,當你考慮使用共享鏈接時,應當意識到這有許多局限性和警告:
如果你使用一個專用的服務器連接來連接到你的本地數據庫,鏈接只能在你從那些連接中創建的多重會話間共享 。在MTS環境里,每一個共享服務器進程潛在地打開一個鏈接。所有的會話被同一共享服務器進程提供並且分享被那個進程打開的任意共享鏈接。因為在MTS環境里的一個共享服務器進程能夠服務於許多用戶連接,共享鏈接的使用可能導致打開的鏈接遠多於所必須的鏈接。用SHARED關鍵字建立共享數據庫鏈接。還必須使用AUTHENTICATED BY 子句在遠程系統上指定一有效的用戶名和口令。如下命令建立一個共享的、公用的、連接用戶數據庫鏈接:
CREATE SHARED PUBLIC database link GNIS
AUTHENTICATED BY DUMMY_USER IDENTIFIED BY SECRET
USING ‘GNIS’;
要獲得創建鏈接和管理分布式系統的更多資料,請查閱Oracle Technology Network (http://otn.oracle.com/)。
使用AUTHENTICATED BY子句稍微有些困擾,但是由於實現共享鏈接的方式安全性決定它是必須的。這個例子中的用戶名和口令DUMMY_USER/SECRET必須在遠程系統上有效。然而,遠程系統上使用的帳戶仍就是連接用戶的帳戶。如果我以JEFF/SECRET登陸到我的本地數據庫並使用我剛建好的共享鏈接,將會發生以下一系列事件:
為了打開鏈接,Oracle使用DUMMY_USER/SECRET向遠程數據庫授權。然后,Oracle試圖使用HMAD/SECRET使我登陸到遠程數據庫。共享鏈接的主要目的是減少兩個數據庫服務器之間的底層網絡連接數量。它們最適合於MTS環境,在那你擁有大量的通過這一鏈接訪問遠程數據庫的用戶。觀念上,你想讓用戶數量超過共享服務器進程的數量。那么你可以通過為每一共享服務器進程打開一個鏈接而不是每位用戶打開一個鏈接的方法,節省資源。
database link使用方式
取值說明
不指定 默認值建立一個private的database link
PUBLIC 公共連接,這樣的連接可以被數據的所有的用戶訪問
database link用戶驗證方法
取值說明
不指定 默認值采取Connected User的驗證方法
CONNECT TO CURRENT_USER 采取CURRENT_USER的驗證方式
CONNECT TO user_name IDENTIFIED BY password 采取Fiexed User的驗證方式
database link創建舉例
SQL StatementConnects To DatabaseConnects AsLink Type
CREATE database link
sales.us.americas.acme_auto.com USING ‘sales_us’; sales using net service name sales_us Connected user Private connected user
CREATE database link foo
CONNECT TO CURRENT_USER USING
‘am_sls’; sales using service name am_sls Current global user Private current user
CREATE database link
sales.us.americas.acme_auto.com
CONNECT TO scott IDENTIFIED
BY tiger USING ‘sales_us’; sales using net service name sales_us scott using password tiger Private fixed user
CREATE PUBLIC database link
sales CONNECT TO scott
IDENTIFIED BY tiger USING ‘rev’; sales using net service name rev scott using password tiger Public fixed user
CREATE SHARED PUBLIC database link
sales.us.americas.acme_auto.com
CONNECT TO scott IDENTIFIED
BY tiger AUTHENTICATED BY
anupam IDENTIFIED BY bhide USING ‘sales’; sales using net service name sales scott using password tiger, authenticated as anupam using password bhide Shared public fixed user
不使用TNS Name一例:
CREATE database link link_name
CONNECT TO user IDENTIFIED BY screct
USING '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = sales.company.com)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = sales)
)
)';
database link的使用
-- 最簡單的用法
SELECT * FROM table_name@database link;
-- 不想讓使用的人知道database link的名字的時候
-- 建一個別名包裝一下
CREATE SYNONYM table_name FOR table_name@database link;
SELECT * FROM table_name;
-- 或者,也可以建立一個視圖來封裝
CREATE VIEW table_name AS SELECT * FROM table_name@database link;
database link刪除
-- 刪除public類型的database link
DROP PUBLIC database link link_name;
-- 刪除非public類型的database link
-- 注意:只有owner自己能刪除自己的非public類型database link
DROP database link link_name;
查看database link的信息
查看系統database link的基本信息
DBA_DB_LINKS (ALL_DB_LINKS/USER_DB_LINKS)
DBA_DB_LINKS視圖為每一定義的鏈接返回一行。OWNER 列和DB_LINK列分別顯示了這一鏈接的所有者及名稱。對公用數據庫鏈接,OWNER列將包含’PUBLIC’。如果你建立固定用戶鏈接,用戶名應在DBA_DB_LINKS視圖的USERNAME列里。ALL_DB_LINKS 視圖和 USER_DB_LINKS視圖與 DBA_DB_LINKS視圖相類似-它們分別顯示了你能夠訪問的所有鏈接及你所擁有的全部鏈接。
COL OWNER FOR A15
COL DB_LINK FOR A25
COL HOST FOR A25
COL USERNAME FOR A15
SELECT * FROM DBA_DB_LINKS;
DBA_OBJECTS (ALL_OBJECTS/USER_OBJECTS)
在這個視圖里面只能查詢到系統有那些database link以及他們的owner,創建時間等信息。
COL OWNER FOR A15
COL OBJECT_NAME FOR A25
COL OBJECT_TYPE FOR A25
SELECT OWNER,OBJECT_NAME,OBJECT_TYPE FROM DBA_OBJECTS WHERE OBJECT_TYPE LIKE 'database link';
查看保存的Fixed user database link所保存的用戶密碼,該密碼是經過加密的。
這是比較危險的一件事,有必要對表sys.link$的權限進行限制。
col host for a15
col userid for a15
col passwordx for a40
col name for a20
select name, host, userid, passwordx from sys.link$;
通過database link去SELECT遠程數據庫的一個表也是一個事務嗎?
select * from v$transaction;
-- 沒有記錄,說明沒有事務
-- 通過database link連接遠程數據庫,select 其中一個表
select * from bbs_news@mylink
select * from v$transaction;
-- 發現有一條記錄。
解釋
因為本地數據庫只是將對應的sql發送給遠程數據庫執行,接受remote db返回的結果,但他並不知道是否該sql修改了數據; 所以需要為select 語句也標示一個事務。
具體可以參考otn 分布式數據庫手冊,所以在用database link遠程訪問時,要加上set transaction read only;
close database link
ALTER SESSION CLOSE database link sales;
其實,dblink的相應屬性對應了Oracle的數據字典link$,任何針對dblink的操作都是操作該數據字典。在9i的時候,如果Oracle的global_name僅包括db_name,也就是說DB_DOMAIN的值為空。那么這個時候建立的數據庫鏈,在數據庫修改全局名GLOBAL_NAME之后(修改為db_name.db_domain格式),會無法刪除。
如果要產生數據庫鏈,必須將GLOBAL_NAME改回DB_NAME格式,即去掉后面的DOMAIN,但是這個時候,RENAME操作會自動添加域名,使得Oracle全局名無法恢復到初始狀態。因此在這情況下,如果需要刪除dblink,只能直接操作link$數據字典
delete from link$ where owner#=user_id and name=dblink_name
當然直接操作數據字典是危險的,最好做好備份,然后再進行操作。
利用dblink執行ddl
我們知道任何ddl語句都無法在dblink中直接執行,示例如下
SQL> desc db_test;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER(38)
SQL> drop table db_test@DBLINK_CONNECTED_HR;
drop table db_test@DBLINK_CONNECTED_HR
*
ERROR at line 1:
ORA-02021: DDL operations are not allowed on a remote database
通過創建存儲過程,使得能在dblink中執行ddl語句。 注意需在目標數據庫的相應用戶下創建存儲過程 ,具體如下
SQL> exec dbms_utility.EXEC_DDL_STATEMENT@dblink('drop table db_test')
PL/SQL procere successfully completed.
SQL> desc db_test;
ERROR:
ORA-04043: object db_test does not exist
dblink的限制
You cannot perform the following operations using database links:
Grant privileges on remote objects
Execute DESCRIBE operations on some remote objects. The following remote objects, however, do support DESCRIBE operations:
Tables
Views
Proceres
Functions
Analyze remote objects
Define or enforce referential integrity
Grant roles to users in a remote database
Obtain nondefault roles on a remote database. For example, if jane connects to the local database and executes a stored procere that uses a fixed user link connecting as scott, jane receives scott's default roles on the remote database. Jane cannot issue SET ROLE to obtain a nondefault role.
Execute hash query joins that use shared server connections
Use a current user link without authentication through SSL, password, or NT native authentication
轉自http://czmmiao.iteye.com/blog/1236562
作者:czmmiao
6. oracle 跨庫查詢的幾種方法
oracle 跨庫查詢都必須使用DBLINK,通過DBLINK連接到其它數據庫;然后在這個基礎上才有不同的訪問方式;
1、同義表,通過在DBLINK上建立同義表將其它數據庫的表映射到該庫中,然后就可以直接操作映射表;
2、關聯,在表名后面標明數據來源,如emp@ORCL,表示emp表是數據庫ORCL上的表。
7. 如何跨Oracle數據庫實現表級別的實時同步
一. 前言
這個問題是上一篇文章《Oracle跨數據庫實現定時同步指定表中的數據》中所提問題的進一步延伸。考慮到對數據的實時性要求比較高,設置成定時同步,有點不妥,需要改善升級更改為實時同步。
下面介紹到的方式,嚴格意義上說,並沒有實現實時同步。是通過Oracle數據庫創建同義詞+DBlink的方式,來建立遠程映射。在查看數據時,直接去遠程查詢源庫中的表。
而我一直關注的是如何進行同步數據,卻沒有考慮到可以建立映射。另外,還有一點就是需要交代,就是同步到目標數據庫中的表,不進行增刪改操作,只進行查詢的操作,這也是可以使用同義詞方式解決問題的關鍵。
這種解決思路的出現,多虧了在CSDN問答時,熱心網友的回答,下面就是問題詳情描述。
二. 問題描述
有兩個Oracle數據庫,分別布置在不同的服務器上,系統均為windows2003;
這里暫且說成是一個主數據庫和從數據庫:
(1) 主數據庫:oracle_A;
(2) 從數據庫:oracle_B;
在oracle_A中有一個表table_A與oracle_B中的表table_B結構相同;
我是處在oracle_B,oracle_A數據庫分配給我有一個訪問oracle_A表table_A的用戶,該用戶只擁有查詢的權限;
另外,需要說明的一點,就是在oracle_B處,只需對table_B表進行查詢的操作,不進行其他增刪改的操作。
場景介紹完了,我的問題的是,如何在oracle_A中表table_A發生變化時,實時更新同步到oracle_B的table_B中?
我原來的處理方式:
通過建立遠程連接DBLink+JOB定時任務+存儲過程的方式,實現了定時同步更新,但不能做到實時同步。
三. 采用同義詞+DB_Link的方式結果步驟
之所以能夠選擇采用同義詞的方式,處理這個問題。主要還是源於在問題描述中提到一個點,那就是我們只需要對同步后的表進行查詢操作。這點是使用同義詞方式的重要要素。
下面詳細模擬一下整個實驗測試的過程:
(1)首先在Oracle_A端創建一個對table_A只有查詢功能的用戶
<1> 創建用戶
sqlplus /nolog
conn /as sysdba;
create user username identified by password;
<2> 查看所有的用戶列表
用戶創建完成后,查看用戶是否創建成功
select * from all_users;
<3>授予權限
為了能夠保證能夠登陸,必須賦予如下權限
--授予username用戶創建session的權限,即登陸權限
grant create session to username;
--授予username用戶使用表空間的權限
grant unlimited tablespace to username;
--oracle對權限管理比較嚴謹,普通用戶之間也是默認不能互相訪問的,需要互相授權.
--如果scott用戶要授權給username用戶查看自己的test表的權限;
sqlplus scott/tiget@localhost:1521/orcl
--授予username用戶查看指定的權限
grant select on test to username;
--撤銷權限
基本語法同grant,關鍵字為revoke;
(2)驗證用戶是否可以成功登錄,並進行訪問授權的表
--使用sqlplus登錄,並進行查詢
sqlplus username/password@localhost:1521/orcl;
select * from scott.test;
注意:查詢表時,務必帶上用戶名,說明是哪個用戶下的表。
(3)創建遠程連接DB_Link
<1> 創建遠程連接 db_link
create public database link db32connect to tian_test identified by "tian_test" using '192.168.56.6:1521/ORCL'
<2> 測試遠程連接是否成功
select * from tian_smart.zh_item_news@db32;
(4)在Oracle_B端創建同義詞
<1> 使用sqlplus登錄自己的用戶
sqlplus tian_smart/tian_smart@localhost:1521/orcl
<2> 創建同義詞
create or replace public synonym TEST1130 for scott.TEST@db32;
<3> 查詢測試
select * from TEST1130;
可以看到這與在Oracle_A源數據庫中查到的table_A表中的數據一樣.
注意事項:
當遠程查詢的數據庫中包含BLOB字段時,會報出如下錯誤.
ORA-22992: 無法使用從遠程表選擇的 LOB 定位器
當出現這個錯誤的時候,那是因為跨庫連接查詢中的表中存在BLOB類型的字段,所以一定要注意,所有表中存在blob類型字段,
不能用 select * from 連接的表
不能將blob類型的字段出現在腳本中。
如果這些blob類型的字段一定要導過來,可以先建立臨時表再插入本地表,方法如下.在pl/sql中執行
第一步 建臨時表
create global temporary table foo ( X BLOB )
on commit delete rows;
第二步 插入本地表
insert into foo select blobcolumn from remoteTable@dl_remote ;
8. oracle同服務器,跨數據庫訪問,有什么簡單的
-
使用collocated內聯視圖—也就是sql要對引用不同遠程庫的表,要組織好,將相同庫的表放一起組織成內聯視圖,這樣oracle就很容易知道這個內聯視圖里的表是在同一遠程庫作完查詢后再返回給本地庫,這樣減少了本地庫與遠程庫的交互次數和傳輸結果集的數量和次數。
-
了解cbo優化器對分布式查詢的處理(cbo也是盡量轉為collocated內聯視圖),它可能是不高效的,這時候得用其他的方法,比如使用HINT,改造SQL,改造分布式查詢的方法(遠程庫用視圖)等
-
使用hint,特別是driving_site hint(如:parallel,use_hash,full等,它能指定執行計划在遠程還是本地做),特別是本地小結果集,遠程大結果集的時候,總體結果集較小,希望計划在遠程驅動,這樣遠程執行完畢,將結果集傳輸到本地,這樣避免大結果集的傳輸。
9. Oracle數據庫怎樣跨庫查詢
在ORACLE里A庫里建立一個同義詞可把B庫的X 表映射到A庫。這樣A庫就當本庫的表(虛擬式)使用。
Oracle的同義詞(synonyms)從字面上理解就是別名的意思,和試圖的功能類似,就是一種映射關系。本文介紹如何創建同義詞語句,刪除同義詞以及查看同義詞語句。
oracle的同義詞總結:
從字面上理解就是別名的意思,和試圖的功能類似。就是一種映射關系。
1.創建同義詞語句:
create public synonym table_name for user.table_name;
其中第一個user_table和第二個user_table可以不一樣。
此外如果要創建一個遠程的數據庫上的某張表的同義詞,需要先創建一個Database Link(數據庫連接)來擴展訪問,然后在使用如下語句創建數據庫同義詞:create synonym table_name for table_name@DB_Link;
當然,你可能需要在user用戶中給當前用戶(user2)授權: grant select/delete/update on user2
10. sql怎樣跨數據庫查詢oracle
假定您現在擁有一個以Microsoft.NET為架構的網絡訂購系統,但是品管維護系統卻仍然使用一套舊式的Oracle數據庫應用程序。當您的顧客在產品保固期間下了產品更換之類的訂單,則該筆訂單將不收取任何費用。此時您需要從Oracle數據庫得到實時的查詢結果。借着建立連結服務器的方式(linkedServer),您將可以從SQLServer實時查詢出位於Oracle數據庫的顧客資料,找出誰是您既有的客戶。
當您的資料分散在不同的SQLServer數據庫時,藉由連結服務器可讓您執行跨服務器之分布式查詢。當所有的數據庫服務器都是SQLServer,則連結服務器的設定十分容易,而且在SQLServer線上手冊中就涵蓋了您所需要了解的所有事項。然而,當部分資料是放在Oracle數據庫服務器的時候,這就可能帶給您許多挑戰。舉例來說,光是設定連結服務器就不是一件容易的事。您必須了解到:即是您要在SQLServer的EnterpriseManager設定一個Oracle連結服務器,這台SQLServer對Oracle來說就是一個客戶端。所以您必須在SQLServer所在的服務器成功地安裝並組態Oracle之客戶端軟件。因為Oracle提供的產品只支持Oracle8以后的數據庫,所以我假設您正在使用的都是Oracle8以后的數據庫。在OracleNet8函式庫則提供了SQLServer所需要的客戶端軟件。
設定連接服務器時是利用Microsoft所提供的OLEDB ProviderforOracle,使用的Oracle網絡函式庫為SQL*Net2.3.3.0.4或是以后的版本,不過這是Oracle7.3數據庫所提供的。換句話說,要設定Oracle數據庫為SQLServer的連接服務器時,Oracle數據庫只要是7.3.3.4以后的版本,並搭配適當的SQL*Net或是Net8函式庫即可。
在Oracle數據庫中,一個schema即代表着SQLServer專家們所熟知的單一數據庫(譯者注2)。連接至Oracle數據庫時,您必須提供schema名稱、密碼以及主機聯機字符串(hoststring)。每一個特定的Oracle帳戶都擁有一個Oracleschema,而且只能有一個schema。所以schema名稱其實就等於該schema擁有者的帳戶名稱。您可以查詢Oracle的資料字典(Datadictionary)以得到更多有關schema的內容。
至於Oracle聯機字符串又可稱為服務名稱(servicename)或是系統識別資料(SystenIdentifier,SID)。我們所謂的SQLServer數據庫個體(instance)在Oracle則稱為數據庫(database)。所以安裝OracleServer時,安裝程序OracleUniversalInstaller(為一個圖形接口之安裝程序,與SQLServer的Setup程序類似)將會詢問您SID名稱為何,以作為Oracle數據庫之名稱。
這個部分原作者所提到schema的解釋有點問題。Oracleschema可視為同一個使用者所擁有的所有數據庫對象(schemaobjects)之集合。舉例來說,使用者scott所建立的EMPtable其完整名稱為SCOTT.EMP,而SCOTT就是EMP的schema名稱。所以schemaname其實就是一個Oracle數據庫之使用者帳號。但是絕對不能拿來跟數據庫相提並論!因為SQLServer的數據庫架構包含了datafiles與logfiles,但是Oracle的schemaobjects只存在於tablespace中。為了避免部分讀者產生混淆,特此說明。
