背景说明
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 错误解决方案
alter system set DB_RECOVERY_FILE_DEST_SIZE=30g;