Lucrăm cu Oracle. limbaj de programare SQL

An fabricatie: 2002

Editura: Gelios ARV

Format: PDF

Cartea „Working with Oracle” este o introducere rapidă în metodele și instrumentele DBMS-ului distribuit Oracle. Sunt luate în considerare bazele metodologice ale procesării informației distribuite și principalele obiecte ale bazei de date Date Oracle, limbajul SQL este mijlocul de bază de interacțiune cu serverul de baze de date și extensia sa procedurală PL/SQL. Există posibilitatea de a obține cunoștințe aprofundate despre folosind SQL pentru lucrul cu baze de date mari. O atenție deosebită este acordată tehnologiilor Oracle care asigură securitatea și integritatea datelor în condiții de acces multi-utilizator. Cartea conține, de asemenea, o descriere a instrumentelor concepute pentru a crea aplicații în limbajul Java. Cartea se adresează studenților, tinerilor profesioniști și tuturor celor care doresc să se familiarizeze cu Oracle - un DBMS distribuit pentru prelucrare eficientă date.

ABC-ul lui Oracle

Prefață la a doua ediție

Mulțumiri

Secțiunea 1. Arhitectura sistemelor distribuite de prelucrare a datelor

Instrumente de prelucrare a datelor: evoluția ideilor și sistemelor

Evoluția SGBD-ului relațional pe fundal Istoria Oracolului

Oracolul 8 . Caracteristici cheie

Arhitecturi de prelucrare a datelor

Local retele de calculatoare ca mediu de transmisie a datelor

Model de referinta interacțiuni sisteme deschise

Componente sistem distribuitși EMVOS

Configurare componenta de retea Oracol

Arhitectura serverului Oracle

Utilizarea SQL*Plus Workbench

Informații despre rezultatele operației

Suport multilingv în Oracle

Convenții adoptate pentru a descrie comenzi

Secțiunea 2. SQL - Oracle Data Processing Language

Oracle Core Objects

Instrumente de manipulare a datelor SQL

Structura cererii

Cele mai simple interogări

Formare criterii de selecție,

Mijloace de bază pentru determinarea criteriilor de selecție

Oracle Data Description Language

Tipuri de date Oracle

Șiruri de caractere

Tipuri numerice

RÂNDUL

șiruri de biți

data si ora

LOB-uri

Mese. Reprezentare. Utilizatori

Crearea și ștergerea tabelelor în Oracle

Mijloace pentru definirea și distrugerea vederilor

Instrumente de înregistrare și excludere a utilizatorilor

Operație de inserare a rândurilor

Operație de ștergere a rândurilor

Operație de modificare a șirurilor

Predicate speciale SQL

Predicat IN

Predicat INTRE

LIKE predicat

Predicatul ESTE NUL

Predicatul EXISTĂ

Predicate cu cuantificatori TOATE, ORICE și CEVA

Operații teoretice de mulțimi

Îmbinare exterioară

Triere

Ierarhii

Gruparea și funcții agregate

Sintaxa limbajului de interogare

Conexiuni cu baze la distanță date. Instantanee de date

Crearea de legături către o bază de date Oracle la distanță

Instrumente pentru identificarea și distrugerea imaginilor

Secvențe. Sinonime

Crearea de secvente

Crearea de sinonime în Oracle

Lucrul cu spații de tabele în Oracle

Secțiunea 3. PL/SQL - extensie procedurală a limbajului SQL

Structura programului PL/SQL

Variabile, constante și tipuri

Controlul execuției programului

Operator de sucursală

Instrucțiuni de buclă

Declarație GOTO

Cursore

Tratarea excepțiilor

Proceduri, funcții și pachete

Funcții Oracle SQL

Funcții care se potrivesc codurilor numerice și simbolurilor

Funcții de conversie a caracterelor subșirurilor

Funcții de trunchiere și umplere a șirurilor de caractere

Funcții de conversie a șirurilor de caractere

Funcții legate de extragerea subșirurilor

Funcții numerice legate de exponențiere și logaritm

Funcții trigonometrice

Funcții numerice legate de rotunjire

Funcții numerice legate de semnul unui număr

Funcții numerice legate de aritmetica modulară

Funcții de dată

Funcții de conversie a tipurilor de date

Funcții de înlocuire a argumentului

Funcții de ajutor

Crearea de proceduri și funcții personalizate

Pachete

Declanșatorii bazei de date

Pachete standard Oracol

SQL dinamic

I/O fișier

Managementul locurilor de muncă

Managementul LOB

Control acces multi-utilizator

Utilizarea funcțiilor PL/SQL în expresii SQL

Secțiunea 4. Instrumente de control al accesului în Oracle

Analiza infrastructurii de abilitare

Identificarea utilizatorului

Concept de bază sisteme de acces-privilegiu

Acordarea privilegiilor de sistem

Privilegii de sistem care definesc drepturile de a lucra cu tabele și vizualizări

Privilegii de sistem care determină drepturile de a lucra cu proceduri și declanșatoare

