oracle导入导出某个schema数据
背景
公司之前部门拆分,但一些服务并没有拆分清楚。其中一个老服务,两个部门都在用,现在为了避免互相影响,决定克隆该服务。克隆就要克隆全套,当然也包括数据库,我们这个老服务,用的oracle,所以,就涉及到从旧的oracle中导出数据,然后再导入到另一套新的oracle实例中。
届时在线上肯定是要物理隔离的,就是oracle要建在各自的服务器上,服务器间网络隔离;但我现在只是在开发环境验证拆分后功能是否正常,所以偷了个懒,没有新建实例,只是新建了个用户,进行逻辑隔离。
下午简单弄了下,踩了几个小坑,记录下来备忘。
导出步骤
schema、用户
一个oracle实例下,可以有多个用户,用户间逻辑隔离。用户和schema是什么关系呢?可以看我在dbeaver中建schema时候的弹框,直接就说创建schema等同于创建用户:

创建用户的时候,默认就会创建一个同名的schema。像表这种东西,不会直接和用户挂钩,而是挂在某个schema下,简单而言,schema相当于是用户和表、索引这些object间的一个中间层。具体可以看看这篇文章:
https://www.modb.pro/db/508147

要导出的目标
我这边就是要把如下左侧这个HX_PLAT_NEW这个schema中的所有数据导出,然后再导入到一个新的schema中(做逻辑隔离)。其实本来想做物理隔离,重新搭个oracle实例,感觉有点繁琐,先偷个懒吧。

导出的话,我先是看了下dbeaver,发现好像没有这块功能,于是在网上找,发现有两种方式:
expdp/impdp命令,其优势是速度快,但是稍微复杂一点;
exp/imp命令,速度慢,适用于数据量较小的情况,使用上简单一些。
详细可以参考:https://mp.weixin.qq.com/s/voGgQseZQCp30J6Rx-vNcQ
我这边表比较多,使用的是expdp/impdp方式。
导出过程遇到的错误
首先是找运维拿到了开发机器的ssh密码,然后利用netstat -nltp根据端口找进程,根据进程找到数据库cwd目录。
找到后,在机器上执行expdp -h,也提示没有帮助文档,只能去网上找,改了改如下:
expdp \'sys/1234 as sysdba\' schemas=hx_plat_new DIRECTORY=hx_plat_new_dump DUMPFILE=hx_plat_new.dmp
这里大概就是使用sys这个用户(密码:1234)作为sysdba身份登录,要导出的schema是hx_plat_new,导出后的文件名是hx_plat_new.dmp,文件放到哪里呢,由DIRECTORY这个参数指定(我自己在当前目录下建了个hx_plat_new_dump这个目录)
结果一执行,说ORACLE_HOME环境变量不存在,设置:
vim /etc/profile
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
source /etc/profile
再一执行,说ORACLE_SID这个环境变量找不到,虽然几年前搞过一阵oracle,现在我都不记得这玩意是啥,怎么设置了。
网上找到个sql查sid:
SELECT sys_context('USERENV', 'DB_NAME') AS ORACLE_SID FROM dual;
或者
SELECT sys_context('userenv','instance_name') FROM dual;
https://stackoverflow.com/questions/6288122/checking-oracle-sid-and-database-name

接着设置环境变量:
export ORACLE_SID=orcl
再执行,说目录不存在,查了下,原来directory后面不是乱写的,目录需要先创建,这里再引用。我这边是直接查了下现在有哪些可以用的目录:
SELECT directory_name, directory_path FROM dba_directories

所以,这边把目录改成了第四个(随便选一个),或者自己也可以自己新建,建完还要给用户授权:
# 创建文件夹
create directory 文件夹名称 as '路径,基于系统';
# 将文件夹读写权限给被授权用户
grant read,write on directory 文件夹名称 to 被授权用户;
最终的命令是:
expdp \'sys/1234QWER as sysdba\' schemas=hx_plat_new DIRECTORY=DATA_PUMP_DIR DUMPFILE=hx_plat_new.dmp
然后在/u01/app/oracle/admin/orcl/dpdump/hx_plat_new.dmp 下就生成文件了。
导入步骤
建立新的schema
先是在dbeaver上建了个schema叫:hx_plat_split_test。
然后构造好了导入的命令:
impdp \'sys/oracle as sysdba\' DIRECTORY=DATA_PUMP_DIR DUMPFILE=hx_plat_new.dmp schemas=HX_PLAT_SPLIT_TEST
结构一直报错说schema:HX_PLAT_SPLIT_TEST找不到:

