记录一下:ORA-39001参数值无效 ORA-39000转储文件说明错误...
从客户那里拿到的oracle dmp文件,一个文件大概13G1.首先查看是不是版本问题高版本导出的dmp 导入低版本oracle 会出这个问题 ,查看自己的版本select * from v$version;如果文件太大打不开 可以通过导出的日志查看用户oracle 版本:;;;Export: Release 11.2.0.4.0 - Production on Tue Aug 31 16:34:
从客户那里拿到的oracle dmp文件,一个文件大概13G
1.首先查看是不是版本问题 高版本导出的dmp 导入低版本oracle 会出这个问题 ,查看自己的版本
select * from v$version;
如果文件太大打不开 可以通过导出的日志查看用户oracle 版本:
;;;
Export: Release 11.2.0.4.0 - Production on Tue Aug 31 16:34:52 2021
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
;;;
可以看出用户oracle 版本号是 11.2.0.4.0
如果是版本问题,网上搜了一下说 :
1.1.可以通过工具 AlxcTools 工具直接来修改版本
1.2.通过代码来修改
// 这是网上搜的代码 ,我没试过
public static void doFile(String fileName){
try{
RandomAccessFile raf = new RandomAccessFile(fileName,"rw");
byte b[] = new byte[50];
raf.read(b);
for(int i=0;i<b.length;i++){
System.out.print(b[i]+",");
}
b[12] = 48;//commend by danielinbiti,这个是修改成10g:V10.02.01。如果在修改前自己可以截出头部的几个字节确认一下,是不是就是修改第12,18字节
b[18] = 49;
raf.seek(0);
raf.write(b);
System.out.println("");
}catch(Exception ex){
}
}
我的版本明显比客户版本高,所以不是版本问题 是因为用户导出的时候用 expdp 导出的 因此再导入时必须使用 impdp
impdp 用户/密码@地址(IP)/实例名字 directory=虚拟目录名字 dumpfile=数据文件.DMP
SCHEMAS=用户 logfile=日志文件.log table_exists_action=replace
这种方式导入的时候必须配置数据库的地址映射 因为 dumpfile 后面的文件不能带 像 D:\ 地址信息
-----------------impdp expdp 操作对数据库的配置 begin----------------------------
--impdp parfile=imp_parfile.par
--创建逻辑目录(这个地址手动要在硬盘上创建) dmp数据文件存放位置
--创建修改和删除逻辑目录操作
--select * from all_directories --查询
/*
创建:create or replace directory 虚拟目录名字 as 'F:\bydb';
修改:create or replace directory 虚拟目录名字 as 'F:\Program Files\file\top';
删除:drop directory DPDATA;
*/
-- 导出指定用户 数据库
expdp 用户/密码@地址(IP)/实例名字 directory=虚拟目录名字 schemas=用户 dumpfile=数据文件.dmp logfile=日志文件.log;
-- 把用户A中所有的表导入到B 用户下
impdp B/密码@地址(IP)/实例名字 directory=虚拟目录名字 dumpfile=数据文件.DMP remap_schema=A:B logfile=日志文件.log table_exists_action=replace
--如果权限不够 授权 》》》 grant read,write on directory DPDATA to user; grant imp_full_database to user;
impdp jz/123456@192.168.0.115:1521/GBJZKJ DIRECTORY=gsdump DUMPFILE=JZ.DMP SCHEMAS=jz table_exists_action=replace
create or replace directory gsdump as 'F:\bydb';
将 gsdump 映射为你 JZ.DMP 存放的真实地址
导入的时候有发现一个问题,导了 一晚上了还没导好,报表空间。。。
刚开始的时候表空间最大给了1024m ,因此不够了需要扩展
--查看表空间大小
SELECT FILE_NAME as 数据文件,TABLESPACE_NAME as 表空间名称,AUTOEXTENSIBLE as 自动扩展,STATUS as 状态,MAXBYTES as 可扩展最大值,USER_BYTES as 已使用大小,INCREMENT_BY as 自动扩展增量 FROM dba_data_files
-- 修改表空间大小
alter database DATAFILE 'D:\ENVIRONMENT\ADMINISTRATOR\ORADATA\GBJZKJ\DATAFILE\O1_MF_HFMS_JRPZ456P_.DBF' autoextend on maxsize unlimited;
然后 表结构已经进去了,但是数据没有进去 直接将后面的这个参数replace 修改为 append 就可以追加数据
table_exists_action=append
cmd 日志:(我用 xxx 代替用户名和表名) 公司隐私嘛
数据将附加到现有表, 但是将跳过所有相关元数据。
表 "xxx"."xxx" 已存在。由于附加了 table_exists_action,
数据将附加到现有表, 但是将跳过所有相关元数据。
表 "xxx"."xxx" 已存在。由于附加了 table_exists_action,
数据将附加到现有表, 但是将跳过所有相关元数据。
表 "xxx"."xxx" 已存在。由于附加了 table_exists_action, 数
据将附加到现有表, 但是将跳过所有相关元数据。
表 "xxx"."xxx" 已存在。由于附加了 table_exists_action, 数据将
附加到现有表, 但是将跳过所有相关元数据。
表 "xxx"."xxx" 已存在。由于附加了 table_exists_action,
数据将附加到现有表, 但是将跳过所有相关元数据。
表 "xxx"."xxx" 已存在。由于附加了 table_exists_action, 数
据将附加到现有表, 但是将跳过所有相关元数据。
表 "xxx"."xxx" 已存在。由于附加了 table_exists_action, 数据将
附加到现有表, 但是将跳过所有相关元数据。
一晚上过去了,又出现 XXX 表空间。。问题,我又搜了下日志
SELECT FILE_NAME as 数据文件,TABLESPACE_NAME as 表空间名称,AUTOEXTENSIBLE as 自动扩展,STATUS as 状态,MAXBYTES as 可扩展最大值,USER_BYTES as 已使用大小,INCREMENT_BY as 自动扩展增量 FROM dba_data_files
发现可扩展最大值 和 已使用大小 几乎相等了,也就是文件塞满了,可是可扩展最大值大概是 32G 数据文件才 十几G 然后继续查看用户导出表的日志
-- 这是用户导出表日志记录 竟然达到了61G
Total estimation using BLOCKS method: 61.16 GB
那么就只能扩展表空间了
-- 给自己创建的表空间 添加 xxx_01 xxx_02 文件 一口气加了三个 这下总够了吧
alter tablespace 我的表空间名称 add datafile 'D:\ENVIRONMENT\ADMINISTRATOR\ORADATA\xxx\DATAFILE\xxx_03.DBF' size 1024m autoextend ON next 200m maxsize unlimited;
然后 成功导进去了 这篇文章被我反反复复折腾了好几次 ,总算解决了
更多推荐
所有评论(0)