Privilegii de sistem care determină drepturile de a lucra cu utilizatorii

Privilegii de sistem care determină drepturile de a lucra cu zonele de tabel

Privilegii de sistem care determină drepturile de a lucra cu secvențe

Privilegii de sistem care determină drepturile de a lucra cu sinonime

Privilegii de sistem care determină drepturile de a efectua acțiuni globale în sistem

Privilegii de sistem care determină drepturile de a efectua acțiuni cu alte obiecte de bază de date

Folosind PUBLIC și CU OPȚIUNEA ADMIN

Acordarea de privilegii de acces la obiect

Gestionarea privilegiilor folosind roluri

Privilegii de sistem care determină drepturile de a lucra cu roluri

Roluri predefinite în Oracle

Crearea de roluri și acordarea lor de privilegii

Gestionarea eligibilității pentru rol

Revocarea privilegiilor

Revocați privilegiile și rolurile de sistem

Revocarea privilegiilor de acces la obiect

Utilizarea vizualizărilor pentru a controla accesul

Proceduri stocate ca mijloc de control al accesului

Utilizarea declanșatorilor pentru a îmbunătăți securitatea sistemului

Instrumente de audit

Audit evenimente de sistem

Auditarea evenimentelor legate de accesul la obiect

Oprirea înregistrării evenimentelor

Procesarea datelor de audit

Profilurile de utilizator ca mijloc de creștere a securității sistemului

Informații suplimentare

Secțiunea 5: Crearea aplicațiilor Java

Instrumente pentru construirea de aplicații și organizarea accesului la baze de date

Crearea de aplicații în Java

Cea mai simplă aplicație din Java

Cel mai simplu applet

Executarea instrucțiunilor SQL pentru crearea tabelelor, introducerea și modificarea datelor

Eșantionare simplă date

Interogări parametrice

Proceduri stocate în Java

Secțiunea 6: Instrumente de integritate a datelor

Definiția unei tranzacții și rolul acesteia într-un SGBD

Începutul și sfârșitul unei tranzacții

Instrucțiuni SQL care controlează tranzacțiile

clauza COMMIT WORK

Folosind clauza SAVEPOINT

Oferta ROLLBACK WORK

Consecvența și procesare paralelă

Tipuri de încuietori

Export/import date

Secțiunea 7: Tehnici pentru îmbunătățirea productivității

Optimizer

Clasamentul metodei de acces

Analizarea interogărilor pentru a îmbunătăți viteza de execuție a acestora

Setarea modului de optimizare

Prezentare generală a indicilor Oracle

Codificarea eficientă a expresiilor SQL

Modificarea planului de execuție a interogării

Tabele de partiționare

Indici de partiţionare

Operatii cu sectiuni

Tabele-indexare

Secțiunea 8. Extensii de obiecte în OracleS

Tipuri de obiecte

Obiecte din baza de date

Matrice

Tabele imbricate

Specificații de acces

Vizualizări obiect

Oracolul 9i

Concluzie

Literatură

Una dintre provocările cu multe opțiuni de dezvoltare este să găsești care dintre ele este cel mai potrivită pentru o anumită situație. Toată lumea vrea să obțină flexibilitate maximă(cât mai multe opțiuni), dar în același timp pentru ca totul să fie simplu și clar. Oracle oferă dezvoltatorilor opțiuni practic nelimitate. Nimeni nu a spus vreodată: Acest lucru nu se poate face în Oracle; ei spun diferit: De câte moduri aveți nevoie pentru a face asta în Oracle? . Sper că cartea vă va ajuta să faceți alegerea corectă.

Această carte este pentru cei care salută libertatea de alegere, dar ar dori să primească recomandări și să învețe specificul implementării anumitor mijloace și Funcții Oracle. De exemplu, Oracle DBMS oferă minunata capacitate de a crea o bază de date virtuală privată. Documentația Oracle descrie cum se utilizează această caracteristică și ce face. Documentația, însă, nu spune când să-l folosești și, poate mai important, când să nu-l folosești. Documentația nu oferă întotdeauna detalii de implementare pentru o anumită caracteristică și, dacă acestea nu sunt cunoscute, acestea s-ar putea să vă ia în cale în mod neașteptat. ( Este despre nu despre greșeli, ci despre metodele de lucru preconizate și scopul inițial al mijloacelor corespunzătoare.)

Pentru cine este această carte?

Publicul țintă este toți dezvoltatorii de aplicații pentru Oracle ca server de baze de date. Cartea a fost scrisă pentru dezvoltatori profesionisti Oracle, interesat de cum să rezolve o problemă folosind acest SGBD. Orientarea practică a cărții înseamnă că multe secțiuni vor fi de mare interes pentru administratorii de baze de date (DBA). Majoritatea exemplelor din această carte pentru a demonstra caracteristicile cheie folosesc SQL*Plus, astfel încât nu veți putea învăța din acesta cum să dezvoltați grafice utile și frumoase. interfața cu utilizatorul, dar veți afla cum funcționează DBMS Oracle, ce instrumente principale vă permit să faceți și când aveți nevoie (și nu aveți nevoie) să le utilizați.

