Windows と AIX で実行されるサーバー アプリケーションがあります。クライアント アプリケーションが Windows で実行されているインスタンスに接続し、クエリをサーバー側に送信するレポートを実行すると、すべてがうまくいきますが、クライアント アプリケーションがサーバー インスタンスに接続すると、 AIX で実行され、サーバー側に同じクエリを送信する同じレポートを実行すると、アプリケーションがハングします。
調査の結果、sqlplus を使用して AIX のコマンド ラインからクエリを直接実行したため、クエリがハングの原因であることがわかりました。
DB は、Windows Server を搭載した別のマシンで実行されている Oracle であることに注意する必要があります。
私が話しているクエリは次のとおりです。
select z_name, s_date,
n_count, f_count, m_count, s_count, d_count, a_count,
(n_count + f_count + m_count + s_count + d_count + a_count) as d_total
from
(select z_name, s_date,
nvl((select s_count from vReport S1 where S1.z_id = S.z_id and S1.s_date = S.s_date and s_app = 'NC'), 0) as n_c_count,
nvl((select s_count from vReport S1 where S1.z_id = S.z_id and S1.s_date = S.s_date and s_app = 'FS'), 0) as f_s_count,
nvl((select s_count from vReport S1 where S1.z_id = S.z_id and S1.s_date = S.s_date and s_app = 'MC'), 0) as m_c_count,
nvl((select s_count from vReport S1 where S1.z_id = S.z_id and S1.s_date = S.s_date and s_app like 'SAA %'), 0) as s_c_count,
nvl((select s_count from vReport S1 where S1.z_id = S.z_id and S1.s_date = S.s_date and s_app = 'DC'), 0) as d_c_count,
nvl((select s_count from vReport S1 where S1.z_id = S.z_id and S1.s_date = S.s_date and s_app = 'SA'), 0) as a_c_count,
nvl((select sum(s_count) from vReport S1 where S1.z_id = S.z_id), 0) as d_total
from rvReport S
where s_date between TO_DATE('2012-08-01 00:00:00','YYYY-MM-DD HH24:MI:SS') and TO_DATE('2012-08-02 23:59:59','YYYY-MM-DD HH24:MI:SS')
and z_id in (3,61,41,21)
union
select distinct z_name, SYSDATE,
nvl((select sum(s_count) from vReport S1 where S1.z_id = S.z_id and s_app = 'NC' and s_date between TO_DATE('2012-08-01 00:00:00','YYYY-MM-DD HH24:MI:SS') and TO_DATE('2012-08-02 23:59:59','YYYY-MM-DD HH24:MI:SS')), 0) as n_c_count,
nvl((select sum(s_count) from vReport S1 where S1.z_id = S.z_id and s_app = 'FS' and s_date between TO_DATE('2012-08-01 00:00:00','YYYY-MM-DD HH24:MI:SS') and TO_DATE('2012-08-02 23:59:59','YYYY-MM-DD HH24:MI:SS')), 0) as f_s_count,
nvl((select sum(s_count) from vReport S1 where S1.z_id = S.z_id and s_app = 'MC' and s_date between TO_DATE('2012-08-01 00:00:00','YYYY-MM-DD HH24:MI:SS') and TO_DATE('2012-08-02 23:59:59','YYYY-MM-DD HH24:MI:SS')), 0) as m_c_count,
nvl((select sum(s_count) from vReport S1 where S1.z_id = S.z_id and s_app like 'SAA %' and s_date between TO_DATE('2012-08-01 00:00:00','YYYY-MM-DD HH24:MI:SS') and TO_DATE('2012-08-02 23:59:59','YYYY-MM-DD HH24:MI:SS')), 0) as s_c_count,
nvl((select sum(s_count) from vReport S1 where S1.z_id = S.z_id and s_app = 'DC' and s_date between TO_DATE('2012-08-01 00:00:00','YYYY-MM-DD HH24:MI:SS') and TO_DATE('2012-08-02 23:59:59','YYYY-MM-DD HH24:MI:SS')), 0) as d_c_count,
nvl((select sum(s_count) from vReport S1 where S1.z_id = S.z_id and s_app = 'SA' and s_date between TO_DATE('2012-08-01 00:00:00','YYYY-MM-DD HH24:MI:SS') and TO_DATE('2012-08-02 23:59:59','YYYY-MM-DD HH24:MI:SS')), 0) as a_c_count,
nvl((select sum(s_count) from vStats S1 where S1.z_id = S.zone_id and s_date between TO_DATE('2012-08-01 00:00:00','YYYY-MM-DD HH24:MI:SS') and TO_DATE('2012-08-02 23:59:59','YYYY-MM-DD HH24:MI:SS')), 0) as z_total
from rvReport S
where s_date between TO_DATE('2012-08-01 00:00:00','YYYY-MM-DD HH24:MI:SS') and TO_DATE('2012-08-02 23:59:59','YYYY-MM-DD HH24:MI:SS')
and z_id in (3,61,41,21)
) STEMP
注: 言い忘れましたが、ユニオンを削除した後の select ステートメントの "and z_id in (3,61,41,21)" という条件を指定すると、クエリは AIX で実行され、ハングすることはありませんが、返されます。間違ったデータ。