翻譯|使用教程|編輯:吳園園|2020-03-24 15:47:43.023|閱讀 334 次
概述:在本文中,我們將使用JobEmpl招聘服務(wù)數(shù)據(jù)庫(kù)來(lái)演示如何使用T-SQL在主從關(guān)系上創(chuàng)建數(shù)據(jù)庫(kù)復(fù)制。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
dbForge SQL Complete是一款用于Microsoft SQL Server Management Studio和Microsoft Visual Studio的功能強(qiáng)大的插件。SQL代碼格式化程序(免費(fèi)版和高級(jí)付費(fèi)版)能夠提供可以取代原生的Microsoft T-SQL Intellisense特性的T-SQL代碼自動(dòng)實(shí)現(xiàn)和格式化功能。
點(diǎn)擊下載dbForge SQL Complete最新試用版
通常,需要?jiǎng)?chuàng)建SQL Server數(shù)據(jù)庫(kù)的只讀副本。例如,出于分離分析任務(wù)和操作任務(wù)的目的,可能需要這樣做。第一個(gè)導(dǎo)致數(shù)據(jù)庫(kù)上的高負(fù)載,為了減少負(fù)載,創(chuàng)建了主數(shù)據(jù)庫(kù)的副本以執(zhí)行分析性只讀查詢。
通常,可以使用內(nèi)置DBMS工具創(chuàng)建以下只讀副本:
但是,如果您不需要整個(gè)數(shù)據(jù)庫(kù),而只需要其中的幾個(gè)表怎么辦?在這種情況下,您可以自己創(chuàng)建復(fù)制。只要數(shù)據(jù)采樣是主要目標(biāo),那么一個(gè)方向(主從)的數(shù)據(jù)庫(kù)復(fù)制就足夠了。可以使用包括SSIS和.NET在內(nèi)的幾種方法來(lái)執(zhí)行這種復(fù)制。
在本文中,我們將使用JobEmpl招聘服務(wù)數(shù)據(jù)庫(kù)來(lái)演示如何使用T-SQL在主從關(guān)系上創(chuàng)建數(shù)據(jù)庫(kù)復(fù)制。
SQL Complete是幫助我構(gòu)建這些腳本的主要工具。該工具還允許代碼格式化以及重命名對(duì)象及其所有引用。
使用T-SQL在一個(gè)方向上創(chuàng)建SQL Server復(fù)制
首先,讓我們描述此復(fù)制的主要原理和算法。在每次迭代期間,我們需要比較Source數(shù)據(jù)庫(kù)和Target數(shù)據(jù)庫(kù)之間所選表中的數(shù)據(jù)。這意味著我們需要輸入唯一的代理鍵來(lái)比較表。為了加快比較過(guò)程,我們還需要在該鍵上創(chuàng)建一個(gè)索引。并且還需要為每個(gè)復(fù)制表添加一個(gè)計(jì)算字段,以便為每一行計(jì)算CHECKSUM。
同樣重要的是,選擇數(shù)據(jù)的固定部分,例如一次(每次迭代)一次特定數(shù)量的行。
因此,我們需要執(zhí)行以下步驟:
現(xiàn)在,讓我們使用為雇用員工而創(chuàng)建的JobEmpl數(shù)據(jù)庫(kù)詳細(xì)查看每個(gè)步驟。
我們只需要復(fù)制Employee和JobHistory表。
從腳本中,您可以看到它必須在源JobEmpl數(shù)據(jù)庫(kù)上運(yùn)行,并且應(yīng)該在@src和@sch變量中相應(yīng)地指定源數(shù)據(jù)庫(kù)和架構(gòu)。@sql變量對(duì)于構(gòu)建動(dòng)態(tài)SQL是必需的,同時(shí),@ name對(duì)于保存復(fù)制表的名稱也是必需的。
首先,我們將復(fù)制的表名稱收集到臨時(shí)#tbl表中。接下來(lái),我們使用光標(biāo)遍歷每個(gè)表名,并將表名提取到@name變量中。之后,對(duì)于每個(gè)表,將形成非IDENTITY類型的列列表,并將結(jié)果插入帶有“ +”號(hào)的@listcols變量中。
值得一提的是,首先,首先使用CAST函數(shù)將每個(gè)表名轉(zhuǎn)換為NVACHAR(MAX)類型,然后使用COALESCE函數(shù)([<ColumnName>],N'')。從每一行的所有列值中形成一個(gè)字符串。
接下來(lái),將創(chuàng)建計(jì)算出的CheckSumVal字段,REPL_GUID字段及其唯一的indREPL_GUID索引。
復(fù)制的表也位于此處,對(duì)于每個(gè)表,都將刪除indREPL_GUID索引以及REPL_GUID和CheckSumVal列。
在我們的例子中,創(chuàng)建了以下T-SQL代碼。
DROP INDEX [indREPL_GUID] ON [dbo].[Employee]; ALTER TABLE [dbo].[Employee] DROP CONSTRAINT [Employee_DEF_REPL_GUID], COLUMN [CheckSumVal], COLUMN [REPL_GUID]; DROP INDEX [indREPL_GUID] ON [dbo].[JobHistory]; ALTER TABLE [dbo].[JobHistory] DROP CONSTRAINT [JobHistory_DEF_REPL_GUID], COLUMN [CheckSumVal], COLUMN [REPL_GUID];現(xiàn)在,根據(jù)上述算法的第二步,創(chuàng)建一個(gè)新的JobEmplRead數(shù)據(jù)庫(kù)來(lái)接收數(shù)據(jù)。然后,我們同步復(fù)制表的架構(gòu)。要執(zhí)行同步,請(qǐng)使用DbForge架構(gòu)比較工具:選擇JobEmpl作為數(shù)據(jù)源,選擇jobEmplRead作為數(shù)據(jù)目標(biāo)。
圖-選擇數(shù)據(jù)庫(kù)進(jìn)行模式同步
然后按“ 比較”按鈕。完成用于比較的元數(shù)據(jù)創(chuàng)建過(guò)程后,選擇所需的表并開始配置數(shù)據(jù)庫(kù)同步過(guò)程。
圖-選擇用于模式同步的表
接下來(lái),我們選擇默認(rèn)值–腳本生成。
現(xiàn)在讓我們清除備份創(chuàng)建選項(xiàng)。
接下來(lái),取消選中所有依賴項(xiàng),因?yàn)槲覀儾恍枰獎(jiǎng)?chuàng)建其他對(duì)象。并且我們稍后將在生成的模式同步腳本中手動(dòng)刪除外鍵。
現(xiàn)在按“ 同步”按鈕,并忽略“ 摘要”選項(xiàng)卡上的警告。
在生成的腳本中刪除以下外鍵:更多內(nèi)容歡迎持續(xù)關(guān)注我們后續(xù)的教程
想了解更多產(chǎn)品信息或想要購(gòu)買產(chǎn)品正版授權(quán)請(qǐng)點(diǎn)擊
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: