您的位置:首页 > 数据库 > Oracle

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

2014-11-30 23:15 423 查看
对于数据量比较大的项目首选的数据库一般是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  "trim(:<span style="font-family: Arial, Helvetica, sans-serif;">uname</span><span style="font-family: Arial, Helvetica, sans-serif;">)",</span>
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"一下确定当前的任务是否在正常的执行,或者看一下日志也行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: