...好友
DB:Oracle11gR2
操作系统:Linux
我用几个程序创建了包,程序执行alter table move ...,在数据库上执行index rebuild命令。
我在下面
我可以为shell脚本生成日志文件,但是程序执行的任何内容都不会记录在shell脚本日志文件中。我理解,因为程序创建的db会话它不会在shell logfile中记录任何内容。
那我怎么能
可能存在表/表分区移动语法错误,但我只是尝试在表移动开始时和当使用datetime完成时陷阱,以便确定总时间。
*** ksh script
#!/bin/ksh
...
...
...
$LOG_FILE = move_tbs.log
echo -e "set serveroutput on\n exec move_tbs.moveTable;"|$ORACLE_HOME/bin/sqlplus/@db_alias | head -l
echo -e "set serveroutput on\n exec move_tbs.moveTablePart;"|$ORACLE_HOME/bin/sqlplus/@db_alias | head -l
数据库包/程序
*** Procedure
create or replace package move_all
procedure moveTable
dbms_output.put_line("CURRENT TIME" 'alter table '|| owner || '.' || table_name || 'move');
Execute immediate 'alter table '|| owner || '.' || table_name || 'move';
dbms_output.put_line("COMPLETED TIME" : CURRENT_TIME);
end moveTable;
-------------------------------------------
procedure moveTablePart
dbms_output.put_line("CURRENT TIME" 'alter table '|| owner || '.' || table_name || 'move');
Execute immediate 'alter table '|| owner || '.' || table_name || 'move partition';
dbms_output.put_line("COMPLETED TIME" : CURRENT_TIME);
end moveTablePart;
end move_all
/
答案 0 :(得分:1)
您可以将两个exec命令放在echo构造中。但是你可以使用'heredoc'来简化两者的运行,并且它也更容易阅读和维护。类似的东西:
LOG_TBS_MOVE=move_tbs.log
(
$ORACLE_HOME/bin/sqlplus -s -l user/passwd@db_alias <<!EOF
set serveroutput on
exec move_tbs.moveTable;
exec move_tbs.moveTablePart;
exit
!EOF
) > $LOG_TBS_MOVE
此示例!EOF
中的herdoc开始和结束标记必须完全匹配。它们可以是你喜欢的任何东西,只要heredoc里面没有任何东西意外地结束它。并且结束标记必须位于一行的开头,它不能缩进。
SQL * Plus和heredoc周围的括号可以包含多个命令,其中的所有输出都会进入日志。它们在这里并不是必需的,因为里面只有一个命令,但我认为这是一种相当清晰的重定向方式。
我只是将stdout放入$LOG_TBS_MOVE
文件中; stderr上的任何内容(不包括任何SQL错误)仍将转到屏幕或主日志,如果你重定向stderr。
要在输出中显示时间,请不要将current_time
部分括在引号中,使用字符串连接,并使用正确的函数:
dbms_output.put_line(to_char(sysdate, 'HH24:MI:SS') ||
'alter table '|| owner || '.' || table_name || 'move');
dbms_output.put_line('COMPLETED TIME: ' || to_char(sysdate, 'HH24:MI:SS'));
或者您可以在括号内显示来自shell的时间;然后它也会进入同一个日志文件。
您的SQL * Plus通话中未显示用户名或密码;你可能只是隐藏了它们,但如果你通过/连接为SYS,你真的不应该在该模式中创建对象。创建一个新架构并在其中工作。