概述
ORCLE实现dmp文件上传
环境:
linux服务器
oracle数据库(docker部署)
注意:oracle数据库导入导出命令要保持一直不然会报错,导出命令是expdp导入需要用impdp,导出是exp时导入用imp
oracle文件上传dmp文件
1、了解基本的docker命令,oracle是通过docker镜像部署相关操作要在镜像容器中进行,如果orcale直接部署到linux服务器则跳过此步。
查看容器命令
docker ps
进入容器命令
docker exec -it d5c62729ab97 /bin/bash
拷贝dmp进入容器命令
docker cp /usr/20200825.dmp d5c62729ab97:/home/oracle/temp
2、oracle容器进行导入操作
imp 用户名/密码@实例名 directory=文件路径别名 file=备份文件.dmp log=日志文件.log full=y;
impdp CHANNEL_MANAGE/CHANNEL_MANAGE@ORCL directory=DATA_PUMP_DIR dumpfile=20200825.dmp table_exists_action=replace logfile=20200825.log full=y;
导入时的异常问题处理:
1、orcale连接异常报错12154
/home/oracle/temp# impdp CHANNEL_MANAGE/CHANNEL_MANAGE@ORCL directory=DATA_PUMP_DIR dumpfile=20200825.dmp table_exists_action=replace logfile=20200825.log full=y;
UDI-12154: operation generated ORACLE error 12154
ORA-12154: TNS:could not resolve the connect identifier specified
解析:
EXP-00056: 遇到 ORACLE 错误 12154
ORA-12154: TNS: 无法解析指定的连接标识符
EXP-00000: 导出终止失败
解决:
1、去掉导入命令中@后面指定的实例名,直接用对应实例用户名和密码导入即可(亲测可以)
2、重新创建用户和实例名并赋权
创建表空间:
CREATE TABLESPACE TBS_NAME LOGGING DATAFILE ‘H:apporadataorclTBS_NAME.dbf’ SIZE 256M AUTOEXTEND ON NEXT 32M MAXSIZE 10240M EXTENT MANAGEMENT LOCAL;
创建用户:
CREATE USER user_name IDENTIFIED BY user_password DEFAULT TABLESPACE TBS_NAME;
查询确认相关信息:
select username, default_tablespace from dba_users where username=‘CHANNEL_MANAGE’;
给用户赋权:
GRANT create session to user_name;
GRANT connect,resource,dba to user_name;
2、数据库目录文件夹未创建导致异常
root@d5c62729ab97:/# imp CHANNEL_MANAGE/CHANNEL_MANAGE directory=DATA_DIR dumpfile=/data/20200825.dmp table_exists_action=replace logfile=20200825.log full=y;
LRM-00101: unknown parameter name ‘directory’
IMP-00022: failed to process parameters, type ‘IMP HELP=Y’ for help
IMP-00000: Import terminated unsuccessfully
解决:
orcale容器内sys登录数据库创建目录
su oracle
cd $ORACLE_HOME
bin/sqlplus / as sysdba
create or replace directory DATA_DIR as '/home/oracle/temp';
grant read,write on directory DATA_DIR to CHANNEL_MANAGE;
容器内的目录赋权读写给oracle用户
chown -R oracle:oracle /home/oracle/temp
chmod 777 /home/oracle/temp
3、权限不足导致的异常,最常见和容易忽略的问题。(chown和chmod)
Connected to: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-29283: invalid file operation
ORA-06512: at “SYS.UTL_FILE”, line 536
ORA-29283: invalid file operation
解决:
1、首先进入oracle客户端给创建的目录指定文件路径并赋读写权限给指定用户
create or replace directory DATA_DIR as '/home/oracle/temp';
grant read,write on directory DATA_DIR to CHANNEL_MANAGE;
2、数据库目录指定文件路径一定要赋权限给oracle用户组,注意事项容易忽略
chown -R oracle:oracle /home/oracle/temp
chmod 777 /home/oracle/temp
问题反思:
最后一个异常问题,出现后解决还是花了很长时间的,回过头来看很简单,但是当时确实没有想到操作用户的问题。创建完文件夹赋权限chmod 777,忽略了impdp导入时的操作文件夹的用户组是oracle用户。在百度上搜索很多人解决问题给出了第1点赋权,但是几乎很少有人提到第2点赋权问题,最后是在国外的一个论坛网站(Stack Overflow)看一个相关帖子解决的这个问题,帖子:ORA-06512: at “SYS.UTL_FILE”, line 536。
老实说本人英语不是太好,但是打开这个帖子浏览的时候chown和chmod这两个词还是一眼就吸引了我的注意的,我知道这个权限问题大概就出在这个地方了。chown的操作权限我是给了最大的问题一定没问题,但是chmod指定用户组这个我是没去操作的,这个让我一下就联想到这个命令操作者应该不是root是orcale,impdp其实是相当于orcale内部的一个导入操作命令,心中窃喜但是也需要验证,执行导入命令dmp顺利执行数据库表顺利导入。
写这个文章目的:
1、是为了记录问题
2、给自己一个提醒在遇到相似权限问题时能更快理清思路解决
3、希望给有相同问题的人一个更全面的解决问题过程,希望能帮到更多的人
最后
以上就是幸福季节为你收集整理的ORCLE实现dmp文件上传ORCLE实现dmp文件上传的全部内容,希望文章能够帮你解决ORCLE实现dmp文件上传ORCLE实现dmp文件上传所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复