表级备份


Answers:


89

您不能使用该BACKUP DATABASE命令来备份单个表,除非将有问题的表分配给它自己的表FILEGROUP

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

您可以在SQL Server Management Studio中执行以下操作:

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

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

为了与DATA一起使用schema,您必须Advanced在set scripting options选项卡上进行选择,然后在GENERAL部分中设置Types of data to scriptselectSchema and Data

希望这会有所帮助,但如果您需要进一步的帮助,请随时直接与我联系。


“数据库发布向导”将自动执行我概述的步骤。
John Sansom,2009年

25
约翰,别忘了提到为了获得DATA和模式,您必须Advanced在set scripting options选项卡上进行选择,并在General部分中设置Types of data to scriptselect Schema and Data。我第一次这样做并不明显。
Alex C

亚历克斯的小费很重要。另外,有没有办法编写此脚本而不是通过SQL Server中的菜单?
sooprise 2012年

1
您应该能够通过结合使用PowerShell和SMO来实现这一目标。请参阅Phil Factor的这篇文章作为指南:simple-talk.com/sql/database-administration/…–
John Sansom,

@AlexC谢谢!使我免于头痛:)
西蒙·怀特海德

55

我正在使用大容量复制实用程序来实现表级备份

出口:

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
只是抬头。如果只想使用名称而不是选择查询来复制表,请将脚本更改为使用OUT代替QUERYOUT。
Valamas 2015年

45

这是您需要的步骤。如果需要数据,则Step5很重要。在第2步中,您可以选择单个表。

EDIT堆栈的版本不太可读...这是全尺寸图片http://i.imgur.com/y6ZCL.jpg

这是约翰·桑索姆(John Sansom)回答的步骤


您使用@Alex C是什么SSMS?在我的SSMS2005中,向导不同于您的向导。
KirdApe 2015年

对不起,我回答这个问题已经好几年了。我以为我可能正在使用2008。我现在刚刚检查了向导,您不再需要单击“高级”,而是将第5帧(上方)的整个列表显示为向导页面之一。此外,“结构和数据”选项已分别拆分为“真/假”选项。让我知道我还有什么可以做的。
Alex C

19

您可以运行以下查询以备份现有表,该表将创建一个具有旧表的现有结构以及数据的新表。

select * into newtablename from oldtablename

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

select * into newtablename from oldtablename where 1 = 2

7

这类似于qntmfred的解决方案,但使用直接表转储。此选项稍快一些(请参阅BCP docs):

出口:

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为您生成相当于文件的文件。



2

您可以使用Microsoft提供的免费数据库发布向导来生成带有SQL脚本(CREATE TABLE和INSERT INTO)的文本文件。

您可以为单个表创建这样的文件,并且只需运行SQL脚本即可“还原”包括数据在内的完整表。


+1对于所有习惯使用SQL脚本的人,这是您要寻找的选项。取消选中“编写所选数据库中的所有对象的脚本”以选择单个表。截图:products.secureserver.net/products/hosting/...
Lepe的

2

我不知道它是否可以解决这里描述的问题。我必须对表进行增量备份!(仅应复制新插入的数据)。我以前在哪里设计DTS包。

  1. 我获取新记录(基于“状态”列)并将数据传输到目的地。(通过“转换数据任务”)

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

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


2

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

  1. 短信
  2. 打开数据库引擎
  3. Alt。单击包含表的数据库以导出
  4. 选择“任务”
  5. 选择“导出数据...”
  6. 跟随向导


0

您可能有两个选择,因为SQL Server不支持表备份。两者都将从脚本表创建开始。然后,您可以使用Script Table-INSERT选项,该选项将生成许多插入语句,也可以使用Integration Services(带有2000的DTS)或类似服务将数据导出为CSV或类似数据。





0

Handy Backup会自动从MS SQL Server(包括MSSQL 2005/2008)制作转储文件。这些转储是表级二进制文件,包含特定数据库内容的精确副本。

要使用Handy Backup进行简单的转储,请遵循以下说明:

  1. 安装Handy Backup并创建一个新的备份任务。
  2. 在步骤2中选择“ MSSQL”作为数据源。在新窗口上,标记要备份的数据库。
  3. 在不同的目的地中选择要存储备份的位置。
  4. 在第4步中,选择“完整”备份选项。如果需要,请设置一个时间戳。
  5. 除非需要压缩或加密生成的转储文件,否则请跳过步骤5。
  6. 在第6步中,为任务设置时间表以定期创建转储(否则手动运行任务)。
  7. 同样,跳过步骤7,并在步骤8中为您的任务命名。完成任务!

现在,通过单击名称之前的图标来运行新任务,或等待计划的时间。Handy Backup将自动为您的数据库创建一个转储。然后打开您的备份目标。您会在MS SQL备份中找到一个文件夹(或几个文件夹)。任何此类文件夹都将包含一个表级转储文件,该文件由一些二进制表和设置压缩到一个ZIP中组成。

其他数据库

Handy Backup可以为MySQL,MariaDB,PostgreSQL,Oracle,IBM DB2,Lotus Notes和任何具有ODBC驱动程序的通用SQL数据库保存转储。其中一些数据库需要其他步骤才能在DBMS和Handy Backup之间建立连接。

上面描述的工具通常将SQL数据库作为表级SQL命令序列转储,使这些文件可用于您需要的任何手动修改。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.