Post

Visualizzazione dei post da maggio, 2022

ORA-01591: lock held by in-doubt distributed transaction

L'errore "ORA-01591: blocco trattenuto da transazione distribuita in dubbio", significa che nel database sono presenti alcune transazioni non committate. C'è stato un tentativo di accesso a una risorsa bloccata da una transazione di commit a due fasi (two-phase commit trnsaction) morta che è in stato "prepared". È necessario eseguire il "rollback force" o il "commit force" per le transazioni non committate per risolvere questo problema. Query per individuare le transazioni non committate o pending (in sospeso) con il seguente script che genera anche il comando di forza di rollback SQL> select 'rollback force '''||local_tran_id||''';' from DBA_2PC_PENDING where state='prepared'; SQL> select 'commit force '''||local_tran_id||''';' from DBA_2PC_PENDING where state='prepared'; Che cos'è una in-doubt distributed transaction ? Le transazioni distribuite po

Mettere sotto trace un DB

 Mettere sotto trace un instanza. 1) Accedere come sys ed avviare la trace. SQL>  EXEC DBMS_System.Set_Ev(304, 30209, 10046, 12, ''); 2) Lanciare la sessione da monitorare che in questo caso potrebbe essere anche una procedura lanciata via web dall'applicazione:  3) Al termine della procedura chiudere la trace  SQL>  EXEC DBMS_System.Set_Ev(304, 30209, 10046, 0, ''); 4) Creare il report con il seguente comando: tkprof <trace_file_nm>.trc <output_rpt_nm>.txt

Mettere sotto TRACE una sessione / sql - TKPROF

Rientra nelle tecnince di SQL Tuning, E' vantaggioso perchè individua tutte le sql statements eseguite tra lo start e la fine del trace. E' un tool free ma occorre avere le grant di dba. Il file TKPROF contiene queste info call     count       cpu    elapsed       disk      query    current        rows ------- ------  -------- ---------- ---------- ---------- ----------  ----------------------------------------- Parse        1      0.01       0.00          0          0          0           0 Execute      1      0.00       0.00          0          0          0           0 Fetch        6      0.38       0.38          0       8133          0          66 ------- ------  -------- ---------- ---------- ---------- ----------  ----------------------------------------- total        8      0.39       0.39          0       8133          0          66 count    = number of times OCI procedure was executed - parse time  --> se molto alto suggerisce di controllare il sistema piuttosto che

TRANSAZIONI DISTRIBUITE - DBA_2PC_PENDING

To View the pending transactions: SELECT LOCAL_TRAN_ID, GLOBAL_TRAN_ID, STATE, MIXED, COMMIT# FROM DBA_2PC_PENDING; SQL> select 'rollback force '''||local_tran_id||''';' from DBA_2PC_PENDING where state='prepared'; SQL> rollback force '10.26.7211'; The actual transaction entry view is X$KTUXE  ([K]ernel [T]ransaction [U]ndo Transa[X]tion [E]ntry) where the columns correspond to the following sections of the transaction id: select ktuxeusn, ktuxeslt, ktuxesqn, /* transaction id */ ktuxesta status, ktuxecfl flags from x$ktuxe where ktuxeusn= 10 and ktuxeslt= 26;--- and ktuxesqn=7211; Solution 1 to Condition 1: se una riga della DBA_2PC_PENDING non è in x$ktuxe e lo state of the transaction (in DBA_2PC_PENDING) è committed, rollback forced or commit forced then it can be cleaned by: SQL>  select 'EXECUTE DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY( ''' ||local_tran_id||''');'   from DBA_2PC_PENDING ; SQL

Forzare l'uso di un INDICE in una query - HINT

Il seguente comando forza l'Optimizer ha utilizzare l'indice PK_SERVIZIO  della tabella servizi. L'HINT quindi forza l'optimizer ad usare un altro piano di esecuzione. Non è detto che se è presente un HINT l'Optimizer lo usa perchè valuta se Hint ha senso. SELECT /* + INDEX  (ser PK_SERVIZIO) */ ut.id_utente, ser.id_servizio ................................ FROM servizi ser, utenti ut, ................... Questo è un esempio di come l'uso di PARALLEL migliora le performance di una query, e abbassa i costi /* Another example with multiple joins, groups etc. But with no hint*/ SELECT customers.cust_first_name, customers.cust_last_name,    MAX(QUANTITY_SOLD), AVG(QUANTITY_SOLD) FROM sales, customers WHERE sales.cust_id=customers.cust_id GROUP BY customers.cust_first_name, customers.cust_last_name;   /* Performance increase when performing parallel execution hint*/ SELECT /*+ PARALLEL(4) */ customers.cust_first_name, customers.cust_last_name,    MAX(QUANTITY_SOLD

TNS-12518 TNS listener could not hand off client connection

ORA-12518/TNS-12518 indica un problema mentre il listener trasferisce la connessione client al processo del server o al processo del dispatcher. TNS-12518 viene registrato nel registro del listener. Il client potrebbe ricevere ORA-12518 o altri errori di disconnessione come ORA-12537.  Come vengono effettivamente effettuate le connessioni al database? Dedicated mode, il client contatta il listener e fornisce il SERVICE NAME del database. Quindi il listener genera un server process dedicato e trasferisce la connessione client a questo processo server dedicato. TNS-12518 indica un problema durante il trasferimento della connessione client al processo server. Shared Server mode,  il client del database contatta il listener e fornisce il  SERVICE NAME del database. Quindi il listener trasferisce la connessione client a uno dei dispatcher configurati per quel servizio. TNS-12518 indica un problema durante il trasferimento della connessione client al processo del server di distribuzione. S

DB version

Oracle Database relase è individuato dal valore version_full della tabella  V$INSTANCE. La versione è indicata nella seguente forma:  major release numeral.0.0.0.0 - 1 - major release numeral è l'anno di rilascio del database software -2- release update version (RU)  trimestrale -3- release updates revision (RUR) trimestrale -4- oracle Database increment version. Questa nomenclatura può essere applicata agli aggiornamenti nelle versioni future e si applica a tutte le versioni precedenti alla 18c. Ad esempio: 12.1.0.1, 12.2.0.1 -5- questo numero è riservato per scopi futui Ad esempio 18.2.1 Indica un database 18 release 2, update revision 1

ACL da oracle 12c

Immagine
Il package DBMS_NETWORK_ACL_ADMIN fornisce un interfaccia per amministrare network access control lists (ACL). ACLs sono usati per controllare l'accesso degli utenti a servizi e risorse di rete esterna  dal database attravero delle utility package PL/SQL di rete che includono UTL_TCP , UTL_HTTP , UTL_SMTP and UTL_INADDR .   Oracle recommanda di non usare sottoprogrammi deprecati in nuove applicazioni. Il support per deprecated features è soltanto disponibile per backward compatibility. I seguenti sottoprogrammi pacchetto DBMS_NETWORK_ACL_ADMIN PL/SQL sono deprecati dalla release Oracle Database 12c: CREATE_ACL Procedure ADD_PRIVILEGE Procedure DELETE_PRIVILEGE Procedure ASSIGN_ACL Procedure DROP_ACL Procedure ASSIGN_WALLET_ACL Procedure CHECK_PRIVILEGE Function CHECK_PRIVILEGE_ACLID Function UNASSIGN_ACL Procedure UNASSIGN_WALLET_ACL Procedure Sono stati sostituite con nuovi equivalenti.  Quando viene effettuato un upgrade da 11g a version 12c o più alte gli ACLs mancano Gli ACLs d

CONSTRAINT: individua le FOREIGN KEY associate ad una tabella

Per individuare le fk associate ad una tabella: select c.owner , c.table_name, c.constraint_name from ALL_CONSTRAINTS c where r_constraint_name in ( select constraint_name from all_constraints where owner ='<schema>' --and constraint_type <> 'R' and table_name='<nometabella>' ) and c.constraint_type ='R';