我们将数据从linux服务器上的oracle表中置于CSV文件中。
使用以下代码:
sqlplus -s Schema_User/Schema_Password@DB_Service <<EOF
set termout off
set heading off
set underline "_"
set pagesize 0 embedded on
set linesize 32000
set LONG 50000
set colsep '"|"'
set feedback off
spool ./Temp/ABC.csv
Select COLUMN1,COLUMN2 from ABC;
spool off
EOF
Linux服务器(DF -H)上的可用空间为500GB。
达到500gb的尺寸后,Spool File ABC.CSV的生成终止。
我们怀疑abc.csv的最终尺寸将超过500gb。
请提出一种在线轴过程中我们可以压缩数据的方法。
我应该首先从Oracle表创建一个压缩的临时表,然后启动它?
CREATE TABLE XXX COMPRESS FOR QUERY AS SELECT * FROM ABC;
我已经修改了我的代码,现在正常工作:
mknod ../Temp/ABC.csv p
nohup gzip -c < ../Temp/ABC.csv > ../Files/ABC.gz &
sqlplus -s Schema_User/Schema_Password@DB_Service <<EOF
set termout off
set heading off
set underline "_"
set pagesize 0 embedded on
set linesize 32000
set LONG 50000
set colsep '"|"'
set feedback off
set trimspool on
spool ./Temp/ABC.csv
Select COLUMN1,COLUMN2 from ABC;
spool off
EOF
假设您的脚本使用sqlplus
的定义称为script.sh
。不是
script.sh | gzip > data.csv.gz
您正在寻找什么?
您的问题可能是因为您通过使用SET LINESSIZE 32000而不是修剪来引入大量尾随空间。
在Spool命令之前,将其添加到您的脚本:
set trimspool on
取决于要提取的数据的数量和数据的大小,这可以大大减少文件大小。
另外,您可能需要更改以设置Colsep'|'(没有双引号),只需确保您提取的数据也不包含管道(或使用其他定界符)