Oracle导入dmp文件

本文介绍了如何在Docker容器内的Oracle11g环境中,处理DMP文件导入过程,包括设置表空间、用户授权、imp命令使用,以及解决ORACLE-12899错误和字符集问题,涉及环境变量配置和数据库管理操作。

背景说明

oracle是docker安装的,版本为11g,目前有一个oracle的dmp文件,需要将该dmp文件的数据导入oracle.

1、进入docker

进入docker,刷新环境变量

#进入docker
[root@bigdata01 ~]# docker exec -it oracle11g bash
[oracle@26c01122769d /]$ 
#刷新环境变量
[oracle@26c01122769d /]$ source /etc/profile
#输入用户名/密码@实例名
[oracle@26c01122769d /]$ sqlplus system/system@helowin

SQL*Plus: Release 11.2.0.1.0 Production on Wed Oct 18 19:46:36 2023

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> 

2、查看表空间

#查看数据库的表空间
SQL> select tablespace_name from dba_tablespaces;

TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
EXAMPLE

6 rows selected.
#查看表空间文件存放的位置
SQL> select * from dba_data_files;

FILE_NAME
--------------------------------------------------------------------------------
   FILE_ID TABLESPACE_NAME		       BYTES	 BLOCKS STATUS
---------- ------------------------------ ---------- ---------- ---------
RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS
------------ --- ---------- ---------- ------------ ---------- -----------
ONLINE_
-------
/home/oracle/app/oracle/oradata/helowin/example01.dbf
	 5 EXAMPLE			   104857600	  12800 AVAILABLE
	   5 YES 3.4360E+10    4194302		 80  103809024	     12672
ONLINE


FILE_NAME
--------------------------------------------------------------------------------
   FILE_ID TABLESPACE_NAME		       BYTES	 BLOCKS STATUS
---------- ------------------------------ ---------- ---------- ---------
RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS
------------ --- ---------- ---------- ------------ ---------- -----------
ONLINE_
-------
/home/oracle/app/oracle/oradata/helowin/users01.dbf
	 4 USERS			     5242880	    640 AVAILABLE
	   4 YES 3.4360E+10    4194302		160    4194304	       512
ONLINE


FILE_NAME
--------------------------------------------------------------------------------
   FILE_ID TABLESPACE_NAME		       BYTES	 BLOCKS STATUS
---------- ------------------------------ ---------- ---------- ---------
RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS
------------ --- ---------- ---------- ------------ ---------- -----------
ONLINE_
-------
/home/oracle/app/oracle/oradata/helowin/undotbs01.dbf
	 3 UNDOTBS1			    99614720	  12160 AVAILABLE
	   3 YES 3.4360E+10    4194302		640   98566144	     12032
ONLINE


FILE_NAME
--------------------------------------------------------------------------------
   FILE_ID TABLESPACE_NAME		       BYTES	 BLOCKS STATUS
---------- ------------------------------ ---------- ---------- ---------
RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS
------------ --- ---------- ---------- ------------ ---------- -----------
ONLINE_
-------
/home/oracle/app/oracle/oradata/helowin/sysaux01.dbf
	 2 SYSAUX			   566231040	  69120 AVAILABLE
	   2 YES 3.4360E+10    4194302	       1280  565182464	     68992
ONLINE


FILE_NAME
--------------------------------------------------------------------------------
   FILE_ID TABLESPACE_NAME		       BYTES	 BLOCKS STATUS
---------- ------------------------------ ---------- ---------- ---------
RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS
------------ --- ---------- ---------- ------------ ---------- -----------
ONLINE_
-------
/home/oracle/app/oracle/oradata/helowin/system01.dbf
	 1 SYSTEM			   723517440	  88320 AVAILABLE
	   1 YES 3.4360E+10    4194302	       1280  722468864	     88192
SYSTEM

3、创建表空间

可以看到第二步中表空间的文件存放路径在/home/oracle/app/oracle/oradata/helowin/,这里依葫芦画瓢,也在该路径创建表空间。

#创建一个表GMDATA空间,大小200M,可以自动扩展
SQL> create tablespace GMDATA datafile '/home/oracle/app/oracle/oradata/helowin/GMDATA.dbf' size 200M autoextend on;

Tablespace created.

4、用户授权

#创建用户名gm 密码 123456
SQL> create user gm identified by 123456;

User created.

将表空间GMDATA给gm用户使用
SQL> alter user gm default tablespace GMDATA;

User altered.
#给用户gm分配权限
SQL> grant create session,create table,create view,create sequence,unlimited tablespace,connect,resource,dba to gm;

Grant succeeded.

5、imp导入dmp文件

进入宿主机将dmp文件传入docker内部

[root@bigdata01 opt]# docker cp data20211020.dmp 26c01122769d:/opt

再次进入docker内部,执行imp命令。如果没有该命令则刷新环境变量。

