Oracle 生成过程日志文件并插入日期时间
朋友们 DB:Oracle11gR2 操作系统:Linux 我用两个程序创建了包,程序执行alter table move,数据库上的索引重建命令 我在下面做什么Oracle 生成过程日志文件并插入日期时间,oracle,procedure,log-files,Oracle,Procedure,Log Files,朋友们 DB:Oracle11gR2 操作系统:Linux 我用两个程序创建了包,程序执行alter table move,数据库上的索引重建命令 我在下面做什么 运行ksh shell脚本->执行过程 该过程在数据库上运行ALTERTABLE、rebuild index命令 程序完成 Shell脚本结束 我可以为shell脚本生成日志文件,但过程执行的任何内容都不会记录在shell脚本日志文件中。我理解,因为db会话是由过程创建的,所以它不会在shell日志文件中记录任何内容 那我怎么办 在日
*** 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
/
您可以将两个exec命令都放在echo构造中。但是,您可以使用来简化两者的同时运行,并且它也更易于阅读和维护。比如:
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
或者您可以在括号内显示shell中的时间;这也将进入同一个日志文件
您尚未在SQL*Plus调用中显示用户名或密码;您可能只是隐藏了它们,但如果您是以SYS via/的身份连接的,则不应该在该模式中创建对象。创建一个新的模式并在其中工作。我正在使用tns别名连接到db。我将测试您的建议,并在这里提供结果。这是一种非常好的、干净的执行过程的方法,我的日常编程肯定会使用这种方法。创建日志文件失败,出现错误”第62行的语法错误:“@homer-那么您的herdeoc的开始和结束是不匹配的;它们是否都有
!EOF
?它们需要完全相同。(连接是可选的,只是一种习惯;不管您使用什么值,它都必须是一致的)。尽管我已经验证了这一点,但我已经从问题中复制了日志文件分配。创建日志文件失败,出现错误”第62行的语法错误:'@homer-no,
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'));