oracle通过sqlplus导出txt文件,sqlload导入文件

705 阅读1分钟

生成txt文件

#!/bin/bash
dir=`date -d "-1 day" +%Y%m%d`
day=`date -d "-1 day" +%Y%m%d`01
day1=`date -d "-1 day" +%Y-%m-%d`
sqlplus -s wyypt/wyypt <<EOF > /home/oracle/jrdt/$dir/T_WR_EXAM_$day.txt
set pages 0
set feed off
set heading off
set feedback off
set verify off
SET LINESIZE 2000
#以下解决换行,字段过长问题
set long 2000000000
set longchunksize 255
set echo OFF
set trimspool on
set trimout on
SET WRAP OFF
set termout off

SELECT    EXAM_ID
       || '|'
       || EXAM_NAME
       || '|'
       || EXAM_ST_TIME
       || '|'
       || EXAM_ED_TIME
       || '|'
       || EXAM_CONF
	    || '|'
       || EXAM_STATUS
	    || '|'
       || CREATE_DATE
	    || '|'
       || TYPE
	    || '|'
       || MAX_TIMES
	    || '|'
       || HAS_WHITE_LIST
  FROM T_WR_EXAM;
EOF

发送(获取)文件到其他服务器

#!/bin/bash
dir=`date -d "-1 day" +%Y%m%d`
day=`date -d "-1 day" +%Y%m%d`01
cd /home/oracle/jrdt/$dir
# 先判断文件是否已经生成了
if [ -f "T_WR_EXAM_SCORE_$day.txt" ];then
ftp -n<<!
open 172.20.14.50
user oracle tdkj258@%*
binary
cd /home/oracle/jrdt/$dir
prompt
put(get) T_WR_EXAM_SCORE_$day.txt
close
bye
!
else
echo "文件不存在"
fi

数据库导入文件

#!/bin/bash
source /home/oracle/.bash_profile
dir=`date -d "-1 day" +%Y%m%d`
day=`date -d "-1 day" +%Y%m%d`01

if [ -f "/home/oracle/jrdt/$dir/T_WR_EXAM_$day.txt" ];then
sqlldr jrdt/jrdt2020@fapp control=/home/oracle/jrdt/import/T_WR_EXAM.ctl data=/home/oracle/jrdt/$dir/T_WR_EXAM_$day.txt log=/home/oracle/jrdt/logs/T_WR_EXAM_$day.log
cp /home/oracle/jrdt/$dir/T_WR_EXAM_$day.txt /home/oracle/jrdt/backup/T_WR_EXAM_$day.txt
rm -f /home/oracle/jrdt/$dir/T_WR_EXAM_$day.txt
else
echo " 文件不存在"
fi

导入文件控制器脚本.ctl

load data
# 文件编码解决
CHARACTERSET ZHS16GBK   
truncate into table T_WR_EXAM
fields terminated by '|'
TRAILING NULLCOLS
(EXAM_ID, EXAM_NAME, EXAM_ST_TIME, EXAM_ED_TIME, EXAM_CONF, EXAM_STATUS, CREATE_DATE, TYPE, MAX_TIMES, HAS_WHITE_LIST)

导入文件出现中文乱码

请先查询当前数据库编码

select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';

在导入文件控制器中加入 characterset xxx

导出文件中文乱码

先用sqlplus查询编码

select userenv(‘language’) from dual;

在环境变量.bash_profile中加入

export NLS_LANG=xxxx