1. 程式人生 > >兩臺SQL Server資料同步解決方案

兩臺SQL Server資料同步解決方案

複製的概念
  
  複製是將一組資料從一個數據源拷貝到多個數據源的技術,是將一份資料釋出到多個儲存站點上的有效方式。使用複製技術,使用者可以將一份資料釋出到多臺伺服器上,從而使不同的伺服器使用者都可以在許可權的許可的範圍內共享這份資料。複製技術可以確保分佈在不同地點的資料自動同步更新,從而保證資料的一致性。
  
  SQL複製的基本元素包括
  
  出版伺服器、訂閱伺服器、分發伺服器、出版物、文章
  
  SQL複製的工作原理
  
  SQL SERVER 主要採用出版物、訂閱的方式來處理複製。源資料所在的伺服器是出版伺服器,負責發表資料。出版伺服器把要發表的資料的所有改變情況的拷貝複製到分發伺服器,分發伺服器包含有一個分發資料庫,可接收資料的所有改變,並儲存這些改變,再把這些改變分發給訂閱伺服器
  
  SQL SERVER複製技術型別
  
  SQL SERVER提供了三種複製技術,分別是:
  
  1、快照複製(呆會我們就使用這個)
  2、事務複製
  3、合併複製
  
  只要把上面這些概念弄清楚了那麼對複製也就有了一定的理解。接下來我們就一步一步來實現複製的步驟。
  
  第一先來配置出版伺服器
  
  (1)選中指定[伺服器]節點
  (2)從[工具]下拉選單的[複製]子選單中選擇[釋出、訂閱伺服器和分發]命令
  (3)系統彈出一個對話方塊點[下一步]然後看著提示一直操作到完成。
  (4)當完成了出版伺服器的設定以後系統會為該伺服器的樹形結構中新增一個複製監視器。同時也生成一個分發資料庫(distribution)
  
  第二創建出版物
  
  (1)選中指定的伺服器
  (2)從[工具]選單的[複製]子選單中選擇[建立和管理髮布]命令。此時系統會彈出一個對話方塊
  (3)選擇要創建出版物的資料庫,然後單擊[建立釋出]
  (4)在[建立釋出嚮導]的提示對話方塊中單擊[下一步]系統就會彈出一個對話方塊。對話方塊上的內容是複製的三個型別。我們現在選第一個也就是預設的快照發布(其他兩個大家可以去看看幫助)
  (5)單擊[下一步]系統要求指定可以訂閱該釋出的資料庫伺服器型別,SQLSERVER允許在不同的資料庫如 ORACLE或ACCESS之間進行資料複製。但是在這裡我們選擇執行"SQL SERVER 2000"的資料庫伺服器
  (6)單擊[下一步]系統就彈出一個定義文章的對話方塊也就是選擇要出版的表
  (7)然後[下一步]直到操作完成。當完成出版物的建立後創建出版物的資料庫也就變成了一個共享資料庫。
  
  第三設計訂閱
  
  (1)選中指定的訂閱伺服器
  (2)從[工具]下拉選單中選擇[複製]子選單的[請求訂閱]
  (3)按照單擊[下一步]操作直到系統會提示檢查SQL SERVER代理服務的執行狀態,執行復制操作的前提條件是SQL SERVER代理服務必須已經啟動。
  (4)單擊[完成]。完成訂閱操作。
  
  完成上面的步驟其實複製也就是成功了。但是如何來知道複製是否成功了呢?這裡可以通過這種方法來快速看是否成功。展開出版伺服器下面的複製——釋出內容——右鍵釋出內容——屬性——擊活——狀態然後點立即執行代理程式接著點代理程式屬性擊活排程把排程設定為每一天發生,每一分鐘,在0:00:00和23:59:59之間。接下來就是判斷複製是否成功了開啟C:/Program Files/Microsoft SQL Server/MSSQL/REPLDATA/unc/XIAOWANGZI_database_database下面看是不是有一些以時間做為檔名的資料夾差不多一分中就產生一個。要是你還不信的話就開啟你的資料庫看在訂閱的伺服器的指定訂閱資料庫下看是不是看到了你剛才所釋出的表—
  
  一個手工同步的方案
  
  --定時同步伺服器上的資料
  
  --例子:
  
  --測試環境,SQL Server2000,遠端伺服器名:xz,使用者名稱為:sa,無密碼,測試資料庫:test
  
  --伺服器上的表(查詢分析器連線到伺服器上建立)
  
  create table [user](id int primary key,number varchar(4),name varchar(10))
  go
  
  --以下在區域網(本機操作)
  
  --本機的表,state說明:null 表示新增記錄,1 表示修改過的記錄,0 表示無變化的記錄
  
  if exists (select * from dbo.sysobjects where id = object_id(N'[user]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  drop table [user]
  GO
  create table [user](id int identity(1,1),number varchar(4),name varchar(10),state bit)
  go
  
  --建立觸發器,維護state欄位的值
  
  create trigger t_state on [user]
  after update
  as
  update [user] set state=1
  from [user] a join inserted b on a.id=b.id
  where a.state is not null
  go
  
  --為了方便同步處理,建立連結伺服器到要同步的伺服器
  
  --這裡的遠端伺服器名為:xz,使用者名稱為:sa,無密碼
  
  if exists(select 1 from master..sysservers where srvname='srv_lnk')
  exec sp_dropserver 'srv_lnk','droplogins'
  go
  exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','xz'
  exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa'
  go
  
  --建立同步處理的儲存過程
  
  if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_synchro]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
  drop procedure [dbo].[p_synchro]
  GO
  create proc p_synchro
  as
  --set XACT_ABORT on
  
  --啟動遠端伺服器的MSDTC服務
  
  --exec master..xp_cmdshell 'isql /S"xz" /U"sa" /P"" /q"exec master..xp_cmdshell ''net start msdtc'',no_output"',no_output
  
  --啟動本機的MSDTC服務
  
  --exec master..xp_cmdshell 'net start msdtc',no_output
  
  --進行分佈事務處理,如果表用標識列做主鍵,用下面的方法
  
  --BEGIN DISTRIBUTED TRANSACTION
  
  --同步刪除的資料
  
  delete from srv_lnk.test.dbo.[user]
  where id not in(select id from [user])
  
  --同步新增的資料
  
  insert into srv_lnk.test.dbo.[user]
  select id,number,name from [user] where state is null
  
  --同步修改的資料
  
  update srv_lnk.test.dbo.[user] set
  number=b.number,name=b.name
  from srv_lnk.test.dbo.[user] a
  join [user] b on a.id=b.id
  where b.state=1
  
  --同步後更新本機的標誌
  
  update [user] set state=0 where isnull(state,1)=1
  --COMMIT TRAN
  go
  
  --建立作業,定時執行資料同步的儲存過程
  
  if exists(SELECT 1 from msdb..sysjobs where name='資料處理')
  EXECUTE msdb.dbo.sp_delete_job @job_name='資料處理'
  exec msdb..sp_add_job @job_name='資料處理'
  
  --建立作業步驟
  
  declare @sql varchar(800),@dbname varchar(250)
  select @sql='exec p_synchro' --資料處理的命令
  ,@dbname=db_name() --執行資料處理的資料庫名
  exec msdb..sp_add_jobstep @job_name='資料處理',
  @step_name = '資料同步',
  @subsystem = 'TSQL',
  @
[email protected]
,
  @command = @sql,
  @retry_attempts = 5, --重試次數
  @retry_interval = 5 --重試間隔
  
  --建立排程
  
  EXEC msdb..sp_add_jobschedule @job_name = '資料處理',
  @name = '時間安排',
  @freq_type = 4, --每天
  @freq_interval = 1, --每天執行一次
  @active_start_time = 00000 --0點執行
  go
 

相關推薦

SQL Server資料同步解決方案

複製的概念    複製是將一組資料從一個數據源拷貝到多個數據源的技術,是將一份資料釋出到多個儲存站點上的有效方式。使用複製技術,使用者可以將一份資料釋出到多臺伺服器上,從而使不同的伺服器使用者都可以在許可權的許可的範圍內共享這份資料。複製技術可以確保分佈在不同地點的資料自動同步更新,從而保證資料的一致性。  

sql server死鎖解決方案

問題場景:在客戶那碰到一個操作卡死的現象 問題解決: 1、如何掛鉤是死鎖問題:通過程式碼跟蹤,發現是指執行一個SQL語句超時,因此猜想可能是表鎖住了 2、如果確認是思索問題:通過SQL發現死鎖,以下是相關的SQL  select request_session_id 

Redis與資料庫資料同步解決方案

資料庫同步到Redis 我們大多傾向於使用這種方式,也就是將資料庫中的變化同步到Redis,這種更加可靠。Redis在這裡只是做快取。 方案1 做快取,就要遵循快取的語義規定: 讀:讀快取redis,沒有,讀mysql,並將mysql的值寫入

Oracle DBLink跨資料庫訪問SQL server資料同步 踩坑實錄

  專案需求:這裡暫且叫A公司吧,A公司有一套人事管理軟體,需要與我們公司的軟體做人員資訊同步,A公司用的是SQL server資料庫,我們公司用的Oracle,介面都不會開發(一萬句“fuck you”),就單單給我們公司提供了一個SQL server的賬戶和密碼,還有一個檢視。後來百度一番,可以通過DBL

sql server 伺服器之間資料同步、分發、複製

<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script> 利用資料庫複製技術 實現資料

資料時代下的SQL Server第三方負載均衡方案----Moebius測試

一.本文所涉及的內容(Contents) 二.背景(Contexts)   前幾天在SQL Server MVP宋大俠(宋沄劍)的一篇文章"資料庫叢集技術漫談”中看到了格瑞趨勢在SQL Server上的負載均衡產品Moebius,搞資料庫的都知道:在Oracle上有RAC,MySQL也有對應的方案(可

MySQL資料庫匯入或者同步大量資料資料丟失解決方案

相信大家都經常遇到這樣的情況,我們在編碼的過程中經常需要在除錯程式碼的時候切換到本地的資料庫上做修改除錯,如果當測試資料庫的資料在幾十萬或者上百萬資料的時候,我們無論是通過恢復備份/匯入SQL的方式來把資料匯入到本地的MySQL資料庫的時候,資料都是無法匯入完成的,經常會遇到丟失資料的情況。解決方案: 解決方

spark 大型專案實戰(五十八):資料傾斜解決方案之sample取樣傾斜key進行次join

當採用隨機數和擴容表進行join解決資料傾斜的時候,就代表著,你的之前的資料傾斜的解決方案,都沒法使用。 這個方案是沒辦法徹底解決資料傾斜的,更多的,是一種對資料傾斜的緩解。 原理,其實在上一講,已經帶出來了。 步驟: 1、選擇一個RDD,要用flatM

MySql主從配置檔案問題詳解(資料同步解決方案

一、問題描述 在mysql主從配置搭建好以後,偶爾會出現從庫無法同步主庫資料的情況,經過測試,把產生主從資料不同步的集中情況進行了歸納以及總結,問題如下: 1、主庫丟擲異常, 例如主鍵衝突等情況,這是主從配置就會失效,叢庫就無法同步主庫的資料了。如下

spark1.x-spark-sql-資料傾斜解決方案

聚合源資料 過濾導致傾斜的key where條件 提高shuffle並行度 spark.sql.shuffle.partitions sqlContext.setConf("spark.sql.shuffle.partitions","1000")

給大家說明怎麼從一sql server伺服器拷貝資料到另外一sql server伺服器

平臺說明:兩臺sql server2005伺服器,上面裝了兩個相同的資料庫 最近由於專案需要,需要將其中一臺伺服器上的資料庫的資料拷貝到另外一臺伺服器上的資料庫上,經過了很多google後終於完成了,在此做個詳細的記錄,希望能夠幫到大家及自己。 一、第一步:sql新增

資料時代,資料實時同步解決方案的思考—最全的資料同步總結

  1、 早期關係型資料庫之間的資料同步 1)、全量同步 比如從oracle資料庫中同步一張表的資料到Mysql中,通常的做法就是 分頁查詢源端的表,然後通過 jdbc的batch 方式插入到目標表,這個地方需要注意的是,分頁查詢時,一定要按照主鍵id來排序分頁,避免重複插入。 2)、基於資