Cartea este destinată celor care doresc să obțină mai multă valoare de la Oracle DBMS cu mai puțin efort. Este pentru oricine vrea să știe cum pot fi utilizate instrumentele Oracle munca practica(în același timp, nu sunt date numai exemple de utilizare a unui anumit instrument, ci se explică și de ce este necesar acest instrument). O altă categorie de oameni care vor găsi această carte interesantă sunt managerii tehnici ai echipelor de dezvoltare care implementează proiecte bazate pe Oracle. În unele privințe, este foarte important ca aceștia să cunoască caracteristicile DBMS care sunt fundamentale pentru dezvoltarea de succes. Această carte poate oferi informații suplimentare unui manager de proiect care dorește să formeze personalul cu privire la tehnologiile necesare sau să se asigure că dezvoltatorii știu deja ceea ce trebuie să știe.

Pentru a profita la maximum de această carte, cititorul ar trebui să:

O Cunoașteți limbajul SQL. Nu trebuie să fie cel mai bun specialistîn SQL în țară, dar cunoștințele practice bune vor ajuta în mod semnificativ.

Înțelegeți programul! în limbajul PL/SQL. Nu este cerinta obligatorie, dar cunoștințele PL/SQL vă vor ajuta să înțelegeți exemplele. Această carte, de exemplu, nu explică cum se creează bucle FOR sau declarați un tip de înregistrare - acest lucru este scris suficient în documentația Oracle și în numeroase cărți. Cu toate acestea, asta nu înseamnă că nu veți învăța multe despre programarea PL/SQL citind această carte. Vei afla. Veți deveni intim familiarizați cu numeroasele caracteristici ale PL/SQL și veți învăța noi modalități de a rezolva probleme, pachete și instrumente despre care poate nici nu știați că există.

Aveți ceva experiență cu un limbaj de programare procedurală, cum ar fi C sau Java. Sunt încrezător că oricine este capabil să înțeleagă și să scrie cod în orice limbaj de programare procedurală va putea înțelege cu succes exemplele prezentate în carte.

Citiți manualul Oracle Server Concepts.

Câteva cuvinte despre acest ghid. Datorită volumului său mare, mulți oameni sunt intimidați de documentația Oracle. Dacă abia sunteți la început cu tutorialul sau nu ați citit acest tip de documentație înainte, vă recomand să începeți cu OracleSi Concepts. Are aproximativ 800 de pagini și acoperă multe dintre conceptele fundamentale Oracle pe care trebuie să le cunoașteți. Acest manual nu acoperă toate detaliile tehnice (asta îi sunt dedicate celelalte 10-20 de mii de pagini de documentație), dar introduce toate conceptele importante. Ghidul acoperă, dar nu se limitează la, următoarele subiecte:

Structura bazei de date, organizarea si stocarea datelor;

procesare distribuită;

Arhitectura memoriei Oracle;

Arhitectura de proces Oracle;

obiecte de schemă utilizator (tabele, indecși, clustere etc.);

tipuri de date încorporate și definite de utilizator;

proceduri stocate;

caracteristici ale organizării tranzacțiilor;

optimizator;

integritatea datelor;

controlul concurenței.

Eu însumi recitesc periodic capitolele relevante. Acestea sunt concepte fundamentale. Dacă nu le înțelegeți, aplicațiile Oracle pe care le creați vor fi sortite eșecului. Recomand să citiți acest ghid și să înțelegeți cel puțin cele mai importante lucruri.

Structura cărții

Pentru a fi mai ușor de citit, cartea este împărțită în șase părți separate (descrise mai jos). Acestea nu sunt doar unități structurale - vă vor ajuta să găsiți rapid cele mai esențiale informații. Cartea este formată din 23 de capitole, fiecare dintre ele fiind o mini-carte, adică practic componentă separată. Ocazional mă refer la exemple sau caracteristici descrise în alte capitole (partea de securitate, de exemplu, se bazează mai mult pe exemple și concepte prezentate în alte capitole). Dar, de regulă, este destul de posibil să citiți un capitol separat de restul cărții. De exemplu, nu trebuie să citiți capitolul 10 pentru a înțelege capitolul 14.

Formatele și stilurile capitolelor sunt aproape identice:

O introducere în caracteristicile sau capabilitățile descrise.

De ce ar trebui (sau nu ar trebui) să-l folosești. Descriu situații când

are sens de folosit acest remediuși când să nu faci asta.

Cum să-l folosească. Acesta nu este doar un citat din ghid de referințăîn limbaj

ku SQL și descriere pas cu pas: aceasta este ceea ce este necesar, ceea ce trebuie făcut pentru aceasta și aici sunt condițiile preliminare pentru utilizare. Această secțiune acoperă:

Cum să folosiți acest sau acel remediu sau tehnică

