監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價(jià)咨詢管理系統(tǒng) | 工程設(shè)計(jì)管理系統(tǒng) | 簽約案例 | 購買價(jià)格 | 在線試用 | 手機(jī)APP | 產(chǎn)品資料
X 關(guān)閉

如何同步兩個(gè)SQLServer數(shù)據(jù)庫的內(nèi)容?

申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114

文章來源:泛普軟件 程序代碼可以有版本管理CVS進(jìn)行同步管理,可是數(shù)據(jù)庫同步就非常麻煩,只能自己改了一個(gè)后再去改另一個(gè),如果忘記了更改另一個(gè)經(jīng)常造成兩個(gè)數(shù)據(jù)庫的結(jié)構(gòu)或內(nèi)容上不一致.

分發(fā)與復(fù)制

用強(qiáng)制訂閱實(shí)現(xiàn)數(shù)據(jù)庫同步操作
大量和批量的數(shù)據(jù)可以用數(shù)據(jù)庫的同步機(jī)制處理:
//
說明:
為方便操作,所有操作均在發(fā)布服務(wù)器(分發(fā)服務(wù)器)上操作,并使用推模式
在客戶機(jī)器使用強(qiáng)制訂閱方式。

有疑問聯(lián)系作者:zlp321001@hotmail.com

測(cè)試通過

//
--1:環(huán)境
服務(wù)器環(huán)境:
機(jī)器名稱: ZehuaDb
操作系統(tǒng):Windows 2000 Server
數(shù)據(jù)庫版本:SQL 2000 Server 個(gè)人版

客戶端
機(jī)器名稱:Zlp
操作系統(tǒng):Windows 2000 Server
數(shù)據(jù)庫版本:SQL 2000 Server 個(gè)人版

--2:建用戶帳號(hào)
在服務(wù)器端建立域用戶帳號(hào)
我的電腦管理->本地用戶和組->用戶->建立
UserName:zlp
UserPwd:zlp

--3:重新啟動(dòng)服務(wù)器MSSQLServer
我的電腦->控制面版->管理工具->服務(wù)->MSSQLServer 服務(wù)
(更改為:域用戶帳號(hào),我們新建的zlp用戶 .zlp,密碼:zlp)

--4:安裝分發(fā)服務(wù)器
A:配置分發(fā)服務(wù)器
工具->復(fù)制->配置發(fā)布、訂閱服務(wù)器和分發(fā)->下一步->下一步(所有的均采用默認(rèn)配置)
B:配置發(fā)布服務(wù)器
工具->復(fù)制->創(chuàng)建和管理發(fā)布->選擇要發(fā)布的數(shù)據(jù)庫(SZ)->下一步->快照發(fā)布->下一步->
選擇要發(fā)布的內(nèi)容->下一步->下一步->下一步->完成
C:強(qiáng)制配置訂閱服務(wù)器(推模式,拉模式與此雷同)
工具->復(fù)制->配置發(fā)布、訂閱服務(wù)器和分發(fā)->訂閱服務(wù)器->新建->SQL Server數(shù)據(jù)庫->輸入客戶端服務(wù)器名稱(ZLP)->使用SQL Server 身份驗(yàn)證(sa,空密碼)->確定->應(yīng)用->確定
D:初始化訂閱
復(fù)制監(jiān)視器->發(fā)布服務(wù)器(ZEHUADB)->雙擊訂閱->強(qiáng)制新建->下一步->選擇啟用的訂閱服務(wù)器->ZLP->
下一步->下一步->下一步->下一步->完成

--5:測(cè)試配置是否成功
復(fù)制監(jiān)視器->發(fā)布服務(wù)器(ZEHUADB)->雙擊SZ:SZ->點(diǎn)狀態(tài)->點(diǎn)立即運(yùn)行代理程序
查看:
復(fù)制監(jiān)視器->發(fā)布服務(wù)器(ZEHUADB)->SZ:SZ->選擇ZLP:SZ(類型強(qiáng)制)->鼠標(biāo)右鍵->啟動(dòng)同步處理
如果沒有錯(cuò)誤標(biāo)志(紅色叉),恭喜您配置成功

--6:測(cè)試數(shù)據(jù)
--在服務(wù)器執(zhí)行:
選擇一個(gè)表,執(zhí)行如下SQL
insert into WQ_NEWSGROUP_S select '測(cè)試成功',5

復(fù)制監(jiān)視器->發(fā)布服務(wù)器(ZEHUADB)->SZ:SZ->快照->啟動(dòng)代理程序
                                      ->ZLP:SZ(強(qiáng)制)->啟動(dòng)同步處理

