批量快速的导入导出Oracle的数据

对于数据量比较大的项目首选的数据库一般是Oracle,正是因为数据量比较大,所以有的时候需要转移数据的时候就更加的复杂。这篇文章我根据自己的经验,从把Oracle的数据导出到txt文件,在导入到数据全面介绍怎样快速的导入导出数据。

首先说这里我们的数据库的用户名和密码都是oracle,这个用户下存在一张用户的表(user),对应的有两个字段,分别是uname和uid。
对于导出数据,使用的是spool方法,下面是脚本,名字是spool.sh

 

#!/bin/sh
if [ $# -ne 2 ]; then
echo "usage:$0  sqlfile outfile";
exit 1; 
fi

sqlfile=$1;
outfile=$2;
sqlplus  oracle/oracle << EOF
   spool  $outfile
   set pages 9999
   set heading off
   set echo off
   set feedback off
   @$sqlfile
   spool off
   exit
!

如果我们要导出user表中的数据,我们需要建立一个导出的文件,如user.sql,这里我是用的是"^"作为分隔符,这个可以根据自己的喜好进行选择,一般这样分隔符不会出现在字段的内容那个里就行。

 

set termout off
set echo off
set feedback off
set linesize 5000 
set colsep "^"
set heading off
set verify off
set pagesize 0
set trimout on
set trimspool on
select uname||'^'||uid from user;

下一步就是执行命令,首先需要spool.sh这文件要具有当前用户的执行的权限,对于Linux来说,赋予文件的执行权限一般是使用chmod,一般我会使用

chmod 777 spool.sh

这样这个用户就具有了执行这个文件的权限,我这种方式属于简单粗暴的方式,我们也可以更详细的给这个文件赋予不同的权限。然后执行如下的命令就可以导出数据了,因为是比较简单的命令所以我就不多说

nohup ./spool.sh user.sql /home/user.txt >> user.log &

执行问以后你可以"ps -ef|grep sql"确定当前的命令确实在执行中,当导出完成后事自动的退出。

下面说一说怎样导入数据,先要准备两个文件分别是user.lst.crl和user.lst.shell,对应的内容如下

user.lst.crl:说明一下,如果我们是想要完全的覆盖表中的数据的时候,可以把"append"换成"replace",是否使用"trim"也是根据情况定的

 

load data infile '/home/user.txt'
append into table user
fields terminated by '^'
(
uname,
uid
)

user.lst.shell:这个的“sed '1,5d'”是删除文件的1到5行,"error"是在我们碰到多少条异常的情况后会停止执行导入数据的操作

 

 

sed '1,5d' /home/user.txt 
sqlldr oracle/oracle control=/home/user.lst.crl errors=10000 log=/home/user.lst.log

同样的user.lst.shell需要在当前的用户下,该用户具有可执行的权限,然后执行

 

 

nohup ./user.lst.shell &

就行了,同样的道理,你可以"ps"一下确定当前的任务是否在正常的执行,或者看一下日志也行。

 

 

 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值