Exemple, exemple și mai multe exemple

Depanare, găsirea erorilor în timpul implementării

Capcane la utilizarea produsului

Eliminarea erorilor (preventivă)

Despre Rezumat care rezumă considerația.

Cartea conține multe exemple și un numar mare de cod, iar tot acest cod este disponibil pentru descărcare de pe site-ul web http: www.wrox.com. Mai jos este un rezumat detaliat al fiecărei părți.

Noțiuni de bază

Capitolul 1. Dezvoltarea aplicațiilor de succes pentru Oracle. Acest capitol descrie abordarea mea fundamentală pentru programarea bazelor de date. Toate SGBD-urile sunt proiectate diferit, iar pentru a dezvolta cu succes și la timp o aplicație care utilizează o bază de date, trebuie să știți exact ce vă permite SGBD-ul dvs. să faceți și cum. Fără să cunoști capacitățile SGBD-ului, riști încă o dată să reinventezi roata, adică să creezi instrumente deja furnizate de baza de date. Dacă nu știți cum funcționează un DBMS, este posibil să creați aplicații ineficiente și imprevizibile.

Acest capitol descrie o serie de aplicații reale, în timpul creării căreia o lipsă de înțelegere a conceptelor de bază ale SGBD a dus la eșecul întregului proiect. Pe baza acestei abordări practice cu contraexemple, capitolul descrie capabilitățile și funcțiile de bază ale unui SGBD care trebuie înțelese.

[ 1 ] ...

Joacă pentru bani online http://asino-zeon.com/ totul despre bonusuri.

Limbajul de interogare structurat ( limbaj structurat interogări) sau SQL este un limbaj de programare declarativ pentru utilizarea în baze de date cvasi-relaționale. Multe dintre caracteristicile originale ale SQL au fost preluate din calculul tuplilor, dar extensiile recente la SQL includ din ce în ce mai multă algebră relațională.
SQL a fost creat inițial de IBM, dar mulți furnizori și-au dezvoltat propriile dialecte. A fost adoptat ca standard de Institutul Național American de Standarde (ANSI) în 1986 și ISO în 1987. În standardul limbajului de programare SQL, ANSI a declarat că pronunția oficială a SQL este „es q el”. Cu toate acestea, mulți specialiști în baze de date au folosit pronunția „slang” „Sequel”, care reflectă numele inițial al limbii, Sequel, care a fost schimbat ulterior din cauza unui conflict de marcă și nume cu IBM. Programare pentru incepatori.
Limbajul de programare SQL a fost revizuită în 1992 și această versiune este cunoscută ca SQL-92. 1999 a fost apoi revizuit din nou pentru a deveni SQL:1999 (AKA SQL3). Programare pentru manechini. SQL 1999 acceptă obiecte care nu erau acceptate anterior în alte versiuni, dar de la sfârșitul anului 2001, doar câteva sisteme de gestionare a bazelor de date acceptau implementări SQL: SQL 1999.
SQL, deși este definit ca ANSI și ISO, are multe variații și extensii, dintre care majoritatea au propriile caracteristici, cum ar fi implementarea „PL/SQL” a Oracle Corporation sau implementarea Sybase și Microsoft numită „Transact-SQL”, care poate fi confuză pentru cei familiarizați cu elementele de bază ale programării. De asemenea, nu este neobișnuit ca implementările comerciale să omite suportul pentru principalele caracteristici ale standardului, cum ar fi tipuri de date precum data și ora, preferând unele dintre propriile variante. Ca rezultat, spre deosebire de ANSI C sau ANSI Fortran care pot fi portate de obicei de la o platformă la alta fără modificări structurale majore, interogările limbajului de programare SQL pot fi portate rareori între sisteme diferite baze de date fără modificări semnificative. Majoritatea oamenilor din industria bazelor de date cred că această lipsă de compatibilitate este intenționată, pentru a oferi fiecărui dezvoltator propriul sistem de gestionare a bazelor de date și a lega cumpărătorul de o anumită bază de date.
După cum sugerează și numele, limbajul de programare SQL este conceput pentru scopuri specifice, limitate - interogarea datelor conținute în baza de date relationala date. Ca atare, este un set de instrucțiuni de limbaj de programare pentru crearea de mostre de date, mai degrabă decât un limbaj procedural precum C sau BASIC, care sunt concepute pentru a rezolva o gamă mult mai largă de probleme. Extensiile de limbaj precum „PL/SQL” sunt concepute pentru a rezolva această limitare prin adăugarea de elemente procedurale la SQL, păstrând în același timp beneficiile SQL. O altă abordare este de a încorpora comenzile limbajului de programare procedural în interogările SQL și de a interacționa cu baza de date. De exemplu, Oracle și alții suportă limbajul Javaîn baza de date, în timp ce PostgreSQL vă permite să scrieți funcții în Perl, Tcl sau C.
O glumă despre SQL: „SQL nu este nici structurat, nici limbaj”. Ideea glumei este că SQL nu este un limbaj Turing. .