去查看同步的 WQ_NEWSGROUP_S 是否插入了一條新的記錄

測(cè)試完畢,通過。


--7修改數(shù)據(jù)庫的同步時(shí)間,一般選擇夜晚執(zhí)行數(shù)據(jù)庫同步處理
(具體操作略) :D

/*
注意說明:
服務(wù)器一端不能以(local)進(jìn)行數(shù)據(jù)的發(fā)布與分發(fā),需要先刪除注冊(cè),然后新建注冊(cè)本地計(jì)算機(jī)名稱

卸載方式:工具->復(fù)制->禁止發(fā)布->是在"ZehuaDb"上靜止發(fā)布,卸載所有的數(shù)據(jù)庫同步配置服務(wù)器

注意:發(fā)布服務(wù)器、分發(fā)服務(wù)器中的SQLServerAgent服務(wù)必須啟動(dòng)
      采用推模式: "D:Microsoft SQL ServerMSSQLREPLDATAunc" 目錄文件可以不設(shè)置共享
      拉模式:則需要共享~!

*/

少量數(shù)據(jù)庫同步可以采用觸發(fā)器實(shí)現(xiàn),同步單表即可。


配置過程中可能出現(xiàn)的問題

在SQL Server 2000里設(shè)置和使用數(shù)據(jù)庫復(fù)制之前,應(yīng)先檢查相關(guān)的幾臺(tái)SQL Server服務(wù)器下面幾點(diǎn)是否滿足:
   
    1、MSSQLserver和Sqlserveragent服務(wù)是否是以域用戶身份啟動(dòng)并運(yùn)行的(.administrator用戶也是可以的)
   
        如果登錄用的是本地系統(tǒng)帳戶local,將不具備網(wǎng)絡(luò)功能,會(huì)產(chǎn)生以下錯(cuò)誤:
       
        進(jìn)程未能連接到Distributor '@Server name'
       
      (如果您的服務(wù)器已經(jīng)用了SQL Server全文檢索服務(wù), 請(qǐng)不要修改MSSQLserver和Sqlserveragent服務(wù)的local啟動(dòng)。
       會(huì)照成全文檢索服務(wù)不能用。請(qǐng)換另外一臺(tái)機(jī)器來做SQL Server 2000里復(fù)制中的分發(fā)服務(wù)器。)   
       
      修改服務(wù)啟動(dòng)的登錄用戶,需要重新啟動(dòng)MSSQLserver和Sqlserveragent服務(wù)才能生效。   
       
    2、檢查相關(guān)的幾臺(tái)SQL Server服務(wù)器是否改過名稱(需要srvid=0的本地機(jī)器上srvname和datasource一樣)
   
       在查詢分析器里執(zhí)行:
         use master
         select srvid,srvname,datasource from sysservers   
        
       如果沒有srvid=0或者srvid=0(也就是本機(jī)器)但srvname和datasource不一樣, 需要按如下方法修改:
         

         USE master
        GO
        -- 設(shè)置兩個(gè)變量
        DECLARE @serverproperty_servername  varchar(100),
                @servername    varchar(100)
        -- 取得Windows NT 服務(wù)器和與指定的 SQL Server 實(shí)例關(guān)聯(lián)的實(shí)例信息
        SELECT @serverproperty_servername = CONVERT(varchar(100), SERVERPROPERTY('ServerName'))
        -- 返回運(yùn)行 Microsoft SQL Server 的本地服務(wù)器名稱
        SELECT @servername = CONVERT(varchar(100), @@SERVERNAME)
        -- 顯示獲取的這兩個(gè)參數(shù)
        select @serverproperty_servername,@servername
        --如果@serverproperty_servername和@servername不同(因?yàn)槟愀倪^計(jì)算機(jī)名字),再運(yùn)行下面的
        --刪除錯(cuò)誤的服務(wù)器名
        EXEC sp_dropserver @server=@servername
        --添加正確的服務(wù)器名
        EXEC sp_addserver @server=@serverproperty_servername, @local='local'
        
       修改這項(xiàng)參數(shù),需要重新啟動(dòng)MSSQLserver和Sqlserveragent服務(wù)才能生效。   
      
       這樣一來就不會(huì)在創(chuàng)建復(fù)制的過程中出現(xiàn)18482、18483錯(cuò)誤了。

    3、檢查SQL Server企業(yè)管理器里面相關(guān)的幾臺(tái)SQL Server注冊(cè)名是否和上面第二點(diǎn)里介紹的srvname一樣
   
        不能用IP地址的注冊(cè)名。
       
      (我們可以刪掉IP地址的注冊(cè),新建以SQL Server管理員級(jí)別的用戶注冊(cè)的服務(wù)器名)
       
       這樣一來就不會(huì)在創(chuàng)建復(fù)制的過程中出現(xiàn)14010、20084、18456、18482、18483錯(cuò)誤了。   
       
    4、檢查相關(guān)的幾臺(tái)SQL Server服務(wù)器網(wǎng)絡(luò)是否能夠正常訪問
   
        如果ping主機(jī)IP地址可以,但ping主機(jī)名不通的時(shí)候,需要在   
       
            winntsystem32driversetchosts   (WIN2000)
            windowssystem32driversetchosts (WIN2003)
           
               文件里寫入數(shù)據(jù)庫服務(wù)器IP地址和主機(jī)名的對(duì)應(yīng)關(guān)系。
              
           例如:    
               

           127.0.0.1       localhost
           192.168.0.35    oracledb    oracledb
           192.168.0.65    fengyu02    fengyu02
           202.84.10.193   bj_db       bj_db   

               
               或者在SQL Server客戶端網(wǎng)絡(luò)實(shí)用工具里建立別名,例如:


     5、系統(tǒng)需要的擴(kuò)展存儲(chǔ)過程是否存在(如果不存在,需要恢復(fù)):
      
 

        sp_addextendedproc 'xp_regenumvalues',@dllname ='xpstar.dll'
         go
         sp_addextendedproc 'xp_regdeletevalue',@dllname ='xpstar.dll'
         go
         sp_addextendedproc 'xp_regdeletekey',@dllname ='xpstar.dll'
         go             
         sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll' 

 

    接下來就可以用SQL Server企業(yè)管理器里[復(fù)制]-> 右鍵選擇
        ->[配置發(fā)布、訂閱服務(wù)器和分發(fā)]的圖形界面來配置數(shù)據(jù)庫復(fù)制了。
   
    下面是按順序列出配置復(fù)制的步驟:

    一、建立發(fā)布和分發(fā)服務(wù)器
   
        [歡迎使用配置發(fā)布和分發(fā)向?qū)->[選擇分發(fā)服務(wù)器]
   
       ->[使"@servername"成為它自己的分發(fā)服務(wù)器,SQL Server將創(chuàng)建分發(fā)數(shù)據(jù)庫和日志]
      
       ->[制定快照文件夾]-> [自定義配置] -> [否,使用下列的默認(rèn)配置] -> [完成]
      
    上述步驟完成后, 會(huì)在當(dāng)前"@servername" SQL Server數(shù)據(jù)庫里建立了一個(gè)distribion庫和
   
            一個(gè)distributor_admin管理員級(jí)別的用戶(我們可以任意修改密碼)
           
    服務(wù)器上新增加了四個(gè)作業(yè):
                [ 代理程序歷史記錄清除: distribution ]
                [ 分發(fā)清除: distribution ]
                [ 復(fù)制代理程序檢查 ]
                [ 重新初始化存在數(shù)據(jù)驗(yàn)證失敗的訂閱 ]
   
    SQL Server企業(yè)管理器里多了一個(gè)復(fù)制監(jiān)視器, 當(dāng)前的這臺(tái)機(jī)器就可以發(fā)布、分發(fā)、訂閱了。
   
    我們?cè)俅卧赟QL Server企業(yè)管理器里[復(fù)制]-> 右鍵選擇
        ->[配置發(fā)布、訂閱服務(wù)器和分發(fā)],可以看到類似下圖:
   
 
   
    我們可以在 [發(fā)布服務(wù)器和分發(fā)服務(wù)器的屬性] 窗口
        -> [發(fā)布服務(wù)器] -> [新增]        -> [確定]
        -> [發(fā)布數(shù)據(jù)庫] -> [事務(wù)]/[合并] -> [確定]
        -> [訂閱服務(wù)器] -> [新增]        -> [確定]       
       把網(wǎng)絡(luò)上的其它SQL Server服務(wù)器添加成為發(fā)布或者訂閱服務(wù)器.
       新增一臺(tái)發(fā)布服務(wù)器的選項(xiàng):   
        
    我這里新建立的JIN001發(fā)布服務(wù)器是用管理員級(jí)別的數(shù)據(jù)庫用戶test連接的,      
    到發(fā)布服務(wù)器的管理鏈接要輸入密碼的可選框, 默認(rèn)的是選中的,
    在新建的JIN001發(fā)布服務(wù)器上建立和分發(fā)服務(wù)器FENGYU/FENGYU的鏈接的時(shí)需要輸入distributor_admin用戶的密碼
         到發(fā)布服務(wù)器的管理鏈接要輸入密碼的可選框,也可以不選,
         也就是不需要密碼來建立發(fā)布到分發(fā)服務(wù)器的鏈接(這當(dāng)然欠缺安全,在測(cè)試環(huán)境下可以使用)
        
    二、新建立的網(wǎng)絡(luò)上另一臺(tái)發(fā)布服務(wù)器(例如JIN001)選擇分發(fā)服務(wù)器
   
    [歡迎使用配置發(fā)布和分發(fā)向?qū)->[選擇分發(fā)服務(wù)器]
   
     -> 使用下列服務(wù)器(選定的服務(wù)器必須已配置為分發(fā)服務(wù)器) -> [選定服務(wù)器](例如FENGYU/FENGYU)
    
     -> [下一步] -> [輸入分發(fā)服務(wù)器(例如FENGYU/FENGYU)的distributor_admin用戶的密碼兩次]
    
     -> [下一步] -> [自定義配置] -> [否,使用下列的默認(rèn)配置]
    
     -> [下一步] -> [完成] -> [確定]
    
     建立一個(gè)數(shù)據(jù)庫復(fù)制發(fā)布的過程:
    
     [復(fù)制] -> [發(fā)布內(nèi)容] -> 右鍵選擇 -> [新建發(fā)布]
    
     -> [下一步] -> [選擇發(fā)布數(shù)據(jù)庫] -> [選中一個(gè)待發(fā)布的數(shù)據(jù)庫]
           
     -> [下一步] -> [選擇發(fā)布類型] -> [事務(wù)發(fā)布]/[合并發(fā)布]

     -> [下一步] -> [指定訂閱服務(wù)器的類型] -> [運(yùn)行SQL Server 2000的服務(wù)器]
       
     -> [下一步] -> [指定項(xiàng)目] -> [在事務(wù)發(fā)布中只可以發(fā)布帶主鍵的表] -> [選中一個(gè)有主鍵的待發(fā)布的表]
      
         ->[在合并發(fā)布中會(huì)給表增加唯一性索引和 ROWGUIDCOL 屬性的唯一標(biāo)識(shí)符字段[rowguid],默認(rèn)值是newid()]
                
               (添加新列將: 導(dǎo)致不帶列列表的 INSERT 語句失敗,增加表的大小,增加生成第一個(gè)快照所要求的時(shí)間)
              
         ->[選中一個(gè)待發(fā)布的表]
    
     -> [下一步] -> [選擇發(fā)布名稱和描述] ->
    
     -> [下一步] -> [自定義發(fā)布的屬性] -> [否,根據(jù)指定方式創(chuàng)建發(fā)布]
    
     -> [下一步] -> [完成] -> [關(guān)閉]
    
     發(fā)布屬性里有很多有用的選項(xiàng):設(shè)定訂閱到期(例如24小時(shí))
     
         設(shè)定發(fā)布表的項(xiàng)目屬性:
    
     常規(guī)窗口可以指定發(fā)布目的表的名稱,可以跟原來的表名稱不一樣。
    
     下圖是命令和快照窗口的欄目  
 
    ( SQL Server 數(shù)據(jù)庫復(fù)制技術(shù)實(shí)際上是用insert,update,delete操作在訂閱服務(wù)器上重做發(fā)布服務(wù)器上的事務(wù)操作
    
      看文檔資料需要把發(fā)布數(shù)據(jù)庫設(shè)成完全恢復(fù)模式,事務(wù)才不會(huì)丟失
     
      但我自己在測(cè)試中發(fā)現(xiàn)發(fā)布數(shù)據(jù)庫是簡(jiǎn)單恢復(fù)模式下,每10秒生成一些大事務(wù),10分鐘后再收縮數(shù)據(jù)庫日志,
          這期間發(fā)布和訂閱服務(wù)器上的作業(yè)都暫停,暫停恢復(fù)后并沒有丟失任何事務(wù)更改 )
    
     發(fā)布表可以做數(shù)據(jù)篩選,例如只選擇表里面的部分列:
    
    例如只選擇表里某些符合條件的記錄, 我們可以手工編寫篩選的SQL語句:
    
    發(fā)布表的訂閱選項(xiàng),并可以建立強(qiáng)制訂閱:
       
       
    成功建立了發(fā)布以后,發(fā)布服務(wù)器上新增加了一個(gè)作業(yè): [ 失效訂閱清除 ]
   
    分發(fā)服務(wù)器上新增加了兩個(gè)作業(yè):
                [ JIN001-dack-dack-5 ] 類型[ REPL快照 ]
                [ JIN001-dack-3 ]      類型[ REPL日志讀取器 ]

         上面藍(lán)色字的名稱會(huì)根據(jù)發(fā)布服務(wù)器名,發(fā)布名及第幾次發(fā)布而使用不同的編號(hào)
           
