【问题标题】:Table-level backup表级备份
【发布时间】:2010-10-15 09:33:43
【问题描述】:

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

【问题讨论】:

标签: sql-server backup database-table


【解决方案1】:

每种恢复模式都可以让您备份 整个或部分 SQL Server 数据库 或单个文件或文件组 数据库。 表级备份 无法创建

发件人:Backup Overview (SQL Server)

【讨论】:

    【解决方案2】:

    您可能有两种选择,因为 SQL Server 不支持表备份。两者都将从编写表创建脚本开始。然后您可以使用 Script Table - INSERT 选项来生成大量插入语句,或者您可以使用集成服务(DTS with 2000)或类似的服务将数据导出为 CSV 或类似的。

    【讨论】:

      【解决方案3】:

      您可以使用 Microsoft 提供的免费 Database Publishing Wizard 生成带有 SQL 脚本(CREATE TABLE 和 INSERT INTO)的文本文件。

      您可以为单个表创建这样的文件,并且您可以通过简单地运行 SQL 脚本来“恢复”包括数据在内的整个表。

      【讨论】:

      • +1 对于所有习惯使用 SQL 脚本的人来说,这是您正在寻找的选项。取消选中“为所选数据库中的所有对象编写脚本”以选择单个表。截图:products.secureserver.net/products/hosting/…
      【解决方案4】:

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

      您可以按照您的建议将表格数据导出到 CSV 文件。现在,为了获得表的定义,您可以“编写”CREATE TABLE 脚本。

      您可以在 SQL Server Management Studio 中执行此操作,方法是:

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

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

      为了获得DATAschema,您必须在设置脚本选项选项卡上选择Advanced,并在GENERAL 部分设置Types of data to script 选择@987654330 @

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

      【讨论】:

      • “数据库发布向导”将自动执行我列出的步骤。
      • John,别忘了提到,为了获取 DATA 以及模式,您必须在 set scripting options 选项卡和 GENERAL 部分中选择 Advanced设置Types of data to script 选择Schema and Data。我第一次这样做时并不明显。
      • Alex 的提示非常重要。另外,有没有办法编写脚本而不是通过 SQL Server 中的菜单?
      • 您应该能够通过结合使用 PowerShell 和 SMO 来实现这一点。请参阅 Phil Factor 的这篇文章作为指南:simple-talk.com/sql/database-administration/…
      • @AlexC 谢谢!让我头疼:)
      【解决方案5】:

      新建文件组,把这个表放在上面,只备份这个文件组。

      【讨论】:

      • 这是否包括约束?
      【解决方案6】:

      如果您正在寻找类似 MySQL 的 DUMP 的东西,那么好消息:SQL Server 2008 Management Studio 添加了该功能。

      在 SSMS 中,只需右键单击相关数据库并选择 Tasks > Generate Scripts。然后在选项向导的第二页中,确保select that you'd like the data scripted as well,它会为您生成相当于DUMP 的文件。

      【讨论】:

        【解决方案7】:

        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

        【讨论】:

          【解决方案8】:

          我正在使用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 的其他方法不同,它是可编写脚本的。

          【讨论】:

          • 请注意。如果您只想使用名称而不是选择查询来复制表,请将脚本更改为使用 OUT 代替 QUERYOUT。
          【解决方案9】:

          如果您希望在有人错误地删除表中的行后恢复表,您可以查看数据库快照。您可以很容易地从快照中恢复表(或行的子集)。见http://msdn.microsoft.com/en-us/library/ms175158.aspx

          【讨论】:

            【解决方案10】:

            这是您需要的步骤。如果您想要数据,Step5 很重要。第 2 步是您可以选择单个表格的地方。

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

            【讨论】:

            • 您使用的是什么 SSMS @Alex C?在我的 SSMS2005 中,我的向导与您的不同。
            • 对不起,我已经好几年没有回答这个问题了。我假设我可能使用的是 2008。我现在刚刚检查了我的向导,您不再需要单击高级,而是第 5 帧(上图)的整个列表显示为向导页面之一。此外,STRUCTURE 和 DATA 选项已分别拆分为 TRUE / FALSE 选项。让我知道是否还有什么可以提供帮助的。
            【解决方案11】:

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

            select * into newtablename from oldtablename
            

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

            select * into newtablename from oldtablename where 1 = 2
            

            【讨论】:

              【解决方案12】:

              我不知道,它是否会匹配这里描述的问题。我不得不进行表的增量备份! (只应复制新插入的数据)。我曾经设计过一个DTS包在哪里。

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

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

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

              【讨论】:

                【解决方案13】:

                一个名为 SqlTableZip 的免费应用程序将完成这项工作。 基本上,您编写 any 查询(当然也可以是 [select * from table]),然后应用程序会创建一个包含所有数据的压缩文件,以后可以恢复。

                链接: http://www.doccolabs.com/products_sqltablezip.html

                【讨论】:

                  【解决方案14】:

                  这类似于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
                  

                  【讨论】:

                  • 这是否包括约束?
                  【解决方案15】:

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

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

                  【讨论】:

                    【解决方案16】:

                    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 命令序列,使这些文件为您需要的任何手动修改做好准备。

                    【讨论】:

                      猜你喜欢
                      • 2016-05-19
                      • 1970-01-01
                      • 2011-10-02
                      • 2021-05-06
                      • 1970-01-01
                      • 2023-02-26
                      • 2020-03-20
                      • 1970-01-01
                      • 2021-07-05
                      相关资源
                      最近更新 更多