UNDO テーブルスペースの統計を 6 時間ごとに 1 つのテーブルに保存したいと考えています。簡単なテーブルを作成しました:
CREATE TABLE SYS.TB_UNDOSTAT (
MAX_UNDOBLKS NUMBER,
MAX_QUERY_LENGTH NUMBER,
MAX_QUERY_ID VARCHAR2(13),
DATE_OF_STAT DATE,
DMY_OF_STAT VARCHAR2(30),
TIME_OF_STAT VARCHAR2(30));
その後、Oracle 外部ジョブを作成しました。
BEGIN
DBMS_SCHEDULER.CREATE_JOB
(job_name=>'ACCUMULATE_UNDOSTAT',
repeat_interval =>'FREQ=DAILY; BYHOUR=05,11,17,23',
job_type=>'EXECUTABLE',
job_action=>'/home/oracle/scripts/UNDOSTAT/accumulate_undostat_111.bsh',
enabled =>TRUE,
auto_drop=>FALSE,
comments=>'Take accumulate statistics from V$UNDOSTAT to
SYS.TB_UNDOSTAT one time through 6 hours On 111 Server'
);
END;
Accumulate_undostat_111.bsh ファイルの内容は次のとおりです。
#!/bin/bash
export ORACLE_HOME=/u01/home/oracle/product/11.2.0/db_1
export ORACLE_SID=parustest
export PATH=$ORACLE_HOME/bin:$PATH
sqlplus -s << EOF
/ as sysdba
INSERT INTO FGA_OWNER.TB_UNDOSTAT (MAX_UNDOBLKS, MAX_QUERY_LENGTH,
MAX_QUERY_ID, DATE_OF_STAT, DMY_OF_STAT, TIME_OF_STAT)
SELECT max(undoblks), max(maxquerylen), maxqueryid, sysdate, to_char(sysdate,'DD.MM.YYYY'),
to_char(sysdate,'HH24:MI:SS') FROM SYS.V_$UNDOSTAT GROUP BY maxqueryid;
COMMIT;
exit;
EOF
exit 0
ジョブは問題なく作成されました。必要なすべての権限が付与されています。しかし、シェル スクリプトをデバッグすると、いくつかの問題が発生します。
[oracle@parustest111 UNDOSTAT]$ bash -o xtrace accumulate_undostat_111.bsh + export ORACLE_HOME=/u01/home/oracle/product/11.2.0/db_1
+ ORACLE_HOME=/u01/home/oracle/product/11.2.0/db_1
+ export ORACLE_SID=parustest
+ ORACLE_SID=parustest
+ export PATH=/u01/home/oracle/product/11.2.0/db_1/bin:/u01/home/oracle/product/11.2.0/db_1/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/oracle/bin
+ PATH=/u01/home/oracle/product/11.2.0/db_1/bin:/u01/home/oracle/product/11.2.0/db_1/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/oracle/bin
+ sqlplus -s
to_char(sysdate,'HH24:MI:SS') FROM V_ GROUP BY maxqueryid
*
ERROR at line 4:
ORA-00942: table or view does not exist
Elapsed: 00:00:00.00
Commit complete.
Elapsed: 00:00:00.00
+ exit 0
[oracle@parustest111 UNDOSTAT]$
誰かが私を説明して助けてくれますか?ありがとうございました!