Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 从oracle表假脱机期间压缩数据_Linux_Oracle_Csv_Scripting_Oracle Export Dump - Fatal编程技术网

Linux 从oracle表假脱机期间压缩数据

Linux 从oracle表假脱机期间压缩数据,linux,oracle,csv,scripting,oracle-export-dump,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

我们正在将数据从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

假设定义为
sqlplus
的脚本称为
script.sh
。不是吗

script.sh | gzip > data.csv.gz

您在寻找什么?

您的问题可能是因为您使用设置的linesize 32000而不是修剪,引入了大量尾随空格

在spool命令之前将其添加到脚本中:

set trimspool on
根据要提取的数据的列数和大小,这可以显著减小文件大小


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

我已按如下方式修改了代码,现在工作正常:

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
mknod../Temp/ABC.csv p
nohup gzip-c<../Temp/ABC.csv>。/Files/ABC.gz&

sqlplus-s模式\用户/模式_Password@DB_Service如果需要构建CSV,压缩表如何帮助压缩生成的CSV?一种方法是在某个表中构建CSV,然后实现一些压缩算法来创建(比如)包含CSV的ZIP文件。另一种方法可能是将CSV拆分为更多文件,然后将它们连接起来。我修改了代码,以便在假脱机期间压缩数据:mknod./Temp/ABC.CSV p sqlplus-s Schema_User/Schema_Password@DB_Servicesqlcl可以自动设置CSV格式,还可以运行javascript,因此,您可以在数据进入spool Ok时使用它的一个变体来压缩数据,然后script.sh将在压缩之前生成ABC.csv文件gzip>data.csv.gz。ABC.csv的大小将超过500GB,大于磁盘上的可用空间。@Akatsuki不是真的。据我所知,
gzip
script.sh
作为输入输出流,因此不应存在
data.csv
的任何副本。这就是管道的工作原理。右侧命令将左侧命令的输出作为流,而不将其保存或存储在任何位置。@Akatsuki看一下:上面的代码对于.gz扩展非常有效,但我们需要.tar.bz2中的压缩存档
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