(4.18)SQL server 2008一些常見配置之二(鏈接服務器配置,訪問其他數據庫)
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一些常見配置之二(鏈接服務器配置,訪問其他數據庫)