1. 程式人生 > >(4.18)SQL server 2008一些常見配置之二(鏈接服務器配置,訪問其他數據庫)

(4.18)SQL server 2008一些常見配置之二(鏈接服務器配置,訪問其他數據庫)

修改 beta pro ntp 查看版本 collation chang 手工 lin

SQL server 2008一些常見配置之二(鏈接服務器配置,訪問其他數據庫)

一、訪問Oracle數據庫

Oracle是目前排名第一的數據庫,一般對數據安全和性能要求極高的公司都會選擇它。下面一起學習一下如何通過SQL server來訪問Oracle數據庫數據和一些註意事項。

技術分享圖片

DB-Engines 發布了 2018 年數據庫排名,排前10 名的數據庫中,Oracle 穩居第一。

技術分享圖片

(一)先在SQL server服務器安裝Oracle客戶端

要訪問Oracle數據庫,必須先安裝Oracle客戶端,並配置好tnsnames.ora文件,SQL server也不例外,具體安裝辦法可以百度【Oracle客戶端安裝辦法】,比較簡單,這裏不做贅述。

假設tnsnames.ora文件內容為

itower_241 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 101.241.241.241)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = prod)
)
)

(二)通過增加數據源(ODBC)辦法驗證Oracle服務器是否可以正常訪問。

1.打開路徑:控制面板->管理工具->數據源(ODBC)

技術分享圖片

或者直接運行:cmd->ODBC

技術分享圖片

2.Oracle客戶端正常安裝的話,這裏就會出現“Oracle in OraDB12Home1”選項。

技術分享圖片

3.註意填寫規範,TNS這裏填寫的是tnsnames.ora裏面的服務器配置。數據源名、描述可以隨便起一個或者不填,現在只是為了驗證是否可以正常訪問Oracle數據庫,我們不通過ODBC名字來訪問,而是通過tnsnames.ora配置的服務器名字來訪問。直接點“測試連接”,輸入賬戶和密碼,點確認(OK)。

技術分享圖片

4.測試成功提示:

技術分享圖片

如果測試失敗,請根據失敗提示仔細檢查tnsnames.ora和Oracle客戶端安裝情況。

5.或者通過PL/SQL來驗證:

技術分享圖片

(三)在SQL server配置Oracle鏈接服務器

服務器對象->鏈接服務器(右鍵)->新建鏈接服務器

技術分享圖片

1.鏈接服務器(名稱):ORACLE1(在SQL查詢時用到)

2.訪問接口:選擇 Oracle Provider for DLE DB

3.數據源:為tnsnames.ora所配置的Oracle服務器名稱

技術分享圖片

註意:這裏的數據源也可以使用通過ODBC設置的數據源,殊途同歸。

4.安全性:輸入Oracle賬戶和密碼

技術分享圖片

5.點確定後,即開始驗證接口的合規性和合法性。如果驗證通過的話會自動關閉這個窗口,並在鏈接服務器出現【ORACLE1】這個接口,說明配置基本完成,如果沒通過會出現具體的錯誤提示。

技術分享圖片

(1)可以逐層打開查看Oracle服務器對象。

技術分享圖片

(2)在這裏可以查看到完整的建立鏈接服務器的SQL腳本

技術分享圖片


