Post

Visualizzazione dei post da 2023

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

Durante l'aggiornamento o l'eliminazione della tabella nella transazione, è possibile ottenere l'errore ORA-01591: lock held by in-doubt distributed transaction    che significa che ci sono alcune transazioni non commitate nel database. Per risolvere questo problema è necessario eseguire il rollback o il commit force delle transazioni non impegnate. SQL> select 'rollback force '''||local_tran_id||''';' from DBA_2PC_PENDING where state='prepared'; rollback force '9.30.7011'; select 'commit force '''||local_tran_id||''';' from DBA_2PC_PENDING where state='prepared'; commit force '9.30.7011';

Cambio tablespace TEMP per ridurre la dimensione

-- situazione attuale: select tablespace_name,file_name,bytes,autoextensible from dba_temp_files TABLESPACE_NAME      FILE_NAME             BYTES AUT ------------------------------ -------------------------- TEMP                     /u01/app/oracle/oradata/PICPC19/PRO19/temp01.dbf                  34358689792 YES TEMP                           /u01/app/oracle/oradata/PICPC19/PRO19/temp02.dbf                  34358689792 YES --controllo se la stanno usando: SQL>  SELECT b.tablespace,b.segfile#,b.segblk#,b.blocks,a.sid,a.serial#, a.username,a.osuser, a.status FROM v$session a,v$sort_usage b WHERE a.saddr = b.session_addr; no rows selected -- ne creo un'altra SQL> CREATE TEMPORARY TABLESPACE TEMP1 TEMPFILE '/u01/app/oracle/oradata/PICPC19/PRO19/temp1_01.dbf' SIZE 2G autoextend on; -- la rendo di default SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP1; Database altered. --droppo la vecchia SQL> DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES; Tablespace

Processi Attivi sul server db

I processi attuali sono dati dalla somma dei - processi client attivi ps -ef | grep <SID> | grep -i LOCAL=NO | wc -l - processi di background ps -ef | grep <SID> | grep ora_ | wc -l Possiamo capire chi è la sessione oracle legata al processo del sistema operativo. SQL> Select s.sid from v$session s,v$process p where p.spid=PID and s.paddr=p.addr dove PID è recuperato dalla colonna PID del comando di prima "ps -ef....." Una volta recuperato il sid si può risalire alla username, machine , stato SQL> select username, machine, status, sql_id from v$session where sid= Risalgo al tipo di statement in corso SQL> select * from v$sql where sq_id= SQL> select * from v$sql_ext where sql_id=

Clonare un PDB remoto da un CDB a un altro CDB utilizzando il collegamento db

Valido da oracle 12. Collegarsi al cdb sorgente contenente il pdb da clonare SQL> show pdbs CON_ID    CON_NAME      OPEN MODE      RESTRICTED --------  ------------  -------------- -------------- 2         PDB$SEED      READ ONLY      NO 3         PDB1          READ WRITE      NO Il PDB1 deve essere in modalità READ WRITE SQL> alter pluggable database pdb1 close; Pluggable database altered. SQL> SQL> alter pluggable database pdb1 open; Pluggable database altered. Login to PDB1 container. i.e. PDB1 e creare l'utente cloneuser usato dal dblink creato su CDB2 SQL> alter session set container=pdb1; SQL> create user cloneuser identified by cloneuser; Grant create session and create pluggable database privileges to cloneuser. SQL> grant create session, create pluggable database to cloneuser; Controlla i privileges granted to the cloneuser. SQL> select * from dba_sys_privs where grantee = 'CLONEUSER'; Aprire PDB1 in modalità read only. SQL> alter

