IMP-00008: unrecognized statement in the export file: string
上周需要将Oracle10g中的某一个用户下的对象导入到oracle11g中去。用exp在10g的数据库服务器上导出的dump文件,再用imp在11g的数据库服务器上将dump文件导入到数据库中,前面执行的都很正常,后来发现报如下错误: IMP-00008: unrecognized statement in the
上周需要将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
Cause:Import did not recognize a statement in the export file. Either the export file was corrupted, or an Import internal error has occurred.
Action:If the export file was corrupted, retry with a new export file. Otherwise, report this as an Import internal error and submit the export file to customer support.
看这个没有什么帮助。
后来查到是由于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 directoryexpdp_diras '/home/Oracle/expdp_dir'; //一台服务器只要创建一次
2 赋予导出的用户权限
SQL> grant read,write on directoryexpdp_dirto test;//一台服务器只要创建一次
3、在Linux目录创建目录/home/Oracle/expdp_dir
mkdir -p /home/Oracle/expdp_dir //一台服务器只要创建一次
4、在命令窗口导出:
expdp test/test DIRECTORY=expdp_dirDUMPFILE=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区分大小写)
解决方法,原理就是往所有的空表中分配空间:
方法1:
用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;
IF v_q = 0 THEN
--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语句在执行一次就绝对不会错误。
然后将执行完的结果复制一次,在用图形界面执行一次,就可以了

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

全表掃描在MySQL中可能比使用索引更快,具體情況包括:1)數據量較小時;2)查詢返回大量數據時;3)索引列不具備高選擇性時;4)複雜查詢時。通過分析查詢計劃、優化索引、避免過度索引和定期維護表,可以在實際應用中做出最優選擇。

是的,可以在 Windows 7 上安裝 MySQL,雖然微軟已停止支持 Windows 7,但 MySQL 仍兼容它。不過,安裝過程中需要注意以下幾點:下載適用於 Windows 的 MySQL 安裝程序。選擇合適的 MySQL 版本(社區版或企業版)。安裝過程中選擇適當的安裝目錄和字符集。設置 root 用戶密碼,並妥善保管。連接數據庫進行測試。注意 Windows 7 上的兼容性問題和安全性問題,建議升級到受支持的操作系統。

InnoDB的全文搜索功能非常强大,能够显著提高数据库查询效率和处理大量文本数据的能力。1)InnoDB通过倒排索引实现全文搜索,支持基本和高级搜索查询。2)使用MATCH和AGAINST关键字进行搜索,支持布尔模式和短语搜索。3)优化方法包括使用分词技术、定期重建索引和调整缓存大小,以提升性能和准确性。

聚集索引和非聚集索引的區別在於:1.聚集索引將數據行存儲在索引結構中,適合按主鍵查詢和範圍查詢。 2.非聚集索引存儲索引鍵值和數據行的指針,適用於非主鍵列查詢。

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

MySQL 和 MariaDB 可以共存,但需要謹慎配置。關鍵在於為每個數據庫分配不同的端口號和數據目錄,並調整內存分配和緩存大小等參數。連接池、應用程序配置和版本差異也需要考慮,需要仔細測試和規劃以避免陷阱。在資源有限的情況下,同時運行兩個數據庫可能會導致性能問題。

MySQL 數據庫中,用戶和數據庫的關係通過權限和表定義。用戶擁有用戶名和密碼,用於訪問數據庫。權限通過 GRANT 命令授予,而表由 CREATE TABLE 命令創建。要建立用戶和數據庫之間的關係,需創建數據庫、創建用戶,然後授予權限。

數據集成簡化:AmazonRDSMySQL與Redshift的零ETL集成高效的數據集成是數據驅動型組織的核心。傳統的ETL(提取、轉換、加載)流程複雜且耗時,尤其是在將數據庫(例如AmazonRDSMySQL)與數據倉庫(例如Redshift)集成時。然而,AWS提供的零ETL集成方案徹底改變了這一現狀,為從RDSMySQL到Redshift的數據遷移提供了簡化、近乎實時的解決方案。本文將深入探討RDSMySQL零ETL與Redshift集成,闡述其工作原理以及為數據工程師和開發者帶來的優勢。