Selectați * din T
C1 C2
1 A
2 b
C1 C2
1 A
2 b
Selectați C1 din T
C1
1
2
C1 C2
1 A
2 b
Selectați * din T unde C1=1
C1 C2
1 A

Având în vedere un tabel T, interogarea Select * din T va afișa toate elementele tuturor rândurilor din tabel.
Din același tabel, interogarea Select C1 din T va afișa elementele din coloana C1 a tuturor rândurilor din tabel.
Din același tabel, interogarea Select * din T unde C1=1 va afișa toate elementele tuturor rândurilor unde valoarea coloanei C1 este „1”.

Cuvinte cheie SQL

Cuvintele SQL sunt împărțite într-un număr de grupuri.

Primul este Limbajul de manipulare a datelor sau DML(limbaj de gestionare a datelor). DML este un subset al limbajului folosit pentru a interoga bazele de date și pentru a adăuga, actualiza și șterge date.

  • SELECT este una dintre cele mai frecvent utilizate comenzi DML și permite utilizatorului să specifice o interogare ca o descriere set a rezultatului dorit. Interogarea nu specifică modul în care trebuie aranjate rezultatele - traducerea interogării într-o formă care poate fi executată în baza de date este sarcina sistemului de baze de date, mai precis a optimizatorului de interogări.
  • INSERT este folosit pentru a adăuga rânduri (set formal) la un tabel existent.
  • UPDATE este folosit pentru a modifica valorile datelor dintr-un rând de tabel existent.
  • DELETE specifică rândurile existente care vor fi șterse din tabel.

Alte trei Cuvinte cheie Ei bine, putem spune că se încadrează în grupul DML:

  • BEGIN WORK (sau START TRANZACȚIA, în funcție de dialectul SQL) poate fi folosit pentru a marca începutul unei tranzacții de bază de date care fie va finaliza totul, fie nu se va executa deloc.
  • COMMIT afirmă că toate modificările de date făcute după efectuarea operațiunilor sunt salvate.
  • ROLLBACK specifică faptul că toate modificările de date după ultima comitere sau rollback trebuie distruse, până la punctul în care a fost înregistrat în baza de date ca „rollback”.

COMMIT și ROLLBACK sunt utilizate în domenii precum controlul tranzacțiilor și blocarea. Ambele instrucțiuni completează toate tranzacțiile curente (seturile de operațiuni din baza de date) și elimină toate blocările la modificarea datelor din tabele. Prezența sau absența unei instrucțiuni BEGIN WORK sau similare depinde de implementarea SQL particulară.

Al doilea grup de cuvinte cheie aparține grupului Data Definition Language sau DDL (Data Definition Language). DDL permite utilizatorului să definească noi tabele și elementele asociate acestora. Majoritatea bazelor comerciale date SQL au propriile extensii în DDL care permit controlul asupra elementelor non-standard, dar de obicei vitale ale unui anumit sistem.
Principalele puncte ale DDL sunt comenzile de creare și ștergere.

  • CREATE specifică obiectele (cum ar fi tabelele) care vor fi create în baza de date.
  • DROP specifică ce obiecte existente în baza de date vor fi șterse, de obicei definitiv.
  • Unele sisteme de baze de date acceptă și comanda ALTER, care permite utilizatorului să schimbe un obiect existent în diferite moduri - de exemplu, adăugând coloane la un tabel existent.

Al treilea grup de chei cuvinte SQL este Limbajul de control al datelor sau DCL (Limbajul de control al datelor). DCL este responsabil pentru drepturile de acces la date și permite utilizatorului să controleze cine are acces pentru a vizualiza sau manipula datele din baza de date. Există două cuvinte cheie principale aici:

  • GRANT - permite utilizatorului să efectueze operațiuni
  • REVOKE - Îndepărtează sau restricționează capacitatea utilizatorului de a efectua operațiuni.

Sisteme de baze de date folosind SQL

  • InterBase
  • MySQL
  • Oracol
  • PostgreSQL
  • SQL Server

Cum să devii un profesionist în dezvoltarea de site-uri web și să începi să câștigi bani? Cursuri video ieftine cu o introducere introductivă.

În cartea sa „Oracle pentru profesioniști. Arhitectură și caracteristici principale.” insistă că acest lucru este pur și simplu necesar. Chiar dacă echipa dumneavoastră are un administrator competent, cunoașterea modului în care funcționează SGBD-ul Oracle vă va ajuta să vă înțelegeți mai bine și să interacționați mai eficient, ca să nu mai vorbim de cazul în care nu aveți un astfel de specialist. In acest subiect voi mentiona lucruri de bază, înțelegerea cărora vă va permite să lucrați în mod competent cu baza de date Oracle și să utilizați unele dintre caracteristicile acesteia cu mare beneficiu pentru aplicația dvs. Dacă ați citit deja cartea menționată mai sus a lui Tom Kite, atunci puteți utiliza pur și simplu acest articol ca reamintire. O notă - am citit cartea cu mult timp în urmă și apoi ultima versiune Baza de date Oracle a fost 9i, am urmat și cursuri de administrare în 9i, așa că dacă în 10 și mai sus s-a schimbat ceva și a fost adăugat, atunci nu mă învinovăți. Deși scriu despre lucruri destul de fundamentale, care este puțin probabil să se schimbe mult.

