【发布时间】:2010-10-15 09:33:43
【问题描述】:
如何在 MS SQL Server 2005/2008 中进行表级备份(转储)?
【问题讨论】:
标签: sql-server backup database-table
如何在 MS SQL Server 2005/2008 中进行表级备份(转储)?
【问题讨论】:
标签: sql-server backup database-table
每种恢复模式都可以让您备份 整个或部分 SQL Server 数据库 或单个文件或文件组 数据库。 表级备份 无法创建。
【讨论】:
您可能有两种选择,因为 SQL Server 不支持表备份。两者都将从编写表创建脚本开始。然后您可以使用 Script Table - INSERT 选项来生成大量插入语句,或者您可以使用集成服务(DTS with 2000)或类似的服务将数据导出为 CSV 或类似的。
【讨论】:
您可以使用 Microsoft 提供的免费 Database Publishing Wizard 生成带有 SQL 脚本(CREATE TABLE 和 INSERT INTO)的文本文件。
您可以为单个表创建这样的文件,并且您可以通过简单地运行 SQL 脚本来“恢复”包括数据在内的整个表。
【讨论】:
您不能使用BACKUP DATABASE 命令来备份单个表,除非有问题的表当然分配给它自己的FILEGROUP。
您可以按照您的建议将表格数据导出到 CSV 文件。现在,为了获得表的定义,您可以“编写”CREATE TABLE 脚本。
您可以在 SQL Server Management Studio 中执行此操作,方法是:
右击数据库>任务>生成脚本
然后您可以选择要编写脚本的表,还可以选择包含任何关联对象,例如约束和索引。
为了获得DATA 和schema,您必须在设置脚本选项选项卡上选择Advanced,并在GENERAL 部分设置Types of data to script 选择@987654330 @
希望这对您有所帮助,但如果您需要进一步的帮助,请随时直接与我联系。
【讨论】:
Advanced设置Types of data to script 选择Schema and Data。我第一次这样做时并不明显。
新建文件组,把这个表放在上面,只备份这个文件组。
【讨论】:
如果您正在寻找类似 MySQL 的 DUMP 的东西,那么好消息:SQL Server 2008 Management Studio 添加了该功能。
在 SSMS 中,只需右键单击相关数据库并选择 Tasks > Generate Scripts。然后在选项向导的第二页中,确保select that you'd like the data scripted as well,它会为您生成相当于DUMP 的文件。
【讨论】:
BMC 恢复管理器(以前称为 SQLBacktrack)允许对数据库中的单个对象(也称为表)进行时间点恢复。它并不便宜,但做得很好: http://www.bmc.com/products/proddocview/0,2832,19052_19429_70025639_147752,00.html
http://www.bmc.com/products/proddocview/0,2832,19052_19429_67883151_147636,00.html
【讨论】:
我正在使用bulk copy utility实现表级备份
导出:
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 的其他方法不同,它是可编写脚本的。
【讨论】:
如果您希望在有人错误地删除表中的行后恢复表,您可以查看数据库快照。您可以很容易地从快照中恢复表(或行的子集)。见http://msdn.microsoft.com/en-us/library/ms175158.aspx
【讨论】:
这是您需要的步骤。如果您想要数据,Step5 很重要。第 2 步是您可以选择单个表格的地方。
EDIT 堆栈的版本不太可读...这是全尺寸图片http://i.imgur.com/y6ZCL.jpg
【讨论】:
您可以运行以下查询来备份现有表,这将创建一个具有旧表的现有结构以及数据的新表。
select * into newtablename from oldtablename
要仅复制表结构,请使用以下查询。
select * into newtablename from oldtablename where 1 = 2
【讨论】:
我不知道,它是否会匹配这里描述的问题。我不得不进行表的增量备份! (只应复制新插入的数据)。我曾经设计过一个DTS包在哪里。
我获取新记录(基于“状态”列)并将数据传输到目的地。 (通过“转换数据任务”)
然后我刚刚更新了“状态”列。 (通过“执行 SQL 任务”)
我必须正确修复“工作流程”。
【讨论】:
一个名为 SqlTableZip 的免费应用程序将完成这项工作。 基本上,您编写 any 查询(当然也可以是 [select * from table]),然后应用程序会创建一个包含所有数据的压缩文件,以后可以恢复。
【讨论】:
这类似于qntmfred's solution,但使用直接表转储。这个选项稍微快一点(见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
【讨论】:
使用 SQL Server 导入和导出向导。
【讨论】:
Handy Backup 自动从 MS SQL Server 生成转储文件,包括 MSSQL 2005/2008。这些转储是表级二进制文件,包含特定数据库内容的精确副本。
要使用 Handy Backup 进行简单转储,请按照以下说明操作:
现在通过单击其名称前的图标来运行您的新任务,或者等待预定时间。 Handy Backup 将自动为您的数据库创建转储。 然后打开您的备份目的地。您将找到一个文件夹(或几个文件夹),其中包含您的 MS SQL 备份。任何此类文件夹都将包含一个表级转储文件,其中包含一些二进制表和压缩到单个 ZIP 中的设置。
Handy Backup 可以为 MySQL、MariaDB、PostgreSQL、Oracle、IBM DB2、Lotus Notes 和任何具有 ODBC 驱动程序的通用 SQL 数据库保存转储。其中一些数据库需要额外的步骤来建立 DBMS 和 Handy Backup 之间的连接。
上述工具通常将 SQL 数据库转储为表级 SQL 命令序列,使这些文件为您需要的任何手动修改做好准备。
【讨论】: