我处于一个想要使用许多数据库的场景中。有些在我的项目中,有些在外部。我的应用程序会将数据从外部数据库(驻留在远程机器中的数据库。我知道 ip 和用户凭据)传输到我的临时数据库。我想将该数据库中的表创建到我的数据库中。最好的方法是什么?我会使用 ASP.NET 3.5 。有什么建议,例如 WCF 或 Web 服务?
4 回答
我将详细说明理查德和克里斯所说的 -
复制是一组技术,用于将数据和数据库对象从一个数据库复制和分发到另一个数据库,然后在数据库之间进行同步以保持一致性。使用复制,您可以通过局域网和广域网、拨号连接、无线连接和 Internet 将数据分发到不同的位置以及远程或移动用户。
事务复制通常用于需要高吞吐量的服务器到服务器场景,包括:提高可扩展性和可用性;数据仓库和报告;整合来自多个站点的数据;整合异构数据;并卸载批处理。合并复制主要是为可能存在数据冲突的移动应用程序或分布式服务器应用程序设计的。常见场景包括:与移动用户交换数据;消费者销售点 (POS) 应用程序;并整合来自多个站点的数据。快照复制用于为事务复制和合并复制提供初始数据集;当完全刷新数据是合适的时候,也可以使用它。通过这三种类型的复制,
除了复制之外,在 SQL Server 2008 中,您还可以使用Microsoft Sync Framework 和 Sync Services for ADO.NET 来同步数据库。ADO.NET 的同步服务提供了一个直观且灵活的 API,您可以使用它来构建针对脱机和协作场景的应用程序。
你必须回答自己一些问题:
- 源数据库和目标数据库的schema是否稳定?
- 您能承受同步期间的停机时间吗?
- 您传输数据和结构还是仅传输数据?
- 您多久需要一次同步?(每天一次或总是最近的数据)
答案取决于这个问题,但一个简单的解决方案是使用 SMO 和“转移”任务。
Server srv = default(Server);
srv = new Server();
//Reference the AdventureWorks database
Database db = default(Database);
db = srv.Databases("AdventureWorks");
//Create a new database that is to be destination database.
Database dbCopy = default(Database);
dbCopy = new Database(srv, "AdventureWorksCopy");
dbCopy.Create();
//Define a Transfer object and set the required options and properties.
Transfer xfr = default(Transfer);
xfr = new Transfer(db);
xfr.CopyAllTables = true;
xfr.Options.WithDependencies = true;
xfr.Options.ContinueScriptingOnError = true;
xfr.DestinationDatabase = "AdventureWorksCopy";
xfr.DestinationServer = srv.Name;
xfr.DestinationLoginSecure = true;
xfr.CopySchema = true;
//Script the transfer. Alternatively perform immediate data transfer
// with TransferData method.
xfr.ScriptTransfer();
我实际上并没有使用过它,但我认为Microsoft Sync Framework的创建考虑了这种类型的场景。
听起来您需要阅读有关数据库复制的信息。