所以,我有这个基于 java 的数据转换/屏蔽工具,我想在 Oracle 10g 上进行测试。Oracle 10g 的好处是您可以获得大量示例模式,其中有 50 万条记录。架构是:SH,OE,HR,IX等。所以,我安装了10g,发现安装脚本在ORACLE_HOME/demo/scripts下。
我稍微定制了这些脚本以在批处理模式下运行。这解决了我一半的需求——为我的数据转换软件测试创建源数据。要求的后半部分是我在没有任何数据的情况下以不同的名称(TR_HR、TR_OE 等等)创建相同的模式。这些模式将代表我的目标模式。因此,简而言之,我的软件将从模式中的表中提取数据并将其加载到不同模式中的同一个表中。
现在,我在创建目标架构和清空它时遇到了两个问题。
- 我想在批处理作业中这样做。但是您获得的 oracle 脚本、示例模式名称是不可配置的。因此,我尝试创建一个脚本,将 OE 替换为 TR_OE,将 HR 替换为 TR_HR 等等。但是,这种方法有点烦人,因为示例模式的创建方式有点复杂;Oracle 创建同义词、视图、物化视图、数据类型和许多奇怪的东西。
- 我希望目标模式(TR_HR、TR_OE、...)为空。但是有些模式有循环引用,这不允许我删除数据。唯一的解决方法似乎是删除某些外键,删除数据,然后重新添加约束。
有没有什么简单的方法来解决这一切,而不必大惊小怪?我需要一个复杂的数据集来进行测试(复杂的如带有触发器的表、多个层次结构......例如......一个具有多达 5 个级别的子表、一个引用 IOT 表和一个 IOT 表的父表指的是非物联网表等。)。从数据集的角度来看,示例模式几乎是完美的。我看到的唯一挑战是自动化加载源模式的整个过程,然后创建目标模式并清空它们。感谢您的帮助和建议。
更新
手动安装 oracle 示例模式需要运行的主要脚本是 mkplug.sql。这是从 dmp 文件加载模式的行:
host imp "'sys/&&password_sys AS SYSDBA'" transport_tablespace=y file=&imp_file log=&imp_logfile datafiles='&datafile' tablespaces=EXAMPLE tts_owners=hr,oe,pm,ix,sh
好吧,我尝试将这一行修改为:
host imp "'sys/&&password_sys AS SYSDBA'" rows=n transport_tablespace=y file=&imp_file log=&imp_logfile datafiles='&datafile' tablespaces=EXAMPLE tts_owners=hr,oe,pm,ix,sh
而且......它没有帮助。架构是用行数据创建的,尽管 rows=n 属性:(