[root@bigdata01 ~]# docker exec -it oracle11g bash
[oracle@26c01122769d /]$ source /etc/profile
[oracle@26c01122769d /]$ cd /opt
[oracle@26c01122769d /]$ imp gm/123456@helowin full=y ignore=y file="/opt/data20211020.dmp"

等待数据导入完毕。

  • full=y 是导入文件中全部内容
  • ignore=y相当于,如果没有的表,创建并倒入数据,如果已经有的表,忽略创建的,但不忽略倒入

如果卡住了,可查看是否归档日志满了

6、问题

ORA-12899: value too large for column

在imp导入数据的时候,报错ORA-12899: value too large for column

环境变量配置

修改表空间名后,导入依然报长度过长,
查询已导入数据,发现库中中文数据乱码,确认基本为环境变量问题,检查发现linux的系统环境变量未配新增环境变量配置
[oracle@localhost ~]$ vi .bashrc LANG=zh_CN.utf8 export LANG export NLS_LANG=American_America.AL32UTF8
查看Linux环境变量
[oracle@localhost ~]$ echo LANGzhCN.utf8[oracle@localhost ]LANG zh_CN.utf8 [oracle@localhost ~]LANGzhCN.utf8[oracle@localhost ] echo $NLS_LANG AMERICAN_AMERICA.AL32UTF8
再次从新导入

或者

SQL> shutdown immediate

SQL> startup mount

SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;

SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;

SQL> ALTER DATABASE OPEN;

SQL> alter database character set INTERNAL_USE ZHS16GBK; --改成你的目标字符集,这里为

SQL> shutdown immediate

SQL> startup

ORA-00257: archiver error. Connect internal only, until freed 错误解决方案

image.png
alter system set DB_RECOVERY_FILE_DEST_SIZE=30g;

### Oracle 导入 DMP 文件方法或使用 impdp 导入 DMP 文件Oracle 数据库中,`impdp` 是一种强大的工具,用于导入通过 `expdp`(Data Pump Export)生成的 `.dmp` 文件。以下是关于如何使用 `impdp` 导入 `.dmp` 文件的详细指南。 #### 1. 准备工作 在执行导入操作之前,需要完成以下准备工作: - **连接到数据库**:确保可以成功连接到目标数据库实例。 - **创建用户**:如果目标模式不存在,则需要创建与导出文件中的模式相对应的用户,并赋予必要的权限[^1]。 - **创建物理目录**:在文件系统中创建一个目录用于存放 `.dmp` 文件,例如 `f:\radio\dmp`,并将 `.dmp` 文件复制到该目录下[^2]。 - **创建 Oracle Directory 对象**:在数据库中创建一个指向上述物理目录的 Oracle Directory 对象。例如: ```sql CREATE OR REPLACE DIRECTORY dmp_dir AS 'f:\radio\dmp'; ``` - **创建表空间**(可选):如果需要将数据导入到特定的表空间,可以提前创建对应的表空间,并确保有足够的存储空间[^3]。 #### 2. 使用 impdp 命令导入 `impdp` 是 Data Pump Import 工具的命令行界面,支持多种参数以满足不同的导入需求。以下是一个基本的 `impdp` 命令示例: ```bash impdp USER_NAME/user_password@SID_NAME directory=dmp_dir dumpfile=USER_NAME.DMP schemas=USER_NAME logfile=USER_NAME.log ``` - **`USER_NAME/user_password@SID_NAME`**:指定目标数据库的用户名、密码和 SID。 - **`directory=dmp_dir`**:指定 Oracle Directory 对象的名称。 - **`dumpfile=USER_NAME.DMP`**:指定要导入的 `.dmp` 文件名。 - **`schemas=USER_NAME`**:指定要导入的模式名称。 - **`logfile=USER_NAME.log`**:指定日志文件的名称,用于记录导入过程中的信息。 #### 3. 更改用户和表空间 如果需要将数据从源模式导入到目标模式,并更改表空间,可以使用以下参数: - **`REMAP_SCHEMA`**:将源模式的数据映射到目标模式。例如: ```bash REMAP_SCHEMA=olduser:newuser ``` - **`REMAP_TABLESPACE`**:将源表空间的数据映射到目标表空间。例如: ```bash REMAP_TABLESPACE=EXAMPLE:newtablespace ``` 完整命令示例如下: ```bash impdp system/admin@DNACLIENT directory=DATA_PUMP_DIR dumpfile=example.DMP REMAP_SCHEMA=olduser:newuser REMAP_TABLESPACE=EXAMPLE:newtablespace ``` #### 4. 验证导入结果 导入完成后,可以通过以下方式验证数据是否正确导入: - 检查日志文件,确保没有错误或警告信息。 - 查询目标模式中的表和数据,确保数据完整性。 --- ### 注意事项 - 确保目标数据库的字符集和 NLS 参数与源数据库兼容,否则可能会导致数据导入失败或数据损坏[^4]。 - 如果导入过程中遇到权限问题,可以尝试以管理员用户(如 `SYSTEM` 或 `SYS`)身份运行 `impdp` 命令。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值