SQL Server management studio不能实现单个表的备份,Litespeed也不行。有一种例外,如果你的表在一个单独的filegroup数据文件组或file数据文件里,那么就可以单独备份,因为SQL Server支持对单个filegroup或单独file的备份和恢复。在使用文件或文件组恢复时,整个数据库可以处于online的状态(当然正在恢复的文件或文件组上的数据不可用),称为online restore。如果你使用了分区表并将其中的一个或几个分区单独放在数据文件里,那么还可以实现部分表数据的备份。
在大多数情况下,我们的表不满足上面的例外,但我们仍然有多种方式备份表数据。这里说的备份并不是生成一个bak备份文件,仅仅是复制表数据并用于事后的恢复。这些方式也可以用于数据导出,或在修改数据时备份一下防止意外发生。
1,BCP (BULK COPY PROGRAM)
2,Generate Table Script with data
3,Make a copy of table using SELECT INTO
4,SAVE Table Data Directly in a Flat file
5,Export Data using SSIS to any destination
下面分别说明:
BCP (BULK COPY PROGRAM)
BCP是常用的数据导入导出工具,因此这种方式是将数据导出,需要时再导入会原数据库。
-- SQL Table Backup
-- Developed by DBATAG, www.DBATAG.com
DECLARE @table VARCHAR(128),
@file VARCHAR(255),
@cmd VARCHAR(512)
SET @table = 'AdventureWorks.Person.Contact' -- Table Name which you want to backup
SET @file = 'C:\MSSQL\Backup\' + @table + '_' + CONVERT(CHAR(8), GETDATE(), 112) -- Replace C:\MSSQL\Backup\ to destination dir where you want to place table data backup
+ '.dat'
SET @cmd = 'bcp ' + @table + ' out ' + @file + ' -n -T '
EXEC master..xp_cmdshell @cmd
恢复时执行下面的语句:
BULK INSERT AdventureWorks.Person.Contacts_Restore
FROM 'C:\MSSQL\Backup\Contact.Dat'
WITH (DATAFILETYPE='native');
如果你的表并不大,那么这是一个很简单易行的方法,在management studio中可以直接用菜单操作。
右键点击数据库名->Tasks->Generate Scripts 就打开了一个向导。按照向导操作,注意选择“Types of data to script” = "schema and data"。之后就会得到一个脚本文件,内容是由表中的数据构建成的insert 语句:
insert into youTable (...) values (...)
当需要恢复表数据时,打开该文件,将内容复制到SSMS中,执行一下就可以了。或者在SSMS直接选择打开文件,然后执行。
上面两种方法都需要打开脚本文件,如果脚本文件很大,则打开很慢甚至失败。此时用下面语句在SSMS中直接执行脚本,避免打开文件:
EXEC master.dbo.xp_cmdshell ‘isql -Hhostname -ddbname -Uusername -Ppassword -i file’
example
EXEC master.dbo.xp_cmdshell ‘isql -H10.203.420.155 -dmdd3 -Umed -Piddmapis -i c:\upgrade110490.sql’
如果你的数据库不是production,而且不需要永久保存备份数据,那么用select into语句暂时将表数据插入一个新表里,无疑是最快最简单的办法了。等确实需要恢复,或不需要恢复后,将备份表删除即可。
SAVE Table Data Directly in a Flat file
在SSMS菜单中点击query->Results to->file,将数据直接保存成flat文件。但是这种方法恢复起来较麻烦。
Export Data using SSIS to any destination
SSIS可以轻松将数据复制到多个地点,还可以实现复杂的业务逻辑。但是由于使用SSIS的同学不多,相对也复杂一些,这里只是给大家一个选项,不累述。