从客户那里拿到的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;

然后 成功导进去了 这篇文章被我反反复复折腾了好几次 ,总算解决了

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