导出和导入数据库中的选定行

时间:2010-07-21 11:47:23

标签: sql-server-2008 import export database-backups

假设我有一个这样的数据库:

Users
-----
ID int PK Identity
Name vchar(max)

Sales
-----
UserID int FK
Description vchar(max)

还有一些数据:

Users
1, "Daniel"
2, "Barnie"
3, "Frank"

Sales
2, "New computer"
2, "Rubber duck"
3, "Cabbage"

还有其他几个表链接到此主键。现在要求只备份某些用户,例如我只想为用户2和3导出数据和所有链接数据。

问题: 1)有没有办法只使用部分数据创建.bak文件?我不想备份整个事情,只是选择了记录。 2)如果.bak文件不是最佳方式,还可以做些什么?我曾想过生成一个csv文件或一个INSERT sql脚本,但这些会导致导入功能出现问题。当您从两个或多个数据库导出并且现在在users表的主键中存在潜在冲突时,会出现问题。你怎么解决这个问题?我也在一些表中使用文件流,所以我有一些数据无法轻易地提取到文本格式。

我也想以编程方式完成所有这些工作。使用sql server 2008。

7 个答案:

答案 0 :(得分:2)

一个相对简单的选择是使用要备份的用户填充表,在存档用户的同一服务器实例上创建另一个数据库,然后选择进入新数据库(显然是用户表)。从旧数据库中删除新数据库中存在值的数据库,备份新数据库,然后就是金牌。

答案 1 :(得分:2)

  

问题:1)有没有办法只使用部分数据创建.bak文件?我不想备份整个事情,只是选择了记录。

没有。在SQL Server中,备份功能仅备份整个数据库。

  

2)如果.bak文件不是最佳方式,还可以做些什么?

我建议在与原始服务器相同的服务器上设置第二个存档数据库,并使用复制仅同步某些记录。然后我只备份存档数据库(或两者但是在不同的时间表上)。

如果复制不是您的伏特加风味,那么您甚至可以在此存档数据库中执行触发的upsert或删除。

  

我曾考虑过生成csv文件或INSERT sql脚本,但这会导致导入功能出现问题。当您从两个或多个数据库导出并且现在在users表的主键中存在潜在冲突时,会出现问题。你怎么解决这个问题?我也在一些表中使用文件流,所以我有一些数据无法轻易地提取到文本格式。

这是多租户情况吗?无论如何,对于每个数据库,我将创建第二个存档数据库,用于备份实际需要的信息。因此,没有两个数据库会输入同一个过滤的存档数据库。

答案 2 :(得分:2)

您可以使用分区在不同文件组或不同服务器之间划分数据。然后,您可以通过将不同的备份计划应用于文件组/服务器来选择备份每个分区的方式。

但总的来说,这些天存储非常便宜。除非你真的知道这会付出代价,否则我会备份一切。备份系统越复杂,越容易出现故障,节省一些演出的成本就不会等于丢失所有数据的成本!

答案 3 :(得分:1)

备份意味着能够拍摄数据库的快照,以便可以在其他时间恢复。如果您不关心某些记录,请删除它们,然后进行备份。

答案 4 :(得分:1)

这个想法怎么样:

  • 为要备份的每个相关表创建备份表。
  • 使用简单的查询填充此表(您只需选择有关需要备份的用户的数据)
  • 每个相关表上的简单触发器(添加或更新),以使备份表同步。
  • 现在您可以从此新表中导出备份
  • 要使用insert ignore恢复数据。

这只是一个想法,让我们批评:)

答案 5 :(得分:1)

我会采用一种通用的归档方法解决这个问题:

  • 使用all创建一个中央数据库 您需要的所有表的模式 出口
  

既然你想维持   文件流数据,我不知道如何.csv   或者可以使用bcp文件。另外,这个   适合你提到的想法   拥有一个巨大的数据库   积累信息。

  • 对于每个表,添加一个新列 叫做DbName。
  

DbName将是该名称   数据库即原始记录   来自。你可以结合这个   用户ID创建一个列   复合键。这将允许您保留您的身份字段   表格仍然可以合并   具有相同ID的用户进入一个表。

  • 创建一个存储过程 将必要的数据加载到新的 数据库并删除它 时间(或至少删除标记)。
  

据推测这个存储过程会   作为SQL代理作业和您一起运行   可以在每个数据库中有一个。该   可以引用要删除的用户   通过集中的表格。

答案 6 :(得分:1)

另一种可能性是将SSIS与自定义选择语句和原始数据输出一起使用。内容将以原生格式非常快速地导入和导出,同时获得您想要的确切记录。此外,您可以在导出后对文件运行压缩或运行文件命令以移动它们。