假设我有一个这样的数据库:
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。
答案 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)
我会采用一种通用的归档方法解决这个问题:
既然你想维持 文件流数据,我不知道如何.csv 或者可以使用bcp文件。另外,这个 适合你提到的想法 拥有一个巨大的数据库 积累信息。
DbName将是该名称 数据库即原始记录 来自。你可以结合这个 用户ID创建一个列 复合键。这将允许您保留您的身份字段 表格仍然可以合并 具有相同ID的用户进入一个表。
据推测这个存储过程会 作为SQL代理作业和您一起运行 可以在每个数据库中有一个。该 可以引用要删除的用户 通过集中的表格。
答案 6 :(得分:1)
另一种可能性是将SSIS与自定义选择语句和原始数据输出一起使用。内容将以原生格式非常快速地导入和导出,同时获得您想要的确切记录。此外,您可以在导出后对文件运行压缩或运行文件命令以移动它们。