批量快速的导入导出Oracle的数据
2014-11-30 23:15
423 查看
对于数据量比较大的项目首选的数据库一般是Oracle,正是因为数据量比较大,所以有的时候需要转移数据的时候就更加的复杂。这篇文章我根据自己的经验,从把Oracle的数据导出到txt文件,在导入到数据全面介绍怎样快速的导入导出数据。
首先说这里我们的数据库的用户名和密码都是oracle,这个用户下存在一张用户的表(user),对应的有两个字段,分别是uname和uid。
对于导出数据,使用的是spool方法,下面是脚本,名字是spool.sh
这样这个用户就具有了执行这个文件的权限,我这种方式属于简单粗暴的方式,我们也可以更详细的给这个文件赋予不同的权限。然后执行如下的命令就可以导出数据了,因为是比较简单的命令所以我就不多说
执行问以后你可以"ps -ef|grep sql"确定当前的命令确实在执行中,当导出完成后事自动的退出。
下面说一说怎样导入数据,先要准备两个文件分别是user.lst.crl和user.lst.shell,对应的内容如下
user.lst.crl:说明一下,如果我们是想要完全的覆盖表中的数据的时候,可以把"append"换成"replace",是否使用"trim"也是根据情况定的
首先说这里我们的数据库的用户名和密码都是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"一下确定当前的任务是否在正常的执行,或者看一下日志也行。
相关文章推荐
- 批量快速的导入导出Oracle的数据(spool缓冲池、java实现)
- 快速导入导出Oracle数据demo(sqlldr、UTL_FILE)
- Oracle中用exp/imp命令快速导入导出数据(整理)
- oracle数据迁移快速导入导出:利用sqluldr2导出数据和sqlldr导入数据的方法
- Oracle中用exp/imp命令快速导入导出数据
- Oracle中用exp/imp命令快速导入导出数据
- oracle如何快速导入导出文本格式数据
- Oracle中用exp/imp命令快速导入导出数据(整理)
- ORACLE 快速批量导入文本数据到数据库(sqlldr工具)方法与分析
- Oracle中用exp/imp命令快速导入导出数据
- Oracle中用exp/imp命令快速导入导出数据
- Oracle中用exp/imp命令快速导入导出数据(整理)
- Oracle中用exp/imp命令快速导入导出数据
- Oracle中用exp/imp命令快速导入导出数据
- Oracle中用exp/imp命令快速导入导出数据(整理)
- Oracle中用exp/imp命令快速导入导出数据(整理)
- Oracle中用exp/imp命令快速导入导出数据
- Oracle中用exp/imp命令快速导入导出数据(整理)
- 在pl/sql中使用exp/imp工具实现oracle数据导出/导入
- Oracle数据导入导出imp/exp