ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle Exp误导入系统帐号的补救方法

Oracle Exp误导入系统帐号的补救方法

原创 Linux操作系统 作者:壹頁書 时间:2013-11-10 00:08:15 0 删除 编辑
单位一个同事误把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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 去除重复记录
下一篇: About Personality
请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    621
  • 访问量
    5947657