后边比较了下这个在dbeaver中建的用户和其他用户,感觉有点不一样:

于是把dbeaver建出来的删了,在sqlplus中创建。
SQL> CREATE USER HX_PLAT_SPLIT_TEST IDENTIFIED BY "1qazxxxx";
User created.
建用户的过程中,当时也报错,后来发现是说,密码如果是数字开头,必须用双引号。
导入
新建用户后执行,还是报相同错误,后来以为是权限问题导致,准备对比下这个用户是不是权限和其他人不一样。网上看了几篇讲权限的文章,发现挺复杂,于是先不深究,找了个sql先执行下授权:
GRANT IMP_FULL_DATABASE TO HX_PLAT_SPLIT_TEST;
结果还是没效果。后面网上查了下,发现有个文章很像我的问题:
https://blog.csdn.net/lxpaopao/article/details/114930924
通过以下命令导入数据到oracle数据库,报"ORA-39002: 操作无效","ORA-39165: 未找到方案" 错误
impdp tms/tms123@orcl schema=tms directory=dump_dir dumpfile=ZBTMS2021031701.DMP
原因是通过expdp导出的用户,与需要导入的用户名称不一致
意思就是,导出和导入的用户不一样会有这个问题,于是照着改了改。
impdp \'sys/oracle as sysdba\' remap_schema=HX_PLAT_NEW:HX_PLAT_SPLIT_TEST remap_tablespace=HX_PLAT_NEW:HX_PLAT_SPLIT_TEST DIRECTORY=DATA_PUMP_DIR DUMPFILE=hx_plat_new.dmp schemas=HX_PLAT_SPLIT_TEST
发现还是报错,后面去掉了最后的schemas=HX_PLAT_SPLIT_TEST:
impdp \'sys/oracle as sysdba\' remap_schema=HX_PLAT_NEW:HX_PLAT_SPLIT_TEST remap_tablespace=HX_PLAT_NEW:HX_PLAT_SPLIT_TEST DIRECTORY=DATA_PUMP_DIR DUMPFILE=hx_plat_new.dmp
嗯,这下ok了。
总结
oracle这个还是过于复杂了,几年前也是小公司,dba出差了,项目需要,被迫搞了一阵,太痛苦了,几年下来,又全忘了。
参考资料
这里记录下后续发现的一些不错的参考资料:
官方,包含命令的各个选项的意思(11g版本的):
https://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_export.htm#SUTIL824
https://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_import.htm#SUTIL300
https://mp.weixin.qq.com/s/voGgQseZQCp30J6Rx-vNcQ
https://mp.weixin.qq.com/s/m7GrQnJ-QalTf1lluUO4Gg
https://mp.weixin.qq.com/s/IvzXv4CKAQELGKcH3tbW4Q
如果没有服务器登录权限,可以采用第三方工具如TOAD:
https://mp.weixin.qq.com/s/hFmH-k6Bs65xlswU50bhfg
oracle导入导出某个schema数据的更多相关文章
- ORACLE导入导出数据dmp
imp testwms3/isc@TESTGMMC FILE=C:\ZKGL_201407012334.dmp ignore=y fromuser=GMMCZKGL touser=testwms ta ...
- Oracle导入导出之dmp
Oracle导入导出有两种方式,分别是imp/exp与impdp/expdp. 1.imp/exp exp scott/tiger file=d:\test.dmp log=d:\test.log o ...
- oracle导入导出 dmp文件
oracle导入导出 dmp文件: 打开cmd窗口,在cmd窗口下,按照个人需要输入以下对应的命令: 1.imp 用户名/密码@网络服务名 file=XXX.dmp fromuser=XXX tous ...
- NodeJs之EXCEL文件导入导出MongoDB数据库数据
NodeJs之EXCEL文件导入导出MongoDB数据库数据 一,介绍与需求 1.1,介绍 (1),node-xlsx : 基于Node.js解析excel文件数据及生成excel文件. (2),ex ...
- oracle导入导出功能
1.普通版:oracle导入导出功能:导出exp 用户名/密码@SID file=f:\xx.dmp owner=用户名 导入imp 用户名/密码@SID full=y file=f:\xx.dmp ...
- mysql 导入导出数据库、数据表的方法
mysql 导入导出数据库.数据表的方法. Linux操作系统中,均在控制台下操作.1,导入数据库:前提:数据库和数据表要存在(已经被创建)(1)将数据表 test_user.sql 导入到test ...
- oracle导入导出操作
1,获取oracle导入导出帮助: imp help=y 2,导出命令 exp 用户名/密码@数据库实例 file=文件路径名 如: exp sys/password@orcl file=d:\dat ...
- oracle 导入导出数据
Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中.利用 ...
- Oracle导入导出
Oracle 10g 已经引入了数据泵(点击Data Dump)技术,这项技术和之前的exp/imp有哪些好处呢,简单的来说就是恢复和备份速度非常快: 在说明数据泵的使用方法之前,我们先来了解二者的区 ...
- ORACLE导入导出操作篇
1. DIRECTORY 指定转储文件和日志文件所在的目录DIRECTORY=directory_objectDirectory_object用于指定目录对象名称.需要注意,目录对象是使用CREATE ...
随机推荐
- 前端学习 node 快速入门 系列 —— 事件循环
事件循环 本篇将对以下问题进行讨论: 浏览器有事件循环,node 也有事件循环,两者有什么异同? node 核心特性(事件驱动和非阻塞 I/O )和事件循环有什么关系? node 中的高并发和高性能和 ...
- python学习之一 OS 文件夹的操作和文件操作
# OS模块 :查看一个文件夹下所有文件,这个文件夹有文件夹,不能用walk# -- coding: UTF-8 --import osimport sys#C:\Users\Administrato ...
- Oracle Linux切换uek内核到rhck内核解决ACFS兼容问题
背景:协助客户做验证,客户使用的是RHEL7.6环境,我这边是OEL7.6环境,开始以为区别不大,结果acfs兼容还是遇到问题,特此记录下. 现象:asmca图形没有acfs相关内容,无法使用acfs ...
- linux 递归和函数实验
递归 作用:自己调用自己 1.例子:阶乘 2.遍历目录下所有文件 函数 1.函数能够接受一个参数,参数为用户名: 判断一个用户是否存在 如果存在,就返回此用户的shell 和 UID :并返回正常状态 ...
- 2023最新IntellJ IDEA诺依SpringCloud开发部署文档(保姆级别)
目录 若依RuoYi v3.6.2部署文档 一.环境构建 二.模块描述 三.部署后端 1.下载到本地. 2.MySQL导入数据. 3.Nacos修改 (1)保证本地Nacos下载安装成功,修改本地Na ...
- GoldenEye项目实战
前言 "操千曲而后晓声,观千剑而后识器",下载靶机项目实战提升自我,这是一个涉及到渗透与CTF联合的实战项目. Descript: 我最近完成了一个OSCP类型的易受攻击机器的创建 ...
- 一张图快速了解 Istio 的 EnvoyFilter
EnvoyFilter简介 EnvoyFilter 提供了一种机制来定制 Istio Pilot 生成的 Envoy 配置.使用 EnvoyFilter 修改某些字段的值,添加特定的过滤器,甚至添加全 ...
- 微信小程序如何使用原生Websocket与Asp.Net Core SignalR 通信
背景 如题,这可能算是.net 做小程序的服务端时,绕不开的一个问题,老生常谈了.同样的问题,我记得我2018/19年的一个项目的解决方案是: 修改官方的SignalR.js的客户端:把里面用到浏览器 ...
- 基于uniapp+vite4+vue3搭建跨端项目|uni-app+uview-plus模板
最近得空学习了下uniapp结合vue3搭建跨端项目.之前也有使用uniapp开发过几款聊天/仿抖音/后台管理等项目,但都是基于vue2开发.随着vite.js破局出圈,越来越多的项目偏向于vue3开 ...
- Liunx下对php内核的调试
0x01前言 主要是对上一篇文章中php_again这道题的补充. 0x02下载php源码 cd /usr/local wget https://www.php.net/distributions/p ...