oracle 数据库远程导入导出

1. 本地及远程导入导出的区别

本地导入导出,会把数据导出导入到本地的相关文件夹下,要导到别的服务器上,还需要使用zip命令压缩,再下载后上传到指定的服务器,再解压,再导入,比较繁琐。
远程导出,可以把某一台oracle里的数据导出到另外的一台oracle上,生成dump文件。 
远程导入,可以直接把一台oracle里的数据导入另外一台oracle上,省略了导出过程。

2. 导出导入命令事例如下

参考:https://article.itxueyuan.com/rx8w7a 详细参数,使用技巧,常用导出命令(中间有一段广告,往下拉可以看全貌) 
参考:https://cloud.tencent.com/developer/article/1920987 空间不足怎么办?别怕,数据泵之NETWORK_LINK来帮你! 
参考:https://blog.csdn.net/Hjchidaozhe/article/details/105655658 Oracle expdp-impdp 数据泵导入导出(远程) 参考: https://blog.csdn.net/anqixiang/article/details/118763665 oracle11 导出导入dmp详解(里面有讲解导入的时候的创建表空间,创建用户授权,还有查看文件) 

1.远程导出 expdp UNIMAX_ZMJ_DK/UNIMAX_ZMJ_DK@orcl directory=DATA_PUMP_DIR DUMPFILE=sbsc20220721.dmp network_link=SBSC TABLES=SBSC.IP_POSITION LOGFILE=expdp_table.log compression=all PARALLEL = 3 
远程导出相关说明: 
1.远程导出使用network_link的账号密码需要用目标数据库的(即在UNIMAX_ZMJ_DK用户所在的oracle服务器(73)上导出通过dblink连接的数采数据库服务器sbsc里的数据(74)到 73上,生成的dump文件在73服务器上),需要在UNIMAX_ZMJ_DK用户建立sbsc用户的dblink 
2.network_link是dblink,不是远程导出,不需要使用这个参数
3.TABLES=SBSC.IP_POSITION,这个是导出具体某一张表,只会导指定的,如果还要导别的,把这个去掉。 因为远程导出,所以表名前要加需要导出数据库的用户名,用户名.表名。如果是本地导出,直接用表名就可以。 远程导出,如果不加,会报如图4所示错误。 参考:http://www.itpub.net/forum.php?mod=viewthread&tid=1366287&ordertype=1 
4.directory后是导出的逻辑目录名,逻辑目录名对应的物理目录通过sql (select * from dba_directories) 来查看 5.LOGFILE是生成dump文件时同时生成的log文件名 
6.DUMPFILE是生成的dump文件名 
7.UNIMAX_ZMJ_DK/UNIMAX_ZMJ_DK@orcl 账号/密码@数据库实例 
8.compression 这个代表压缩,使用all会压缩到最小,但是时间会很长,如果空间足够不要用此参数。参考:https://blog.csdn.net/weixin_33907511/article/details/90658541 
9.PARALLEL 指定导出/导入时使用多少个并发,默认是1. 
10.更多参数可以查看最上面的第一个连接 

2.本地导出 expdp sbsc/sbsc123@orcl dumpfile=sbsc20220724.dmp directory=DATA_PUMP_DIR LOGFILE=expdp_table.log PARALLEL = 3 

3.本地导入 impdp sbsc/sbsc123 directory=DATA_PUMP_DIR dumpfile=sbsc20220724.dmp transform=segment_attributes:n remap_schema=sbsc:sbsc table_exists_action=replace PARALLEL = 3 

4.远程导入 impdp sbsc/sbsc123 network_link=SBSC directory=DATA_PUMP_DIR TABLES=IP_POSITION LOGFILE=impdp_table.log remap_schema=sbsc:sbsc transform=segment_attributes:n table_exists_action=replace PARALLEL = 3 
远程导入相关说明:
1.remap_schema 导出用户名:导入用户名 
2.transform=segment_attributes:n 使remap_tablespace失效,所有数据均会导入到默认表空间 
3.table_exists_action=replace 导入时,假如目标库中已存在对应的表,对于这种情况,提供三种不同的处理方式: append : 追加数据到表中 
truncate: 将目标库中的同名表的数据truncate掉。 
skip : 遇到同名表,则跳过,不进行处理,注意:使用此参数值时,与该表相关的所有操作都会skip掉。 
replace: 导入过程中,遇到同名表,则替换到目标库的那张表(先drop,再创建)。
参考:https://developer.aliyun.com/article/8300

3. 导入导出步骤:

1.用xshell登录后,先要切换到oracle用户 su - oracle,注意-前后有空格,如图1 
2.切换之后才能进行导入导出,还有使用sqlplus登录,也要先切换到oracle用户 
3.远程导出导入需要建立databaselink:导出时需要建立从要生成dump文件的用户到需要导出数据的用户的dblink; 导入时需要建立接收数据用户到提供数据用户的dblink,如果不建立,导入导出时会报错。 
4.导入的数据库需要事先建立好表空间还有用户,表空间最好设置为可自增,还要给用户赋予初始权限 可以参考:https://blog.csdn.net/anqixiang/article/details/118763665 中的导入部分 表空间需要看下DB_BLOCK_SIZE为多少,8k的话单个表空间文件最大为32g。 要事先建立好所需要的表空间文件,可以对比一下老的和新的表空间文件看都有多大。 还有临时表空间,也要看 注意一点:要看下oracle安装在哪个文件系统下,磁盘大小够不够。避免导入时硬盘满了。 --表空间的最大跟db_block_size有关 select value from v$parameter where name='db_block_size' 参考:https://blog.csdn.net/qq_35974861/article/details/78865166 
5.导入导出的用户需要设置相应的导入导出权限。不然会报错,报错如如图3, 查询oracle中某个用户的权限如下sql:select * from session_privs 导出时需要的权限需要登录要导出的用户那里赋导出权限,如果没法赋权限,需要使用dba登录赋权 赋权命令为:grant exp_full_database to 用户名;grant EXPORT FULL DATABASE to '用户名' 参考:https://blog.csdn.net/amto001/article/details/8625786/ ; https://bbs.csdn.net/topics/390166418 导入的权限为grant exp_full_database to 用户名; 
6.导入导出完可以去看下日志

1660123550725.png
4. 查看导入导出状态:

当导入卡住时,想知道当前导入在执行什么,可以看下面的连接里的内容 参考:
http://www.pingtaimeng.com/article/detail/id/1036446 
SELECT owner_name, job_name, operation, job_mode, state, attached_sessions FROM dba_datapump_jobs;//查询
在进行哪个任务 比如你在sbsc上执行,那么impdp sbsc/sbsc123 attach=SYS_IMPORT_SCHEMA_01 impdp 
UNIMAX_ZMJ_DK/UNIMAX_ZMJ_DK attach=SYS_IMPORT_SCHEMA_01 
参考:https://blog.csdn.net/hyn_happy/article/details/88311073 命令使用时机 
参考:https://www.cnblogs.com/lvcha001/p/14507659.html 
问题,数据泵导入Undo空间不足报错,扩容后数据泵JOB并未恢复执行,JOB状态STOP PENDING如何改变 先stop_job=IMMEDIATE,再continue_client,
这样可以先让导出停止,再继续执行之前的这个任务。
使用kill_job,会直接杀死此任务。