所以,我有这个基于java的数据转换/屏蔽工具,我想在Oracle 10g上进行测试。 Oracle 10g的优点在于,您可以获得大量包含50万条记录的示例模式。模式是:SH,OE,HR,IX等。所以,我安装了10g,发现安装脚本在ORACLE_HOME / demo / scripts下。
我稍微定制了这些脚本以便在批处理模式下运行。这解决了我的一半要求 - 为我的数据转换软件测试创建源数据。 要求的后半部分是我在不使用任何数据的情况下以不同的名称(TR_HR,TR_OE等等)创建相同的模式。这些模式将代表我的目标模式。因此,简而言之,我的软件会从架构中的表中获取数据并将其加载到不同架构中的同一个表中。
现在,我在创建目标模式并清空它时遇到两个问题。
有没有简单的方法来解决这一切,没有这么大惊小怪?我需要一个复杂的数据集用于我的测试(复杂的,如带有触发器的表,多个层次结构......例如,一个子表最多有5个级别,一个父表引用一个IOT表和一个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
好吧,我尝试修改此行(在修复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
并且......它确实不帮助。尽管rows = n attribute:(
。),仍使用行数据创建了模式答案 0 :(得分:5)
由于您已经熟悉使用.dmp文件的Oracle脚本中的exp / imp(或expdp / impdp),为什么不呢:
[阅读有关可传输表空间的评论后编辑]
我不知道Oracle脚本使用的是可传输的表空间,并且从单个文件导入了多个模式。这可能是创建新的空TR模式最直接的方法:
在上创建无数据导出文件 逐个架构(OE显示):
exp sys /&& password_sys AS SYSDBA 文件= oe_nodata.dmp log = oe_nodata_exp.log owner = OE rows = N. 补助= N
(你应该只做一次 这个dmp文件可以重复使用)
现在,您的脚本应该:
填充架构对象(OE
显示):
host imp“'sys /&& password_sys AS SYSDBA'“file = oe_nodata.dmp log = tr_oe_imp.log fromuser = OE TOUSER = TR_OE
答案 1 :(得分:1)
这是一个anonymos块 - 对于给定的模式 - 禁用触发器和外键,截断所有表,然后重新启用触发器和外键。它使用truncate
来提高速度,但显然这意味着没有回滚:所以要小心你提供的模式名称!如果您愿意,可以很容易地将该调用转换为delete from
语句。
该脚本是cut'n'paste编程的一个很好的例子,毫无疑问会受益于一些重构来消除重复。
begin
<< dis_triggers >>
for trgs in ( select owner, trigger_name
from all_triggers
where table_owner = '&&schema_name' )
loop
execute immediate 'alter trigger '||trgs.owner||'.'||trgs.trigger_name
||' disable';
end loop dis_triggers;
<< dis_fkeys >>
for fkeys in ( select owner, table_name, constraint_name
from all_constraints
where owner = '&&schema_name'
and constraint_type = 'R')
loop
execute immediate 'alter table '||fkeys.owner||'.'||fkeys.table_name
||' disable constraint '||fkeys.constraint_name;
end loop dis_fkeys;
<< zap_tables >>
for tabs in ( select owner, table_name
from all_tables
where owner = '&&schema_name' )
loop
execute immediate 'truncate table '||tabs.owner||'.'||tabs.table_name
||' reuse storage';
end loop zap_tables;
<< en_fkeys >>
for fkeys in ( select owner, table_name, constraint_name
from all_constraints
where owner = '&&schema_name'
and constraint_type = 'R')
loop
execute immediate 'alter table '||fkeys.owner||'.'||fkeys.table_name
||' enable constraint '||fkeys.constraint_name;
end loop en_fkeys;
<< en_triggers >>
for trgs in ( select owner, trigger_name
from all_triggers
where table_owner = '&&schema_name' )
loop
execute immediate 'alter trigger '||trgs.owner||'.'||trgs.trigger_name
||' enable';
end loop en_triggers;
end;
/