Oracle Exp誤匯入系統帳號的補救方法
單位一個同事誤把Exp匯入了system帳號,但是系統已經執行了一段時間,資料需要保留,所以不能用源dmp檔案重新初始化..
解決過程如下
1.確定誤匯入物件的範圍
2.表的處理
3.其他物件的處理
4.刪除system帳號下誤匯入的物件
初始化物件,並匯入system帳號
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.確定誤匯入物件的範圍。
2.表的處理
找到所有誤匯入的表,然後使用exp將其重新匯入正確的帳號。
真實的情況是誤匯入的表有幾百張,所以需要用下面的SQL生成需要匯出的表名稱。
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獲取建立語句
執行生成的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.確定誤匯入物件的範圍
2.表的處理
3.其他物件的處理
4.刪除system帳號下誤匯入的物件
初始化物件,並匯入system帳號
-
create table t1 as select rownum n from dual connect by level<10;
-
create table t2 as select rownum n from dual connect by level<10;
-
create table t3 as select rownum n from dual connect by level<10;
-
create table t4 as select rownum n from dual connect by level<10;
-
-
create index inx_t1 on t1(n);
-
create index inx_t2 on t2(n);
-
create index inx_t3 on t3(n);
-
create index inx_t4 on t4(n);
-
- create view v1 as select * from t1;
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.確定誤匯入物件的範圍。
-
select object_name,object_type from user_objects where created>sysdate-1;
-
OBJECT_NAME OBJECT_TYPE
-
--------------- -------------------
-
V1 VIEW
-
INX_T4 INDEX
-
T4 TABLE
-
INX_T3 INDEX
-
T3 TABLE
-
INX_T2 INDEX
-
T2 TABLE
-
INX_T1 INDEX
-
T1 TABLE
-
- 已選擇9行。
找到所有誤匯入的表,然後使用exp將其重新匯入正確的帳號。
真實的情況是誤匯入的表有幾百張,所以需要用下面的SQL生成需要匯出的表名稱。
-
select max(ltrim(tables,',')) tables
-
from
-
(
-
select sys_connect_by_path(object_name,',') tables
-
from
-
(
-
select object_name,
-
object_type,
-
rownum r
-
from user_objects
-
where created >sysdate-1
-
and object_type='TABLE'
-
) v
-
start with r=1
-
connect by r=prior r+1
- );
-
-
TABLES
----------------------------
T1,T2,T3,T4
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獲取建立語句
-
select 'select dbms_metadata.get_ddl('''||object_type||''','''||object_name||''') from dual;'
- from user_objects where created>sysdate-1 and object_type not in ('TABLE','INDEX');
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帳號的錯誤資料
-
set echo off
-
set feedback off
-
set newpage none
-
set pagesize 5000
-
set linesize 500
-
set verify off
-
set pagesize 0
-
set term off
-
set trims on
-
set linesize 600
-
set heading off
-
set timing off
-
set verify off
-
set numwidth 38
-
spool drop.sql
-
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');
-
spool off
- @drop.sql
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-776221/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【ORACLE 匯入匯出】exp 錯誤Oracle
- imp exp 跨系統匯入案例
- Oracle匯入(imp )與匯出(exp )Oracle
- ORACLE匯入匯出命令exp/impOracle
- Oracle exp/imp匯出匯入工具的使用Oracle
- oracle資料的匯入匯出imp/expOracle
- oracle資料匯出匯入(exp/imp)Oracle
- Oracle 遠端匯出匯入 imp/expOracle
- Oracle資料匯入匯出imp/exp命令Oracle
- 特殊符號密碼處理 - 匯入匯出exp/imp符號密碼
- ORACLE匯入遇到ORACLE錯誤959解決方法Oracle
- Oracle資料匯入匯出imp/exp命令(轉)Oracle
- Oracle資料庫匯入匯出。imp匯入命令和exp匯出命令Oracle資料庫
- Win10系統解封被禁的Xbox One帳號的方法Win10
- 開車誤闖紅燈的補救方法(以及由此引發的一些思考)
- 使用Oracle 的 imp ,exp 命令實現資料的匯入匯出Oracle
- exp/imp匯出匯入工具的使用
- 賽門鐵克確認誤刪除XP系統檔案 釋出更新補救
- 【EXP/IMP】使用EXP /IMP工具“模糊”匯出和匯入
- Oracle8i匯出出現EXP-8錯誤Oracle
- Oracle 11.2.0.2 exp匯出錯誤處理一則Oracle
- oracle之EXP匯出表空間錯誤解決Oracle
- Oracle跨版本匯出EXP-00003錯誤的解決()Oracle
- 在單點登入的實現時,怎樣能把單點登入的帳號和其它應用系統的帳號繫結呢?
- 資料匯入匯出EXP/IMP
- exp/imp匯出匯入資料
- 檢驗系統帳號是否存在的例項
- Oracle使用系統級觸發器審計重要帳號的DDL語句Oracle觸發器
- Windows DOS窗體下Oracle 資料庫的匯入匯出(IMP/EXP)命令WindowsOracle資料庫
- ORACLE統計資訊的匯出、匯入Oracle
- Oracle 帳號基本管理 收藏Oracle
- Oracle中exp,imp(匯入匯出)資料遷移注意事項Oracle
- 三分鐘上手openldap帳號系統LDA
- 【匯入匯出】EXP-00068分析
- ORACLE在UNIX、LINUX系統中匯出、匯入時最好保持匯出、匯入系統的字符集一致OracleLinux
- EXP-00056: 遇到 ORACLE 錯誤 600 ORA-00600 EXP-00000: 匯出終止失敗 解決方法Oracle
- AIX上oracle匯出備份EXP-00056: 遇到 ORACLE 錯誤 600AIOracle
- 微軟登入系統存在漏洞:使用者Office帳號受影響微軟