使用exp/imp 在oracle数据库间导数据

时间:2021-01-25 09:14:40

最近工作需要将oracle数据库的表数据导出到另一个oracle数据库表,找到了oracle 自带的命令行,并记录下导数据过程。

导数据过程分以下几步:

假设源数据库为A,目标数据库为B

1.在B上通过ssh 远程执行本地脚本,实现在A上通过exp命令导出dmp文件,并通过scp命令将文件传送至本地(A、B之间通过生成秘钥登陆)。

2.在B上通过imp命令导入数据表。

ssh远程执行本地脚本的方式可以通过类似方式实现:

sshpass -p PASS_WORD ssh USER_NAME@xxx.xx.xx.xx < ssh_and_exp.sh

sshpass 可以通过命令行带密码的方式 执行ssh,而本地脚本ssh_and_exp.sh 如下:

#!/bin/bash

#cd到oracle安装目录
cd /oracle/app/oracle/product/11.2.0/dbhome_1/bin
path="/tmp/bg_store.dmp"
to="/tmp/scp_bg_store.dmp"
echo "=======================export has started==================================="

# 执行导出命令

./exp pg_sfa/pg_sfa@itek file=\${path} tables=bj_store_info_02
echo "=======================export has finished=================================="
chmod 755 \${path}

通过scp命令传递A到B

scp -o StrictHostKeyChecking=no -i /home/id_rsa root@xx.xx.xx.xx:\${path} ${to}

再通过imp命令导入数据表:

./imp pg_sfa2/pg_sfa2@itek file=\${to} full=y ignore=y

即可实现整个过程。

另外,执行命令的oracle用户需要配置ORACLE_HOME, 并且在PATH里添加ORACLE_HOME/bin

export ORACLE_HOME=/oracle/xxxx

export PATH=\$ORACLE_HOME/bin:\$PATH

附上填坑过程:

1. 登录源数据linux服务器, 切换至oracle用户 或 将root用户添加至oracle组中,用来执行exp命令

遇到

使用exp/imp 在oracle数据库间导数据

2.网上搜索使用

SQL> show parameter background_dump_dest

来找告警日志。于是打开plsql 的 CMD window,输入,找到了日志地址

使用exp/imp 在oracle数据库间导数据

3.查看日志没有发现报错。 再次搜索 错误信息,找到 这篇博客 http://blog.itpub.net/12272958/viewspace-716020

按照提示去做,删除了lk开头的文件,强行关闭相关进程 ora_lgwr_**** ,再次启动,数据库 提示启动成功

使用exp/imp 在oracle数据库间导数据