前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >oracle导数据

oracle导数据

原创
作者头像
大大刺猬
修改2020-12-04 17:29:39
8370
修改2020-12-04 17:29:39
举报
文章被收录于专栏:大大刺猬大大刺猬

本文主要总结我oracle导数据的经验(再不写怕忘了...).

oracle导数据有很多方法, 官方推荐的是exp/imp和数据泵(expdp/impdp).

1.exp和imp

不建议使用exp/imp导数据, 但是有的环境限制了操作系统登录, 没得法采用exp/imp导数据的.

1.1 exp导出数据

exp是客户端工具, 导出的数据在客户端. 使用exp help=y即可查看帮助. 常用的也就那些.

exp导出的数据文件可以直接用more查看. 所以导出的数据也可以直接用sed之类的修改.

本处的file金额log的文件均是客户端上的,建议写绝对路径.

1.1.1按表导出(推荐)

exp USERNAME/PASSWORD@IP:PORT/SERVICE_NAME \
file=/u01/exp.dmp \
log=/u01/exp.log \
buffer=65536 feedback=100000 \
tables=user1.table1,user2.table2

1.1.2按用户导出

exp USERNAME/PASSWORD@IP:PORT/SERVICE_NAME \
file=/u01/exp.dmp \
log=/u01/exp.log \
buffer=65536 feedback=100000 \
owner=user1

1.1.3全库导出(不推荐)

exp USERNAME/PASSWORD@IP:PORT/SERVICE_NAME \
file=/u01/exp.dmp \
log=/u01/exp.log \
buffer=65536 feedback=100000 \
full=y

1.2 imp导入数据

导入的话,一般都是直接把该dmp文件全部导入,所以可以不用指明怎么导入

但是往往需要指定到其它用户和其它表空间,所以需要转换.

imp USERNAME/PASSWORD@IP:PORT/SERVICE_NAME \
fromuser=user1 \
touser=newuser \
commit=y \
ignore=y \
buffer=65536 \
feedback=100000 \
file=/u01/exp.dmp \
log=/u01/imp.log 

怎么修改表空间可以看我之前写的https://cloud.tencent.com/developer/article/1647382

2.数据泵(expdp/impdp)

数据泵工具是服务端工具,导出的数据在服务端, 所以得先在服务端创建好目录才行(默认目录是DATA_PUMP_DIR).

为方便使用,以下环境均使用system用户作为数据导入导出.

expdp导出的数据是二进制的, 所以可以通过strings expdp.dmp | more查看其内容

SHELL> mkdir -p /u01/expdp
SHELL> chown oracle:oinstall /u01/expdp
SQL> select * from dba_directories;
SQL> CREATE DIRECTORY expdp_dir AS '/u01/expdp';
SQL> grant read,write on directory expdp_dir to system;

2.1 expdp导出数据

还是按表,用户,全库来分.

2.1.1 按表导出(推荐)

expdp USERNAME/PASSWORD@IP:PORT/SERVICE_NAME \
DIRECTORY=expdp_dir \
JOB_NAME=expdp_ddcw_table_job \
DUMPFILE=expdp.dmp \
LOGFILE=expdp.log \
TABLES=user1.table1,user2.table2

2.1.2 按用户导出

expdp USERNAME/PASSWORD@IP:PORT/SERVICE_NAME \
DIRECTORY=expdp_dir \
JOB_NAME=expdp_ddcw_table_job \
DUMPFILE=expdp.dmp \
LOGFILE=expdp.log \
SCHEMAS=user1,user2 

2.1.3 全库导出

我的19c自动安装脚本就会生产 ~/scripts/backupdata.sh 脚本备份全库.(需要手动设置定时任务, 会在日志最后一行生成自动导入的命令,方便恢复) 自动安装19C脚本:https://cloud.tencent.com/developer/article/1674412

expdp USERNAME/PASSWORD@IP:PORT/SERVICE_NAME \
DIRECTORY=expdp_dir \
JOB_NAME=expdp_ddcw_table_job \
DUMPFILE=expdp.dmp \
LOGFILE=expdp.log \
FULL=y

2.2 impdp导入

和imp导入类似, 不指定导入内容默认就是dump的全部内容.

导入时候也可以替换用户表空间之类的: REMAP_DATA REMAP_DATAFILE REMAP_SCHEMA REMAP_TABLE REMAP_TABLESPACE

注意: 需要把dump文件拷贝到刚才指定的目录.

impdp USERNAME/PASSWORD@IP:PORT/SERVICE_NAME \
DIRECTORY=expdp_dir \
JOB_NAME=impdp_ddcw_table_job \
DUMPFILE=expdp.dmp \
LOGFILE=impdp.log \
REMAP_SCHEMA=user1:user2 \
REMAP_TABLESPACE=tablespace1:tablespace2

2.3 数据泵小技巧:

2.3.1 评估数据大小

导出数据时可以用参数 estimate_only=y estimate=blocks 预估数据块的大小(往往会比实际数据大很多,仅作参考.)

也可以用estimate_only=y estimate=statistics 预估, 也有误差.

2.3.2 查看数据泵状态

查看正在进行的数据泵任务

expdp/impdp USERNAME/PASSWORD@IP:PORT/SERVICE_NAME attach=JOB_NAME
#JOB_NAME就是expdp/impdp时指定的job名字.

3.导数据的一些小技巧:

3.1 带查询条件

主要是指导出的时候只想导出表的部分数据时,可以用QUERY过滤条件

QUERY=employees:"WHERE department_id > 10"

3.2 只导入数据, 索引约束之类的分开跑(数据泵才有,exp导出的手动sed改就行).

EXCLUDE=index,statistics,constraint
#排除对象,也可以是表,db_link之类的EXCLUDE=SCHEMA:"='HR'"

单独导出索引DDL(约束之类的也是同理)

INCLUDE=index  SQLFILE=index.sql

然后修改该index.sql 加上并行跑快些.

3.3 通过 parfile 文件 指定参数.

有时候一次导几十张表,都写在命令行不好看.所以可以指定PARFILE, 把参数都写在PARFILE里.

例子:

cat test_parfile.par

DIRECTORY=expdp_dir
JOB_NAME=expdp_ddcw_table_job
DUMPFILE=expdp.dmp 
LOGFILE=expdp.log 
TABLES=user1.table1,
user2.table2,
user3.table3,
user4.table4

然后

expdp USERNAME/PASSWORD@IP:PORT/SERVICE_NAME parfile=test_parfile.par

最近稍微有点空, 下一篇写redis, 然后pxe 再然后ansible......

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.exp和imp
    • 1.1 exp导出数据
      • 1.1.1按表导出(推荐)
      • 1.1.2按用户导出
      • 1.1.3全库导出(不推荐)
    • 1.2 imp导入数据
    • 2.数据泵(expdp/impdp)
      • 2.1 expdp导出数据
        • 2.1.1 按表导出(推荐)
        • 2.1.2 按用户导出
        • 2.1.3 全库导出
      • 2.2 impdp导入
        • 2.3 数据泵小技巧:
          • 2.3.1 评估数据大小
          • 2.3.2 查看数据泵状态
      • 3.导数据的一些小技巧:
        • 3.1 带查询条件
          • 3.2 只导入数据, 索引约束之类的分开跑(数据泵才有,exp导出的手动sed改就行).
            • 3.3 通过 parfile 文件 指定参数.
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档