请教一个logshipping的问题
我想通过log shipping来实现两台server之间的备份
1、当我对备份服务器进行数据库还原时,我选择“不对数据库执行任何操作,不回滚未提交的事务,可以还原其他事务日志”将其还原为数据库“ttt”,之后数据库一直显示“ttt(正在还原...)”,请问正常吗?
2、我其他的都设置好了,生产服务器上的日志也拷贝到了备份服务器,任务执行也成功了,但是我在生产库上insert了一个值,为什么在备份服务器上看不到?
3、“ttt(正在还原...)”一直没有方法访问,我只能通过RESTORE DATABASE ttt WITH NORECOVERY来进行访问,但是这样的话我的数据库还在同步吗?
谢谢各位大牛

解决方案 »

  1.   

    '见识短浅,第一次看到log shipping,学习了...'LogShipping(事务日志传送)一些介绍
    一、关于LogShipping概念定义
    LogShipping即日志传送,通过日志传送,能够定期自动同步位于不同服务器或同一服务器不同实例之间的数据库,它通过将主服务器上备份出来的一系列日志自动传送到辅助服务器上并进行恢复,即在主数据库上做的增删改操作后,备份的数据库通过恢复传送过来的日志文件,达到和主数据库一致,这样就防止了一旦主数据库被破坏后数据丢失的危险问题。二、实现日志传送的组成部分
    1. Primary server(Primary database): 主服务器中用于实现日志传送的主体数据库2. Secondary server(Secondary database):  辅助服务器中恢复日志文件的数据库,可以为多个主服务器提供日志备份。3. Monitor Server:可选的监视服务器,用于记录日志传送过程中出现的异常情况,失败时给出警告,存储在msdb数据库中。三、实现日志传送所需的环境
     1.至少两台SQL server 2005服务器,或同一服务器的两个实例。 2. SQL server 2005的版本要求为Standard, Workgroup, Enterprise, or Developer Edition之一。 3.主体服务器的主体数据库使用完全恢复模式(FULL)或大容量日志恢复模式(Bulk-Logged)。4.主体服务器中SQL server Agent服务启动帐户拥有对存放备份日志文件目录读写的权限,辅助服务器中SQL server Agent启动帐户一是要有对主服务器上存放备份日志文件目录读的权限,用于从主服务器复制日志文件,二是要拥有辅助服务器上存放用于恢复日志文件目录读写的权限。用于将复制过来的日志文件写入恢复日志文件目录。不建议将备份出来的日志文件存放到主服务器,可以考虑放到文件服务器上,减少主服务器的I/O。 5.若主服务器备份出的日志文件要存放到其他服务器或文件服务器,请使用Windows域用户帐户启动主服务器的SQL server Agent服务。 6.启动主体服务器和辅助服务器的SQL server Agent服务,若有监视服务器,也应当启动监视服务器的SQL server Agent服务。 四、实现日志传送所需要用到的几个作业
          1. 备份作业(backup job):运行在主服务器上,为每个实现日志传送数据库创建一个备份作业,备份主体数据库日志,删除旧的日志文件或历史记录信息,并将其记录到主服务器和监视服务器上。      2. 复制作业(copy job): 运行在辅助服务器上,将备份文件从主服务器复制到辅助服务器,并记录信息到辅助服务器和监视服务器上。      3. 还原作业(restore job): 运行在辅助服务器上,为每个日志传送配置创建一个还原作业,恢复从主体数据库传送过来的日志,删除旧的日志文件或历史记录信息,并将其记录到辅助服务器和监视服务器上。       4. 警报作业(alter job):运行于监视服务器上,警报作业由使用监视器服务器实例的所有日志传送配置中的主数据库和辅助数据库所共享。 
      

  2.   

    1 因为你 选择 “不回滚未提交的事务,可以还原其他事务日志”所以你看到的状态是正常的。
    2 logshipping不是时时同步的,有可能你设置的是5分钟同步或更长时间同步。
    3 状态不正常,日志传送,备用库是时时可用的。
      

  3.   

    谢谢wxf163
    第二点,我设置的是(1(备份)+1(拷贝)+1(还原)) = 3分钟,等的时间肯定比这长,应该是没有问题的
    第三地,数据库显示(正在还原),好像就一直是不能访问的,我在数据库选择中无法选择ttt数据库,如果第一点是正确地话,数据库以“不回滚未提交的事务,可以还原其他事务日志”还原的数据库我无法查看到任何的表
      

  4.   

    备用库执行 就可用了,restore database 你的库名 with recovery
      

  5.   

    执行语句之后logshipping操作是不是就不会继续了?如果我还想再继续的话可以吗?应该如何操作?谢谢
      

  6.   

    1、当我对备份服务器进行数据库还原时,我选择“不对数据库执行任何操作,不回滚未提交的事务,可以还原其他事务日志”将其还原为数据库“ttt”,之后数据库一直显示“ttt(正在还原...)”,请问正常吗?
    A: 这是正常的,因为还原日志时使用了NORECOVERY的选项,不然后面的日志备份还怎么做还原呢.2、我其他的都设置好了,生产服务器上的日志也拷贝到了备份服务器,任务执行也成功了,但是我在生产库上insert了一个值,为什么在备份服务器上看不到?
    A: 因为备份日志或恢复日志的Job排程还没到,可以手工执行一下即可.3、“ttt(正在还原...)”一直没有方法访问,我只能通过RESTORE DATABASE ttt WITH NORECOVERY来进行访问,但是这样的话我的数据库还在同步吗?
    A: 楼主的命令可能写错了,正确应该是WITH RECOVERY后才可以访问.提醒一下,这样做后面的日志备份就
       没法再还原了.
      

  7.   

    可以最ttt(正在还原..)的库建个数据库快照即可访问,详见Google.
      

  8.   

    谢谢,可以了,顺便提提另外一个已经解决的问题供别人参考
    误删除备份作业导致日志传送不能再用
    问题产生步骤:1、手动删除了主备数据库服务器上面的同步作业
    2、再次进行log shipping设置,提示backup服务器已经被主服务器设置为备份服务器,是否需要覆盖
    3、点击覆盖,等5分钟左右 出现“行索引必须大于零且小于行数 ..”等报错信息
    解决方法:登陆主服务器
    1、选择msdb数据库
    2、将以下表中数据清除select * from log_shipping_monitor_alert
    select * from log_shipping_monitor_error_detail    
    select * from log_shipping_monitor_history_detail    
    select * from log_shipping_monitor_primary    
    select * from log_shipping_monitor_secondary    
    select * from log_shipping_primaries    
    select * from log_shipping_primary_databases    
    select * from log_shipping_primary_secondaries    
    select * from log_shipping_secondaries    
    select * from log_shipping_secondary    
    select * from log_shipping_secondary_databases    参照
    http://topic.csdn.net/u/20110303/15/a567dc81-f490-4cfc-ba7c-4ef616fbf202.html
    详细解释
    太感谢楼上了 附带参考资料更改日志传送之组态设定  您可以使用数据库维护计划之【属性】对话盒来更改日志传送相关设定。在【交易记录文件备份】设定页提供的选项可更改日志传送过程中交易日志文件备份的组态。  【记录传送】设定页显示出您先前在维护计划内设定的日志传送配对服务器;如果您设定了其它组日志传送配对服务器,也会列在此处。本设定页也包含下列选项:新增目的数据库(用以建立新的日志传送配对服务器)、删除既有日志传送配对服务器、编辑目前的日志传送配对服务器之属性,以及移除整个日志传送功能。  当您在【记录传送】设定页之中点选【编辑】时,将开启【编辑目的数据库】对话盒。您可以在对话盒内【一般】设定页检视与修改次要服务器的交易日志文件之目录位置,以及未来做为主要服务器时分享目录之路径。【初始化】设定页则可让您更改复原模式,以及次要服务器上复制与回存之频率。【临界值】页可以设定日志传送之临界周期。  在【超出同步临界值】项目可设定:当日志传送监控程序产生警示讯息之前所能允许的最大时间间隔 (介于最近一次来源数据库交易日志文件备份以及最新的交易日志文件回存动作之间)。您也可以在日志传送监控程序之中设定此参数。【在入时间延迟】、【档案保留期限】以及【历程记录保留期限】则是与次要服务器相关的设定。
     
    注:监控服务器在这些组态选项中扮演相当重要的角色。因为【记录传送】设定页的大部分信息取决于监控服务器,所以一但监控服务器停摆时,您将无法更改日志传送的组态设定值。在监控服务器执行SQL Server 2000 Profiler时,主要服务器会连到监控服务器,然后从日志传送资料表中取得既有的日志传送计划。因此,要改变日志传送计划的设定时,您必须确定在 Enterprise Manager内可以连接到监控服务器。检查与监控日志传送动作  SQL Server 2000的日志传送功能还提供了一项日志传送监控程序,可让您安装在另一台独立监控用服务器。
      在SQL Server企业版与开发版的msdb数据库中共有七个关于日志传送的资料表:
      log_shipping_plans  
      log_shipping_plan_databases  
      log_shipping_databases  
      log_shipping_plan_history  
      log_shipping_monitor  
      log_shipping_primaries  
      log_shipping_secondaries
      
      上述每一个资料表都存在于主要、次要以及监控服务器上。各服务器也会使用某些资料表储存资料,视该服务器在日志传送系统的角色为何。
      
      在主要服务器上检视日志传送动作 从Enterprise Manager 里,您可以登入主要服务器,并观察与监控日志传送动作。如果某个数据库已设定要进行日志传送,在数据库【内容】对话盒的【一般】页可得知该数据库的角色 (来源数据库;或是目的数据库),也可知道日志传送监控程序是位于那一台服务器上。您可以在Enterprise Manager内SQL Server Agent的【作业】节点,检视日志传送与交易日志文件备份工作所执行的状态与历史纪录。主要服务器只使用msdb数据库的两个日志传送资料表。在 log_shipping_databases资料表中,SQL Server新增的每一笔资料将会把数据库维护计划ID以及日志传送来源数据库连结在一起。在log_shipping_monitor资料表中,SQL Server新增的每一笔资料包含了监控服务器的名称,以及登入数据库的方式。
      
      在次要服务器上检视日志传送动作 日志传送计划存在于次要服务器。您可在次要服务器监控SQL Agent工作(复制交易日志文件到次要服务器,并回存至目的数据库)。 您也可检视目的数据库的属性对话盒,以决定该数据库在日志传送过程所扮演的角色。
      
      在次要服务器上,SQL Server使用msdb数据库的四个日志传送资料表。当SQL Server建立一个日志传送计划之后,它会新增一笔资料到log_shipping_plan资料表,用以纪录:主要与次要服务器的名称、档案位置、复制与回存工作ID(来自于次要服务器之sysjobs系统资料表)。在log_shipping_plan_databases资料表,SQL Server会连结维护计划以及来源/目的数据库名称,而且储存最后一次进行档案复制与加载动作的相关信息。 log_shipping_plan_history资料表则是将每次日志传送的复制与回存事件纪录下来,连同该工作是否成功的信息。SQL Server也会新增一笔资料在log_shipping_monitor资料表,用以参照监控服务器。
      
      如果您勾选了【Allow database to assume primary role】复选框,您将在次要服务器上看到一个重要的额外项目:另一个数据库维护计划(与您先前所建立的维护计划名称相同),但是并没有激活日志传送。您也会看到一个非作用中(disabled)的SQL Agent工作(备份该数据库的交易日志)。也许您会被这些项目所混淆。尽管它们的名字相同,但是此额外产生的维护计划却不同于当初所建立的那个。SQL Server保留第二个逆向维护计划是为了以后可能发生的主要/次要服务器角色对调动作所准备。  在监控服务器上检视日志传送动作 当您正确设定日志传送之后,SQL Server 会激活监控服务器上Enterprise Manager 的日志传送监控工具程序。此外,SQL Server会建立两个SQL Agent 警示工作(alert job):一个用来执行工作,另一个处理out-of-sync情况。
      
      使用监控工具程序的方式是,开启Enterprise Manager并连至监控服务器,展开【Management】节点,然后点选【记录传送监视器(Log Shipping Monitor)】。当您点选此工具程序时,其内会列出日志传送配对服务器的清单。您可在配对服务器上按下鼠标右键,检视其备份、复制与回存等工作的执行历史纪录。这些历史纪录十分有用,因为您从这里得到的错误讯息会比从次要服务器上(SQL Agent 复制与回存工作)得到的更为详尽。
      如图所示:当您开启配对服务器之属性对话盒,并进入【Status】设定页时,您可检视此配对服务器执行备份与回存程序之状态。  其状态(Status)可以是Normal 或是Out-of-Sync。如果SQL Server Agent尚未复制或回存交易日志文件,对话盒内将会显示日志文件名为first_file_000000000000.trn。这并不是实际的文件名称,只不过是用来标示SQL Server Agent尚未处理任何档案而已。在【Status】设定页也会显示备份、复制以及加载(回存)等动作执行时所耗费的时间。此设定页之信息不会自动更新,所以您必须将此对话盒关闭后再开启,才能更新其资料。
       
      SQL Server只使用msdb数据库内两个资料表来储存日志传送服务器之相关资料。SQL Server在这两个资料表中都给予一个ID做为连结,以及一个外来键(foreign key)。该外来键是设定在log_shipping_secondaries资料表上,并参照log_shipping_primaries资料表的 primary_id字段(这两个是所有日志传送资料表中唯一具有外来键关系的资料表)。在log_shipping_primaries资料表内的每笔资料都包含日志传送的相关信息,例如:来源数据库名称、交易日志文件备份工作执行之状态,以及已规划的停摆信息(可避免不必要的警示讯息)。而 log_shipping_secondaries 资料表之每笔资料关于目的数据库之信息;每个目的数据库附属于特定的日志传送来源数据库。这两个资料表互相连结的结果就是日志传送监控程序内所显示的配对服务器信息。移除与重新组态日志传送功能  如果您想从数据库维护计划中移除日志传送功能,可参考下列方式:开启该计划的属性对话盒,选择【记录传送】设定页,然后点选【移出记录传送】。此动作将从次要服务器上移除SQL Server Agent的备份与回存工作,并清除日志传送资料表内的所有相关资料。此外,日志传送监控程序的相关信息也会一并被清除。然而此动作将会适当地保留主要服务器上SQL Server Agent的交易日志备份工作。只有在删除数据库维护计划时,该工作才会被移除。假如您想从监控服务器内移除掉日志传送监控程序,请用手动方式将 log_shipping_primaries与log_shipping_secondaries这两个资料表(位于监控服务器的msdb数据库)的资料删除即可。
      如果您在数据库维护计划内设定日志传送时,就已允许目的数据库可以做为新的日志传送来源数据库。当您删除主要服务器的维护计划时,次要服务器上仍然会保留其数据库维护计划,以及交易日志文件备份工作。删除这些项目的方式是将次要服务器上与日志传送相关的数据库维护计划直接删除。
    更改日志传送之组态设定  您可以使用数据库维护计划之【属性】对话盒来更改日志传送相关设定。在【交易记录文件备份】设定页提供的选项可更改日志传送过程中交易日志文件备份的组态。  【记录传送】设定页显示出您先前在维护计划内设定的日志传送配对服务器;如果您设定了其它组日志传送配对服务器,也会列在此处。本设定页也包含下列选项:新增目的数据库(用以建立新的日志传送配对服务器)、删除既有日志传送配对服务器、编辑目前的日志传送配对服务器之属性,以及移除整个日志传送功能。  当您在【记录传送】设定页之中点选【编辑】时,将开启【编辑目的数据库】对话盒。您可以在对话盒内【一般】设定页检视与修改次要服务器的交易日志文件之目录位置,以及未来做为主要服务器时分享目录之路径。【初始化】设定页则可让您更改复原模式,以及次要服务器上复制与回存之频率。【临界值】页可以设定日志传送之临界周期。  在【超出同步临界值】项目可设定:当日志传送监控程序产生警示讯息之前所能允许的最大时间间隔 (介于最近一次来源数据库交易日志文件备份以及最新的交易日志文件回存动作之间)。您也可以在日志传送监控程序之中设定此参数。【在入时间延迟】、【档案保留期限】以及【历程记录保留期限】则是与次要服务器相关的设定。
     
    注:监控服务器在这些组态选项中扮演相当重要的角色。因为【记录传送】设定页的大部分信息取决于监控服务器,所以一但监控服务器停摆时,您将无法更改日志传送的组态设定值。在监控服务器执行SQL Server 2000 Profiler时,主要服务器会连到监控服务器,然后从日志传送资料表中取得既有的日志传送计划。因此,要改变日志传送计划的设定时,您必须确定在 Enterprise Manager内可以连接到监控服务器。检查与监控日志传送动作  SQL Server 2000的日志传送功能还提供了一项日志传送监控程序,可让您安装在另一台独立监控用服务器。
      在SQL Server企业版与开发版的msdb数据库中共有七个关于日志传送的资料表:
      log_shipping_plans  
      log_shipping_plan_databases  
      log_shipping_databases  
      log_shipping_plan_history  
      log_shipping_monitor  
      log_shipping_primaries  
      log_shipping_secondaries
      
      上述每一个资料表都存在于主要、次要以及监控服务器上。各服务器也会使用某些资料表储存资料,视该服务器在日志传送系统的角色为何。
      
      在主要服务器上检视日志传送动作 从Enterprise Manager 里,您可以登入主要服务器,并观察与监控日志传送动作。如果某个数据库已设定要进行日志传送,在数据库【内容】对话盒的【一般】页可得知该数据库的角色 (来源数据库;或是目的数据库),也可知道日志传送监控程序是位于那一台服务器上。您可以在Enterprise Manager内SQL Server Agent的【作业】节点,检视日志传送与交易日志文件备份工作所执行的状态与历史纪录。主要服务器只使用msdb数据库的两个日志传送资料表。在 log_shipping_databases资料表中,SQL Server新增的每一笔资料将会把数据库维护计划ID以及日志传送来源数据库连结在一起。在log_shipping_monitor资料表中,SQL Server新增的每一笔资料包含了监控服务器的名称,以及登入数据库的方式。
      
      在次要服务器上检视日志传送动作 日志传送计划存在于次要服务器。您可在次要服务器监控SQL Agent工作(复制交易日志文件到次要服务器,并回存至目的数据库)。 您也可检视目的数据库的属性对话盒,以决定该数据库在日志传送过程所扮演的角色。
      
      在次要服务器上,SQL Server使用msdb数据库的四个日志传送资料表。当SQL Server建立一个日志传送计划之后,它会新增一笔资料到log_shipping_plan资料表,用以纪录:主要与次要服务器的名称、档案位置、复制与回存工作ID(来自于次要服务器之sysjobs系统资料表)。在log_shipping_plan_databases资料表,SQL Server会连结维护计划以及来源/目的数据库名称,而且储存最后一次进行档案复制与加载动作的相关信息。 log_shipping_plan_history资料表则是将每次日志传送的复制与回存事件纪录下来,连同该工作是否成功的信息。SQL Server也会新增一笔资料在log_shipping_monitor资料表,用以参照监控服务器。
      
      如果您勾选了【Allow database to assume primary role】复选框,您将在次要服务器上看到一个重要的额外项目:另一个数据库维护计划(与您先前所建立的维护计划名称相同),但是并没有激活日志传送。您也会看到一个非作用中(disabled)的SQL Agent工作(备份该数据库的交易日志)。也许您会被这些项目所混淆。尽管它们的名字相同,但是此额外产生的维护计划却不同于当初所建立的那个。SQL Server保留第二个逆向维护计划是为了以后可能发生的主要/次要服务器角色对调动作所准备。  在监控服务器上检视日志传送动作 当您正确设定日志传送之后,SQL Server 会激活监控服务器上Enterprise Manager 的日志传送监控工具程序。此外,SQL Server会建立两个SQL Agent 警示工作(alert job):一个用来执行工作,另一个处理out-of-sync情况。
      
      使用监控工具程序的方式是,开启Enterprise Manager并连至监控服务器,展开【Management】节点,然后点选【记录传送监视器(Log Shipping Monitor)】。当您点选此工具程序时,其内会列出日志传送配对服务器的清单。您可在配对服务器上按下鼠标右键,检视其备份、复制与回存等工作的执行历史纪录。这些历史纪录十分有用,因为您从这里得到的错误讯息会比从次要服务器上(SQL Agent 复制与回存工作)得到的更为详尽。
      如图所示:当您开启配对服务器之属性对话盒,并进入【Status】设定页时,您可检视此配对服务器执行备份与回存程序之状态。  其状态(Status)可以是Normal 或是Out-of-Sync。如果SQL Server Agent尚未复制或回存交易日志文件,对话盒内将会显示日志文件名为first_file_000000000000.trn。这并不是实际的文件名称,只不过是用来标示SQL Server Agent尚未处理任何档案而已。在【Status】设定页也会显示备份、复制以及加载(回存)等动作执行时所耗费的时间。此设定页之信息不会自动更新,所以您必须将此对话盒关闭后再开启,才能更新其资料。
       
      SQL Server只使用msdb数据库内两个资料表来储存日志传送服务器之相关资料。SQL Server在这两个资料表中都给予一个ID做为连结,以及一个外来键(foreign key)。该外来键是设定在log_shipping_secondaries资料表上,并参照log_shipping_primaries资料表的 primary_id字段(这两个是所有日志传送资料表中唯一具有外来键关系的资料表)。在log_shipping_primaries资料表内的每笔资料都包含日志传送的相关信息,例如:来源数据库名称、交易日志文件备份工作执行之状态,以及已规划的停摆信息(可避免不必要的警示讯息)。而 log_shipping_secondaries 资料表之每笔资料关于目的数据库之信息;每个目的数据库附属于特定的日志传送来源数据库。这两个资料表互相连结的结果就是日志传送监控程序内所显示的配对服务器信息。移除与重新组态日志传送功能  如果您想从数据库维护计划中移除日志传送功能,可参考下列方式:开启该计划的属性对话盒,选择【记录传送】设定页,然后点选【移出记录传送】。此动作将从次要服务器上移除SQL Server Agent的备份与回存工作,并清除日志传送资料表内的所有相关资料。此外,日志传送监控程序的相关信息也会一并被清除。然而此动作将会适当地保留主要服务器上SQL Server Agent的交易日志备份工作。只有在删除数据库维护计划时,该工作才会被移除。假如您想从监控服务器内移除掉日志传送监控程序,请用手动方式将 log_shipping_primaries与log_shipping_secondaries这两个资料表(位于监控服务器的msdb数据库)的资料删除即可。
      如果您在数据库维护计划内设定日志传送时,就已允许目的数据库可以做为新的日志传送来源数据库。当您删除主要服务器的维护计划时,次要服务器上仍然会保留其数据库维护计划,以及交易日志文件备份工作。删除这些项目的方式是将次要服务器上与日志传送相关的数据库维护计划直接删除