mknod /tmp/Oracle.pipe p
sqlplus / as sysdba << _EOF
set escape on
Host Nohup gzip -c < /tmp/Oracle.pipe > /tmp/out1.gz \&
spool /tmp/Oracle.pipe
select * from employee;
spool off
_EOF
rm /tmp/Oracle.pip
Zipファイルout1.gzの最後にトレーラーを挿入する必要があります。
count=zcat out1.gz |wc -l
トレーラーを挿入する方法
T5 (assuming count=5)
解凍せずにout1.gzの最後に。
man gzip
から、gzip
pedファイルを単純に連結できることが読み取れます。
高度な使用法複数の圧縮ファイルを連結できます。この場合、gunzipはすべてのメンバーを一度に抽出します。例えば:
gzip -c file1 > foo.gz gzip -c file2 >> foo.gz Then gunzip -c foo is equivalent to cat file1 file2
これは、cat
pedファイルに対してgzip
を使用して行うこともできます。例:
seq 1 4 > A && gzip A
echo 5 > B && gzip B
#now 1 to 4 is in A.gz and 5 in B.gz, we want 1 to 5 in C.gz:
cat A.gz B.gz > C.gz && zcat C.gz
1
2
3
4
5
#or for appending B.gz to A.gz:
cat B.gz >> A.gz
追加する行の外部ファイルなしでそれを行うには、次のようにします。
echo "this is the new line" | gzip - | cat - >> original_file.gz
従業員のテーブルの大きさは? 100万人の従業員がいて、各レコードに数千バイトかかる場合を除いて、出力を圧縮する手間をかける価値はありません。
ほとんどの場合、出力ファイルが作成されているときに圧縮する手間はかかりません。圧縮されていないプレーンテキストに出力し、count=$(wc -l out1) ; echo "T$count" >> out1
を実行して_gzip out1
_で圧縮しないのはなぜですか。
または、_spool off
_コマンドの前にselect count(*) from employee
のバリエーションを実行するだけです。
私は同様の課題に取り組んでいました:圧縮されたSQLダンプに数行を追加しました。私の解決策は@Fiximanからの回答に基づいていました
echo 'append this string' | gzip >> out.gz