当外部力量对您的Deltek Cobra系统造成损害时,基本SQL的工作知识可以成为救生员。
想象一下当我看到我的客户的Deltek Cobra生产系统开放时的恐惧,项目列表完全失去了我们过去7个月一直在做的项目。
为了简单介绍一下情况,您应该知道Deltek Cobra客户端安装在一台Wi-Fi联网的机器上,而Cobra数据库则安装在大楼其他地方的一台小型服务器上。在程序恢复过程中,Wi-Fi显然脱离了我的控制。
这是失去数据库连接的最糟糕时机。果然,在我恢复了Wi-Fi并重启了眼镜蛇之后,我们心爱的项目就不见了。当我再次尝试从。cmp备份文件中恢复程序时,真正的恐惧开始了。它失败的可怕的各种模糊的消息不能增加一些ID号;手掌开始冒汗,血液从脸上涌出。我从来没有在Cobra中看到过恢复失败——从来没有。这个功能几乎是防弹的。
我是一个狂热的后台支持,甚至到了偏执的地步,但当备份无法恢复时,这对任何人都没有帮助。我知道这个备份文件是正确的,因为我之前已经用相同的. cmp文件在沙箱机器上加载了项目。这肯定会带来数据库引用完整性问题。
拯救-眼镜蛇SQL命令实用程序。我在Cobra主数据表上运行了一些SELECT *语句,发现我的项目分散在各处。很明显,没有足够的东西在坠机后能作为一个项目使用,但留下的足够破坏恢复功能。
在这种情况下,唯一的解决方案是卷起袖子,在任何引用项目的表上启动DELETE语句。现在我绝不是一个SQL专家,但多年来我已经学到了足够的知识来帮助自己摆脱一些非常棘手的情况。请记住,Cobra附带了一组非常方便的SQL文件,我经常为了自己的邪恶目的修改这些文件。查看眼镜蛇5.0安装目录下的Samples/Scripts目录,找到这些有用的文件。
下面是我必须从其中删除项目的表。如果你遇到类似的情况,这些可能会有所帮助。
从TPHASE中删除项目名称
DELETE FROM cwp WHERE PROGRAM = "项目名称"
DELETE FROM BASEDETL WHERE PROGRAM = "项目名"
DELETE FROM BASEHIST WHERE PROGRAM = "项目名"
DELETE FROM BASEHIST WHERE PROGRAM = "项目名"
DELETE FROM BASELOG WHERE PROGRAM = "项目名称"
DELETE FROM CODEFIELD WHERE DIR_ID = "项目名称"
DELETE FROM COSTELEM WHERE PROGRAM = "项目名"
DELETE FROM COSTREPCLASS WHERE PROGRAM = "项目名"
DELETE FROM LINK WHERE PROGRAM = "项目名称"
DELETE FROM PROGRAM WHERE PROGRAM = "项目名称"
DELETE FROM CLASSES WHERE PROGRAM = "项目名"
如果您的项目有更复杂的设置,可能会涉及到其他表,因此我建议您首先使用select语句检查所有表,并注意那些显示项目名称的表。
在运行这组语句之后,项目恢复正常,避免了紧急情况。如果您有管理权限,或者有友好的数据库管理员提供帮助,那么毫无疑问有更好的方法来清除数据库中损坏的记录,但在必要时,以上是您可以考虑的一种解决方案。