1. 程式人生 > 資料庫 >SQL Server 2008資料庫分散式查詢知識

SQL Server 2008資料庫分散式查詢知識

在接觸公司一個系統時,公司使用的是SQL Server 2008資料庫,裡面涉及到了多個數據庫之間的查詢,而且資料庫是分散式的,資料庫分佈在多臺伺服器之間,並且各個資料庫各盡其責,負責存放不同模組功能的資料。這裡面就要涉及到了資料庫的分散式查詢。

補充一下分散式查詢的知識:

分散式查詢從多異類資料來源中訪問資料。這些資料來源可以儲存在同一臺計算機或不同的計算機上。MicrosoftSQL Server 通過使用 OLE DB 來支援分散式查詢。

SQL Server 使用者可以使用分散式查詢訪問以下內容:

  • 儲存在多個 SQL Server 例項中的分散式資料。
  • 儲存在各種可以使用 OLE DB 訪問介面訪問的關係和非關係資料來源中的異類資料。

OLE DB 訪問介面將在稱為行集的表格格式物件中公開資料。SQL Server 允許在 Transact-SQL 語句中像引用 SQL Server 表一樣引用 OLE DB 訪問介面中的行集。

外部資料來源中的表和檢視可以在 SELECT、INSERT、UPDATE 和 DELETE Transact-SQL 語句中直接引用。因為分散式查詢使用 OLE DB 作為基本介面,因此它們不僅可以訪問帶有 SQL 查詢處理器的傳統 DBMS 系統,也可以訪問複雜的、具有不同功能的資料來源所管理的資料。只要擁有資料的軟體通過 OLE DB 訪問介面在表格格式行集中公開其資料,就可在分散式查詢中使用此資料

因為公司的業務要經常使用不同伺服器上的資料庫,所以公司的資料庫都建立了一堆的連結伺服器。通過建立這些連結伺服器,就可以使用這些連結伺服器的別名來簡化SQL語句的編寫和sql開銷;

使用SQL SERVER 2008管理工具可以直接介面化的新增連結伺服器;這裡給出使用sql語句,利用系統儲存過程來新增連結伺服器的方法,這裡要用到兩個儲存過程:

sp_addlinkedserver
sp_addlinkedsrvlogin

一個是新增連結伺服器,一個是新增連結伺服器連線登陸驗證;具體此兩個儲存過程引數含義,請參考微軟手冊;注意,執行此儲存過程登陸的使用者必須要有Sysadmin許可權才能執行;

假設現在在10.155.25.100 上的db中要使用10.155.24.101上一個 FlieDB01表中的資訊;則在10.155.25.100上進行如下SQL 語句:

exec sp_addlinkedserver
@server='SZDB01',--要新增的連線伺服器的別名
@srvproduct='',@provider='SQLOLEDB',--指定通過SQLOLEDB連結
@datasrc='10.155.24.101'--DB地址
exec sp_addlinkedsrvlogin
'SZDB01',--連線伺服器的別名
'false',NULL,'szUSER',--登陸使用者名稱
'Password@123'--登陸密碼
--執行完之後就可以寫這樣的查詢語句了
select * from openquery([SZDB01],'select file_No,file_Name from FileDB01.dbo.getFileList()') as tableA --這裡的DZDB01就是上面新增的連線伺服器的別名

有多個就新增多個連線伺服器;這是其中的一種;

還有一種就是使用opendatasource,這是SQL的一個函式,其能夠開啟指定的DB,而且這個函式的執行許可權很低,技術手冊中說任何人都可以執行此函式;這個函式也是hacker常用的資料爆表的一個手段;目前檢視SQL Server 2008的手冊中,其說明還是說所有人都有許可權執行;

這個函式只能是不常用的查詢中會用到;

舉一個簡單的例子:

select * from opendatasource('SQLOLEDB','Data Source=10.155.24.100;User ID="szUSER";Password="Password@123"') as tableA

這個也是對上面的一種實現;

opendatasource還可以直接開啟mdb這類檔案。這種我就沒有去試驗了,技術從書中有說明;

select * from opendatasource('Microsoft.Jet.OLEDB.4.0','Data Source="d:/abcd.mdb"') 

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對我們的支援。如果你想了解更多相關內容請檢視下面相關連結