REPL快照作業(yè)是SQL Server復(fù)制的前提條件,它會(huì)先把發(fā)布的表結(jié)構(gòu),數(shù)據(jù),索引,約束等生成到發(fā)布服務(wù)器的OS目錄下文件
    (當(dāng)有訂閱的時(shí)候才會(huì)生成, 當(dāng)訂閱請(qǐng)求初始化或者按照某個(gè)時(shí)間表調(diào)度生成)

REPL日志讀取器在事務(wù)復(fù)制的時(shí)候是一直處于運(yùn)行狀態(tài)。(在合并復(fù)制的時(shí)候可以根據(jù)調(diào)度的時(shí)間表來運(yùn)行)

      建立一個(gè)數(shù)據(jù)庫復(fù)制訂閱的過程: 
     
     [復(fù)制] -> [訂閱] -> 右鍵選擇 -> [新建請(qǐng)求訂閱]
    
     -> [下一步] -> [查找發(fā)布] -> [查看已注冊(cè)服務(wù)器所做的發(fā)布]
           
     -> [下一步] -> [選擇發(fā)布] -> [選中已經(jīng)建立發(fā)布服務(wù)器上的數(shù)據(jù)庫發(fā)布名]     

     -> [下一步] -> [指定同步代理程序登錄] -> [當(dāng)代理程序連接到代理服務(wù)器時(shí):使用SQL Server身份驗(yàn)證]
                                               (輸入發(fā)布服務(wù)器上distributor_admin用戶名和密碼)     
                                              
     -> [下一步] -> [選擇目的數(shù)據(jù)庫] -> [選擇在其中創(chuàng)建訂閱的數(shù)據(jù)庫名]/[也可以新建一個(gè)庫名]  
    
     -> [下一步] -> [允許匿名訂閱] -> [是,生成匿名訂閱]     
   
     -> [下一步] -> [初始化訂閱] -> [是,初始化架構(gòu)和數(shù)據(jù)]     

     -> [下一步] -> [快照傳送] -> [使用該發(fā)布的默認(rèn)快照文件夾中的快照文件]
                    (訂閱服務(wù)器要能訪問發(fā)布服務(wù)器的REPLDATA文件夾,如果有問題,可以手工設(shè)置網(wǎng)絡(luò)共享及共享權(quán)限)     

     -> [下一步] -> [快照傳送] -> [使用該發(fā)布的默認(rèn)快照文件夾中的快照文件]     

     -> [下一步] -> [設(shè)置分發(fā)代理程序調(diào)度] -> [使用下列調(diào)度] -> [更改] -> [例如每五分鐘調(diào)度一次]     

     -> [下一步] -> [啟動(dòng)要求的服務(wù)] -> [該訂閱要求在發(fā)布服務(wù)器上運(yùn)行SQLServerAgent服務(wù)]     

     -> [下一步] -> [完成] -> [確定]     
    
    成功建立了訂閱后,訂閱服務(wù)器上新增加了一個(gè)類別是[REPL-分發(fā)]作業(yè)(合并復(fù)制的時(shí)候類別是[REPL-合并])
    它會(huì)按照我們給的時(shí)間調(diào)度表運(yùn)行數(shù)據(jù)庫同步復(fù)制的作業(yè)
   
    三、SQL Server復(fù)制配置好后, 可能出現(xiàn)異常情況的實(shí)驗(yàn)日志:

    1.發(fā)布服務(wù)器斷網(wǎng),sql server服務(wù)關(guān)閉,重啟動(dòng),關(guān)機(jī)的時(shí)候,對(duì)已經(jīng)設(shè)置好的復(fù)制沒有多大影響

        中斷期間,分發(fā)和訂閱都接收到?jīng)]有復(fù)制的事務(wù)信息

    2.分發(fā)服務(wù)器斷網(wǎng),sql server服務(wù)關(guān)閉,重啟動(dòng),關(guān)機(jī)的時(shí)候,對(duì)已經(jīng)設(shè)置好的復(fù)制有一些影響

        中斷期間,發(fā)布服務(wù)器的事務(wù)排隊(duì)堆積起來
           (如果設(shè)置了較長時(shí)間才刪除過期訂閱的選項(xiàng), 繁忙發(fā)布數(shù)據(jù)庫的事務(wù)日志可能會(huì)較快速膨脹),
       
        訂閱服務(wù)器會(huì)因?yàn)樵L問不到發(fā)布服務(wù)器,反復(fù)重試
            我們可以設(shè)置重試次數(shù)和重試的時(shí)間間隔(最大的重試次數(shù)是9999, 如果每分鐘重試一次,可以支持約6.9天不出錯(cuò))

        分發(fā)服務(wù)器sql server服務(wù)啟動(dòng),網(wǎng)絡(luò)接通以后,發(fā)布服務(wù)器上的堆積作業(yè)將按時(shí)間順序作用到訂閱機(jī)器上:

        會(huì)需要一個(gè)比較長的時(shí)間(實(shí)際上是生成所有事務(wù)的insert,update,delete語句,在訂閱服務(wù)器上去執(zhí)行)
        我們?cè)谄胀ǖ腜C機(jī)上實(shí)驗(yàn)的58個(gè)事務(wù)100228個(gè)命令執(zhí)行花了7分28秒.

    3.訂閱服務(wù)器斷網(wǎng),sql server服務(wù)關(guān)閉,重啟動(dòng),關(guān)機(jī)的時(shí)候,對(duì)已經(jīng)設(shè)置好的復(fù)制影響比較大,可能需要重新初試化

        我們實(shí)驗(yàn)環(huán)境(訂閱服務(wù)器)從18:46分意外停機(jī)以, 第二天8:40分重啟動(dòng)后,
            已經(jīng)設(shè)好的復(fù)制在8:40分以后又開始正常運(yùn)行了, 發(fā)布服務(wù)器上的堆積作業(yè)將按時(shí)間順序作用到訂閱機(jī)器上
            但復(fù)制管理器里出現(xiàn)快照的錯(cuò)誤提示, 快照可能需要重新初試化,復(fù)制可能需要重新啟動(dòng).
            (我們實(shí)驗(yàn)環(huán)境的機(jī)器并沒有進(jìn)行快照初試化,復(fù)制仍然是成功運(yùn)行的)
   
    四、刪除已經(jīng)建好的發(fā)布和定閱可以直接用delete刪除按鈕
   
    我們最好總是按先刪定閱,再刪發(fā)布,最后禁用發(fā)布的順序來操作。
   
    如果要徹底刪去SQL Server上面的復(fù)制設(shè)置, 可以這樣操作:

    [復(fù)制] -> 右鍵選擇 [禁用發(fā)布] -> [歡迎使用禁用發(fā)布和分發(fā)向?qū)
 
     -> [下一步] -> [禁用發(fā)布] -> [要在"@servername"上禁用發(fā)布]
           
     -> [下一步] -> [完成禁用發(fā)布和分發(fā)向?qū) -> [完成]
    
   我們也可以用T-SQL命令來完成復(fù)制中發(fā)布及訂閱的創(chuàng)建和刪除, 選中已經(jīng)設(shè)好的發(fā)布和訂閱, 按屬標(biāo)右鍵
   可以[生成SQL腳本]。(這里就不詳細(xì)講了, 后面推薦的網(wǎng)站內(nèi)有比較詳細(xì)的內(nèi)容)
  
   當(dāng)你試圖刪除或者變更一個(gè)table時(shí),出現(xiàn)以下錯(cuò)誤
   Server: Msg 3724, Level 16, State 2, Line 1
   Cannot drop the table 'object_name' because it is being used for replication.

   比較典型的情況是該table曾經(jīng)用于復(fù)制,但是后來又刪除了復(fù)制

   處理辦法:

   select * from sysobjects where replinfo >'0'

   sp_configure 'allow updates', 1
   go
   reconfigure with override
   go
   begin transaction
   update sysobjects set replinfo = '0' where replinfo >'0'
   commit transaction
   go
   rollback transaction
   go
   sp_configure 'allow updates', 0
   go
   reconfigure with override
   go


   疑問:
    在合并復(fù)制配置完全后,如果同步代理停止了。我要在程序中去重新啟動(dòng)合并復(fù)制的同步代理。請(qǐng)問使用什么命令或存儲(chǔ)過程呢?
    解決辦法:
sp_start_job
指示 SQL Server 代理程序立即執(zhí)行作業(yè)。

示例
下例啟動(dòng)名為 Nightly Backup 的作業(yè)。

USE msdb
EXEC sp_start_job @job_name = 'Nightly Backup'


2、日志還原功能、、、

/*--說明:
下面的代碼演示了如何利用日志還原功能,將主數(shù)據(jù)庫中的數(shù)據(jù)變化及時(shí)反饋到備用數(shù)據(jù)庫中
備用數(shù)據(jù)庫的數(shù)據(jù)可以隨時(shí)用于查詢,但不能被更新(備用數(shù)據(jù)庫只讀)。
--*/

--首先,創(chuàng)建一個(gè)演示用的數(shù)據(jù)庫(主數(shù)據(jù)庫)
CREATE DATABASE Db_test
ON
( NAME = Db_test_DATA,
      FILENAME = 'c:Db_test.mdf' )
LOG ON
( NAME = Db_test_LOG,
   FILENAME = 'c:Db_test.ldf')
GO

--對(duì)數(shù)據(jù)庫進(jìn)行備份
BACKUP DATABASE Db_test TO DISK='c:test_data.bak' WITH FORMAT
GO

--把數(shù)據(jù)庫還原成備用數(shù)據(jù)庫(演示主數(shù)據(jù)庫與這個(gè)備用數(shù)據(jù)庫之間的同步)
RESTORE DATABASE Db_test_bak FROM DISK='c:test_data.bak'
WITH REPLACE,STANDBY='c:db_test_bak.ldf'
,MOVE 'Db_test_DATA' TO 'c:Db_test_data.mdf'
,MOVE 'Db_test_LOG' TO 'c:Db_test_log.ldf'
GO