/****** Object: LinkedServer [ORACLE1] Script Date: 09/17/2018 12:48:37 ******/
EXEC master.dbo.sp_addlinkedserver @server = N‘ORACLE1‘, @srvproduct=N‘ORACLE‘, @provider=N‘OraOLEDB.Oracle‘, @datasrc=N‘itower_241‘
/* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N‘ORACLE1‘,@useself=N‘False‘,@locallogin=NULL,@rmtuser=N‘ITOWER_VIF_gxfgs‘,@rmtpassword=‘########‘

GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘collation compatible‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘data access‘, @optvalue=N‘true‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘dist‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘pub‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘rpc‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘rpc out‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘sub‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘connect timeout‘, @optvalue=N‘0‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘collation name‘, @optvalue=null
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘lazy schema validation‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘query timeout‘, @optvalue=N‘0‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘use remote collation‘, @optvalue=N‘true‘
GO

EXEC master.dbo.sp_serveroption @server=N‘ORACLE1‘, @optname=N‘remote proc transaction promotion‘, @optvalue=N‘true‘
GO

註意:當然,這裏的 @rmtpassword 顯示的是加密後的數據,還需使用者自行修改為真正的密碼。

6.訪問數據驗證:

(1)SQL server訪問Oracle的語法一般有兩種方式:

1)PL/SQL語法格式:這裏使用的是PL/SQL的語法,比如PL/SQL特有的rownum、rowid等在這裏都能用上。

select * 
from openquery(ORACLE1,‘select rowid,a.* from itower.v_if_prov_org_gxfgs a where rownum<100‘);

技術分享圖片

--查看Oracle版本
select * from openquery(ORACLE1, ‘select * from v$version‘);

技術分享圖片

註意:這裏用到的是 ORACLE1 這個名稱,在建立鏈接服務器的時候要特別留意。

2)SQL server語法格式:

select top 10 *
from [ORACLE1]..[ITOWER].[V_IF_PROV_ORG_GXFGS]
go

技術分享圖片

如果忘記語法,可以這樣去查看:

技術分享圖片

(2)註意事項:SQL server不支持Oracle一些特殊字段類型,如果Oracle存在特殊要極其留意。

1)訪問失敗的例子一:

select * from openquery(ORACLE1,‘select * from itower.v_if_prov_station_gxfgs where rownum<100‘);

技術分享圖片

2)訪問失敗的例子二:

select top 10 *
from [ORACLE1]..[ITOWER].v_if_prov_station_gxfgs

技術分享圖片

3)此時,表名(V_IF_PROV_STATION_GXFGS)應用大寫

select top 10 *
from [ORACLE1]..[ITOWER].V_IF_PROV_STATION_GXFGS

技術分享圖片

這樣可以得到準確的錯誤提示:GEOMETRY 這個字段的數據類型SQL server不支持。在獲取這個表信息的時候,就應避開或轉換為SQL server支持的格式。

7.或者你很懶幹脆不想建立鏈接服務器,想直接訪問Oracle,可以通過函數openrowset來實現。

select * 
from openrowset(‘OraOLEDB.Oracle‘,‘itower_241‘;‘<Oracle賬戶>‘;‘<Oracle賬戶密碼>‘,
‘select * from itower.v_if_prov_org_gxfgs‘)

技術分享圖片

註意:<Oracle賬戶> <Oracle賬戶密碼>需要您手工填寫。

8.刪除鏈接服務器:刪除就比較簡單了,在鏈接服務器名稱->右鍵->刪除即可,或者使用腳本刪除:

USE [master]
GO
/****** Object: LinkedServer [ORACLE1] Script Date: 09/17/2018 13:02:24 ******/
EXEC master.dbo.sp_dropserver @server=N‘ORACLE1‘, @droplogins=‘droplogins‘
GO

SQL server 訪問Oracle數據庫就一起學習到這裏。

二、訪問MySQL數據庫

MySQL數據庫由於免費性和開源性,近年來普及非常迅速,MySQL還支持linux下的安裝,所以得到很多人的青睞,其排名第二名,有趕上Oracle數據庫的趨勢。

技術分享圖片

(一)先安裝MySQL驅動。

建議在官網下載:

http://dev.mysql.com/downloads/connector/odbc/

(二)在ODBC增加MYSQL數據源(上面有詳細講述,這裏簡略說明),測試是否可以正常訪問MySQL服務器。

1.註意點:

(1)是系統DSN,不是用戶DSN。

(2)驅動程序選擇:MYSQL ODBC 5.3 Unicode DRIVER

技術分享圖片

2.輸入數據源名稱、IP、賬戶和密碼,並點測試(test)。

技術分享圖片

測試成功後,可以在這裏選擇默認數據庫。

技術分享圖片

技術分享圖片

