Manually restart the dispatcher
Oracle Dispatcher in alert log is in hanged state. I manually restart the dispatcher with the following commands.
Handle following error in alert log:
–found dead dispatcher ‘D002’
–Waiting for dispatcher ‘D000’ to shutdown
–ORA-00603: ORACLE server session terminated by fatal error
–ORA-00600: internal error code, arguments: [kjpcre2], [], [], [], [], []
Check the status of dispatcher from following views:
select name, status ,accept ,network from v$dispatcher;
Example:
SQL> select name, status ,accept ,network from v$dispatcher;
NAME STATUS ACC NETWORK
---- ------ --- --------------------------------------------------------
D000 WAIT NO (ADDRESS=(PROTOCOL=tcp)(HOST=IXC.oracle.com)(PORT=61831))
Note: Dead dispatcher output is status = refuse and accept = NO it means dispatcher is dead.PMON process automatically handle the Dead dispatcher process it restart it when such a condition is arise. You can also do it manually to shutdown the dead processes explicitly. PMON will restart it automatically
Manually down the dispatcher if PMON is not handle
-- Shutdown the dispatcher 'D000'
SQL> alter system shutdown immediate 'D000';
System altered.
--Check the status of dispatcher after shutdown it.
SQL> select name, status ,accept ,network from v$dispatcher;
NAME STATUS ACC NETWORK
---- --------- --- ---------------------------------------------------------
D000 TERMINATE NO (ADDRESS=(PROTOCOL=tcp)(HOST=IXC.oracle.com)(PORT=61831))
--After few seconds it will show no dispatcher is running:
SQL> select name, status ,accept ,network from v$dispatcher;
no rows selected
Check the default parameter settings
SQL> show parameter dispatcher
NAME TYPE VALUE
---------------- -------- ------------------------------
dispatchers string (PROTOCOL=TCP) (SERVICE=XEXDB)
max_dispatchers integer
Start the dispatcher process manually if PMON is not started it
Note: We used scope in memory so it does not effect your default setting in spfile when system reboot it goes to default setting.
-- For single dispatcher
ALTER SYSTEM SET DISPATCHERS="(ADDRESS=(PROTOCOL=TCP)(CONNECTIONS=500)(HOST=IXC.oracle.com))(SERVICE=XEXDB)" SCOPE=MEMORY;
--Run multiple dispacter than add parameter dispatcher with value means no of dispatcher started
ALTER SYSTEM SET DISPATCHERS="(ADDRESS=(PROTOCOL=TCP)(CONNECTIONS=500)(HOST=IXC.oracle.com))(DISPATCHERS=5)(SERVICE=XEXDB)" SCOPE=MEMORY;
Check status of multiple dispatcher started
SQL> select name, status ,accept ,network from v$dispatcher;
NAME STATUS ACC NETWORK
---- ------ --- ---------------------------------------------------------------
D000 WAIT YES (ADDRESS=(PROTOCOL=tcp)(HOST=IXC.oracle.com)(PORT=60413))
D001 WAIT YES (ADDRESS=(PROTOCOL=tcp)(HOST=IXC.oracle.com)(PORT=60414))
D002 WAIT YES (ADDRESS=(PROTOCOL=tcp)(HOST=IXC.oracle.com)(PORT=60415))
D003 WAIT YES (ADDRESS=(PROTOCOL=tcp)(HOST=IXC.oracle.com)(PORT=60419))
D004 WAIT YES (ADDRESS=(PROTOCOL=tcp)(HOST=IXC.oracle.com)(PORT=60420))