在从oracle表进行假脱机期间压缩数据

时间:2016-12-14 13:21:49

标签: linux oracle csv scripting oracle-export-dump

我们正在从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大小后,假脱机文件ABC.csv的生成终止。

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

请建议一种在假脱机过程中压缩数据的方法。

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

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

3 个答案:

答案 0 :(得分:1)

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

在假脱机命令之前将其添加到脚本中:

set trimspool on

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

另外,您可能想要更改为设置colsep'|' (没有双引号),只要确保你提取的数据也不包含管道(或使用其他分隔符)

答案 1 :(得分:1)

我修改了我的代码如下,现在工作正常:

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

答案 2 :(得分:0)

假设您定义script.sh的脚本名为script.sh | gzip > data.csv.gz 。不是

spring.data.mongodb.uri: mongodb://localhost:27017/measurements-db

你在找什么?