Ce permite bazei de date Oracle să funcționeze atât de repede?

Când modificați datele din baza de date, modificările dvs. merg mai întâi în cache, iar apoi asincron în mai multe fire (numărul poate fi configurat) sunt scrise pe disc. Un jurnal special (fișier jurnal online) este scris sincron, astfel încât să fie posibilă restaurarea datelor după o eroare dacă nu a fost încă șters din cache pe disc. Această abordare vă permite să câștigați viteză, deoarece în acest caz totul este scris pe disc secvențial într-un singur fișier și îl puteți configura astfel încât să fie scris în paralel cu două sau mai multe discuri, crescând astfel fiabilitatea protecției împotriva pierderii modificărilor. Ar trebui să existe mai multe fișiere descrise și acestea sunt folosite într-un cerc: de îndată ce toate datele protejate de unul dintre fișierele jurnal au fost scrise printr-un proces de fundal în blocuri de date de pe disc, atunci acest fișier jurnal poate fi reutilizat. Astfel, într-o oarecare măsură, acest lucru vă permite, de asemenea, să economisiți bani având discuri mici ultra-rapide doar pentru fișierele jurnal mici utilizate într-un cerc.

De obicei vorbesc despre asta atunci când ei sugerează că pur și simplu salvez ceva într-un fișier de pe disc, deoarece va fi „mai rapid” datorită faptului că vom scrie toate datele secvențial și capul hard diskului nu va trebui să ruleze. cautand blocuri aleatorii. Încă insist că nu vom câștiga nimic aici, deoarece vom scrie pe un disc lent, care în curând va fi folosit în mod activ de multe alte procese pentru a scrie un număr mare de jurnale diferite, iar Oracle scrie sincron doar pe discul său. secvenţial, după cum am descris mai sus.

Mecanism de recuperare a datelor

În SGBD Oracle, puteți activa arhivarea fișierelor jurnal operaționale descrise mai sus și toate modificările vor fi arhivate. Astfel, dacă pierdem orice disc cu blocuri de date, le putem restaura în orice moment, inclusiv în momentul imediat înainte de accident, prin rularea jurnalului online curent în ultimele fișiere jurnal arhivate.

Stand by copie

Cele de mai sus fișiere de arhivă poate fi trimis prin rețea și aplicat din mers pe o copie a bazei de date. Astfel o vei avea mereu la indemana copie fierbinte cu întârziere minimă a datelor. În unele aplicații, unde nu este nevoie să afișați date până în ultimul moment, puteți configura o astfel de bază de date să fie doar în citire și să descărcați instanța principală a bazei de date și pot exista mai multe astfel de instanțe pentru citire.

Blocat la unele solicitări de scriere

Dacă unele dintre interogările dvs. se blochează în orice moment, merită să verificați alert.log pentru prezența unui punct de control incomplet. Acest lucru indică faptul că fișierele dvs. jurnal online sunt prea mari sau sunt prea puține dintre ele, astfel încât datele pe care le protejează nu au timp să fie eliminate din memoria cache pe disc, iar DBMS a completat deja toate fișierele jurnal online disponibile și dorește să reutilizați-le într-un cerc, ce ar trebui să faceți în niciun caz nu este posibil, așa că există o pauză? Deși dacă aplicația dvs. rulează pe java, atunci în primul rând m-aș uita la prezența Full GC în jurnale.

Segment de citire și rollback fără blocare

Una dintre cele mai remarcabile caracteristici ale SGBD-ului Oracle este citirea fără blocare, care se realizează prin segmentul rollback. Citiți interogări către Oracle nu nu sunt blocate deoarece datele pot fi citite aproape întotdeauna din segmentul de rollback.

Segmentul de rollback oferă un alt bonus: din acesta puteți încerca să citiți date ușor învechite pentru un tabel care a fost în el la un moment dat. Această caracteristică se numește flashback.

Cu toate acestea, uneori, segmentul de rollback poate fi o problemă: dacă aveți o muncă mare pentru ștergerea în bloc a datelor (ștergerea generează din ce în ce mai multe date în segmentul de rollback), atunci puteți obține ORA-01555: instantaneu prea vechi. Principalul lucru de reținut în acest caz este că nu trebuie să vă rescrieți jobul, astfel încât să comite fiecare N operațiuni, dar trebuie să utilizați un segment separat de rollback creat special pentru astfel de operațiuni.

Niveluri de izolare a tranzacțiilor

