朋友们...
数据库:Oracle11gR2
操作系统:Linux
我用几个程序创建了包,程序执行 alter table move... ,数据库上的索引重建命令。
我在下面做
- 运行 ksh shell 脚本 -> 执行过程
- 程序运行alter table,在数据库上重建索引命令
- 程序完成
- Shell 脚本结束。
我可以为 shell 脚本生成日志文件,但是程序执行的任何内容都不会记录在 shell 脚本日志文件中。我明白,由于过程创建的 db 会话它不会在 shell 日志文件中记录任何内容。
那我怎么能
- 将两个程序在同一个包中执行的所有内容记录在日志文件中?
- 还试图将当前日期时间放在过程 dmbs_out.put_line 命令中?
- 是否可以在连接数据库一次而不是两次连接数据库并执行程序后运行这两个程序?
可能存在表/表分区移动语法错误,但我只是试图捕获表移动何时开始以及何时完成日期时间,以便确定总时间。
*** 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
/