从Oracle表中压缩数据



我们将数据从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'|'(没有双引号),只需确保您提取的数据也不包含管道(或使用其他定界符)

相关内容

  • 没有找到相关文章

最新更新