暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 加载数据的脚本

askTom 2017-04-10
294

问题描述

嗨,团队,

我正在寻找一个脚本,它执行以下操作


1.禁用约束
--------------------------

开始
对于cur in (选择所有者,constraint_name,table_name
从所有 _ 约束
其中所有者 = 'hri1_dumpstag' 和
表名称 = 'BILL') 循环
立即执行 'ALTER TABLE '| | cur.owner | |'.'| cur.table_name | |' 修改约束 '| | cur.Constraintt_name | |' "禁用NOVALIDATE ';
结束循环;
结束;




2.备份表
---------------------------
创建表ownername.tablename_bkp作为select * 从ownername.tablename;

3.截断表数据
--------------------------
截断表所有者名称。tablename;

4.使用SQL加载器实用程序加载数据 (对于Windows)
-----------------------------------------
sqlldr <用户>/<密码> @ SRVC_NAME控件 = TABLENAME.ctl数据 = TABLENAME.Txt日志 = TABLENAME.log bad = TABLENAME.bad错误 = 1000000 &


5.启用约束条件
-------------------------
alter table 启用约束 ;

我希望所有这些都可以在Sqlplus或oracle sql developer中运行的单个文件中,该文件将仅将Tablename作为输入表。



专家解答

像这样的东西?

set termout off
set feedback off
set verify off
set heading off

undefine own
col x new_value own
select owner x , case when count(*) over () != 1 then 1/0 end err
from dba_tables
where table_name = upper('&1');

set termout on

select 'ALTER TABLE '||owner||'.'||table_name||' MODIFY CONSTRAINT "'||constraint_name||'" DISABLE NOVALIDATE;'
from all_constraints
where r_owner = '&&own' 
and r_constraint_name in
  ( select constraint_name
    from   all_constraints
     where owner = '&&own' 
    and TABLE_NAME = upper('&1')    
  );
  
select 'ALTER TABLE '||owner||'.'||table_name||' MODIFY CONSTRAINT "'||constraint_name||'" DISABLE NOVALIDATE;'
from all_constraints
where owner = '&&own' 
and TABLE_NAME = upper('&1');

select 'create table &&own..'||upper('&1')||'_bkp as select * from &&own..'||upper('&1')||';'
from dual;

select 'truncate table &&own..'||upper('&1')||';' from dual;

select 'host sqlldr &&own./@SRVC_NAME control='||upper('&1')||'.ctl data='||upper('&1')||'.txt log='||upper('&1')||'.log bad='||upper('&1')||'.bad errors=1000000'
from dual;

select 'ALTER TABLE '||owner||'.'||table_name||' MODIFY CONSTRAINT "'||constraint_name||'" enable VALIDATE;'
from all_constraints
where owner = '&&own' 
and TABLE_NAME = upper('&1');


select 'ALTER TABLE '||owner||'.'||table_name||' MODIFY CONSTRAINT "'||constraint_name||'" enable VALIDATE;'
from all_constraints
where r_owner = '&&own' 
and r_constraint_name in
  ( select constraint_name
    from   all_constraints
     where owner = '&&own' 
    and TABLE_NAME = upper('&1')    
  );

set feedback on
set verify on
set heading on




which spits out something like this:


SQL>  @c:\temp\x.sql SALES

ALTER TABLE MCDONAC.SALES MODIFY CONSTRAINT "SYS_C0012329" DISABLE NOVALIDATE;
ALTER TABLE MCDONAC.SALES MODIFY CONSTRAINT "SYS_C0012330" DISABLE NOVALIDATE;
ALTER TABLE MCDONAC.SALES MODIFY CONSTRAINT "SYS_C0012331" DISABLE NOVALIDATE;

create table MCDONAC.SALES_bkp as select * from MCDONAC.SALES;

truncate table MCDONAC.SALES;

host sqlldr MCDONAC/@SRVC_NAME control=SALES.ctl data=SALES.txt log=SALES.log bad=SALES.bad errors=1000000

ALTER TABLE MCDONAC.SALES MODIFY CONSTRAINT "SYS_C0012329" enable VALIDATE;
ALTER TABLE MCDONAC.SALES MODIFY CONSTRAINT "SYS_C0012330" enable VALIDATE;
ALTER TABLE MCDONAC.SALES MODIFY CONSTRAINT "SYS_C0012331" enable VALIDATE;


您可能想要进行大量增强 (设置索引不可用,不包括空约束等)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论