KSH 脚本太大 运行
KSH script too big to run
我从来没有遇到过这样的问题,但是我有一个用于插入 Oracle 行的 KSH 脚本,但是脚本失败了,因为它太大了,我知道这就是问题所在,因为如果你删除了一些插入,脚本就可以工作.
脚本大小约为 90.000 kb,结构如下:
#!/bin/ksh
$ORACLE_HOME/bin/sqlplus -s << LABEL1
USER/PasWoRd@10.10.10.10:1234/oraSID
-- Define 3 variables
variable msgVal number;
variable msgeId varchar2(50);
variable msgseqval varchar2(50);
-- 1 Original time: 3/1/2018 12:46:34 AM
EXEC :msgVal := MESSAGEIDSEQ.NextVal;
EXEC :msgeId := CONCAT ('B_',to_char (sysdate, 'YYYYMMDDHH24MISS');
INSERT into TABLE_CONTROL (MESSAGE_ID, NUMBER_OF_ROWS, SEND_DATE) VALUES (:msgeId, 1, to_char (sysdate, 'YYYYMMDDHH24MISS'));
INSERT into TABLE_DATA(MESSAGE_ID, SHORT_TEXT, LONG_TEXT_FLAG) VALUES (:msgeId, 'SHORT TEXT', 'N');
commit;
EXEC dbms_lock.sleep (30);
-- PFP 2 Original time: 3/1/2018 1:46:25 AM
EXEC :msgseqval := MESSAGEIDSEQ.nextval;
EXEC :msgVal := MESSAGEIDSEQ.NextVal;
EXEC :msgeId := CONCAT (CONCAT (CONCAT ('B_',to_char (sysdate, 'YYYYMMDDHH24MISS')), '_'), to_char (:msgVal));
INSERT into TABLE_CONTROL (MESSAGE_ID, NUMBER_OF_ROWS, SEND_DATE) VALUES (:msgeId, 1, to_char (sysdate, 'YYYYMMDDHH24MISS'));
INSERT into TABLE_DATA(MESSAGE_ID, SHORT_TEXT, LONG_TEXT_FLAG) VALUES (:msgeId, 'SHORT TEXT', 'N');
commit;
EXEC dbms_lock.sleep (30);
LABEL1
但是大约有 200.000 个插入。
我需要 运行 使用 nohup,我想知道是否有一种方法可以在一个脚本中完成。
此致。
路易斯
可能与sqlplus
输入缓冲区有关。为什么不将您的语句和命令写入文件并执行它:
cat <<LABEL1 >/tmp/foobar
USER/PasWoRd@10.10.10.10:1234/oraSID
...
commit;
EXEC dbms_lock.sleep (30);
LABEL1
$ORACLE_HOME/bin/sqlplus -s @/tmp/foobar
rm /tmp/foobar
我从来没有遇到过这样的问题,但是我有一个用于插入 Oracle 行的 KSH 脚本,但是脚本失败了,因为它太大了,我知道这就是问题所在,因为如果你删除了一些插入,脚本就可以工作.
脚本大小约为 90.000 kb,结构如下:
#!/bin/ksh
$ORACLE_HOME/bin/sqlplus -s << LABEL1
USER/PasWoRd@10.10.10.10:1234/oraSID
-- Define 3 variables
variable msgVal number;
variable msgeId varchar2(50);
variable msgseqval varchar2(50);
-- 1 Original time: 3/1/2018 12:46:34 AM
EXEC :msgVal := MESSAGEIDSEQ.NextVal;
EXEC :msgeId := CONCAT ('B_',to_char (sysdate, 'YYYYMMDDHH24MISS');
INSERT into TABLE_CONTROL (MESSAGE_ID, NUMBER_OF_ROWS, SEND_DATE) VALUES (:msgeId, 1, to_char (sysdate, 'YYYYMMDDHH24MISS'));
INSERT into TABLE_DATA(MESSAGE_ID, SHORT_TEXT, LONG_TEXT_FLAG) VALUES (:msgeId, 'SHORT TEXT', 'N');
commit;
EXEC dbms_lock.sleep (30);
-- PFP 2 Original time: 3/1/2018 1:46:25 AM
EXEC :msgseqval := MESSAGEIDSEQ.nextval;
EXEC :msgVal := MESSAGEIDSEQ.NextVal;
EXEC :msgeId := CONCAT (CONCAT (CONCAT ('B_',to_char (sysdate, 'YYYYMMDDHH24MISS')), '_'), to_char (:msgVal));
INSERT into TABLE_CONTROL (MESSAGE_ID, NUMBER_OF_ROWS, SEND_DATE) VALUES (:msgeId, 1, to_char (sysdate, 'YYYYMMDDHH24MISS'));
INSERT into TABLE_DATA(MESSAGE_ID, SHORT_TEXT, LONG_TEXT_FLAG) VALUES (:msgeId, 'SHORT TEXT', 'N');
commit;
EXEC dbms_lock.sleep (30);
LABEL1
但是大约有 200.000 个插入。
我需要 运行 使用 nohup,我想知道是否有一种方法可以在一个脚本中完成。
此致。
路易斯
可能与sqlplus
输入缓冲区有关。为什么不将您的语句和命令写入文件并执行它:
cat <<LABEL1 >/tmp/foobar
USER/PasWoRd@10.10.10.10:1234/oraSID
...
commit;
EXEC dbms_lock.sleep (30);
LABEL1
$ORACLE_HOME/bin/sqlplus -s @/tmp/foobar
rm /tmp/foobar