joi, 11 iunie 2015

Oracle - how to kill a running select

It may come in handy when thniks go crazy.

1. To find the sid, session id, and the serial#, serial number run the following select:
select s.sid, s.serial#, p.spid, s.username, s.schemaname
     , s.program, s.terminal, s.osuser
  from v$session s
  join v$process p
    on s.paddr = p.addr
 where s.type != 'BACKGROUND'
 and s.username = 'FEES';
2.Kill the session
 alter system kill session 'sid,serial#' immediate;

The source of the solution

Bancul zilei:
La deschiderea unui heapdump primesc eroarea de OutOfMemoryError.

miercuri, 2 mai 2012

ORA-12519

Rezolvarea pentru eroarea asta:

ALTER SYSTEM SET PROCESSES=150 SCOPE=SPFILE;
sau modificat direct in fisierul de configurare init.ora

LDAP

LDAP = Lightweight Directory Access Protocol

Purpose

The Lightweight Directory Access Protocol (LDAP) is a directory service protocol that runs on a layer above the TCP/IP stack. It provides a mechanism used to connect to, search, and modify Internet directories.

The LDAP directory service is based on a client-server model. The function of LDAP is to enable access to an existing directory.

The data model (data and namespace) of LDAP is similar to that of the X.500 OSI directory service, but with lower resource requirements. The associated LDAP API simplifies writing Internet directory service applications.

Where applicable
The LDAP API is applicable to directory management and browser applications that do not have directory service support as their primary function. Conversely, LDAP is neither applicable to creating directories, nor specifying how a directory service operates.

Developer audience

The LDAP API documentation in the Platform Software Development Kit (SDK) is intended for experienced C and C++ programmers and Internet directory developers.

LDAP supports the C and C++ programming languages.

A familiarity with directory services and the LDAP Client/Server Model are necessary for the development with the LDAP API.

Run-time requirements
Client applications that use the LDAP API, run on Windows Vista, Windows XP, and Windows 2000. All platforms must have TCP/IP installed.
Active Directory servers that support client applications using the LDAP API include Windows Server 2008, Windows Server 2003, and Windows 2000 Server.


wiki
msdn

luni, 5 septembrie 2011

Oracle Validare Rapida pe Insert

O varianta prescurtata pentru validarea existentei unei inregistrari in momentul in care se doreste a se face un insert intr-o tabela:


INSERT INTO tabela
(id, label, status)
SELECT 1, 'label value', 'done'
FROM dual
WHERE not exists (select * from tabela
where tabela.id = 1 and tabela.label =
'label value' and tabela.status = 'done');


In exemplul de mai sus, in cazul in care exista o inregistrare cu valorile pe acre dorm sa le scriem nu se va insera o noua inregistrare, in caz contrar se va insera o inregistrare noua in tabela.

marți, 14 iunie 2011

iar oracle...

Pentru ca sunt nevoita sa lucrez pe masini virtuale si pentru ca am prea putin spatiu pentru "manevre" (a se citi instalari si drepturi) m-am lovit de o problema destul de stupida. Un listener de oracle imi tine ocupat portul 8080 si cand vreau sa pornesc tomcat-ul se plange ca nu poate porni pentru ca cineva ii tine ocupat portul.

Varianta care mi s-a parut mie mai la indemana(poate nu e pentru toata lumea) a fost schimbarea portului la listener, nu de alta, dar nu prea vad ce cauta el pe 8080. Asa ca am gugalit un pic si am gasit urmatoarele:


-- se schimba portul din 8080 in 8081
call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(), '/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()', 8081));

commit;

EXEC dbms_xdb.cfg_refresh;


Toate astea binenteles dupa ce te-ai logat ca dba. Daca exista in dotare un TCPView sau ceva asemanator, la o examinare "before/after" se observa ca listener-ul s-a mutat cuminte pe portul 8081. Alegerea portului ramane la latitudinea fiecaruia ca aici e chestie de gust/administrare/nevoi etc.

vineri, 14 mai 2010

Explicatia zilei

M-am lovit si eu zilele astea de eroarea asta in oracle: ORA-06502: PL/SQL: numeric or value error: character string buffer too small.

Am cautat pe net sa vad despre ce ar putea fi vorba, nu de alta, dar in ciuda faptului ca pare evident, avand in vedere ca e vorba de oracle te poti astepta la tot felul de surprize.
Pe un blog, un om disperat deja de faptul ca nu ii putea da de capat a intrebat si el de ce se comporta asa oracle, raspunsul care mi s-a parut cel mai interesant, nu stiu daca si neaparat cel mai inteligent:
"Because Oracle is shitty that’s why".

As traduce, dar cei interesati mai mult ca sigur au inteles.

Ca sa revenim la eroarea/oroarea noastra, va dau un sfat: niciodata nu incercati sa creati stringuri kilometrice(la propriu) pe care s aincercati apoi sa le executati intr-o procedura, chiar daca la o prima privire pare cea mai usoara/rapida solutie, da chiar niciodata.

In alta ordine de idei, tot cautand azi pe net am gasit pe o gramada de site-uri o varianta de a verifica in oracle daca o tabela deja exista.

begin
select count(*) into cnt from all_tables
where table_name = 'test.table1';

Ei bine in cazul meu nu a prea functionat asa ca va recomand urmatoarea versiuen testata si verificata de moi:


EXECUTE IMMEDIATE 'select count(table_name) from ALL_TABLES
where
owner = upper(:1) and
table_name = upper(:2)'
INTO existTbl
USING p_schemaName, 'tempcandidates';

if existTbl = 0 then
EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE IF NOT EXISTS tempcandidates (
val VARCHAR(255),
cnt NUMBER(10))
ON COMMIT DELETE ROWS';
end if;