none
sqlserver 2008 备份单张表 RRS feed

  • 问题

  • sqlserver 2008数据库,如何对单张表进行备份、恢复?

    备注:数据库文件太大,要对里面的单张表进行数据导入,导数据之前先对这张表备份。

    • 已移动 Sheng Jiang 蒋晟 2012年10月30日 4:02 (发件人:.NET Framework 一般性问题讨论区)
    2012年10月30日 2:38

答案

  • Or just copy that table to another name in same db.
    2012年10月30日 4:10
  • 没有这个功能

    可以考虑新建一个库,把你这个表的数据用 selct into 做备份 " select into 新建的库.dbo.备份表",  然后对这个新建的库做备份

    或者用 bcp 表把中的数据导出为文件,必要时再 bcp 导入进去

    2012年10月30日 5:55
  • 如果使用rmiao大侠的方法:那么你新建表的时候,最好先建一个数据文件和一个文件组,然后该数据文件属于

    该文件组

    比如:你新建表a的时候,新建一个数据文件c.ndf,和一个文件组filegroupc,c.ndf属于fileGroupc文件组

    然后你新建表的时候指定该表属于 filegroupc 文件组

    CREATE TABLE a(col1 int, col2 char(10))
        ON filegroupc;

    然后使用段落还原:

    --段落还原步骤  partial选项
    --文件还原、页面还原、段落还原都需要日志备份
    
    
    --其他文件组还原的时候,不但要还原文件组备份,还要还原日志备份,以将文件组恢复到与数据库一致的点
    
    
    --简单恢复模式下,可以被推迟恢复的只有只读文件组。在完整恢复模式或大容量日志恢复
    --模式下,任何包含多个文件组的数据库都可以使用段落还原,并且可以将数据库还原到
    --任何时间点。段落还原的顺序如下:
    
    --1、部分还原顺序
    --部分还原顺序会还原主文件组和(可选的)部分辅助文件组。第一个restore database语句
    --必须执行一下操作:
    --(1)指定partial 选项。他表示段落还原的开始
    --(2)使用包含主文件组的任何完整数据库备份。常见的做法是通过还原部分备份来启动部分还原
    --顺序
    --(3)若要还原到特定的时间点,必须在部分还原顺序中指定该时间。还原顺序的每个后续
    --步骤都必须指定相同的时间点
    
    
    --2、文件组还原顺序会使其他文件组在线并处于与数据库一致的某个点
    --在SQL2005企业版中,当数据库在线时,可还原并恢复任何离线辅助文件组。
    --如果特定只读文件未损坏并且与数据库一致,则该文件无须还原
    
    --如果在文件备份创建之前,只读文件组就已经处于只读状态,则该文件组无须应用日志备份,并且
    --文件还原会跳过日志备份的应用过程。如果文件组是读/写文件组,则必须将未中断的日志备份链
    --应用于上一次完整还原或差异还原,文件组才能前进到当前的日志文件
    
    
    --------------------------------------示例---------------------------------------------------
    --在下面的示例中,数据库adb将在发生灾难性事件后还原到一台新计算机上。该数据库使用完整恢复模式
    --因此,开始进行还原之前必须先获取数据库的尾日志备份。发生灾难性事件前所有文件组都处于在线状态
    --文件组B是只读的。必须还原所有辅助文件组,但这些辅助文件组将按重要性顺序进行还原:
    --A:最高     B:最低    C:其次,此示例存在4个日志备份,其中包括尾日志备份
    
    --尾日志备份
    --在还原数据库之前,数据库管理员必须先备份日志尾部。由于数据库已经损坏,因此创建日志备份要
    --使用no_truncate选项
    
    
    BACKUP LOG adb TO taillogbakcup WITH norecovery,NO_TRUNCATE  --不截断
    --尾日志备份是后面还原顺序中将要应用的最后一个备份
    
    --还原顺序:
    --(1)部分还原主文件组和辅助文件组A
    RESTORE DATABASE GPOSDB FILEGROUP='primary' FROM backup1
    WITH partial ,NORECOVERY
    
    RESTORE DATABASE GPOSDB FILEGROUP='A' FROM bakcup2
    WITH norecovery
    RESTORE LOG GPOSDB FROM bakcup3 WITH norecovery
    RESTORE LOG GPOSDB FROM bakcup4 WITH norecovery
    RESTORE LOG GPOSDB FROM bakcup5 WITH norecovery
    RESTORE LOG GPOSDB FROM taillogbackup WITH recovery
    
    --此时,主文件组和辅助文件组A处于在线状态。文件组B和C中的所有文件都处于恢复挂起状态
    --这两个文件组处于离线状态
    
    --步骤1的最后一条restore log语句的消息指出:由于文件组C不可用,因此涉及此文件组的事务回滚已经
    --延迟。数据库可以继续执行常规操作,但这些事务会在相应的页面上持有锁,阻止别人的访问和修改
    
    
    --(2)在线还原文件组C
    --在第二个还原顺序中,DBA将还原文件组C,同时要把所有的日志备份再还原一遍
    RESTORE DATABASE GPOSDB FILEGROUP='C' FROM backup2a WITH norecovery
    RESTORE LOG GPOSDB FROM backup3 WITH norecovery
    RESTORE LOG GPOSDB FROM bakcup4 WITH norecovery
    RESTORE LOG GPOSDB FROM bakcup5 WITH norecovery
    RESTORE LOG GPOSDB FROM taillogbackup WITH recovery
    
    --(3)此时主文件组以及文件组A和C处于在线状态。文件组B中的文件处于恢复挂起状态,该文件组
    --处于离线状态。解释延迟的事务后,日志被截断
    
    --(4)在线还原文件组B
    --在第三个还原顺序中,DBA将还原文件组B。文件组B的备份是在该文件组变为只读状态之后进行的,因此,在
    --恢复过程中无须再恢复日志备份
    RESTORE DATABASE GPOSDB FILEGROUP='B' FROM backup2b WITH recovery
    
    --(5)所有文件组现在都处于在线状态
    --虽然段落还原的过程比较复杂,但是通过这样的还原顺序,DBA可以让最重要的文件组A提前交给用户使用
    --这个灾难恢复时,优势非常大。
    
    
    --任何包含多个文件组的数据库都可以使用段落还原,并且可以将数据库还原到任何时间点。
    USE partionTest
    CREATE TABLE aa(aa INT) ON filegroup001
    
    --由于数据库已损坏,因此创建尾日志备份要使用NO_TRUNCATE选项
    BACKUP LOG AdventureWorks TO taillogbackup WITH norecovery,NO_TRUNCATE --不截断

    不过都是建议使用邹建大侠的方法比较好,因为段落还原比较复杂


    给我写信: QQ我:点击这里给我发消息

    2012年10月30日 7:31

