こんな風に spool すると、
$ sqlplus / as sysdba <<EOF set pagesize 0 set head off set feed off spool onlineall.sql select 'alter database datafile '''||name||''' online;' from v\$datafile; spool off EOF $ cat onlineall.sql SQL> select 'alter database datafile '''||name||''' online;' from v$datafile; alter database datafile '/u01/app/oracle/oradata/orcl/system01.dbf' online; alter database datafile '/u01/app/oracle/oradata/orcl/undotbs01.dbf' online; alter database datafile '/u01/app/oracle/oradata/orcl/sysaux01.dbf' online; alter database datafile '/u01/app/oracle/oradata/orcl/user01.dbf' online; SQL> spool off
という具合に実行した SQL やら「spool off」まで出力されてしまう。
ぐぐってみたら、
SQL*Plus をサイレントモード(-S) で起動する
サイレントモードでSQL*Plusを起動する - オラクル・Oracle SQL*Plus リファレンス
SQL*Plus 起動時、終了時のメッセージやバージョン情報、コマンドプロンプトなどを出力させずに実行する。特にバッチ処理向けにスクリプトファイルを呼び出して問い合わせ結果を スプール する場合に用いる。
SQL*Plus にサイレントモードなるものがあるらしいので試してみると、
$ sqlplus -s / as sysdba <<EOF set pagesize 0 set head off set feed off spool onlineall.sql select 'alter database datafile '''||name||''' online;' from v\$datafile; spool off EOF $ cat onlineall.sql alter database datafile '/u01/app/oracle/oradata/orcl/system01.dbf' online; alter database datafile '/u01/app/oracle/oradata/orcl/undotbs01.dbf' online; alter database datafile '/u01/app/oracle/oradata/orcl/sysaux01.dbf' online; alter database datafile '/u01/app/oracle/oradata/orcl/user01.dbf' online;
でけた。