SQL Server孤立賬戶解決辦法

code change sql login 選擇 bsp 賬戶 hang exec 選擇你想要的數據庫。 執行 exec sp_change_users_login ‘UPDATE_ONE‘,‘用戶名‘,‘登錄名‘ 假如你的登錄名是:sd exe

Spring3 Schedule Task之註解實現 (次起動Schedule Task 的解決方案

什麽 empty task 文件中 註解 work lin schedule ask Spring3 Schedule Task之註解實現 (兩次起步Schedule Task 的解決方案)Spring3 Schedule Task之註解實現 (兩次啟動Schedule T

sql無效字符 執行sql語句報錯解決方案

tar nbsp color col copy 坑爹 執行 解決方案 原來 以為是sql中參數賦值有問題,但是將sql語句直接copy到PLSQL中執行,卻沒問題,糾結了好久,原來是 insert語句多了;唉,坑爹 http://www.jb51.net/article/3

伺服器資料恢復通用方法/伺服器硬碟故障導致資料丟失解決方案

[伺服器資料恢復原因推斷] 伺服器資料丟失情況很多,通常無法明確伺服器資料丟失的原因,常見的丟失原因有:伺服器硬碟出現故障,管理員或者伺服器自動進行fsck操作,這一操作可能造成更加嚴重資料丟失或者導致伺服器資料恢復的難度增加。伺服器資料丟失後執行mkfs操作,若操作未完成則容易導致部分塊組全部

英特爾與區塊鏈:雲端計算平臺釋出新的資料保護解決方案

點選上方 “藍色字” 可關注我們! 暴走時評:位於法國里昂的去中心化算力平臺iExec釋出了端到端的可信執行環境。iExec的開發人員將這一技術描述為第一個面向企業的英特爾SGX可擴充套件解決方案,以實現基於區塊鏈計算中的

前端 SPA 單頁應用資料統計解決方案 (ReactJS / VueJS)

前端 SPA 單頁應用資料統計解決方案 (ReactJS / VueJS) 一、百度統計的程式碼: UV PV 統計方式可能存在問題 在 SPA 的前端專案中 資料統計,往往就是一個比較麻煩的事情,React 和 Vue 也是一樣。 在 發現問題之前,我們得來思考下 百度統計的 統計原理 是什麼?

SQL Server 資料分頁查詢

最近學習了一下SQL的分頁查詢,總結了以下幾種方法。 首先建立了一個表,隨意插入的一些測試資料,表結構和資料如下圖: 現在假設我們要做的是每頁5條資料,而現在我們要取第三頁的資料。(資料太少,就每頁5條了) 方法一: select top 5 * from [Stu

SQL Server資料更新

文章目錄 1.實驗目的 2.實驗內容 3.實驗環境 4.實驗步驟及結果 1.實驗目的     通過本次實驗使學生掌握SQL資料更新操作。 2.實驗內容 資料插入 資料修改 資料刪除