是否可以在 Microsoft SQL Server 中备份数据库的子集?

Sai*_*han 3 schema sql-server backup dump

使用 Microsoft SQL Server,有没有办法备份生产数据库的子集?我只想要数据库结构,以及几个选定表的极少量交易数据。

我想用这个备份文件来刷新开发数据库。

对于 Oracle,我看到这是使用此 Powershell 脚本实现的:

userid="/ as sysdba"
compression=all
directory=TEST_DIR
flashback_time=systimestamp
dumpfile=XX.dmp
logfile=xx.log
schemas=XXXXX
query=SCHEMA.TABLE:"where <condition>
exclude=TABLE:"IN (x)"
Run Code Online (Sandbox Code Playgroud)

RDF*_*ozz 6

在 SQL Server Management Studio (SSMS) 中,您可以生成一个脚本来创建数据库的结构组件(表和视图,以及用户、函数和过程)。您可以使用开发数据库上返回的脚本。

要运行它,请在 SSMS 中右键单击您的数据库,然后选择 Tasks => Generate scripts...。这将打开一个向导,它将引导您完成整个过程,为您提供要复制的选项。

对于表格,您可以设置一些高级选项。这允许您包含索引和触发器,以及将数据包含在表中。但是,这将为您提供表格中的所有数据,而不仅仅是选定的数量。

如果您想要来自选定表的所有数据,而没有来自其余表的数据,那么两次通过这将让您生成两个脚本。

在第一遍中,选择所有内容,将内容编写为“如果存在则删除”(假设您要替换已经存在的任何内容),包括数据,并将其保存为单个脚本。

在第二遍中,只选择要复制数据的表;不要选择“DROP if exists”选项;并且确实包含数据,将其保存为第二个单个脚本(或者,如果您愿意,可以将其保存为每个表一个脚本)。

注意:这会创建您将在数据库上运行的脚本,而不是真正的备份。

  • 除此之外,这确实意味着已从生产数据库中删除的任何对象都不会被脚本删除;它只是重新创建它所知道的。如果您真正想要的是一个干净的数据库开始,您可能想要删除当前的开发数据库并创建一个具有相同名称的新数据库。但是,请确保您已捕获第一个脚本中的每个对象,否则将丢失某些内容。
  • 而且,如果您需要仅使用部分生产数据填充某些表,那么您需要从脚本文件中手动删除额外的行,或者使用不同的过程来填充这些表。