工作中使用数据泵遇到过很多问题,一直没有很好的总结,今天做个记录,有任何错误的地方还请大家指出。 我将持续更新
1:先要有数据泵目录,并有权限 对了 数据库版本要10 或以上
1:在数据库中创建数据泵目录
create directory dmpdir as '/home/oracle/dmpdir';
2:给创建的目录授权
grant read,write on directory dmpdir to public;
3:查看数据泵目录位置
select a.* from Dba_Directories a;
2:正常的导出 停止
1:导出
expdp system/oracle directory=dmpdir dumpfile=xxx.dmp logfile=xxx.log schemas=username
2:导入
impdp system/oracle directory=dmpdir dumpfile=xxx.dmp logfile=xxx.log schemas=username
3:停止导入 导出
按 ctl+c 然后输入 stop_job=immediate 然后等待结束 直接ctl+c 是不能停的
4:建议 :
导入完成后对 存储过程、视图、同义词等 进行查看是否有失效的,对其重新编译
3:导入或导出一张表 表数据 / 表结构
-- 导出
1:只导出表数据
expdp system/tiger directory=dmpdir dumpfile=xxx.dmp logfile=xxx.log
content=data_only schemas= username
2:只导出表结构
expdp system/tiger directory=dmpdir dumpfile=xxx.dmp logfile=xxx.log
content=metadata_only schemas=username
-- 导入
1:只导入表数据
impdp system/tiger directory=dmpdir dumpfile=xxx.dmp logfile=xxx.log
content=data_only schemas=username
2:只导入表结构
impdp system/tiger directory=dmpdir dumpfile=xxx.dmp logfile=xxx.log
content=metadata_only schemas=username
4:导入表,表在数据库中存在 (将原表drop / truncate)
table_exists_action选项:
1:skip 是如果已存在表,则跳过并处理下一个对象;
2:append是在原有数据基础上继续增加;
3:truncate是先TRUNCATE,然后为其增加新数据;
4:replace是先DROP表,重新建表并追加数据;
1:导入一张表 将原表truncate
impdp system/tiger directory=dmpdir dumpfile=xxx.dmp logfile=xxx.log
tables=scott.emp table_exists_action=truncate remap_schema=scott:scott
2:导入一张表 将原表drop
impdp system/tiger directory=dmpdir dumpfile=xxx.dmp logfile=xxx.log
tables=scott.emp table_exists_action=replace remap_schema=scott:scott
3:导入所有表 将原表drop
impdp system/tiger directory=dmpdir dumpfile=xxx.dmp logfile=xxx.log
table_exists_action=replace schema=username
4:导入所有表 将原表truncate
impdp system/tiger directory=dmpdir dumpfile=xxx.dmp logfile=xxx.log
table_exists_action=truncate remap_schema=scott:scott
4:查看当前导入 或导出是否在进行 (遇到假死啊 什么的 看看进行情况)
1:看状态
select * from DBA_DATAPUMP_JOBS; -- 用过
2:
select * from DBA_DATAPUMP_SESSIONS; -- 没用过
3:看当前对象进度是否有变化
新开一个窗口 expdp system/xxx attach=xxxxxx --用过
4:看监听文件 日志文件是否是数据库被前台在使用,我遇到过一次,向测试环境到数据结果只停了一个应用,导入速度慢了10倍还没导完。
5:查看数据库导出慢的原因
1:在导出上加参数 metrics=y trace=480300
此参数可以记录每步耗时,一个大拿告诉我的 ,我还没试过
2:看awr报告 看耗时的提示 ,百度百度 是否会影响导入 导出的速度 。摸索着前进吧
6:一些记录
前段时间配置了一个定时任务,定时备份数据库,运行一段时间发现 备份越来越慢,后台查看 awr 报告发现提示streams 池不够,网上查说因为streams池导致的备份慢,后来停机修改了相关的参数,好了一段时间 ,现在又是这样的情况,现在也不确定是当时重启导致的导出速度恢复还是修改的参数导致的。现在把备份停了一段时间,再看awr 报告发现 没说streams 池小了,导出也正常了,现在也不敢恢复备份计划了。难啊 。我一个人独自摸索着oracle,来个大神吧指导指导啊。