代码之家  ›  专栏  ›  技术社区  ›  DanDan

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

  •  3
  • DanDan  · 技术社区  · 14 年前

    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"
    

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

    我还想按程序来做这一切。使用sql server 2008。

    7 回复  |  直到 14 年前
        1
  •  2
  •   Thomas    14 年前

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

    不可以。在SQL Server中,备份功能将只备份整个数据库。

    2) 如果.bak文件不是最好的方法,还能做什么?

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

    如果复制不是你喜欢的伏特加风格,那么你甚至可以做一个触发的升级或删除到这个存档数据库中。

    我曾考虑过生成csv文件或INSERT sql脚本,但这些都会导致导入功能出现问题。当您已从两个或多个数据库导出,并且用户表的主键中存在潜在冲突时,就会出现问题。你怎么避开这个?我还在一些表中使用filestreaming,因此我有一些数据不能很容易地提取为文本格式。

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

        2
  •  2
  •   JNK    14 年前

        3
  •  2
  •   mdma    14 年前

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

    但总的来说,现在的存储非常便宜。除非你真的知道这会花很多钱,否则我会把所有东西都备份。备份系统越复杂,就越容易发生故障,节省几个gig的成本并不等于丢失所有数据的成本!

        4
  •  1
  •   Romain Hippeau    14 年前

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

        5
  •  1
  •   chahedous    14 年前

    这个主意怎么样:

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

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

        6
  •  1
  •   8kb    14 年前

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

    • 所有需要的表的模式 导出

    既然你想保持 文件流数据,我看不出.csv 或者可以使用bcp文件。另外,这个 符合你提到的想法 积累信息。

    • 对于每个表,添加一个新列 称为DbName。

    DbName将是 来自。你可以把这个组合起来 使用用户ID创建 复合键 . 这将允许您将标识字段保留在 仍然可以合并表

    • 创建一个存储过程 同时删除数据库 时间(或至少标记为删除)。

    作为SQL代理作业运行 可以引用要删除的用户

        7
  •  1
  •   Zachary Scott    14 年前

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