Post

Visualizzazione dei post da febbraio, 2021

RMAN Report

Il db da copiare è primary (container) mentre il pluggable database che contiene il catalogo è rcatpdb [oracle@rmancat admin]$ rman target sys/system@primary catalog rcatown/rcatown@rcatpdb Lista dei backup dei data file del container e dei pdb. RMAN> list backup of database; Sommario dei backup. RMAN> list backup summary; List of Backups =============== Key TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag ------- -- -- - ----------- --------------- ------- ------- ---------- --- 909 B F A DISK 18-FEB-21 1 1 NO TAG20210218T141107 ..................... 1982 B A A DISK 22-FEB-21 1 1 NO TAG20210222T165306 ............................... 2491 B F A  DISK   25-FEB-21       1       1       NO         TAG20210225T122314 TYPE=B vuole dire backup set LV= level: A archivelog, F datafile S = stato del backup: A sta per available Informazioni di uno specifico backupset RMAN> list backupset 2

Definire un Oracle Session Parameter per uno specifico utente

Se volgiamo effettuare una modifica di un parametro di sessione per un utente specifico, si può definire un trigger che imposta il parametro alla login dell'utente. Questo trigger scatta alla connessione del db di qualsiasi utente. L'utente dell'esempio è PIPPO. CREATE OR REPLACE TRIGGER set_parameter_PIPPO AFTER LOGON ON DATABASE DECLAREusername VARCHAR2(30); cmmd VARCHAR2(64); BEGIN cmmd:='alter session set NLS_DATE_FORMAT=''dd/mm/yyyy hh24:mi:ss'''; username:=SYS_CONTEXT('USERENV','SESSION_USER'); IF username = 'pippo' then EXECUTE IMMEDIATE cmmd; END IF; EXCEPTION WHEN OTHERS THEN NULL; END; / Se si vuole che il trigger scatti solo alla connessione dello specifico schema utilizzare la clausola "after logon on ...schema". CREATE TRIGGER PIPPO.set_parameter_schema_PIPPO AFTER LOGON ON PIPPO.SCHEMA DECLARE cmmd VARCHAR2(64); BEGIN cmmd:='alter session set NLS_DATE_FORMAT=''dd/mm/yyyy hh24:mi:ss''

NULL

Il valore NULL esiste nel modello relazionale come il databse Oracle. NULL non è paragonabile a nessun altro valore atomico NULL non è paragonabile a NULL NULL non supporta l'operatore di test di uguaglianza '=' NULL è verificabile in modo predicibile solo con l'operatori ' IS ' o come insieme derivato da precedenti operazioni di proiezione e selezione. Insomma, il NULL è comodo per esprimere un concetto fondamentale dell'algebra relazionale, ma è più difficile da gestire quando sono coinvolte operatori cosiddetti "di gruppo". Che succede ad esempio con la funzione MAX(), che valuta un set di valori e ritorna il più "alto"? Facciamo il caso di questa tabella: T1 ( C1 number, C2 varchar2(10) ) Se la tabella è vuota l'istruzione "select max (c1) from t1" ritorna una riga in cui la singola pseudo colonna max(c1) contiene il valore NULL. SQL> select max (c1) from t1;    MAX(C1) ---------- Se la tabella è vuota l'istruzio

Parametri nascosti

  SELECT name, value  from SYS.V$PARAMETER  WHERE name LIKE '\_%' ESCAPE '\' order by name;

Create RMAN catalog su PDB

Il catalogo è un repository dei metadati delle informazioni di backup dei database registrati. Contiene informazioni dei datafile, control file, spfile e archivelog, backup piece e backup set; la strutura dei database, stored script che contengono comandi RMAN e i parametri di configuraizone di RMAN (show all..) Creare un catalogo RMAN su un pluggable database. Creare un database "rmancat "(ad esempio) e un  pluggable "rcatpdb" su un server diverso da quello contenente il database da copiare. SQL> select name, open_mode from v$database; NAME   OPEN_MODE --------- -------------------- RMANCAT   READ WRITE SQL> show pdbs     CON_ID CON_NAME         OPEN MODE  RESTRICTED ---------- ------------------------------ ---------- ------------------------ 2 PDB$SEED   READ ONLY          NO 3 RCATPDB           READ WRITE        NO Cambiamo sessione: SQL> alter session set container = rcatpdb; Session altered. SQL> show con_name CON_NAME ------------

EXPLAIN PLAN ed EXECUTION PLAN

Immagine
L'istruzione EXPLAIN PLAN visualizza l'execution plan scelto da Oracle optimizer per l'istruzione di select, update, insert e delete. L' execution plan contiene la sequenza di operazioni eseguite da Oracle per far girare la statement. Quando usi Explain Plan, Oracle inserisce le informazioni dell'execution plan nella tabella PLAN_TABLE che deve esistere nel corrispondente user a cui appartiene la statement da analizzare. Creazione della tabella  <nome_schema>. PLAN_TABLE $ Sqlplus /as sysdba SQL> ALTER SESSION SET current_schema=<nome_schema>; SQL> @$ORACLE_HOME/rdbms/admin/utlxplan.sql Gernerare la explan plan SQL> explain plan for  <inseire la statemente da anlizzare> ; Per generare l'output a video: SQL> @$ORACLE_HOME/rdbms/admin/utlxpls.sql PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- ------------------------------------------------------------------------------- | Id  |

Report AWR per singola SQL statement

Per estrarre le statistiche storiche di una determinata istruzione sql già eseguita , senza avere tutte le informazioni estratte dal report AWR, eseguire lo script. cd $ORACLE_HOME/rdbms/admin SQL> sqlplus system/password@$ORACLE_SID @ awrsqrpt.sql Specificare sia gli   snap_id   nell'intervallo di esecuzione della query, che il   sql_id   della query stessa. Specify the Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Enter value for begin_snap: 30822 Begin Snapshot Id specified: 30822 Enter value for end_snap: 30823 End   Snapshot Id specified: 30823 Specify the SQL Id ~~~~~~~~~~~~~~~~~~ Enter value for sql_id: Il volre sql_id può essere estratto dal dizionario dati usando la query: SQL> select sql_id,sql_fulltext            from v$sql            where sql_text like '% ...%'; SQL> select sql_id, sql_text             from v$sqltext            where sql_text like '%...%'; Il report prodotto contiene informazioni specifiche della istruzio

SQL TUNING di una istruzione sql

 Il tuning task su una istruzione sql si chiama anche "SQL Tuning Advisor (STA)" ed  analizza solo una singola sql statement e fornisce raccomandazioni come migliorare le performance. ************************************ 1) Creare il tuning task ************************************ SET SERVEROUTPUT ON DECLARE l_sql_tune_task_id VARCHAR2(100); BEGIN l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task ( begin_snap  => 8901, end_snap  => 8902, sql_id  => 'af9kfdyxuj6aj', scope => DBMS_SQLTUNE.scope_comprehensive, time_limit => 1200, task_name => 'MY_tuning_af9kfdyxuj6aj', description => 'Tuning per lo statement af9kfdyxuj6aj'); DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id); END; / Usare " snap_id " degli AWR che puoi estarre lanciando lo script  awrrpt.sql  negli snapid corrispondenti al lasso di tempo in cui quella istruzione è stato eseguita. Per estrarre gli snap_id fai  SQL> exec dbms_w

Statistiche di uno schema

Immagine
export ORACLE_SID= sqlplus / as sysdba SQL> exec dbms_stats.gather_schema_stats(ownname => 'nome schema',cascade => TRUE);  Verificare che esiste un job automatico che si aggiorna quando c'è movimentazione significativa select * from DBA_AUTOTASK_CLIENT_HISTORY order by 3 desc;

The listener supports no services

 Dopo aver eseguito il comando # lsnrctl status ........... Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/oracle/product/12.2.0.1/db_1/network/admin/listener.ora Listener Log File /u01/app/oracle/diag/tnslsnr/rmancat/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rmancat.com.com)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) The listener supports no services The command completed successfully Questa situazione corrisponde ad un listener funzionante correttamente ma il processo di background non registra correttamente le istanze. Verificare che le istanze sia up e running e la configurazione dei file listener.ora e tnsnames.ora. Se dopo queste verifiche il problema sussiste controllare il parametro di inizializzazione  local_listener e assegnargli la stringa di connessione. SQL> show parameter local_listener NAME TYPE VALUE --