通过SQL Server 2008数据库复制实现数据库同步备份

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过SQL Server 2008数据库复制实现数据库同步备份相关的知识,希望对你有一定的参考价值。

  1. ----数据库复制(同步)  
  2. -----创建发布服务器 的整个流程逻辑思路  
  3. 1、在本地磁盘上创建一个设置快照的目录(文件夹)  
  4. 2、设置数据库恢复模式为 完整模式 即 RECOVERY MODE =FULL  
  5. 3、启用代理服务  
  6. 4、点击 "复制" 功能按钮 ---右键本地发布---新建分布  进入到发布向导界面  
  7. 5、默认选择第一项(“ZHAOWENZHONG”将充当自己的分发服务器;SQL SERVER将创建分发数据库和日志);当然也可以选择其他服务器作为 分发服务器;  
  8. 6、选择接 代理服务配置为 自动启动模式;  
  9. 7、填写快照文件夹目录绝对路径;  
  10. 8、选择需要执行 “复制”的数据库;  
  11. 9、选择发布快照类型:(快照发布、事务发布、具有可更新订阅的事务发布、合并发布)  
  12.  快照发布:发布服务器按预定的时间间隔向订阅服务器发送已发布数据的快照;  
  13.  事务发布:在订阅服务器收到已发布数据的初始快照后,发布服务器将事务流式传输到订阅服务器;  
  14.  具有可更新订阅的事务发布:在SQL SERVER 订阅服务器收到已发布数据的初始快照后,发布服务器将事务式传输到订阅服务器。来自订阅服务器的  
  15.         事务被应用于发布服务器。  
  16.  合并发布:在订阅服务器收到已发布数据的初始快照后,发布服务器和订阅服务器可以独立更新已发布数据。更改会定期合并。  
  17. 10、选择要发布的对象(我们选择全部对象)。  
  18. 11、选择需要同步的数据(列),如果要进行筛选 则点 右侧的 “添加” 在弹出的窗体中进行筛选。否则直接进行下一步操作(即选择全部)  
  19. 12、设置代理服务的运作方式(立即运行还是设置相应的时间间隔 来运行快照)。如果设置为时间间隔来运行快照,则需要设置 “作业计划”。  
  20. 13、设置 代理快照 登陆名(windows 方式 或 混合模式(指定用户名和密码))  
  21. 14、发布 并填写发布的名称。  
  22.   
  23. --------SCRIPT  
  24. ---本次测试是选择的 快照发布 类型  
  25. /****** 正在编写复制配置的脚本。脚本日期: 2010/4/23 15:27:43 ******/  
  26. /****** 请注意: 出于安全原因,所有密码参数均使用 NULL 或空字符串代替。******/  
  27.   
  28. /****** 开始: 要在发布服务器上运行的脚本 ******/  
  29.   
  30. /****** 正在将服务器作为分发服务器安装。脚本日期: 2010/4/23 15:27:43 ******/  
  31. use master  
  32. exec sp_adddistributor @distributor = N‘WENZHONGZHAO‘, @password = N‘‘  
  33. GO  
  34.   
  35. -- 添加代理配置文件  
  36. -- 更新代理配置文件默认值  
  37. exec sp_MSupdate_agenttype_default @profile_id = 1  
  38. GO  
  39. exec sp_MSupdate_agenttype_default @profile_id = 2  
  40. GO  
  41. exec sp_MSupdate_agenttype_default @profile_id = 4  
  42. GO  
  43. exec sp_MSupdate_agenttype_default @profile_id = 6  
  44. GO  
  45. exec sp_MSupdate_agenttype_default @profile_id = 11  
  46. GO  
  47.   
  48. -- 添加分发数据库  
  49. use master  
  50. exec sp_adddistributiondb @database = N‘distribution‘, @data_folder = N‘D:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/Data‘, @data_file = N‘distribution.MDF‘, @data_file_size = 5, @log_folder = N‘D:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/Data‘, @log_file = N‘distribution.LDF‘, @log_file_size = 2, @min_distretention = 0, @max_distretention = 72, @history_retention = 48, @security_mode = 1  
  51. GO  
  52.   
  53. -- 添加分发发布服务器  
  54. exec sp_adddistpublisher @publisher = N‘WENZHONGZHAO‘, @distribution_db = N‘distribution‘, @security_mode = 1, @working_directory = N‘G:/SQLSERVER2008/ReplData‘, @trusted = N‘false‘, @thirdparty_flag = 0, @publisher_type = N‘MSSQLSERVER‘  
  55. GO  
  56.   
  57.   
  58. /****** 结束: 要在发布服务器上运行的脚本 ******/  
  59.   
  60.   
  61. -- 启用复制数据库  
  62. use master  
  63. exec sp_replicationdboption @dbname = N‘TestCopyDataBase‘, @optname = N‘publish‘, @value = N‘true‘  
  64. GO  
  65.   
  66. exec [TestCopyDataBase].sys.sp_addlogreader_agent @job_login = null, @job_password = null, @publisher_security_mode = 1  
  67. GO  
  68. exec [TestCopyDataBase].sys.sp_addqreader_agent @job_login = null, @job_password = null, @frompublisher = 1  
  69. GO  
  70. -- 添加快照发布  
  71. use [TestCopyDataBase]  
  72. exec sp_addpublication @publication = N‘zwz_publication‘, @description = N‘来自发布服务器“WENZHONGZHAO”的数据库“TestCopyDataBase”的快照发布。‘, @sync_method = N‘native‘, @retention = 0, @allow_push = N‘true‘, @allow_pull = N‘true‘, @allow_anonymous = N‘true‘, @enabled_for_internet = N‘true‘, @snapshot_in_defaultfolder = N‘true‘, @compress_snapshot = N‘false‘, @ftp_address = N‘192.168.0.101‘, @ftp_port = 21, @ftp_subdirectory = N‘/ftp‘, @ftp_login = N‘admin‘, @allow_subscription_copy = N‘false‘, @add_to_active_directory = N‘false‘, @repl_freq = N‘snapshot‘, @status = N‘active‘, @independent_agent = N‘true‘, @immediate_sync = N‘true‘, @allow_sync_tran = N‘false‘, @autogen_sync_procs = N‘false‘, @allow_queued_tran = N‘false‘, @allow_dts = N‘false‘, @replicate_ddl = 1  
  73. GO  
  74.   
  75.   
  76. exec sp_addpublication_snapshot @publication = N‘zwz_publication‘, @frequency_type = 1, @frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0, @frequency_subday = 0, @frequency_subday_interval = 0, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 0, @active_end_date = 0, @job_login = null, @job_password = null, @publisher_security_mode = 0, @publisher_login = N‘sa‘, @publisher_password = N‘‘  
  77. exec sp_grant_publication_access @publication = N‘zwz_publication‘, @login = N‘sa‘  
  78. GO  
  79. exec sp_grant_publication_access @publication = N‘zwz_publication‘, @login = N‘NT AUTHORITY/SYSTEM‘  
  80. GO  
  81. exec sp_grant_publication_access @publication = N‘zwz_publication‘, @login = N‘wenzhongzhao/Administrator‘  
  82. GO  
  83. exec sp_grant_publication_access @publication = N‘zwz_publication‘, @login = N‘NT SERVICE/SQLSERVERAGENT‘  
  84. GO  
  85. exec sp_grant_publication_access @publication = N‘zwz_publication‘, @login = N‘NT SERVICE/MSSQLSERVER‘  
  86. GO  
  87. exec sp_grant_publication_access @publication = N‘zwz_publication‘, @login = N‘distributor_admin‘  
  88. GO  
  89.   
  90. -- 添加快照项目  
  91. use [TestCopyDataBase]  
  92. exec sp_addarticle @publication = N‘zwz_publication‘, @article = N‘A‘, @source_owner = N‘dbo‘, @source_object = N‘A‘, @type = N‘logbased‘, @description = N‘‘, @creation_script = N‘‘, @pre_creation_cmd = N‘drop‘, @schema_option = 0x000000000803509D, @identityrangemanagementoption = N‘manual‘, @destination_table = N‘A‘, @destination_owner = N‘dbo‘, @status = 24, @vertical_partition = N‘false‘, @ins_cmd = N‘SQL‘, @del_cmd = N‘SQL‘, @upd_cmd = N‘SQL‘  
  93. GO  
  94.   
  95.  -----SCRIPT  
  96.   
  97. -----设置FTP方式 访问 数据库复制快照  
  98. 15、在主数据库上设置FTP服务,然后建立一个指向 数据库复制快照 文件夹的FTP站点。  
  99.  并设置好可以远程连接FTP站点的账号,最后在 发布服务器上设置一下FTP客户端即:  
  100.  a、选择刚刚建立的 本地发布名称 例如: zwz_publication  
  101.  b、右键 ----属性----选中FTP快照---选中右侧 “运行订阅服务器使用FTP下载快照文件”,然后设置FTP参数  
  102.   需要注意的是 "从FTP 根文件夹开始的路径" 参数 设置为 “/ftp’即可。点击 确认 按钮后会在 快照文件夹  
  103.   中 创建一个FTP 文件夹,并在该文件夹中生成快照文件。  
  104.   
  105.    
  106. ------订阅服务器  
  107. 注意: 进入登陆 订阅服务器时,在服务器名称 中一定要输入 订阅服务器名称 而不能输入 订阅服务器的IP 否则会  
  108.   提示错误。  
  109. 1、进入订阅服务器 >>>>>复制>>>>>本地订阅>>>>>右键>>>>新建订阅  
  110. 2、选择发布服务器>>>>> 在数据库和发布 中选择 发布服务器上的 发布名称例如:zwz_publiction  
  111. 3、选择分发代理的订阅方式(推送订阅、请求订阅)  
  112.  推送订阅:是在发布服务器 XXX 上运行所有代理的方式。  
  113.  请求订阅:是在订阅服务器 YYY 上运行每个代理的方式。  
  114. 4、我这里选择的是 推送订阅 方式。  
  115. 5、紧接着 选择 订阅服务器和 订阅服务器上的 订阅数据库。可以同时设置多个订阅服务器,只需 点击 右下角的 添加  
  116.  订阅服务器。同样需要注意的时,在订阅服务器的 服务器名称 中一定要输入 订阅服务器名称。  
  117. 6、指定每个分发代理的进程账号和连接 (即配置安全选项 :设置和分发服务器 上设置的 代理方式、 用户、密码 一样)  
  118. 7、指定 每个代理的同步计划 这里 选择  ”连续运行“  
  119. 8、开始创建订阅  
  120.   
  121. -----------------开始: 要在发布服务器“WENZHONGZHAO”上运行的脚本-----------------  
  122. use [TestCopyDataBase]  
  123. exec sp_addsubscription @publication = N‘zwz_publication‘, @subscriber = N‘ZFM-PC‘, @destination_db = N‘TestCopyDataBase‘, @sync_type = N‘Automatic‘, @subscription_type = N‘pull‘, @update_mode = N‘read only‘  
  124. GO  
  125. -----------------结束: 要在发布服务器“WENZHONGZHAO”上运行的脚本-----------------  
  126.   
  127. -----------------开始: 要在订阅服务器“ZFM-PC”上运行的脚本-----------------  
  128. use [TestCopyDataBase]  
  129. exec sp_addpullsubscription @publisher = N‘WENZHONGZHAO‘, @publication = N‘zwz_publication‘, @publisher_db = N‘TestCopyDataBase‘, @independent_agent = N‘True‘, @subscription_type = N‘pull‘, @description = N‘‘, @update_mode = N‘read only‘, @immediate_sync = 1  
  130.   
  131. exec sp_addpullsubscription_agent @publisher = N‘WENZHONGZHAO‘, @publisher_db = N‘TestCopyDataBase‘, @publication = N‘zwz_publication‘, @distributor = N‘WENZHONGZHAO‘, @distributor_security_mode = 0, @distributor_login = N‘sa‘, @distributor_password = null, @enabled_for_syncmgr = N‘False‘, @frequency_type = 64, @frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0, @frequency_subday = 0, @frequency_subday_interval = 0, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 20110623, @active_end_date = 99991231, @alt_snapshot_folder = N‘‘, @working_directory = N‘‘, @use_ftp = N‘True‘, @job_login = null, @job_password = null, @publication_type = 0  
  132. GO  
  133. -----------------结束: 要在订阅服务器“ZFM-PC”上运行的脚本-----------------  
  134.   
  135.    
  136. 复制订阅 事务模式  
  137. 发布库  
  138. 1、 表名不能修改  
  139. 2、 表上可以增加列(只能在表的末尾追加新列,不能在中间插入新列。在末尾追加的新列默认被发布到订阅库上)  
  140. 3、 可以删除列  
  141. 4、 不能修改列列类型  
  142.   
  143.   
  144. 订阅库  
  145. 1、可以删除参与订阅的列,但会导致订阅失败。可以通过修改 自动生成的 存储过程或SQL语句实现订阅。  
  146. 2、可以增加列  
  147. 3、参与订阅的列不能修改列名。  
  148. 4、实现不了订阅索引和触发器  
  149.   
  150. 如果修改过发布数据库服务器的名称会报错,执行执行下面SQL即可 修复错误  
  151.   
  152.    
  153. select @@servername  
  154.       select serverproperty(‘servername‘)  
  155. 如果两个结果不一致,说明机器改过名字,在配置复制的时候就会报错误。  
  156.   
  157.      --执行下面的语句,完成后重新启动SQL服务   (修复)  
  158.       
  159.   if   serverproperty(‘servername‘)   <>   @@servername     
  160.          begin     
  161.              declare   @server   sysname     
  162.             set   @server   =   @@servername     
  163.             exec   sp_dropserver   @server   =   @server     
  164.             set   @server   =   cast(serverproperty(‘servername‘)   as   sysname)    
  165.             exec   sp_addserver   @server   =   @server   ,   @local   =   ‘LOCAL‘    
  166.         end  
  167.   
  168.   
  169.   

以上是关于通过SQL Server 2008数据库复制实现数据库同步备份的主要内容,如果未能解决你的问题,请参考以下文章

从 Win CE 设备到 SQL Server 2008 R2 的 SQL 复制

SQL SERVER 2008复制数据库时发生执行SQL Server代理作业错误

在 SQL Server 2008 R2 事务复制中筛选列数据

SQL server 2008 express安装失败 数据库引擎 sql server复制安装失败

SQL SERVER 2008 R2 数据库附加到 SQL server 2005,怎么整

如果已附加数据库,如何使用 Transact-SQL 和 SQL Server 2008 R2 进行测试? [复制]