07/01
ORACLE
Difficile lavorare con Oracle – dalla prima versione era già buono, sicuro, sql non tanto. Instance –
l’utente si connetta. RAC: Real Application Cluster: più istance un database (se rompe, si rompe).
Streams: tante istance tante database: tutti gli utenti devono usare gli stessi dati, per questo streams
replica i dati di ogni database una volta che vengono modificati. Ha bisogno di una rete locale di
elevata capacità, minimo usare la fibra. Elevata disponibilità. DATA GUARD: 1 standby, 2
esecuzione.
CARTELLA:dbhomeXE\
CMD
C:\Users\Administrator>sqlplus /nolog
SQL> connect / as sysdba
*Utente tipo amministrativo e quello utente installa oracle: Amministratore sempre sysdba
SQL> sho user → USER Þ "SYS"
sho errors – errori delle procedure
sho sga -
Total System Global Area 645921624 bytes
Fixed Size 9857880 bytes
Variable Size 289406976 bytes
Database Buffers 343932928 bytes
Redo Buffers 2723840 bytes
sho parameters-→ parametri di inizializzazione
archive log list
SQL> SELECT parallel FROM v$instance; stiamo dentro un RAC?
select * from dba_streams_administrator; → stiamo dentro un stream?
→ Nessuna riga selezionata = no
select protection_level from v$database;
PROTECTION_LEVEL
--------------------
UNPROTECTED = non stiamo dentro un data guard
SMON: system monitor viene avviato a inizio serve per localizzare montare validare il controlfile e
poi apre il db.
*ControlFile, senza questo oracle si ferma.
PMON: Process monitor: monitorare i processi di sessione, controlla quello che fanno gli utenti,
risolve problemi di sessione
RECO: Recovery process: ripristina un db
ogni volta che oracle viene spento fa uno checkpoint
LGWR: logwriter: lavora sempre,
Redo Log Buffer è sempre 1/3 vuoto: le query sono cosi lunghe che possono occupare piu di 1/3
dello spazio.
MMAN: Memory Manager
MMNL
sho parameter control_files
Dove si trova un data file? → select name from v$datafile;
shutdown normal
Database chiuso.
NOMOUNT del database eseguito.
Istanza ORACLE chiusa.
Startup
come capire 99% dei problemi? → STARTUP NOMOUNT legge i parametri di inizializzazione e
avvia a distanza, file dei parametri di inizializzazione.
alter database mount; → errore? Controlfile il problema
alter database open; → errore? Apre tutti i quanti tipi file, problema? Tipifile.
SHUTDOWN!!
normal: default: chiude tutte le sezioni prima di spegnere la istanza
transactional: ← più usata: aspetta chiusura delle transazioni in corso, non accetta nuove sezioni,
non accetta nuove query.
Immediate: non accetta nuove connessione e neanche nuove query. Anche quelli non completate,
saranno annullate.
Abort: rimuove tutti i processi, e chiude, non aspetta niente. Come staccare la corrente.
-----------------------------------------------------08/01-----------------------------------------------------------
cercare sulla macchina virtuale, google: ‘oracle sample database download’
Github: Code: Download zip: estrai→ database de prova de oracle – human_resources
README:
C:\Users\Administrator\Downloads\human_resources – copia il percorso
SQL> exit
cd C:\Users\Administrator\Downloads\human_resources – incolla il percorso
sqlplus /nolog
connect / as sysdba
alter session set “_ORACLE_SCRIPT”=TRUE; (modificata sessione) default sono disabilitate –
possibile alterare solo per la sessione. Vale soltanto per l’utente connesso.
@hr_install.sql – password: 1234 – Invio – Invio Y
-ADESSO ABBIAMO IL DATABASE-
cd .. – fino ad administrator
sqlplus /nolog
connect / as sysdba
describe [Link] – con questa tabella capiamo che i dati sono stati importati
estrai sqldeveloper – altra cartella sqldeveloper – copia su desktop tutta la cartella – apre
applicazione sqldeveloper
finestra inutile – NO
apre per vedere se funziona
no registrazione ORACLE
chiude tutto e fai un’istantanea
avvia dc1, apre sqldeveloper
Nuovo/Seleziona database: hr connessione
utente hr
password: 1234 – test
errore connessione: a volte succede: cmd : lsnrctl status -
salva connetti
lsnrctl → programma listner, che aiuta a connettere a Oracle -start,stop, restart, status
→ archive log list : archiviazione automatica e stata abilitata, consente fari turi i tipi di backup
→select log_mode from v$database; : stessa identica informazione, se l’archivio e abilitato o no,
questo serve anche alle applicazione più vecchie
→shutdown immediate – l’istanza deve essere chiusa e riavviata facendo questo con...
→startup mount
i file dati sono ancora fermi
ABILITARE ARCHIVE LOG!!!
→alter database archivelog; abilita database
→alter database open; riavvia il db
→archive log list; : verifica se l’archiviazione è stata abilitata
REDO (Log Files e Archived Redo Log Files) é importante per fare un backup
BACKUP!!!
→exit
→rman target / - recovery manager
→ backup database;
Archived Redo Log Files vengono salvati spesso non si fa il backup di questi, ne di inizializzazione
RIPRISTINA BACKUP!!!
controlfile aperti
→ restore database;
→ recover database;
exit
sqlplus /nolog – connect / as sysdba – archive log list
alter database open;
C:\app\Administrator\product\21c\oradata\XE - creare cartella con il nome flashback
serve per contenere flashback db – riporta il db a un punto specifico/data, torna indietro ma torna
indietro anche il backup – si puo tornare indietro nel caso di un attacco hacker
query un singolo dato com’era un determinato giorno
tables…
FLASHBACK!!!
C:\app\Administrator\product\21c\oradata\XE\FlashBack
cmd: alter system set db_recovery_file_dest_size=10G;
alter system set db_recovery_file_dest='C:\app\Administrator\product\21c\oradata\XE\FlashBack';
alter database flashback on;
C:\app\Administrator\product\21c\database
SQL> alter system
2 set trace_enabled = false
3 scope = spfile;
Memoria: SQL> alter system
2 set trace_enabled = false
3 scope = memory;
------------------------09/01-------------------------------------------------------------
gestire in modo corretto undo – flashback
indici rendono piu veloce
sql – su oracle – ti da tutto il codice di come fare la tabella
ORACLE
between: 122 and 180…includono sempre gli estremi
like (come…)
% si mette per cercare qualcosa dopo il nome, una parte che non si conosce per intero
Mallin: ‘Ma%’ tutti i cognomi che iniziano per Ma… ‘%in’ tutti quelli che finiscono in -in-
(_) carattere joly che vale solo per uno carattere ‘A_k%’ trova AtKinson – underscore si mette la
quantità di uno solo carattere.
(OR) una o altra opzione
(IN) sostituto di OR (60,70,80)
SELECT * FROM employees e
JOIN departments d
ON e.department_id = d.department_id;
*inner join: ci mostra solo le righe correlate all’interno della tabella deparments
SELECT * FROM employees e
LEFT OUTER JOIN departments d
ON e.department_id = d.department_id;
le righe non correlate della tabella di sinistra
SELECT * FROM employees e
RIGHT OUTER JOIN departments d
ON e.department_id = d.department_id;
le righe non correlate della tabella di destra
SELECT * FROM employees e
FULL OUTER JOIN departments d
ON e.department_id = d.department_id;
SELECT first_name, last_name, TRUNC(salary/30), ROUND(salary/30,3)
FROM employees
ORDER BY salary DESC;
fa il truncamento, trunca la virgola e ci mostra la parte intera
alcuni funzioni, oltre la funzione, non possiamo mettere il nome delle colonne
SELECT UPPER(first_name), LOWER(first_name), INITCAP(LOWER(first_name))
FROM employees;
da uppercase tutto il nome
il modo delle lettere che voglio che si trasformi
trasforma minusculo first name, iniziale first name maiusculo
SELECT first_name || ' ' || last_name
FROM employees;
spazio tra nome e cognome
SELECT first_name || ' ---->' || last_name
FROM employees;
Ellen ---→Abel
SELECT first_name, LENGTH(first_name)
FROM employees
ORDER BY LENGTH(first_name) DESC;
Christopher 11: lunghezza in numeri del nome em ordem descendente
SELECT LENGTH(first_name)
FROM employees;
5 quanti carattere c’è un nome, ma in questo caso non c’è il nome, ossia la persona
c’è solo il numero
SELECT first_name
FROM employees
WHERE LENGTH(first_name) = 11;
Christopher/Jose Manuel
SELECT * FROM employees
WHERE last_name='Chung'
188 Kelly Chung KCHUNG 1.650.555.0153 14-GIU-15 SH_CLERK 3800
→ perfettamente identico
SELECT * FROM employees
WHERE last_name='Chung';
UPDATE employees SET salary = 5000
WHERE last_name='Chung';
188 Kelly Chung KCHUNG 1.650.555.0153 14-GIU-15 SH_CLERK 5000
SELECT * FROM employees
AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '1' DAY)
WHERE last_name='Chung';
188 Kelly Chung KCHUNG 1.650.555.0153 14-GIU-15 SH_CLERK 3800
SELECT * FROM employees
WHERE last_name='Chung';
UPDATE employees SET salary = (
SELECT salary FROM employees
AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '1' DAY)
WHERE last_name='Chung'
)
WHERE last_name='Chung';
SELECT SYSDATE FROM dual;
SELECT SYSTIMESTAMP FROM dual;
09-GEN-25 12:46:49,433000000 +01:00
13/01
modifica una riga
shutdown abort
startup mount
exit
rman target /
restore database;
alter
attacco hacker che non ha eseguito un’istruzione sql db, exit
flashbak database to timestamp(sysdate -1);
SQL> flashback database to timestamp(sysdate -1);
SQL> alter database open resetlogs;
backup prima del flashback – perché questo elimina i file del log
extent: quantità minima di spazio di cui il file può essere steso
SQL> select segment_type, count(1)
2 from dba_segments
3 group by segment_type;
SEGMENT_TYPE COUNT(1)
------------------ ----------
CLUSTER 10
INDEX 1818
TABLE 1657
LOBSEGMENT 584
LOBINDEX 584
TABLE PARTITION 603
INDEX PARTITION 484
LOB PARTITION 23
NESTED TABLE 8
TABLE SUBPARTITION 32
SYSTEM STATISTICS 1
SEGMENT_TYPE COUNT(1)
------------------ ----------
ROLLBACK 1
TYPE2 UNDO 10
13 righe selezionate.
CREARE TABLESPACE
SQL> create smallfile tablespace "prova"
2 datafile 'C:\app\Administrator\product\21c\oradata\XE\[Link]'
3 size 100M autoextend on next 10M maxsize 200M
4 logging
5 extent management local
6 segment space management auto
7 default nocompress;
Creata tablespace.
SQL> alter tablespace "prova"
2 add datafile 'C:\app\Administrator\product\21c\oradata\XE\[Link]'
3 size 100M;