在升级或迁移后,是否有很好的方法来验证数据库架构是否正确?

我们有一些客户正在从一种数据库版本升级到另一种数据库版本(从Oracle 9i升级到Oracle 10g或11g).在一种情况下,客户导出了旧数据库并将其导入到新数据库中,但是由于某种原因,未创建索引和约束.他们可能是故意这样做,以加快导入过程,但我们仍在调查原因.

真正的问题是,导入后是否有一种简单的方法可以验证数据库的结构是否完整?我们可以对结构执行某种校验和吗?我们意识到我们可以做很多查询来查看所有表,索引,别名,视图,序列等是否存在,但这可能很难编写和维护.

更新资料

感谢您提出建议使用商业和/或GUI工具的答案,但是我们确实需要一些免费的东西,可以与我们的产品包装在一起.它也必须是命令行或脚本驱动的,以便我们的客户可以在任何环境(unix,linux,windows)中运行它.

最佳答案
假设有一个架构,类似这样-在迁移之前将USER_OBJECTS转储到表中.

 CREATE TABLE SAVED_USER_OBJECTS AS SELECT * FROM USER_OBJECTS

然后在迁移后进行验证

 SELECT object_type, object_name FROM SAVED_USER_OBJECTS
 MINUS
 SELECT object_type, object_name FROM USER_OBJECTS

一个问题是,如果您故意在版本之间删除对象,则还需要从SAVED_USER_OBJECTS中删除.如果存在错误版本的对象,此操作也不会生效.

如果您有多个模式,则每个模式都需要相同的内容,或者使用ALL_OBJECTS并提取/比较相关的用户模式.

您还可以对整个架构的object_type || object_name进行哈希/校验和(保存之前/之后进行比较),但是计算成本与比较索引上的两个表没有什么不同.

转载注明原文:在升级或迁移后,是否有很好的方法来验证数据库架构是否正确? - 代码日志