Nu există niciun nivel de izolare READ_UNCOMMITED în Oracle. Chestia este că alte baze de date îl folosesc pentru a obține concurență maximă prin eliminarea blocărilor de citire. Dar în Oracle, citirea se face întotdeauna fără încuietori, așa că avem deja toate beneficiile pe care le poate oferi acest nivel fără a introduce restricții suplimentare.

În general, se pare că există doar două niveluri de izolare disponibile în Oracle: implicit este READ_COMMITTED, dar îl puteți seta la SERIALIZABLE dacă preferați.

Cu toate acestea, la nivel de instrucțiune (SELECT, UPDATE etc.) aveți deja REPEATABLE_READ implicit, adică. într-o singură declarație, obțineți întotdeauna o citire consecventă, ceea ce se realizează, desigur, prin segmentul rollback. Întotdeauna mi-a plăcut foarte mult exemplul pe care îl dă Tom Kite pentru a descrie ceea ce face asta. Să zicem că ai foarte masă mare cu conturi și efectuați un SELECT pentru a obține suma. În Oracle, spre deosebire de multe alte baze de date, chiar dacă în mijlocul interogării dvs. o altă tranzacție transferă o sumă de la primul cont la ultimul, veți ajunge totuși cu date care erau actuale la începutul interogării dvs., deoarece atunci când ajungeți ultima linie pe care o va vedea SELECT-ul dvs., că linia a fost schimbată, va merge la segmentul de rollback și va citi datele care se aflau în această celulă în momentul în care a început solicitarea. În multe alte baze de date, veți obține răspunsul ca o sumă care nu există niciodată în tabelul dvs. Cu toate acestea, în Oracle, în acest caz, există pericolul de a obține ORA-01555: instantaneu prea vechi.

Pe lângă nivelurile standard de izolare, Oracle are și așa-numitele tranzacții READ_ONLY, care dau REPEATABLE_READ pe parcursul întregii tranzacții, și nu doar într-o singură declarație. Dar, după cum sugerează și numele, puteți efectua doar citiri într-o astfel de tranzacție.

Permiteți Oracle să vă memoreze datele în mod eficient

În Oracle, toate datele sunt citite și scrise nu direct pe disc, ci prin cache. În mod implicit, memoria cache se bazează pe algoritmul LRU, așa că dacă citiți un tabel foarte mare după identificator în cantități mari, solicitând o linie nouă de fiecare dată, atunci astfel de solicitări pot înlocui un tabel static mic din cache, care ar fi Cel mai frumos lucru pe care să îl aveți permanent în cache. În astfel de scopuri, atunci când creați un tabel, puteți specifica un tip special de cache în care vor fi trimise interogările la tabelele dvs. Deci, pentru primul tabel din exemplul descris mai sus, cache-ul RECYCLE este potrivit, care în esență nu stochează nicio dată, dar o aruncă imediat din cache. Iar pentru al doilea tabel, memoria cache KEEP este potrivită, ceea ce vă permite să stocați mici tabele statice în cache, iar interogările către toate celelalte tabele nu vor înlocui datele din tabelele statice din cache.

Linii goale

Oracle are unul foarte caracteristică interesantă, de care acum nu vor putea scăpa niciodată. Faptul este că dacă puneți un șir gol în baza de date, acesta va fi salvat ca NULL. În acest fel, la citirile ulterioare, nu veți obține niciodată un șir gol, ci doar NULL. Vă rugăm să rețineți că din același motiv linii goale nu intrați în index, așa că dacă faceți interogări al căror plan de execuție va folosi indexul, atunci nu veți obține niciodată rânduri goale (sau mai degrabă NULL), ci mai multe despre asta puțin mai târziu.

Indici

Pe lângă indicii cunoscuți sub formă de arbori B, Oracle are și așa-numiții indici de biți, care arată performanțe foarte mari la interogările către tabelele care au coloane cu valori foarte rare. În acest caz, interogările (comparativ cu indecșii obișnuiți) care conțin combinații complexe de SAU și ȘI pentru coloane rare vor funcționa în mod deosebit de eficient. Acest index este stocat nu într-un arbore B, ci în hărți de biți, ceea ce face posibilă executarea rapidă a interogărilor descrise. Întrebarea numărului de valori unice din tabel la care un indice dat va fi mai de preferat este foarte complicată: poate fi fie 10 valori unice, fie 10.000. Aici trebuie să creați un index pe un anumit tabel Vezi ce se intampla. Principalul lucru este să nu încercați să utilizați acest index pe tabele cu o cantitate mare inserări și actualizări ale unei coloane indexate, deoarece astfel de operațiuni vor bloca zone destul de mari din tabelul indexat, iar sistemul dvs. poate rămâne blocat sau chiar să se blocheze.

Unul dintre lucrurile de care am fost întotdeauna foarte mulțumit la Oracle este capacitatea de a crea un index pe o funcție. Acestea. Dacă trebuie să utilizați o anumită funcție în interogări, atunci puteți construi un index pe aceasta și puteți accelera semnificativ operațiunile de citire.

