IMP-00009:异常结束导出文件解决方案

本文详细介绍了在Oracle数据库中遇到IMP-00009异常的解决过程,问题源于deferred_segment_creation参数为默认值true,配合direct=true导致分区表导入失败。解决办法包括不使用direct=true或者调整参数为false,以及针对已存在问题的分区表进行特定操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

墨墨导读:本文来自读者“小豹子加油(网名)”的投稿,主要讲述使用imp导入文件出现IMP-00009问题的处理过程。


云和恩墨大讲堂线上分享:《weblogic 优化》

时间:2019年7月30日(星期二)20:30-21:30

立即报名:https://cs.enmotech.com/event/57



一、概述



最近在测试环境的一个Oracle数据库上面,使用exp将表导出没有问题,而将导出的文件使用imp导入时却出现了如下错误。

 
 
IMP-00009: abnormal end of export file	
Import terminated successfully with warnings.


经过反复实验,终于找出问题出现的原因,是由以下几点共同造成的:

a. 数据库中参数deferred_segment_creation设置的是默认值true,即创建表的时候不立即分配段,等有行的时候才会分配段。
b. 导出的表中有分区表,而恰好该分区表存在分区没有行的情况,即有的分区没有分配段。
c. 导出时使用了direct=true。


解决办法直接看(三、解决办法)



二、问题复现



1. 准备工作


在测试库中准备两个用户,tom(导出的用户),jerry(导入的用户),分别给予其最大的权限。

 
 
SQL> create user tom identified by tom;	
SQL> grant dba to tom;	
SQL> create user jerry identified by jerry;	
SQL> grant dba to jerry;


2. 检查数据库中参数deferred_segment_creation

 
 
SQL> show parameter deferred	
NAME                                 TYPE        VALUE	
------------------------------------ ----------- ------------------------------	
deferred_segment_creation            boolean     TRUE

可以看到该参数是true,默认值。


3. 创建测试表

 
 
SQL> create table tom.t_normal as select * from scott.emp;  // 创建一张普通表,并且有行	
SQL> create table tom.t_norows as select * from scott.emp where 1=0;  // 创建一张空表	
SQL> create table tom.t_par(id number, name varchar2(10))	
partition by list(id)	
(partition p01 values(1),	
partition p02 values(default));  // 创建一张分区表,两个分区	
SQL> insert into tom.t_par values(1, 'aa');  // 往分区p01插入一条数据	
SQL> commit;


至此,tom用户下有三张表,t_normal是普通表,t_norows是一张普通的空表,t_par是分区表。


通过下面的sql查到tom用户下只有两个segment,空表和分区表中无数据的分区都没有创建段。

 
 
SQL> select owner,segment_name,partition_name,segment_type from dba_segments where owner='TOM';	
OWNER      SEGMENT_NAME         PARTITION_NAME                 SEGMENT_TYPE	
---------- -------------------- ------------------------------ ------------------	
TOM        T_NORMAL                                            TABLE	
TOM        T_PAR                P01                            TABLE PARTITION

4. 使用tom对表进行导出


 
 
exp tom/tom file=tom.dmp log=tom_exp.log direct=true


% 读取数据 data = readtable('cirrhosis(1).xlsx', 'Sheet', 'Sheet1'); % 处理缺失值 numeric_vars = {'Bilirubin', 'Cholesterol', 'Albumin', 'Copper', 'Alk_Phos', 'SGOT', ... 'Tryglicerides', 'Platelets', 'Prothrombin'}; categorical_vars = {'Drug', 'Sex', 'Ascites', 'Hepatomegaly', 'Spiders', 'Edema', 'Stage'}; % 数值列用中位数填充 for var = numeric_vars col = data.(var{1}); data.(var{1}) = fillmissing(col, 'constant', median(col, 'omitnan')); end % 分类列用众数填充 for var = categorical_vars col = categorical(data.(var{1})); mode_val = mode(col(~ismissing(col))); data.(var{1}) = fillmissing(col, 'constant', mode_val); end % 处理异常值 (以Bilirubin为例) Q = quantile(data.Bilirubin, [0.25, 0.75]); IQR = Q(2) - Q(1); upper_bound = Q(2) + 1.5*IQR; data.Bilirubin(data.Bilirubin > upper_bound) = upper_bound;% 分类变量编码 (One-Hot编码) data = onehotencode(data, {'Drug', 'Sex', 'Ascites', 'Hepatomegaly', 'Spiders', 'Edema'}); % 数值变量标准化 scaled_vars = {'Age', 'Bilirubin', 'Cholesterol', 'Albumin', 'Copper', ... 'Alk_Phos', 'SGOT', 'Tryglicerides', 'Platelets', 'Prothrombin'}; for var = scaled_vars data.(['scaled_', var{1}]) = normalize(data.(var{1})); end % 创建二元状态变量 (死亡 vs 存活/删失) data.Status_Binary = double(contains(data.Status, 'D'));% 生存状态分布 figure pie(categorical(data.Status), {'Died', 'Censored', 'Transplant'}) title('Patient Status Distribution') % 关键生化指标箱线图 figure boxplot([data.Bilirubin, data.Albumin, data.Platelets], ... 'Labels', {'Bilirubin', 'Albumin', 'Platelets'}) ylabel('Value') title('Key Biomarker Distributions') % 不同药物组的生存曲线 figure groups = data.Drug; kmplot(data.N_Days, data.Status_Binary, groups) xlabel('Survival Days'), ylabel('Survival Probability') title('Kaplan-Meier Survival Curves by Drug') legend('D-penicillamine', 'Placebo') % 各阶段肝硬化特征热图 stage_data = grpstats(data(:, {'Stage', 'Bilirubin', 'Albumin', 'Prothrombin'}), 'Stage'); figure heatmap(stage_data, 'Stage', {'mean_Bilirubin', 'mean_Albumin', 'mean_Prothrombin'}) title('Disease Stage vs Biomarkers')% 准备数据 X = data{:, [scaled_vars, 'Stage']}; y = data.Status_Binary; % 递归特征消除 (RFE) mdl = fitcsvm(X, y); selector = sequentialfs(@(X_train, y_train, X_test, y_test) ... sum(predict(fitcsvm(X_train, y_train), X_test) ~= y_test), ... X, y, 'cv', 5); % 特征重要性排序 imp = predictorImportance(fitensemble(X(:, selector), y, 'Bag', 100, 'Tree')); [~, idx] = sort(imp, 'descend'); selected_features = [scaled_vars(selector(1:sum(selector))), {'Stage'}]; disp('Selected features:'); disp(selected_features(idx)) % 可视化特征重要性 figure barh(imp(idx)) set(gca, 'YTickLabel', selected_features(idx)) xlabel('Importance Score') title('Feature Importance Ranking')用Matlab的知识对错误使用 readtable 找不到或无法打开 'cirrhosis(1).xlsx'。请检查路径和文件名或文件权限。 出错 untitled78 (第 2 行) data = readtable('cirrhosis(1).xlsx', 'Sheet', 'Sheet1');进行修改
最新发布
07-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值