全部回复

  • Can't unless that table is in its own file group, because you can backup specific file group. 
    2012年10月30日 4:09
  • Or just copy that table to another name in same db.
    2012年10月30日 4:10
  • 没有这个功能

    可以考虑新建一个库,把你这个表的数据用 selct into 做备份 " select into 新建的库.dbo.备份表",  然后对这个新建的库做备份

    或者用 bcp 表把中的数据导出为文件,必要时再 bcp 导入进去

    2012年10月30日 5:55
  • 如果使用rmiao大侠的方法:那么你新建表的时候,最好先建一个数据文件和一个文件组,然后该数据文件属于

    该文件组

    比如:你新建表a的时候,新建一个数据文件c.ndf,和一个文件组filegroupc,c.ndf属于fileGroupc文件组

    然后你新建表的时候指定该表属于 filegroupc 文件组

    CREATE TABLE a(col1 int, col2 char(10))
        ON filegroupc;

    然后使用段落还原:

    --段落还原步骤  partial选项
    --文件还原、页面还原、段落还原都需要日志备份
    
    
    --其他文件组还原的时候,不但要还原文件组备份,还要还原日志备份,以将文件组恢复到与数据库一致的点
    
    
    --简单恢复模式下,可以被推迟恢复的只有只读文件组。在完整恢复模式或大容量日志恢复
    --模式下,任何包含多个文件组的数据库都可以使用段落还原,并且可以将数据库还原到
    --任何时间点。段落还原的顺序如下:
    
    --1、部分还原顺序
    --部分还原顺序会还原主文件组和(可选的)部分辅助文件组。第一个restore database语句
    --必须执行一下操作:
    --(1)指定partial 选项。他表示段落还原的开始
    --(2)使用包含主文件组的任何完整数据库备份。常见的做法是通过还原部分备份来启动部分还原
    --顺序
    --(3)若要还原到特定的时间点,必须在部分还原顺序中指定该时间。还原顺序的每个后续
    --步骤都必须指定相同的时间点
    
    
    --2、文件组还原顺序会使其他文件组在线并处于与数据库一致的某个点
    --在SQL2005企业版中,当数据库在线时,可还原并恢复任何离线辅助文件组。
    --如果特定只读文件未损坏并且与数据库一致,则该文件无须还原
    
    --如果在文件备份创建之前,只读文件组就已经处于只读状态,则该文件组无须应用日志备份,并且
    --文件还原会跳过日志备份的应用过程。如果文件组是读/写文件组,则必须将未中断的日志备份链
    --应用于上一次完整还原或差异还原,文件组才能前进到当前的日志文件
    
    
    --------------------------------------示例---------------------------------------------------
    --在下面的示例中,数据库adb将在发生灾难性事件后还原到一台新计算机上。该数据库使用完整恢复模式
    --因此,开始进行还原之前必须先获取数据库的尾日志备份。发生灾难性事件前所有文件组都处于在线状态
    --文件组B是只读的。必须还原所有辅助文件组,但这些辅助文件组将按重要性顺序进行还原:
    --A:最高     B:最低    C:其次,此示例存在4个日志备份,其中包括尾日志备份
    
    --尾日志备份
    --在还原数据库之前,数据库管理员必须先备份日志尾部。由于数据库已经损坏,因此创建日志备份要
    --使用no_truncate选项
    
    
    BACKUP LOG adb TO taillogbakcup WITH norecovery,NO_TRUNCATE  --不截断
    --尾日志备份是后面还原顺序中将要应用的最后一个备份
    
    --还原顺序:
    --(1)部分还原主文件组和辅助文件组A
    RESTORE DATABASE GPOSDB FILEGROUP='primary' FROM backup1
    WITH partial ,NORECOVERY
    
    RESTORE DATABASE GPOSDB FILEGROUP='A' FROM bakcup2
    WITH norecovery
    RESTORE LOG GPOSDB FROM bakcup3 WITH norecovery
    RESTORE LOG GPOSDB FROM bakcup4 WITH norecovery
    RESTORE LOG GPOSDB FROM bakcup5 WITH norecovery
    RESTORE LOG GPOSDB FROM taillogbackup WITH recovery
    
    --此时,主文件组和辅助文件组A处于在线状态。文件组B和C中的所有文件都处于恢复挂起状态
    --这两个文件组处于离线状态
    
    --步骤1的最后一条restore log语句的消息指出:由于文件组C不可用,因此涉及此文件组的事务回滚已经
    --延迟。数据库可以继续执行常规操作,但这些事务会在相应的页面上持有锁,阻止别人的访问和修改
    
    
    --(2)在线还原文件组C
    --在第二个还原顺序中,DBA将还原文件组C,同时要把所有的日志备份再还原一遍
    RESTORE DATABASE GPOSDB FILEGROUP='C' FROM backup2a WITH norecovery
    RESTORE LOG GPOSDB FROM backup3 WITH norecovery
    RESTORE LOG GPOSDB FROM bakcup4 WITH norecovery
    RESTORE LOG GPOSDB FROM bakcup5 WITH norecovery
    RESTORE LOG GPOSDB FROM taillogbackup WITH recovery
    
    --(3)此时主文件组以及文件组A和C处于在线状态。文件组B中的文件处于恢复挂起状态,该文件组
    --处于离线状态。解释延迟的事务后,日志被截断
    
    --(4)在线还原文件组B
    --在第三个还原顺序中,DBA将还原文件组B。文件组B的备份是在该文件组变为只读状态之后进行的,因此,在
    --恢复过程中无须再恢复日志备份
    RESTORE DATABASE GPOSDB FILEGROUP='B' FROM backup2b WITH recovery
    
    --(5)所有文件组现在都处于在线状态
    --虽然段落还原的过程比较复杂,但是通过这样的还原顺序,DBA可以让最重要的文件组A提前交给用户使用
    --这个灾难恢复时,优势非常大。
    
    
    --任何包含多个文件组的数据库都可以使用段落还原,并且可以将数据库还原到任何时间点。
    USE partionTest
    CREATE TABLE aa(aa INT) ON filegroup001
    
    --由于数据库已损坏,因此创建尾日志备份要使用NO_TRUNCATE选项
    BACKUP LOG AdventureWorks TO taillogbackup WITH norecovery,NO_TRUNCATE --不截断

    不过都是建议使用邹建大侠的方法比较好,因为段落还原比较复杂


    给我写信: QQ我:点击这里给我发消息

    2012年10月30日 7:31
  • 使用Filegroup会有一些限制,首先还原会比较复杂,其次还需要还原tail log, 这样的话如果中间有一些数据被删除的话还原就会非常麻烦(要保证还原的文件组跟其他文件组在一个时间点)。

     

    2012年10月31日 9:29