Definire un Database Services in a Single Instance Database

 Sul db con SID SVIL1901 aggiungiamo il serive name ESTA Vislaulizziamo i SERVICE NAME  esistenti che rappresenta il nome interno del servizio registrato nel dizionario dati SQL > SELECT name,  network_name  FROM   dba_services ORDER BY 1; Vedimao NETWORK_NAME, che representa il nome del servizio presentato dal listener. SQL > SELECT name,  network_name FROM   v$active_services ORDER BY 1; Creare il servizio SQL>  BEGIN   DBMS_SERVICE.create_service(     service_name => 'ESTA',     network_name => 'ESTA'   ); END; / Verifica che il serivizio è stato creato. SQL> SELECT name,  network_name  FROM   dba_services ORDER BY 1; Ora avviare il servizio di Network BEGIN   DBMS_SERVICE.start_service(     service_name => 'ESTA'   ); END; / Verifica che compare la riga di ESTA SELECT name, network_name FROM   v$active_services ORDER BY 1; Se si vede lo sato del listener compare il servizio nuovo $ lsnrctl status Copyright (c) 1991, 2022, Oracle. All

script Creazione Utente

vi create_user.sql set long 9999 set linesize 400 set pagesize 0 set trimspool on set verify off set serveroutput on size 100000 col usrddl format a400 col sysgrant format a400 col rolgrant format a400 col objgrant format a400 col spoolname new_value outname connect / as sysdba accept username prompt 'Utente: ' select 'create_user_&username' spoolname from dual ; exec dbms_metadata.set_transform_param(dbms_metadata.session_transform, 'SQLTERMINATOR', true); spool &&outname..sql select 'spool '||'&&outname'||'.log' from dual ; select 'REM CREATE USER' from dual ; select dbms_metadata.get_ddl('USER',upper('&username')) usrddl from dual ; select 'REM SYSTEM PRIVS' from dual ; select dbms_metadata.get_granted_ddl('SYSTEM_GRANT',upper('&username')) sysgrant from dual ; select 'REM ROLE PRIVS' from dual ; select dbms_metadata.get_granted_ddl('ROLE_GRANT'

ORA-07445: exception encountered: core dump [kkorminl()+317] [SIGSEGV] [ADDR: ] [PC: ] [Address not mapped to object]

Questo è l'errrore ricevuto: Exception [type: SIGSEGV, Address not mapped to object] [ADDR:0x7FFE12C1FFF8] [PC:0x9540CB7, kkorminl()+317] [flags: 0x0, count: 1] Errors in file /u01/app/oracle/diag/rdbms/rilp/RILP/trace/RILP_j003_3043.trc  (incident=12361): ORA-07445: exception encountered: core dump [kkorminl()+317] [SIGSEGV] [ADDR:0x7FFE12C1FFF8] [PC:0x9540CB7] [Address not mapped to object] [] Incident details in: /u01/app/oracle/diag/rdbms/rilp/RILP/incident/incdir_12361/RILP_j003_3043_i12361.trc Use ADRCI or Support Workbench to package the incident. See Note 411.1 at My Oracle Support for error and packaging details. Errore (con stack trace identico) riconducibile al Bug 18451758 come da nota ORA-7445 [kkorminl()+348] in 11.2.0.4.0 database (Doc ID 2435261.1) "This is a known issue documented in:   - Bug 18451758 - ORA-07445 [kkorminl()+306] soon after job SYS_AUTO_SQL_TUNING_TASK runs which was closed as duplicated of:   - Bug 17339455 - ORA-600 [qerixAddNotNullStopKeyPr

Install Oracle Client 19c on Linux

Immagine
  Da questo link effettuare il download di Basic Package https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html Seguire la guida installazione https://docs.oracle.com/en/database/oracle/oracle-database/21/lacli/install-instant-client-using-zip.html#GUID-D3DCB4FB-D3CA-4C25-BE48-3A1FB5A22E84 Scaricare il file zip sotto la directory /opt/oracle/ instantclient_19_19 E fare unzip <file scricato precedentemente> sh -c "echo /opt/oracle/instantclient_19_19 >   /etc/ld.so.conf.d/oracle-instantclient.conf" export PATH=/opt/oracle/instantclient_19_19:$PATH export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_19:$LD_LIBRARY_PATH Effettuare il download di SQL*PLUS Unzippare sotto /opt/oracle/instantclient_19_19 Configurare tnsnames.ora che è sotto /opt/oracle/instantclient_19_19/network/admin

Autorizzare l'apertura di X11 su utente oracle

 [root@oradbs01 ~]# xauth list $DISPLAY oradbs01.dominio.it/unix:12  MIT-MAGIC-COOKIE-1  819364fe68175300a548cb89795af4a5 [root@oradbs01 ~]# echo $DISPLAY localhost:12.0 [root@oradbs01 ~]# su - oracle oracle@oradbs01:/home/oracle> xauth add oradbs01.dominio.it/unix:12  MIT-MAGIC-COOKIE-1  819364fe68175300a548cb89795af4a5 oracle@oradbs01:/home/oracle> export DISPLAY=localhost:12.0 Ora se faccio xclock funziona

SQLTRPT - SQL Tuning Advisor for the sql_id

Esempio fare sql tuning di 1w1r2psjrds21 # sqlplus   Enter user-name: /as sysdba Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options ##creare un file di  spool dove scrivere l'esito dell'Advisor SQL> spool sqltrpt_1w1r2psjrds21.txt SQL> @?/rdbms/admin/sqltrpt.sql 15 Most expensive SQL in the cursor cache ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SQL_ID           ELAPSED SQL_TEXT_FRAGMENT ------------- ---------- ---------------------- ..... ... ##### Viene chiesto di inserire sqlid  Specify the Sql id ~~~~~~~~~~~~~~~~~~ Enter value for sqlid: 1w1r2psjrds21 Sql Id specified: 1w1r2psjrds21 Tune the sql ....... SQL> spool off;

Evento in WAIT - library cache pin - durante compilazione o esecuzione VIEW o PL/SQL

 Se dalla tabella seguente abbiamo a colonna event = WAIT select *  from  V$session where  event like 'library%' oppure select *  from  V$session where  event ='library cache pin' Vuol dire che che c'è un evento di WAIT nella Oracle library cache pin causato da contese della library cache, l'area usata per memorizzare gli eseguibili SQL che possono essere riutilizzati. Vuol dire che c'è un processo che blocca un oggetto in memoria nella Library chace assicurando che nessun altro processo possa aggiornare l'oggetto contemporaneamente. La library cache pin wait avviene di solito quando  si compila o esegue una a PL/SQL object o una  VIEW. Occorre trovare la sessione che sta bloccando la mia sessione in corso. select    sid,    event,    p1raw,    seconds_in_wait,    wait_time from    v$session_wait where    event = 'library cache pin' and    state = 'WAITING'; select decode(lob.kglobtyp, 0, 'NEXT OBJECT', 1, 'INDEX', 2, '

AUDIT: script automatico cancellazione audit

Creare uno script a crontab di cancellazione dei file di audit più vecchi di x gg sull'istanza DEEPS # su - oracle # crontab -l 01 01 * * * /u01/app/oracle/work/delete_audit.sh 1>/dev/null 2>&1 Individuare la direcotry di audit # show parameter audit_ #  chmod 755 delete_audit.sh # cat delete_audit.sh #!/bin/bash -x export retention=60 export DEEPS=/u01/app/oracle/admin/DEEPS/adump  find $DEEPS  -name "DEEPS*.aud" -type f -ctime +$retention -exec rm {} \; exit

Performance Monitoring in tempo reale

  select s.inst_id,       s.sid,       s.serial#,       s.sql_id,       s.USERNAME,       substr(sqls.sql_text,0,50) as sql_text,       s.service_name,       s.status,       s.seconds_in_wait,       s.WAIT_TIME,       s.last_call_et,       s.machine,       s.program,       s.event,       s.blocking_session,       s.final_blocking_session,       s.blocking_session_status,       s.FINAL_BLOCKING_SESSION_STATUS     --sqls.plan_hash_value       from gv$session s, gv$sqlarea sqls where 1=1 and s.status='ACTIVE' --and s.username <> 'SYS' and s.username <> 'HR' and username not in (select username from dba_users where ORACLE_MAINTAINED='Y') and s.sql_id=sqls.sql_id and S.SQL_ADDRESS = SQLS.ADDRESS   and S.SQL_HASH_VALUE = SQLS.HASH_VALUE  -- and s.sid=46468 order by last_call_et desc;