随笔 - 202  文章 - 0 评论 - 349 阅读 - 31万
< 2025年6月 >
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 1 2 3 4 5
6 7 8 9 10 11 12

作为我们开发人员经常使用exp导出某一个用户下的所有对象从某一个数据库,
然后导入。通常导入的时候总是会遇到一些意想不到的问题,其中一个问题就是数据库中已经存在同名对象,
同时也为那些比较复杂的参数而烦恼。其实对于我们,只需要做下面三个动作,就能顺利完成你的导入导出工作:
1.导出
   Exp  <username>[/<password>][@<connect_string>] Owner=<user_name> File=<filename.dmp>

2.Drop掉目标用户下的所有对象
   执行下面的语句: 

 1declare     
 2    cursor c_cursor is 
 3    select OBJECT_NAME,OBJECT_TYPE
 4    from user_objects 
 5    where OBJECT_TYPE IN ('TABLE','VIEW',
 6                         'PROCEDURE','FUNCTION',
 7                         'PACKAGE','PACKAGE BODY',
 8                         'SEQUENCE','MATERIALIZED VIEW',
 9                         'SYNONYM','TYPE','TYPE BODY')
10    ORDER BY OBJECT_TYPE,OBJECT_NAME;
11    message varchar2(100);    
12    errorNums integer ;
13begin    
14    errorNums := 0;
15    dbms_output.put_line('Dropping objects');
16    FOR tab_rec IN c_cursor    loop        
17        dbms_output.put_line('dropping ' || tab_rec.OBJECT_TYPE || ' '    || TAB_REC.OBJECT_NAME);
18        begin
19            execute immediate 'drop ' || TAB_REC.OBJECT_TYPE || ' ' || tab_rec.OBJECT_NAME;        
20        exception
21            when others then
22                errorNums := errorNums + 1;
23                dbms_output.put_line('dropping err.');
24                dbms_output.put_line(sqlerrm);
25        end;
26    end loop;    
27    if errorNums>0 then
28        dbms_output.put_line('Finished with error. Please execute again.');
29    else
30        dbms_output.put_line('Finished');
31    end if;    
32end;

   执行上面的语句一定要小心,因为它是不可恢复的.
   第二,如果发现执行中有一些问题,某些对象不能被删除掉,那可能是对象之间有一种依赖关系,重新执行一遍
2.导入
   Exp  <username>[/<password>][@<connect_string>]    FromUser=<user_name>     ToUser=<user_name>     File=<fileName.dmp>

 

 

posted on 2007-05-10 21:19  Shark Xu  阅读(1160)  评论(0)    收藏  举报
为汶川地震死难者哀悼!
点击右上角即可分享
微信分享提示