管理超过20个国家的账户对于像Leggett & Platt这样的51亿美元公司来说并非易事。为了自动化任务并减少错误,该公司采用了iScala、SQL Server和Red Gate软件工具的组合来管理其数据流程。
Leggett & Platt设计并生产工程组件,如商店展示、家用家具产品和钢管,服务于全球客户。公司的多样化运营涉及多种语言和货币,每个公司分支机构都需要其数据库程序的特定功能。因此,Leggett & Platt IT部门决定实施一个名为iScala的企业资源规划(ERP)系统。iScala使用母国的语言和货币处理国际分支机构的日常业务——例如销售订单、库存跟踪和制造任务。
Leggett & Platt创建了一套名为LPScala的自定义程序,以补充iScala并处理内部需求,如工资单应用程序。LPScala还将总账信息传回公司总部,加载到财务规划系统中。LPScala和iScala都与Microsoft的SQL Server接口,将从程序中获得的所有数据写入SQL数据库。
更新数据库曾经是Leggett & Platt开发人员的一项艰巨任务。他们必须手动创建SQL语句,并将它们捆绑到InstallShield应用程序中。InstallShield文件在每个地点运行,其中Visual Basic应用程序创建数据库,另一个执行SQL脚本以创建数据库对象,命令行中的可执行文件将数据导入表中。这些手写的脚本留下了很多出错的机会。
除了减少错误的机会,Leggett & Platt还希望他们为每个数据库创建的.NET应用程序能够由每个分支机构的人员执行,即使他们对SQL的经验有限。同样重要的是,数据库和核心数据需要正确更新。
Leggett & Platt的最佳解决方案是彻底重新设计其整个数据迁移过程。该公司现在使用Red Gate Software的SQL Toolkit来创建更新公司数据库的可重复过程。SQL Toolkit包括Red Gate的SQL Compare、SQL Data Compare和SQL Packager软件,以及直接从命令行或从另一个应用程序本地编程到API的能力。
Leggett & Platt项目经理Dustin Franks表示:“有一个小型的国际IT部门和非常繁重的工作量。” “很难抽出时间来彻底检查SQL语句,以确保它们都能在分支机构正确工作。SQL Toolkit的检查和平衡系统消除了担忧和猜测。”
Franks和他的团队首先使用SQL Compare对生产数据库进行快照,包括所有数据表。SQL Compare然后确定哪些表在开发和生产之间发生了变化,并生成更新生产数据库结构的脚本。在对开发数据库进行了所有表和架构更改、测试和最终确定之后,数据库被移至生产环境。
对于远程站点的部署,Franks使用SQL Packager和InstallShield的组合创建了一个可执行文件。SQL Packager创建了最终SQL数据库表的可执行文件,其中包含将在客户站点分发的数据,保留了数据库的结构以及表内的所有依赖项。依赖项包括Leggett & Platt为用户类型定义设置的语言条目、安全项和菜单。
SQL Packager首先引导用户选择新数据库的架构和数据,然后生成脚本以保留依赖项。最后一步,该工具自动打包一个可执行文件或.NET项目,创建一个易于安装的实用程序。
Franks和他的团队然后为每个更新编写一个.NET应用程序,该应用程序将在客户站点启动。.NET代码将比较SQL Packager创建的数据库与Leggett & Platt分支机构当前使用的数据库,并生成更新分支机构数据库架构所需的脚本。
为了创建最终的远程部署文件,SQL Compare快照、SQL Packager可执行文件和手动编写的.NET应用程序与InstallShield一起编译。
一旦在客户端站点启动,InstallShield应用程序将从SQL Packager文件创建一个干净的数据库,用于数据同步。然后.NET应用程序使用Red Gate的SQL Data Compare比较InstallShield的数据库快照和手头的数据,生成一个概述两个数据库差异的脚本。然后执行该脚本来更新分支机构的数据,以匹配SQL Packager可执行文件中的记录,使现场数据库能够更新,而不会抹去现有数据。
Franks说:“使用SQL Compare,如果其中一个数据库事务失败,它们都会失败。” “数据库回滚到一个干净的数据库。过去不得不用一个特殊的版本来修复不完整的数据库,或者手动删除记录并重新运行安装。”
Leggett & Platt对客户数据库的IT支持随着iScala和Red Gate工具的实施得到了极大的提升。现在,这个工作量繁重的小团队可以更多地专注于所需的更新和Visual Basic代码,而不是双重检查脚本和创建修复。