Oracle示例数据问题

Jay*_*Jay 2 oracle sample oracle10g sample-data

所以,我有这个基于java的数据转换/屏蔽工具,我想在Oracle 10g上进行测试.Oracle 10g的优点在于,您可以获得大量包含50万条记录的示例模式.模式是:SH,OE,HR,IX等.所以,我安装了10g,发现安装脚本在ORACLE_HOME/demo/scripts下.

我稍微定制了这些脚本以便在批处理模式下运行.这解决了我的一半要求 - 为我的数据转换软件测试创建源数据.要求的后半部分是我在不使用任何数据的情况下以不同的名称(TR_HR,TR_OE等等)创建相同的模式.这些模式将代表我的目标模式.因此,简而言之,我的软件将从模式中的表中获取数据,并将其加载到不同模式中的同一个表中.

现在,我在创建目标模式并清空它时遇到两个问题.

  • 我想在批量工作中这样做.但是您获得的oracle脚本,示例模式名称是不可配置的.所以,我尝试创建一个脚本,用TR_OE替换OE,用TR_HR替换HR等等.然而,这种方法有点令人恼火,因为样本模式在创建方式上有点复杂; Oracle创建同义词,视图,物化视图,数据类型和许多奇怪的东西.
  • 我希望目标模式(TR_HR,TR_OE,...)为空.但是一些模式具有循环引用,这不允许我删除数据.唯一的解决方法似乎是删除某些外键,删除数据然后再添加约束.

有没有这么简单的方法,没有这么大惊小怪?我需要一个复杂的数据集用于我的测试(复杂的,如带有触发器的表,多个层次结构......例如,一个子表最多有5个级别,一个父表引用一个IOT表和一个IOT表指的是非IOT表等.).从数据集的角度来看,示例模式几乎是完美的.我看到的唯一挑战是自动化加载源模式的整个过程,然后创建目标模式并清空它们.感谢您的帮助和建议.


UPDATE

您需要运行以手动安装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
Run Code Online (Sandbox Code Playgroud)

好吧,我尝试修改此行(在修复mkplug.sql和所有其他sql文件上的路径相关问题之后)到此:

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
Run Code Online (Sandbox Code Playgroud)

而且......它没有帮忙.尽管rows = n属性:(使用行数据创建了架构:(

dpb*_*ley 5

由于您已经熟悉使用.dmp文件的Oracle脚本中的exp/imp(或expdp/impdp),为什么不只是:

  • 创建空的TR_xxx模式
  • 使用FROMUSER/TOUSER选项填充xxx .dmp文件中的TR_xxx模式,并使用ROWS = N(expdp/impdp存在类似选项)

[阅读有关可传输表空间的注释后编辑]

我不知道Oracle脚本使用的是可传输的表空间,并且从单个文件导入了多个模式.这可能是创建新的空TR模式最直接的方法:

  • 从使用Oracle脚本构建的标准,填充数据库开始

  • 通过以下方式逐个架构(显示OE)创建无数据导出文件:

    exp sys/&& password_sys AS SYSDBA file = oe_nodata.dmp log = oe_nodata_exp.log owner = OE rows = N grants = N

    (你应该只需要这样做一次,这个dmp文件可以重复使用)

现在,您的脚本应该:

  • 使用CASCADE
    选项删除任何TR_用户
  • 重新创建TR_用户
  • 通过以下方式填充架构对象(
    显示的OE ):

    host imp"'sys/&& password_sys AS SYSDBA'"file = oe_nodata.dmp log = tr_oe_imp.log fromuser = OE touser = TR_OE