表级备份

92

如何在 MS SQL Server 2005/2008 中进行表级备份(转储)?


http://technet.microsoft.com/en-us/library/ms175477.aspx - Freelancer
16个回答

90

除非所涉及的表被分配到自己的FILEGROUP中,否则您不能使用BACKUP DATABASE命令备份单个表。

如您所建议的,您可以将表数据导出到CSV文件。现在,为了获取您的表定义,您可以“脚本化”CREATE TABLE脚本。

您可以在SQL Server管理工具中执行此操作,方法是:

右键单击数据库 > 任务 > 生成脚本

然后,您可以选择要脚本化的表,并选择包括任何相关对象,例如约束和索引。

为了在脚本中获取DATA以及schema,您需要在设置脚本选项选项卡上选择Advanced,并在GENERAL部分设置Types of data to script选择Schema and Data


“数据库发布向导”将自动化我所描述的步骤。 - John Sansom
26
约翰,别忘了提到想要在仅有架构的情况下获取数据,你需要在“设置脚本选项”标签中选择“高级”,并在“常规”部分将“要生成脚本的数据类型”选择为“架构和数据”。第一次尝试时这不是很明显。 - Alex C
Alex的提示非常重要。此外,有没有一种方法可以通过脚本来完成而不是在SQL Server中浏览菜单? - sooprise
1
你可以通过使用PowerShell和SMO的组合来实现这一点。请参考Phil Factor的文章作为指南:http://www.simple-talk.com/sql/database-administration/automated-script-generation-with-powershell-and-smo/ - John Sansom
@AlexC 谢谢!帮我解决了一个难题 :) - Simon Whitehead

56
我正在使用批量复制实用程序来实现表级备份。
导出:
bcp.exe "select * from [MyDatabase].dbo.Customer " queryout "Customer.bcp" -N -S localhost -T -E

导入:

bcp.exe [MyDatabase].dbo.Customer in "Customer.bcp" -N -S localhost -T -E -b 10000

正如您所看到的,您可以根据任何查询导出数据,因此甚至可以使用此方法进行增量备份。此外,它是可编写脚本的,而不像在此处提到使用SSMS的其他方法。


1
提醒一下。如果您只想使用名称而不是选择查询来复制表格,请将脚本中的QUERYOUT替换为OUT。 - Valamas

46

以下是您需要的步骤。如果您想获取数据,则步骤5非常重要。第2步是您可以选择单个表格的地方。

编辑,stack的版本不太易读...这里是完整大小的图片http://i.imgur.com/y6ZCL.jpg

这里是John Sansom答案中的步骤


你用的是哪个SSMS,Alex C?在我的SSMS2005中,我的向导与你的不同。 - KirdApe
很抱歉,我好几年没回答这个问题了。我猜当时我可能在使用2008版。我现在刚刚检查了我的向导,你不再需要点击高级选项,而是整个列表从第5帧(上面)出现在向导页面之一中。此外,结构和数据选项已被拆分为每个选项的TRUE / FALSE选项。如果还有什么可以帮到你的,请告诉我。 - Alex C

19
你可以运行下面的查询来备份现有表格,它将创建一个新表格,其中包含旧表格的现有结构和数据。
select * into newtablename from oldtablename

要仅复制表结构,请使用以下查询。

select * into newtablename from oldtablename where 1 = 2

8
这类似于qntmfred的解决方案, 但使用直接表转储。这个选项略微更快(参见BCP文档): 导出:
bcp "[MyDatabase].dbo.Customer " out "Customer.bcp" -N -S localhost -T -E

导入:

bcp [MyDatabase].dbo.Customer in "Customer.bcp" -N -S localhost -T -E -b 10000

1
这是否包括约束条件? - user3071284

4
如果你正在寻找类似于MySQL的 DUMP 功能,那么好消息是:SQL Server 2008 Management Studio 添加了这个功能。在SSMS中,只需右键单击相关的数据库,然后选择任务 > 生成脚本。然后在选项向导的第二页中,确保选择将数据也作为脚本生成,它将为您生成相当于 DUMP 文件的内容。

3

创建一个新的文件组,将这个表放在里面,并只备份这个文件组。


这是否包括约束条件? - user3071284

2

使用SQL Server导入和导出向导。

  1. 打开ssms
  2. 打开数据库引擎
  3. 在要导出表的数据库上进行Alt+单击
  4. 选择“任务”
  5. 选择“导出数据…”
  6. 按照向导操作

2
您可以使用微软的免费数据库发布向导生成带有SQL脚本(CREATE TABLE 和 INSERT INTO)的文本文件。您可以为单个表创建此类文件,仅需运行SQL脚本即可“还原”完整的包括数据在内的表。

对于所有习惯使用SQL脚本的人来说,这是你正在寻找的选项。取消选择“在所选数据库中编写所有对象的脚本”,以选择单个表。截图:http://products.secureserver.net/products/hosting/PublishingWithDPW.htm - lepe

2
我不知道这是否与此处描述的问题相匹配。我需要进行表的增量备份!(只需复制新插入的数据)。我曾经设计了一个DTS包,其中:
  1. 我获取新记录(基于“状态”列),并将数据传输到目标位置。(通过“转换数据任务”)

  2. 然后我只更新了“状态”列。(通过“执行SQL任务”)

我必须正确地修复“工作流程”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接