• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    同步兩個SQLServer數據庫

    發布: 2008-4-25 13:01 | 作者: 網絡轉載 | 來源: 中程在線 | 查看: 260次 | 進入軟件測試論壇討論

    領測軟件測試網

     

     3、SQL Server復制配置好后, 可能出現異常情況的實驗日志:

      1.發布服務器斷網,sql server服務關閉,重啟動,關機的時候,對已經設置好的復制沒有多大影響

            中斷期間,分發和訂閱都接收到沒有復制的事務信息

      2.分發服務器斷網,sql server服務關閉,重啟動,關機的時候,對已經設置好的復制有一些影響

            中斷期間,發布服務器的事務排隊堆積起來
               (如果設置了較長時間才刪除過期訂閱的選項, 繁忙發布數據庫的事務日志可能會較快速膨脹),
           
            訂閱服務器會因為訪問不到發布服務器,反復重試
                我們可以設置重試次數和重試的時間間隔(最大的重試次數是9999, 如果每分鐘重試一次,可以支持約6.9天不出錯)

            分發服務器sql server服務啟動,網絡接通以后,發布服務器上的堆積作業將按時間順序作用到訂閱機器上:

            會需要一個比較長的時間(實際上是生成所有事務的insert,update,delete語句,在訂閱服務器上去執行)
            我們在普通的PC機上實驗的58個事務100228個命令執行花了7分28秒.

      3.訂閱服務器斷網,sql server服務關閉,重啟動,關機的時候,對已經設置好的復制影響比較大,可能需要重新初試化

            我們實驗環境(訂閱服務器)從18:46分意外停機以, 第二天8:40分重啟動后, 已經設好的復制在8:40分以后又開始正常運行了, 發布服務器上的堆積作業將按時間順序作用到訂閱機器上, 但復制管理器里出現快照的錯誤提示, 快照可能需要重新初試化,復制可能需要重新啟動.(我們實驗環境的機器并沒有進行快照初試化,復制仍然是成功運行的)
       

      4、刪除已經建好的發布和定閱可以直接用delete刪除按鈕
       
      我們最好總是按先刪定閱,再刪發布,最后禁用發布的順序來操作。
       
      如果要徹底刪去SQL Server上面的復制設置, 可以這樣操作:

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

       比較典型的情況是該table曾經用于復制,但是后來又刪除了復制。

       處理辦法:
       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
     

      1、疑問:

      在合并復制配置完全后,如果同步代理停止了。我要在程序中去重新啟動合并復制的同步代理。請問使用什么命令或存儲過程呢?
     
      解決辦法:

    sp_start_job
    指示 SQL Server 代理程序立即執行作業。

      示例

    下例啟動名為 Nightly Backup 的作業。

    USE msdb
    EXEC sp_start_job @job_name = 'Nightly Backup'


      2、日志還原功能

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

      首先,創建一個演示用的數據庫(主數據庫)。

    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

      對數據庫進行備份。

    BACKUP DATABASE Db_test TO DISK='c:\test_data.bak' WITH FORMAT
    GO

      把數據庫還原成備用數據庫(演示主數據庫與這個備用數據庫之間的同步)。

    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

      啟動 SQL Agent 服務。

    EXEC master..xp_cmdshell 'net start sqlserveragent',no_output
    GO

      創建主服務器數據訓與備用服務器數據庫之間同步的作業。

    DECLARE  @jogid uniqueidentifier
    EXEC msdb..sp_add_job
    @job_id = @jogid OUTPUT,
    @job_name = N'數據同步處理'

      創建同步處理步驟:

    EXEC msdb..sp_add_jobstep
    @job_id = @jogid,
    @step_name = N'數據同步',
    @subsystem = 'TSQL',
    @command = N'

      主數據庫中進行日志備份

    BACKUP LOG Db_test TO DISK=''c:\test_log.bak'' WITH FORMAT

      備用數據庫中還原主數據庫的日志備份(應用主數據庫中的最新變化。

      實際應該時主數據庫備份與備用數據庫的還原作業應該分別在主服務器和備用服務器上建立,并且備份文件應該放在主服務器和備用都能訪問的共享目錄中。

    RESTORE LOG Db_test_bak FROM DISK=''c:\test_log.bak'' WITH STANDBY=''c:\test_log.ldf''',
    @retry_attempts = 5,
    @retry_interval = 5

      創建調度(每分鐘執行一次)。

    EXEC msdb..sp_add_jobschedule
    @job_id = @jogid,
    @name = N'時間安排',
    @freq_type=4,
    @freq_interval=1,
    @freq_subday_type=0x4,
    @freq_subday_interval=1,
    @freq_recurrence_factor=1

      添加目標服務器。

    EXEC msdb.dbo.sp_add_jobserver
    @job_id = @jogid,
    @server_name = N'(local)'
    GO

      通過上述處理,主數據庫與備用數據庫之間的同步關系已經設置完成。

      下面開始測試是否能實現同步:

      在主數據庫中創建一個測試用的表

    CREATE TABLE Db_test.dbo.TB_test(ID int)
    GO

      等待1分鐘30秒(由于同步的時間間隔設置為1分鐘,所以要延時才能看到效果)

    WAITFOR DELAY '00:01:30'
    GO

      查詢一下備用數據庫,看看同步是否成功

    SELECT * FROM Db_test_bak.dbo.TB_test

    /*--結果:
    ID         
    -----------

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

      測試成功

    GO

      最后刪除所有的測試

    DROP DATABASE Db_test,Db_test_bak
    EXEC msdb..sp_delete_job @job_name=N'數據同步處理'
    GO


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

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

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


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

      簡單地說:

      1. 你的sql服務要使用指定的windows用戶登陸, 而不能使用"本地系統帳戶"
      2. 用于登陸sql服務的用戶要求對共享目錄具有所有權限
      3. 如果你的電腦沒有加入到域, 還必須保證源和目標服務器的sql服務設置的登陸用戶是一樣的(用戶名和密碼都一樣)

      網絡備份主要是權限設置問題, 參考下面的備份文件共享目錄權限設置方法去解決目錄的共享權限就可以了

      下面假設是假設A服務器上的數據庫備份到B服務器上的共享目錄權限設置(兩臺服務器應該在局域網內,允許目錄共享訪問)::

      1.機器A,B創建一個同名的windows用戶,用戶組設置為administrators,并設置相同的密碼,做為備份文件夾文件夾的有效訪問用戶,操作:

      我的電腦--控制面板--管理工具--計算機管理--用戶和組--右鍵用戶--新建用戶--建立一個隸屬于administrator組的登陸windows的用戶

      2.在B機器器上,新建一個共享目錄,做為備份文件的存放目錄,操作:

      我的電腦--D:\ 新建一個目錄,名為: BAK--右鍵這個新建的目錄--屬性--共享--選擇"共享該文件夾"--通過"權限"按紐來設置具體的用戶權限,保證第一步中創建的用戶具有對該文件夾的所有權限--確定

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

      4.在A機器上完成對B機器BAK目錄的映射

      5.查詢分析器中執行下面的語句,檢驗是否成功:

    exec master..xp_cmdshell 'dir 映射的盤符'

      6.A服務器上做備份計劃

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

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    33/3<123

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>