Difference between revisions of "Oracle errors"

From dbawiki
Jump to: navigation, search
Line 1: Line 1:
 +
===ORA-00054: resource busy and acquire with NOWAIT specified===
 +
<pre>
 +
SELECT O.OBJECT_NAME, S.SID, S.SERIAL#, P.SPID, S.PROGRAM,S.USERNAME,
 +
S.MACHINE,S.PORT , S.LOGON_TIME,SQ.SQL_FULLTEXT
 +
FROM V$LOCKED_OBJECT L, DBA_OBJECTS O, V$SESSION S,
 +
V$PROCESS P, V$SQL SQ
 +
WHERE L.OBJECT_ID = O.OBJECT_ID
 +
AND L.SESSION_ID = S.SID AND S.PADDR = P.ADDR
 +
AND S.SQL_ADDRESS = SQ.ADDRESS;
 +
</pre>
 +
<pre>
 +
select object_name, s.sid, s.serial#, p.spid
 +
from v$locked_object l, dba_objects o, v$session s, v$process p
 +
where l.object_id = o.object_id and l.session_id = s.sid and s.paddr = p.addr;
 +
</pre>
 +
then
 +
<pre>
 +
alter system kill session 'sid,serial#';
 +
</pre>
 +
 
===ORA-12514: TNS:listener does not currently know of service===
 
===ORA-12514: TNS:listener does not currently know of service===
 
Excellent description of how Oracle TNS listeners work and a checklist on how to fix this error
 
Excellent description of how Oracle TNS listeners work and a checklist on how to fix this error

Revision as of 10:21, 1 February 2013

ORA-00054: resource busy and acquire with NOWAIT specified

SELECT O.OBJECT_NAME, S.SID, S.SERIAL#, P.SPID, S.PROGRAM,S.USERNAME,
S.MACHINE,S.PORT , S.LOGON_TIME,SQ.SQL_FULLTEXT 
FROM V$LOCKED_OBJECT L, DBA_OBJECTS O, V$SESSION S, 
V$PROCESS P, V$SQL SQ 
WHERE L.OBJECT_ID = O.OBJECT_ID 
AND L.SESSION_ID = S.SID AND S.PADDR = P.ADDR 
AND S.SQL_ADDRESS = SQ.ADDRESS;
select object_name, s.sid, s.serial#, p.spid 
from v$locked_object l, dba_objects o, v$session s, v$process p
where l.object_id = o.object_id and l.session_id = s.sid and s.paddr = p.addr;

then

alter system kill session 'sid,serial#';

ORA-12514: TNS:listener does not currently know of service

Excellent description of how Oracle TNS listeners work and a checklist on how to fix this error

ORA-12547: TNS lost contact

If

sqlplus <user>/<pass>

fails with above error, try

sqlplus <user>/<pass>@<db connection>

If this works, it is most probably a permissions error.
Re-run the

$ORACLE_HOME/root.sh

script that was run as part of the original installation. This will reset the permissions on some important files.

Database trigger to capture ORA errors

From ora-ssn.blogspot.be

CREATE TABLE stats$error_log (
        err_dt          TIMESTAMP,
        db_user         VARCHAR2(30),
        msg_stack       VARCHAR2(2000),
        sqltxt          VARCHAR2(1000))
tablespace users;

Now, create a trigger on the database server.

CREATE OR REPLACE TRIGGER log_server_errors
  AFTER SERVERERROR
  ON DATABASE
DECLARE
          v_sqltext VARCHAR2(1000);
          nl_sqltext ora_name_list_t;
  BEGIN
          -- Capture entire error text
          FOR i IN 1 .. ora_sql_txt(nl_sqltext) LOOP
            v_sqltext := v_sqltext || nl_sqltext(i);
          END LOOP;
          INSERT INTO STATS$ERROR_LOG
          (err_dt, db_user, msg_stack, sqltxt)
          VALUES
          (systimestamp,
           sys.login_user,
           dbms_utility.format_error_stack, v_sqltext);
  END log_server_errors;
/