--啟動(dòng) SQL Agent 服務(wù)
EXEC master..xp_cmdshell 'net start sqlserveragent',no_output
GO

--創(chuàng)建主服務(wù)器數(shù)據(jù)訓(xùn)與備用服務(wù)器數(shù)據(jù)庫之間同步的作業(yè)
DECLARE  @jogid uniqueidentifier
EXEC msdb..sp_add_job
@job_id = @jogid OUTPUT,
@job_name = N'數(shù)據(jù)同步處理'

--創(chuàng)建同步處理步驟
EXEC msdb..sp_add_jobstep
@job_id = @jogid,
@step_name = N'數(shù)據(jù)同步',
@subsystem = 'TSQL',
@command = N'
--主數(shù)據(jù)庫中進(jìn)行日志備份
BACKUP LOG Db_test TO DISK=''c:test_log.bak'' WITH FORMAT

--備用數(shù)據(jù)庫中還原主數(shù)據(jù)庫的日志備份(應(yīng)用主數(shù)據(jù)庫中的最新變化
--實(shí)際應(yīng)該時(shí)主數(shù)據(jù)庫備份與備用數(shù)據(jù)庫的還原作業(yè)應(yīng)該分別在主服務(wù)器和備用服務(wù)器上建立,并且備份文件應(yīng)該放在主服務(wù)器和備用都能訪問的共享目錄中
RESTORE LOG Db_test_bak FROM DISK=''c:test_log.bak'' WITH STANDBY=''c:test_log.ldf''',
@retry_attempts = 5,
@retry_interval = 5

--創(chuàng)建調(diào)度(每分鐘執(zhí)行一次)
EXEC msdb..sp_add_jobschedule
@job_id = @jogid,
@name = N'時(shí)間安排',
@freq_type=4,
@freq_interval=1,
@freq_subday_type=0x4,
@freq_subday_interval=1,
@freq_recurrence_factor=1

-- 添加目標(biāo)服務(wù)器
EXEC msdb.dbo.sp_add_jobserver
@job_id = @jogid,
@server_name = N'(local)'
GO

--通過上述處理,主數(shù)據(jù)庫與備用數(shù)據(jù)庫之間的同步關(guān)系已經(jīng)設(shè)置完成
--下面開始測(cè)試是否能實(shí)現(xiàn)同步

--在主數(shù)據(jù)庫中創(chuàng)建一個(gè)測(cè)試用的表
CREATE TABLE Db_test.dbo.TB_test(ID int)
GO

--等待1分鐘30秒(由于同步的時(shí)間間隔設(shè)置為1分鐘,所以要延時(shí)才能看到效果)
WAITFOR DELAY '00:01:30'
GO

--查詢一下備用數(shù)據(jù)庫,看看同步是否成功
SELECT * FROM Db_test_bak.dbo.TB_test

/*--結(jié)果:
ID         
-----------

(所影響的行數(shù)為 0 行)
--*/

--測(cè)試成功
GO

--最后刪除所有的測(cè)試
DROP DATABASE Db_test,Db_test_bak
EXEC msdb..sp_delete_job @job_name=N'數(shù)據(jù)同步處理'
GO


/*===========================================================*/

/*--服務(wù)器檔機(jī)處理說明
使用這種方式建立的數(shù)據(jù)庫同步,當(dāng)主數(shù)據(jù)庫不可用時(shí)(例如,主數(shù)據(jù)庫損壞或者停機(jī)檢修)
可以使用以下兩種方法使備用數(shù)據(jù)庫可用。
--*/


--1. 如果主數(shù)據(jù)庫損壞,無法備份出最新的日志,可以直接使用下面的語句使備用數(shù)據(jù)庫可讀寫(丟失最近一次日志還原后的所有數(shù)據(jù))。
--RESTORE LOG Db_test_bak WITH RECOVERY


--2. 如果主數(shù)據(jù)庫可以備份出最新日志,則可以使用下面的語句。
--先備份主數(shù)據(jù)庫的最新的事務(wù)日志
--BACKUP LOG Db_test TO DISK=''c:test_log.bak'' WITH FORMAT
--再在備用數(shù)據(jù)庫中恢復(fù)最新的事務(wù)日志,并且使備用數(shù)據(jù)庫可讀寫(升級(jí)為主數(shù)據(jù)庫)
--RESTORE LOG Db_test_bak FROM DISK='c:test_log.bak'

簡(jiǎn)單地說:
1. 你的sql服務(wù)要使用指定的windows用戶登陸, 而不能使用"本地系統(tǒng)帳戶"
2. 用于登陸sql服務(wù)的用戶要求對(duì)共享目錄具有所有權(quán)限
3. 如果你的電腦沒有加入到域, 還必須保證源和目標(biāo)服務(wù)器的sql服務(wù)設(shè)置的登陸用戶是一樣的(用戶名和密碼都一樣)

網(wǎng)絡(luò)備份主要是權(quán)限設(shè)置問題, 參考下面的備份文件共享目錄權(quán)限設(shè)置方法去解決目錄的共享權(quán)限就可以了

下面假設(shè)是假設(shè)A服務(wù)器上的數(shù)據(jù)庫備份到B服務(wù)器上的共享目錄權(quán)限設(shè)置(兩臺(tái)服務(wù)器應(yīng)該在局域網(wǎng)內(nèi),允許目錄共享訪問)::

1.機(jī)器A,B創(chuàng)建一個(gè)同名的windows用戶,用戶組設(shè)置為administrators,并設(shè)置相同的密碼,做為備份文件夾文件夾的有效訪問用戶,操作:
我的電腦
--控制面板
--管理工具
--計(jì)算機(jī)管理
--用戶和組
--右鍵用戶
--新建用戶
--建立一個(gè)隸屬于administrator組的登陸windows的用戶

2.在B機(jī)器器上,新建一個(gè)共享目錄,做為備份文件的存放目錄,操作:
我的電腦--D: 新建一個(gè)目錄,名為: BAK
--右鍵這個(gè)新建的目錄
--屬性--共享
--選擇"共享該文件夾"
--通過"權(quán)限"按紐來設(shè)置具體的用戶權(quán)限,保證第一步中創(chuàng)建的用戶具有對(duì)該文件夾的所有權(quán)限
--確定


3.設(shè)置 MSSQLSERVER 及 SQLSERVERAGENT 服務(wù)的啟動(dòng)用戶
開始--程序--管理工具--服務(wù)
--右鍵 MSSQLSERVER
--屬性--登陸--選擇"此賬戶"
--輸入或者選擇第一步中創(chuàng)建的windows登錄用戶名
--"密碼"中輸入該用戶的密碼
--確定
--同樣的方法設(shè)置 SQLSERVERAGENT

4.在A機(jī)器上完成對(duì)B機(jī)器BAK目錄的映射

5.查詢分析器中執(zhí)行下面的語句,檢驗(yàn)是否成功:
  exec master..xp_cmdshell 'dir 映射的盤符'

6.A服務(wù)器上做備份計(jì)劃

備注:創(chuàng)建一個(gè)新的用戶只是為了讓MSSQLSERVER服務(wù)的啟動(dòng)帳戶與共享目錄的有效訪問同名且密碼相同,這樣才能通過驗(yàn)證(所以你也可以用其他有效的用戶來代替,只需要滿足用戶名和密碼相同,并且擁有足夠的權(quán)限)(techtarger)

 

發(fā)布:2007-04-22 10:00    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章:
南昌OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號(hào)1層9號(hào)

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費(fèi)獲取試用系統(tǒng)

QQ在線咨詢

泛普南昌OA信息化其他應(yīng)用

南昌OA軟件 南昌OA新聞動(dòng)態(tài) 南昌OA信息化 南昌OA快博 南昌OA行業(yè)資訊 南昌軟件開發(fā)公司 南昌門禁系統(tǒng) 南昌物業(yè)管理軟件 南昌倉庫管理軟件 南昌餐飲管理軟件 南昌網(wǎng)站建設(shè)公司