2

我们正在从 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。

假脱机文件 ABC.csv 的生成在达到 500GB 大小后终止。

我们怀疑 ABC.csv 的最终大小将远远超过 500GB。

请提出一种我们可以在假脱机过程中压缩数据的方法。

我应该先从 oracle 表创建一个压缩的临时表,然后再进行假脱机吗?

CREATE TABLE XXX COMPRESS FOR QUERY AS SELECT * FROM ABC;
4

3 回答 3

3

我已经修改了我的代码,现在它工作正常:

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
于 2016-12-15T12:50:26.203 回答
1

您的问题可能是因为您通过使用 set linesize 32000 而不是修剪来引入大量尾随空格。

在 spool 命令之前将此添加到您的脚本中:

set trimspool on

根据要提取的数据的列数和大小,这可以显着减小文件大小。

此外,您可能希望更改为设置 colsep '|' (不带双引号),只需确保您提取的数据也不包含管道(或使用其他分隔符)

于 2016-12-14T15:37:24.350 回答
1

假设您的脚本定义sqlplusscript.sh. 不是吗

script.sh | gzip > data.csv.gz

你在找什么?

于 2016-12-14T13:38:35.760 回答