v_dblink VARCHAR2 (1500);
BEGIN
OPEN table_cursor;
LOOP
FETCH table_cursor INTO v_owner,v_ename;
EXIT WHEN table_cursor%NOTFOUND;
str_sql := 'select /*+ parallel(4) */ count(1) from ' || TRIM (v_owner) ||
'.' || TRIM (v_ename);
EXECUTE IMMEDIATE str_sql INTO i_count;
str_sql :=
'update ds_user_tables tb set tb.record_count=:1 where tb.owner=:2 and
tb.table_name=:3';
EXECUTE IMMEDIATE str_sql USING i_count, v_owner,v_ename;
COMMIT;
if i_count>=0 then
--exp/imp
v_exp :='exp sys/xxx@xx.xx.xx.xx:1521/orcl TABLES=(\"'||v_owner||'.'||
v_ename||'\") ROWS=Y INDEXES =Y CONSTRAINTS =Y GRANTS=Y DIRECT=N BUFFER=819200
file='||v_ename||'.dmp log='||v_ename||'_exp.log';
v_imp :='imp ''sys/xxx@orcl as sysdba'' fromuser='||v_owner||' touser='||
v_owner||' IGNORE=Y GRANTS=N INDEXES=N CONSTRAINTS=N file='||v_ename||'.dmp
log='||v_ename||'_imp.log';
str_sql :=
'update ds_user_tables tb set tb.vexp=:1,tb.vimp=:2 where tb.owner=:3 and
tb.table_name=:4';
EXECUTE IMMEDIATE str_sql USING v_exp,v_imp,v_owner,v_ename;
commit;
--expdp/impdp
v_expdp :='expdp sys/xxx@xx.xx.xx.xx:1521/orcl directory=tcdmpbak
TABLES=(\"'||v_owner||'.'||v_ename||'\") dumpfile='||v_ename||'.dmp log='||
v_ename||'_expdp.log';
v_impdp :='impdp ''sys/xxx@orcl as sysdba'' directory=tcdmpbak dumpfile='||
v_ename||'.dmp log='||v_ename||'_impdp.log';
str_sql :=
'update ds_user_tables tb set tb.vexpdp=:1,tb.vimpdp=:2 where tb.owner=:3
and tb.table_name=:4';
EXECUTE IMMEDIATE str_sql USING v_exp,v_imp,v_owner,v_ename;
commit;
--dblink
v_dblink :='truncate table '||v_owner||'.'||v_ename||';'||'INSERT INTO
'||v_owner||'.'||v_ename||' SELECT * from '||v_owner||'.'||
v_ename||'@xxx;'||'commit;';
str_sql :=
'update ds_user_tables tb set tb.vdblink=:1 where tb.owner=:2 and
tb.table_name=:3';
EXECUTE IMMEDIATE str_sql USING v_dblink, v_owner,v_ename;
COMMIT;
end if;
-- DBMS_OUTPUT.put_line (TO_CHAR (v_count));
评论