Oracle Exp誤匯入系統帳號的補救方法

壹頁書發表於2013-11-10
單位一個同事誤把Exp匯入了system帳號,但是系統已經執行了一段時間,資料需要保留,所以不能用源dmp檔案重新初始化..

解決過程如下
1.確定誤匯入物件的範圍
2.表的處理
3.其他物件的處理
4.刪除system帳號下誤匯入的物件

初始化物件,並匯入system帳號
  1. create table t1 as select rownum n from dual connect by level<10;
  2. create table t2 as select rownum n from dual connect by level<10;
  3. create table t3 as select rownum n from dual connect by level<10;
  4. create table t4 as select rownum n from dual connect by level<10;

  5. create index inx_t1 on t1(n);
  6. create index inx_t2 on t2(n);
  7. create index inx_t3 on t3(n);
  8. create index inx_t4 on t4(n);

  9. create view v1 as select * from t1;
C:\Users\lihuilin>imp system/xxxxxx file=C:\tmp\test.dmp  full=y
Import: Release 11.2.0.1.0 - Production on 星期六 11月 9 23:01:33 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

連線到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

經由常規路徑由 EXPORT:V11.02.00 建立的匯出檔案

警告: 這些物件由 LIHUILIN 匯出, 而不是當前使用者

已經完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的匯入
. 正在將 LIHUILIN 的物件匯入到 SYSTEM
. . 正在匯入表                            "T1"匯入了           9 行
. . 正在匯入表                            "T2"匯入了           9 行
. . 正在匯入表                            "T3"匯入了           9 行
. . 正在匯入表                            "T4"匯入了           9 行
成功終止匯入, 沒有出現警告。

1.確定誤匯入物件的範圍。

  1. select object_name,object_type from user_objects where created>sysdate-1;
  2. OBJECT_NAME OBJECT_TYPE
  3. --------------- -------------------
  4. V1              VIEW
  5. INX_T4          INDEX
  6. T4              TABLE
  7. INX_T3          INDEX
  8. T3              TABLE
  9. INX_T2          INDEX
  10. T2              TABLE
  11. INX_T1          INDEX
  12. T1              TABLE

  13. 已選擇9行。
2.表的處理
    找到所有誤匯入的表,然後使用exp將其重新匯入正確的帳號。
    真實的情況是誤匯入的表有幾百張,所以需要用下面的SQL生成需要匯出的表名稱。
  1. select max(ltrim(tables,',')) tables
  2. from
  3. (
  4.     select sys_connect_by_path(object_name,',') tables
  5.     from
  6.     (
  7.         select object_name,
  8.         object_type,
  9.         rownum r
  10.         from user_objects
  11.         where created >sysdate-1
  12.         and object_type='TABLE'
  13.     ) v
  14.     start with r=1
  15.     connect by r=prior r+1
  16. );

  17. TABLES
    ----------------------------

    T1,T2,T3,T4

C:\Users\lihuilin>exp system/xxxxxx tables=T1,T2,T3,T4 file=c:\tmp\t.dmp

Export: Release 11.2.0.1.0 - Production on 星期六 11月 9 23:31:29 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

連線到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
已匯出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即將匯出指定的表透過常規路徑...
. . 正在匯出表                              T1匯出了           9 行
. . 正在匯出表                              T2匯出了           9 行
. . 正在匯出表                              T3匯出了           9 行
. . 正在匯出表                              T4匯出了           9 行
成功終止匯出, 沒有出現警告。

3.其他物件的處理
    使用DBMS_METADATA獲取建立語句
  1. select 'select dbms_metadata.get_ddl('''||object_type||''','''||object_name||''') from dual;'
  2.     from user_objects where created>sysdate-1 and object_type not in ('TABLE','INDEX');
執行生成的SQL
SQL> select dbms_metadata.get_ddl('VIEW','V1') from dual;
 
CREATE OR REPLACE FORCE VIEW "SYSTEM"."V1" ("N") AS
  select "N" from t1

將生成的DDL在目標帳號執行。

4.刪除system帳號的錯誤資料

  1. set echo off
  2. set feedback off
  3. set newpage none
  4. set pagesize 5000
  5. set linesize 500
  6. set verify off
  7. set pagesize 0
  8. set term off
  9. set trims on
  10. set linesize 600
  11. set heading off
  12. set timing off
  13. set verify off
  14. set numwidth 38
  15. spool drop.sql
  16. select 'drop '|| object_type||' '||object_name||decode(object_type,'TABLE',' purge;',';') from user_objects where created>sysdate-1 and object_type not in ('INDEX','LOB');
  17. spool off
  18. @drop.sql

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-776221/,如需轉載,請註明出處,否則將追究法律責任。

相關文章