O altă proprietate interesantă a indicilor de care trebuie să fii conștient este că un index nu stochează valori NULL. Astfel, dacă faci interogări cu condiția<, >sau<>pe o coloană indexată, atunci nu veți primi rânduri din spate cu o valoare NULL în coloana indexată. Pe cealaltă parte această proprietate poate fi folosit foarte eficient pentru anumite cazuri specifice. De exemplu, ai o masă foarte mare în care sunt stocate comenzi, care nu este niciodată curățată. Si aici este proces de fundal, care este obligat să trimită toate comenzile către un sistem de backoffice. Prima soluție care se sugerează este crearea unei alte coloane cu steag-ul is_sent, unde inițial este 0 și la trimitere vom pune 1. Adică. De fiecare dată când începe procesul de fundal, acesta va face o solicitare la tabel cu condiția is_sent=0. Nu puteți folosi aici un index de biți, deoarece tabelul este reîncărcat foarte activ. Un index B-tree obișnuit va ocupa mult spațiu, deoarece trebuie să stocheze referințe la o cantitate mare linii. Dar dacă ne schimbăm puțin logica și punem NULL în loc de 1 în coloana is_sent, atunci indexul nostru va fi mic, deoarece în orice moment va stoca doar Valori NULL, și vor fi foarte puțini dintre ei.

Tabelele sunt diferite

Cu exceptia mese obișnuiteîn Oracle, ca și în multe alte baze de date, există așa-numitele tabele de index, când datele din tabel se află direct în arborele index al cheii primare. În acest fel, două lucruri sunt realizate simultan: în primul rând, aveți o citire mai puțin de citit de cheia primară, iar în al doilea rând, datele din tabel sunt ordonate după cheia primară, astfel încât operația ORDER BY PK va fi efectuată fără suplimentare triere. Dezavantajele includ faptul că nu veți mai putea distinge între autentificarea în fișierele jurnal operaționale ale unui index dat.

Un alt tip grozav de tabel sunt tabelele grupate, care vă permit să stocați date din două sau mai multe tabele grupate de o singură valoare cheie într-un singur bloc de date. Acest lucru poate fi destul de eficient dacă împărțiți întotdeauna unele mese.

Pe baza tabelelor grupate, există și tabele hash grupate, în care în loc de un arbore B, se folosește pentru acces un tabel bazat pe hash-ul cheii de cluster. Sună, desigur, foarte interesant, dar, să fiu sincer, nu l-am întâlnit niciodată în practică.

Legare variabilă

Probabil că fiecare programator a auzit deja despre asta, dar voi menționa în continuare o tehnică atât de obligatorie ca legarea variabilelor. Faptul este că pentru fiecare cerere unică este construit un plan de analiză și plasat în cache. Dacă există o mulțime de interogări diferite, cum ar fi, de exemplu, o interogare foarte comună după ID, atunci fiecare interogare va genera propriul plan și, de asemenea, vor elimina toate celelalte planuri din cache, ceea ce poate crește semnificativ răspunsul ora bazei de date.

De asemenea, merită remarcat faptul că nu ar trebui să abuzați de acest lucru și să utilizați legarea pentru coloanele cu un număr mic sensuri diferite, cumva flag-ul is_deleted, pentru că în acest caz nu vor fi atât de multe interogări diferite și poate pentru o interogare DBMS mai specifică va fi posibil să construim un plan mai eficient.

Încă câteva note pentru programator

Dacă coloana dvs. este de tipul VARCHAR2(100), atunci încercarea de a introduce șirul longString.substring(0, 100) în ea nu este garantată a avea succes, deoarece limita de 100 din definiția implicită a coloanei se referă la numărul de octeți. , nu caractere, deci dacă aveți caractere pe doi octeți, puteți avea probleme. De fapt, acest comportament poate fi configurat puțin, puteți citi mai multe despre el. Este bine dacă încă nu încercați să introduceți în buclă nesfârșită, conform principiului de a face, încă nu va funcționa, pentru că în acest caz nu se va întâmpla niciodată.

Ei bine, o recomandare generală pentru toate tipurile de baze de date: nu actualizați niciodată toate coloanele dintr-un tabel atunci când un câmp al unui obiect se modifică. Pare foarte evident, dar în practică acest anti-model apare adesea, așa că recomand cu tărie să verificați ca cadrele dvs. să ACTUALEZEAZĂ doar câmpurile care s-au schimbat efectiv.

Concluzie

Am încercat să descriu majoritatea lucrurilor care, după părerea mea, pot fi utile unui programator. Întrucât sunt destul de multe, le-am doar schițat, de multe ori fără a intra în detalii. Cum să o faci exact setările necesare O poți citi oricând în cartea menționată de Tom Kite, o poți găsi în coloana asktom sau pur și simplu o poți căuta pe google. Principalul lucru este să știi ce să faci pe Google și, sper, acest subiect ți-a sugerat.

Etichete:

  • baza de date oracle
  • Bază de date
Adaugă etichete