IMP-00008: unrecognized statement in the export file: string的問題分析
上週需要將oracle10g中的某一個使用者下的物件匯入到oracle11g中去。用exp在10g的資料庫伺服器上匯出的dump檔案,再用imp在11g的資料庫伺服器上將dump檔案匯入到資料庫中,前面執行的都很正常,後來發現報如下錯誤:
IMP-00008: unrecognized statement in the export file:
IMP-00008: unrecognized statement in the export file:
IMP-00008: unrecognized statement in the export file:
?
IMP-00008: unrecognized statement in the export file:
IMP-00008: unrecognized statement in the export file:
#
IMP-00008: unrecognized statement in the export file:
#
IMP-00008: unrecognized statement in the export file:
IMP-00008: unrecognized statement in the export file:
IMP-00008: unrecognized statement in the export file:
IMP-00008: unrecognized statement in the export file:
IMP-00008: unrecognized statement in the export file:
IMP-00008: unrecognized statement in the export file:
oracle官方文件的對這個錯誤的是這麼說的:
IMP-00008: unrecognized statement in the export file: string看這個沒有什麼幫助。
後來查到是由於oracle11g有個新特性,不能匯入空表:
11G中有個新特性,當表無資料時,不分配segment,以節省空間,這樣就會沒有匯出資料
??
IMP-00008: unrecognized statement in the export file:
?
IMP-00008: unrecognized statement in the export file:
在用imp 匯入資料的時候出現IMP-00008: unrecognized statement in the export file:的錯誤,
解決方法
在Oracle 11g中,exp預設不能匯出空表。用傳統的exp,imp進行異構平臺資料庫遷移會比較麻煩。不過可以使用expdp、impdp進行遷移。
把64位windows 2003的Oracle11gR2資料庫遷移到64位Linux RedHat Enterprise 5中,可以使用expdp、impdp進行遷移資料。
如:Linux 為A伺服器,Linux為B伺服器,資料庫使用者為test,把A伺服器的資料遷移到B伺服器中
在A伺服器操作
1、建立目錄
SQL> create directory expdp_dir as '/home/oracle/expdp_dir'; //一臺伺服器只要建立一次
2 賦予匯出的使用者許可權
SQL> grant read,write on directory expdp_dir to test;//一臺伺服器只要建立一次
3、在Linux目錄建立目錄/home/oracle/expdp_dir
mkdir -p /home/oracle/expdp_dir //一臺伺服器只要建立一次
4、在命令視窗匯出:
expdp test/test DIRECTORY=expdp_dir DUMPFILE=test.dmp logfile=testexpdp.log //每次都要操作
在B伺服器中操作:
5、SQL> create directory impdp_dir as '/home/oracle/impdp_dir';//一臺伺服器只要建立一次
SQL> grant read,write on directory impdp_dir to test;//一臺伺服器只要建立一次
6、 在系統中需要有/home/oracle/impdp_dir目錄
7、用ftp把A伺服器匯出的資料上傳到B伺服器的/home/oracle/impdp_dir目錄中
在A伺服器中配置好B伺服器的伺服器名,在A伺服器匯入資料
8、在命令視窗匯入:
impdp test/test@B_database DIRECTORY=impdp_dir DUMPFILE=test.dmp logfile=testimpdp.log
(這裡注意大小寫,如果test.dmp在linux中為大寫,必須更改為大寫。Linux區分大小寫)
解決方法,原理就是往所有的空表中分配空間:
用oracle sqldeveloper ,建立下面的儲存過程
create or replace
procedure generate_tab_segement is
v_table NVARCHAR2(200);
v_sql VARCHAR2(200);
v_q NUMBER;
v_char_value NVARCHAR2(10);
v_varchar2_value NVARCHAR2(10);
v_number_value NVARCHAR2(10);
v_date_value NVARCHAR2(10);
v_add_value NVARCHAR2(10);
v_separate_value NVARCHAR2(10);
v_insert_sql NVARCHAR2(4000);
col_num NVARCHAR2(200);
tb_name NVARCHAR2(200);
TYPE TCUR IS REF CURSOR;
c2 TCUR;
begin
FOR r1 IN (SELECT table_name tn FROM tabs) LOOP
BEGIN
v_table :=r1.tn;
v_sql := 'SELECT count(*) as q FROM ' || v_table || ' where rownum = 1';
v_char_value := '''1''';
v_varchar2_value := '''1''';
v_number_value := '1';
v_date_value := 'sysdate';
v_separate_value := ',';
v_insert_sql := 'insert into ';
v_add_value :='null';
OPEN c2 FOR v_sql ;
LOOP
FETCH c2 INTO v_q;
EXIT WHEN c2%NOTFOUND;
--DBMS_OUTPUT.PUT_LINE(v_table);
--構造插入行
FOR user_null_table IN (select to_char(count(*)) as col_num,
t.TABLE_NAME as tb_name
from user_tab_columns t
where t.TABLE_NAME= v_table
group by t.TABLE_NAME) LOOP
BEGIN
col_num := user_null_table.col_num;
tb_name := user_null_table.tb_name;
v_insert_sql := 'insert into ';
v_insert_sql := v_insert_sql || tb_name || ' values(' ;
FOR user_tab_cols IN (select * from user_tab_columns t where t.TABLE_NAME = tb_name ORDER BY t.COLUMN_ID) LOOP
BEGIN
v_add_value :='null';
IF user_tab_cols.COLUMN_ID = col_num THEN
v_separate_value := '';
else
v_separate_value := ',';
END IF;
if user_tab_cols.DATA_TYPE = 'CHAR' THEN
v_add_value := v_char_value;
END if;
IF user_tab_cols.DATA_TYPE = 'VARCHAR2' THEN
v_add_value := v_varchar2_value;
END if;
IF user_tab_cols.DATA_TYPE = 'NVARCHAR2' THEN
v_add_value := v_varchar2_value;
END if;
IF user_tab_cols.DATA_TYPE = 'NUMBER' THEN
v_add_value := v_number_value;
END if;
IF user_tab_cols.DATA_TYPE = 'LONG' THEN
v_add_value := v_number_value;
END if;
IF user_tab_cols.DATA_TYPE = 'DATE' THEN
v_add_value := v_date_value;
END IF;
IF substr(user_tab_cols.DATA_TYPE,0,9) = 'TIMESTAMP' THEN
v_add_value := v_date_value;
END IF;
v_insert_sql := v_insert_sql || v_add_value ||
v_separate_value;
end;
END LOOP;
v_insert_sql := v_insert_sql || ');';
DBMS_OUTPUT.PUT_LINE(v_insert_sql);
end;
END LOOP;
end if;
END LOOP;
CLOSE c2;
end;
END LOOP;
end generate_tab_segement;
/
然後用圖形介面工具去呼叫該儲存過程,讓儲存過程語句執行一次,並起作用,不知道什麼原因有些表的資料沒有插入進去,為了保證不會出錯,大家可以將執行完顯示的SQL語句在執行一次就絕對不會錯誤。
參考:
http://blog.csdn.net/chen3888015/article/details/7177365
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12129601/viewspace-735523/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- NSCFType unrecognized selector sent to instance等問題Zed
- Export/import Datas To/from a Csv FileExportImport
- Export with Spool and Parallel Utl_FileExportParallel
- GCC編譯遇到“a label can only be part of a statement and a declaration is not a statement”問題GC編譯
- 【JAVA】Java中 File f=new File(String parent ,String child)Java
- 使用pg_stat_statement監控pgsql遇到的問題SQL
- Java讀取File的問題Java
- IMP-00009: abnormal end of export fileORMExport
- Export/Import匯入匯出時的字符集問題ExportImport
- 關於FILE_MODE值的問題,!!!!!
- File list Export for Mac(檔案列表匯出工具)ExportMac
- File list Export for Mac檔案列表匯出工具ExportMac
- 從Export Dumpfile file 中讀出DDL 語句Export
- input file相容性問題
- IMP-00010: not a valid export file tipsExport
- 【MySQL】Incorrect string value 問題一則MySql
- input框type=file設定cursor:pointer的問題
- MySQL訪問受限的問題分析MySql
- recyclebin造成的問題分析
- 解決The jar file has no source attachment問題JAR
- String型別函式傳遞問題型別函式
- 轉:經典String str = new String("abc")記憶體分配問題記憶體
- 工作當中碰到的一個UTL_FILE的問題
- export和export default的區別Export
- char[] 轉換string時的自動截斷問題
- Java中關於String型別的10個問題Java型別
- ClientAbortException 問題分析clientException
- Statement
- 【JDK】分析 String str=““ 與 new String()JDK
- can't create PID file問題處理
- JavaScript中的export、export default、exports和module.exports(export、export default、exports使用詳細)JavaScriptExport
- IMPSHOW2SQL - Extracting SQL from an EXPORT file (Doc ID 29765.1)SQLExport
- 問題1.libXp.so.6: cannot open shared object file: No such file or directoryObject
- @EXPORT and @EXPORT_OKExport
- 關於java的byte 和char 以及String等問題Java
- [轉載] 使用String.split方法時要注意的問題
- IMP-00032, IMP-00008 errorError
- String原始碼分析原始碼