(二)在SQL server配置MySQL server的鏈接服務器

1.鏈接服務器(名稱):TO_MYSQL34(在SQL查詢時用到)

2.訪問接口:選擇 Microsoft OLE DB Provider for ODBC Drivers

3.數據源:填寫ODBC所配置的數據源名稱 MYSQL34

技術分享圖片

註意:如果不配置ODBC的話,也可以直接在“訪問接口字符串”進行設置,同時“數據源”留空,但這樣容易暴露數據庫賬戶和密碼,不利於賬戶安全性管理:

Driver={MySQL ODBC 5.3 Unicode Driver};Server=<MySQL服務器IP>;Database=<實例名>;User=<數據庫賬戶>;Password=<數據庫密碼>;Option=3;

4.安全性設置

技術分享圖片

5.點確定後,即開始驗證接口的合規性和合法性。如果驗證通過的話會自動關閉這個窗口,並在鏈接服務器出現【TO_MYSQL34】這個接口,說明配置基本完成,如果沒通過會出現具體的錯誤提示。

6.創建腳本

/****** Object:  LinkedServer [TO_MYSQL34]    Script Date: 09/17/2018 16:58:22 ******/
EXEC master.dbo.sp_addlinkedserver @server = N‘TO_MYSQL34‘, @srvproduct=N‘MySQL‘, @provider=N‘MSDASQL‘, @datasrc=N‘MYSQL34‘
/* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N‘TO_MYSQL34‘,@useself=N‘False‘,@locallogin=NULL,@rmtuser=N‘ttgl‘,@rmtpassword=‘########‘

GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘collation compatible‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘data access‘, @optvalue=N‘true‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘dist‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘pub‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘rpc‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘rpc out‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘sub‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘connect timeout‘, @optvalue=N‘0‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘collation name‘, @optvalue=null
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘lazy schema validation‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘query timeout‘, @optvalue=N‘0‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘use remote collation‘, @optvalue=N‘true‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_MYSQL34‘, @optname=N‘remote proc transaction promotion‘, @optvalue=N‘true‘
GO

註意:當然,這裏的 @rmtpassword 顯示的是加密後的數據,還需使用者自行修改為真正的密碼。

7.訪問數據驗證:和訪問Oracle語法差不多,又有一定區別。

--查看版本
select * from openquery(TO_MYSQL34, ‘select @@version‘);

技術分享圖片

--查詢
select top 10 * from openquery(TO_MYSQL34, ‘select * from zxhc_image‘);

--理論上可以跨服務器進行增、刪、改操作,但極不贊同這麽操作,要修改的話建議直接到對端服務器去修改。

--修改
update openquery(TO_MYSQL34, ‘select * from zxhc_image where image_id = 1319 and 1=2 ‘) set [status] = ‘2‘;
--or
update openquery(TO_MYSQL34, ‘select * from zxhc_image ‘) set [status] = ‘2‘ where image_id = 1319;

--添加
insert into openquery(TO_MYSQL34, ‘select * from zxhc_image where 1=0‘) values (‘11‘,‘22‘,‘22‘);

--刪除
delete from openquery(TO_MYSQL34, ‘select * from zxhc_image where image_id = 1319 ‘);

技術分享圖片

8.刪除鏈接服務器腳本(或鏈接服務器名稱->右鍵->刪除)

USE [master]
GO
/****** Object: LinkedServer [TO_MYSQL34] Script Date: 09/17/2018 16:58:15 ******/
EXEC master.dbo.sp_dropserver @server=N‘TO_MYSQL34‘, @droplogins=‘droplogins‘
GO

三、訪問其它SQL server數據庫

SQL server數據庫排名第三名,是微軟公司的產品,只能在Windows上安裝,但對同樣是微軟公司產品的Execl支持相當好,這是一個重要優勢,適合初學者選用。

技術分享圖片

(一)在SQL server配置其它SQL server的鏈接服務器

1.常規配置:鏈接服務器名稱為

1.鏈接服務器(名稱):TO_SQL33(在SQL查詢時用到)

