我们正在Linux服务器的oracle表中将数据后台处理为CSV文件。在从oracle表中假脱机过程中压缩数据
使用下面的代码:
sqlplus -s Schema_User/[email protected]_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;
如果您需要构建CSV,压缩表如何帮助压缩生成的CSV?一种方法可能是在某个表中构建CSV,然后实施一些压缩算法来创建(例如)包含CSV的ZIP文件。另一种方法可能是将您的CSV分成多个文件,然后将它们连接起来。 – Aleksej
我已修改代码的假脱机期间压缩数据: mknod的./Temp/ABC.csv p SQLPLUS -s Schema_User/Schema_Password @ DB_Service << EOF 组TERMOUT关闭 集标题关闭 组下划线 “_” 集合页大小0嵌入 组LINESIZE 32000 设置LONG 50000 组COLSEP ' “|”' 组反馈关闭 主机的nohup gzip的-c <./Temp/ABC.csv> /tmp/out1.gz \& 卷轴./Temp/ABC.csv 从ABC中选择COLUMN1,COLUMN2; 假脱机 EOF 但我需要tar.bz2格式的压缩文件,而不是gz。 另外我不确定上述过程不会影响数据。 – Akatsuki
sqlcl自动进行CSV格式化,它也可以让你运行javascript,所以你可以使用这种变化来压缩数据,因为它进入假脱机https://github.com/oracle/oracle-db-tools/commit/ e82d6cd2c0585a52dda6523d179a1417652b7cc6 – thatjeffsmith