鄭州酒店網(wǎng)站建設(shè)seo網(wǎng)絡(luò)推廣專(zhuān)員招聘
在實(shí)際項(xiàng)目環(huán)境中,有時(shí)會(huì)遇到需要將大量數(shù)據(jù)(這里所指百萬(wàn)級(jí)別以上的數(shù)據(jù)量)從一臺(tái)服務(wù)器遷移到另外一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器的情況。SQL Server有很多方式可以進(jìn)行數(shù)據(jù)遷移:備份還原、導(dǎo)入/導(dǎo)出數(shù)據(jù)、生成腳本(包含數(shù)據(jù))等,以下只針對(duì)“導(dǎo)入導(dǎo)出數(shù)據(jù)”方式來(lái)進(jìn)行測(cè)試演示(其他方式自行查找官方文檔說(shuō)明)。
現(xiàn)有一個(gè)300W左右的數(shù)據(jù)庫(kù),需要從本地遷移到遠(yuǎn)程服務(wù)器上(從源數(shù)據(jù)庫(kù)->目標(biāo)數(shù)據(jù)庫(kù),使用導(dǎo)出數(shù)據(jù)方式)。
一、生成導(dǎo)出數(shù)據(jù)SSIS包。
首先,在SQL Server數(shù)據(jù)庫(kù)對(duì)象管理器中,展開(kāi)數(shù)據(jù)庫(kù)->選擇相應(yīng)數(shù)據(jù)庫(kù) 點(diǎn)擊右鍵 -> 任務(wù)(T) -> 導(dǎo)出數(shù)據(jù)(X)...,如下圖:
打開(kāi)“SQL Server 導(dǎo)入和導(dǎo)出向?qū)А表?yè)面,點(diǎn)擊“下一步”選擇 數(shù)據(jù)源(即要從中復(fù)制數(shù)據(jù)的來(lái)源),設(shè)置 源數(shù)據(jù)庫(kù)的服務(wù)器名稱(chēng)、身份驗(yàn)證以及數(shù)據(jù)庫(kù),如下圖:
“下一步”進(jìn)入設(shè)置目標(biāo)數(shù)據(jù)源(即要復(fù)制到的目標(biāo)數(shù)據(jù)庫(kù)),與上一步同理,設(shè)置目標(biāo)數(shù)據(jù)源的?服務(wù)器名稱(chēng)、身份驗(yàn)證、數(shù)據(jù)庫(kù),如下圖:
完成源和目標(biāo)數(shù)據(jù)庫(kù)的設(shè)置后,下一步,指定表復(fù)制和查詢(xún)。如果將整個(gè)數(shù)據(jù)庫(kù)所有表數(shù)據(jù)都遷移,選擇第一項(xiàng)“復(fù)制一個(gè)或多個(gè)表或視圖的數(shù)據(jù)”;只是遷移部分?jǐn)?shù)據(jù)(一個(gè)或多個(gè)數(shù)據(jù)表),選擇第二項(xiàng)“編寫(xiě)查詢(xún)以指定要傳輸?shù)臄?shù)據(jù)”,編寫(xiě)SQL查詢(xún)語(yǔ)句來(lái)對(duì)復(fù)制操作的源數(shù)據(jù)進(jìn)行操縱或限制,如下圖:
當(dāng)前演示遷移數(shù)據(jù)測(cè)試是從本地到遠(yuǎn)程服務(wù)器,因網(wǎng)絡(luò)問(wèn)題直接連接遠(yuǎn)程服務(wù)器來(lái)導(dǎo)出數(shù)據(jù),執(zhí)行期間會(huì)出現(xiàn)網(wǎng)絡(luò)斷開(kāi)的情況。
以下使用SQL分批導(dǎo)出方式進(jìn)行處理,每次導(dǎo)出10W條數(shù)據(jù)。
選擇“編寫(xiě)查詢(xún)以指定要傳輸?shù)臄?shù)據(jù)”選項(xiàng),下一步,輸入要查詢(xún)數(shù)據(jù)的SQL語(yǔ)句,如下圖:
注:這里輸入的SQL語(yǔ)句只支持查詢(xún)select語(yǔ)句。
下一步,可以查看到 源與目標(biāo) 的表或視圖情況,上一步使用了SQL查詢(xún)來(lái)導(dǎo)出數(shù)據(jù),這里 源 位置所顯示只是一個(gè)【查詢(xún)】結(jié)果集,目標(biāo) 位置可以選擇目標(biāo)數(shù)據(jù)庫(kù)要接收數(shù)據(jù)遷移對(duì)應(yīng)的數(shù)據(jù)表,如下圖:
注:接收數(shù)據(jù)遷移的目標(biāo)數(shù)據(jù)表結(jié)構(gòu)必須與SQL查詢(xún)返回的【查詢(xún)】結(jié)果集結(jié)構(gòu)必須一一對(duì)應(yīng)。如不選擇目標(biāo)數(shù)據(jù)表,目標(biāo)數(shù)據(jù)庫(kù)中會(huì)自動(dòng)創(chuàng)建一個(gè)名為“查詢(xún)”的數(shù)據(jù)表來(lái)存儲(chǔ)遷移數(shù)據(jù)。
進(jìn)入下一步,可以“立即運(yùn)行”(默認(rèn)選中)SSIS包來(lái)執(zhí)行導(dǎo)出數(shù)據(jù)操作,也可以先保存導(dǎo)出數(shù)據(jù)配置的SSIS包,在特定時(shí)候才去執(zhí)行。目前測(cè)試受限于網(wǎng)絡(luò)問(wèn)題,使用“保存SSIS包”方式來(lái)處理。取消“立即運(yùn)行”復(fù)選項(xiàng),會(huì)自動(dòng)選中“保存SSIS包”選項(xiàng),選擇“文件系統(tǒng)”方式來(lái)保存SSIS包(生成*.dtsx文件),方便遷移文件到遠(yuǎn)程服務(wù)器上執(zhí)行導(dǎo)出,如下圖:
保存 SSIS 包 兩種方式:【SQL Server】 和 【文件系統(tǒng)】。
【SQL Server】 方式 => 保存在SQL Server系統(tǒng)內(nèi)部,需要連接SQL Server Integration Server服務(wù)才能執(zhí)行;
【文件系統(tǒng)】方式 => 將SSIS包保存到指定系統(tǒng)目錄下。
下一步,給SSIS包指定一個(gè)名稱(chēng)以及文件存在的目錄(默認(rèn)是保存到系統(tǒng)盤(pán)->當(dāng)前用戶(hù)名所在文檔目錄下),如圖:
下一步,點(diǎn)擊“完成”按鈕,系統(tǒng)會(huì)根據(jù)前面幾步的設(shè)置生成相應(yīng)的SSIS包,如圖:
完成后,點(diǎn)擊 【關(guān)閉】按鈕,退出【導(dǎo)出數(shù)據(jù)】向?qū)гO(shè)置。
因使用分批導(dǎo)出數(shù)據(jù)(每次導(dǎo)出10W條數(shù)據(jù)),需要重復(fù)操作上述步驟,生成所有數(shù)據(jù)的SSIS包。
二、執(zhí)行導(dǎo)出數(shù)據(jù)SSIS包
完成第一部分操作后,將SSIS包Copy到要目標(biāo)數(shù)據(jù)庫(kù)所在服務(wù)器,雙擊SSIS包(*.dtsx)自動(dòng)運(yùn)行 執(zhí)行包實(shí)用工具,如下圖:
?點(diǎn)擊“執(zhí)行”按鈕,系統(tǒng)會(huì)根據(jù)SSIS包的設(shè)置來(lái)導(dǎo)出數(shù)據(jù)到目標(biāo)數(shù)據(jù)庫(kù)表里,自動(dòng)顯示 執(zhí)行進(jìn)度 情況,進(jìn)度出現(xiàn) 完成占用時(shí)間 時(shí),表示SSIS包已執(zhí)行成功,如下圖:
重復(fù)上一步驟,執(zhí)行完余下的SSIS包。
到這里,已完成數(shù)據(jù)遷移處理。
三、總結(jié)
- 進(jìn)行數(shù)據(jù)遷移可以使用SQL Server自帶的導(dǎo)入\導(dǎo)出功能
- 導(dǎo)出數(shù)據(jù)可以指定SQL查詢(xún)方式來(lái)處理
- 大量數(shù)據(jù)遷移網(wǎng)絡(luò)通信受限的情況下可以使用分批導(dǎo)出方式