2.訪問接口:選擇 Microsoft OLE DB Provider for SQL Server

3.數據源:直接填寫SQL server服務器IP即可

技術分享圖片

4.安全性:輸入賬戶和密碼,確定

技術分享圖片

5.點確定後,即開始驗證接口的合規性和合法性。如果驗證通過的話會自動關閉這個窗口,並在鏈接服務器出現【TO_SQL33】這個接口,說明配置基本完成,如果沒通過會出現具體的錯誤提示。

6.創建腳本

/****** Object:  LinkedServer [TO_SQL33]    Script Date: 09/17/2018 15:39:50 ******/
EXEC master.dbo.sp_addlinkedserver @server = N‘TO_SQL33‘, @srvproduct=N‘MySQL‘, @provider=N‘SQLNCLI‘, @datasrc=N‘10.8.1.33‘
/* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N‘TO_SQL33‘,@useself=N‘False‘,@locallogin=NULL,@rmtuser=N‘tower‘,@rmtpassword=‘########‘

GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘collation compatible‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘data access‘, @optvalue=N‘true‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘dist‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘pub‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘rpc‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘rpc out‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘sub‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘connect timeout‘, @optvalue=N‘0‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘collation name‘, @optvalue=null
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘lazy schema validation‘, @optvalue=N‘false‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘query timeout‘, @optvalue=N‘0‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘use remote collation‘, @optvalue=N‘true‘
GO

EXEC master.dbo.sp_serveroption @server=N‘TO_SQL33‘, @optname=N‘remote proc transaction promotion‘, @optvalue=N‘true‘
GO

註意:當然,這裏的 @rmtpassword 顯示的是加密後的數據,還需使用者自行修改為真正的密碼。

7.訪問數據驗證:和訪問Oracle語法基本一致。

--查看版本
select * from openquery(TO_SQL33, ‘select @@version‘);

技術分享圖片

--查詢
select * from openquery(TO_SQL33, ‘select top 10 * from [dbo].[zy_站址]‘);
select top 10 * from [TO_SQL33].[tower].[dbo].[zy_站址];

--理論上可以跨服務器進行增、刪、改操作,但極不贊同這麽操作,要修改的話建議直接到對端服務器去修改。

--修改
update openquery(TO_SQL33, ‘select * from [dbo].[zy_站址] where [站址編碼] = ‘‘45010200000003‘‘ ‘) set [站址名稱] = ‘2‘;
--or
update openquery(TO_SQL33, ‘select * from [dbo].[zy_站址] ‘) set [站址名稱] = ‘2‘ where [站址編碼] = ‘45010200000003‘;

--添加
insert into openquery(TO_SQL33, ‘select * from [dbo].[zy_站址] where 1=0‘) values (‘11‘,‘22‘,‘22‘);

--刪除
delete from openquery(TO_SQL33, ‘select * from [dbo].[zy_站址] where [站址編碼] = ‘‘45010200000003‘‘ ‘);

技術分享圖片

8.刪除鏈接服務器腳本(或鏈接服務器名稱->右鍵->刪除)

USE [master]
GO
/****** Object: LinkedServer [TO_SQL33] Script Date: 09/17/2018 15:31:07 ******/
EXEC master.dbo.sp_dropserver @server=N‘TO_SQL33‘, @droplogins=‘droplogins‘
GO

四、題外話

人,是個奇怪的動物,整天想東想西,搞的腦子裏面整天都亂哄哄的。睡覺不是睡覺,吃飯不是吃飯,讓忙碌多年的心靜下來其實很難。那麽,什麽是靜心?

釋迦摩說:應如是住,如是降伏其心

奧修說得更加易懂:不要與頭腦抗爭,不要控制頭腦,不要專註。不要有任何幹涉,只要靜靜地觀照著頭腦,不要有任何判斷或評價。放松、觀照和不判斷,漸漸、漸漸地,就會有很深的寧靜降臨到你身上。

(4.18)SQL server 2008一些常見配置之二(鏈接服務器配置,訪問其他數據庫)