Administrace Oracle

  • partisovani
  • –> xml a zverejnovani dat po http ←-

2011-01-10

Oracle XML DB

v listerneru (listener.ora) nastavit naslouchani na dany port, a pak pres sethttpport nastavit spravne pozadavky

zpracovani pomoci poli hodnot

E.s. BEGIN DECLARE SECTION
char uname[20][25]; /*20x string*/
short ind_uname[20];
E.S. END DECLARE SECTION

E.S. INSERT INTO T(U) VALUES (:uname:ind_uname)
<=> FOR (i=0;i<20;i++) { INSERT INTO T(U) VALUES(:uname[i]:ind_name[i]); }
E.S. OPEN C;
zprac=0;
for(;;) {
  E.S. FETCH C INTO :pole1, :pole2:ind_pole2,...;
  nyni = sqlca.sqlerrd[2] - zprac; //pocet zpracovanych radku poslednim fetchem / 0-velikost poli
  zprac += nyni;
  for (k=0;k<nyni;k++) {
    /* zpracuj k-ty prvek z pole */
  }
  if (nyni < VELIKOST_POLI)
    break;
}

najit na tirpitzu slozku proc a soubor zprac_pole.c v ni (ukazkove kody)

!! nakopirovat z /tmp

2010-12-20 - Oracle streams

replikace

semora1         semora2
 ----            -----
 |  | ---------> |   |
 |  |            |   |
 |  | <--------- |   |
 ----            -----

oboustranné linky

replikační master group

  1. objekt
  2. server

TODO: založit účty na semora2 (dbadmin/dbadmin)

  1. nemá cenu tvořit další tabulkový prostor
  2. jen si založit tabulku, kterou někam pak napropagovat

přidělení práv

DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => 'repadmin'); 

vlastní schéma:

create table moje_repl_tab(...);

repadmin:

DBMS_REPCAT.CREATE_MASTER_REPGROUP(gname => 'machvrep');
-- potom yaregistrovat objekty k replikaci
DBMS_REPCAT.CREATE_MASTER_REPOBJECT (
  gname => 'machvrep',
  type => 'TABLE',
  oname => 'REPLIKOVANA',
  sname => 'mach',
  ...
); 
min_communication .. minimaliyace komunikace, replikace jen změn

ukázkové použití - replikace.sql

asznchronni je cca jednou za 10 minut

2010-12-13

– temelin –

2010-12-06

– zaspal ;-)

2010-11-29

Oracle a c++

jak ošetřit chyby..

ukázkový kód s připojením a ošetřením chyb

E. S. WHENEVER [SQLERROR|SQLWARNING|NOT FOUND] alce;
  • CONTINUE .. if(chyba) then;
  • DO sth; … if(chyba) then sth;
  • DO break;
  • DO fce();
  • GOTO label;
  • STOP

select s více řádky nadefinovat kurzor, kterým budu procházet

E.S. DECLARE c CURSOR FOR SELECT ...;

(c není proměnná v c, jde o symbolické jméno pro preprocesor.)

E.S. OPEN c;

provede SELECT v DB

nekonečný cyklus procházející řádky

E.S. WHENEVER NOT FOUND DO break; //skonci to ten cyklus
for(;;) {
  E.S. FETCH INTO :prom1, :prom2, :prom3,...;
  ... zpracuj radky ...
};
E.S. WHENEVER NOT FOUND CONTINUE; //vypneme ten break
E.S. CLOSE c;

hodnoty indikatoru EXEC SQL FETCH C INTO :tn:itn, :co:ico; if ico …

0 OK
-1 NULL
>0 hodnota delsi nez promenna

2010-11-22

http://www.ms.mff.cuni.cz/~kopecky/oracleParallel.pdf

pro p5ehled jak dotaz vypada

set autotrace on|off|traceonly

2010-11-15

Embedded SQL

výhody preprocesou

  1. určitá standardizace
  2. oddělení kódu v C od DB kódu
  3. existuje podpora pro jiné jazyky

EXEC SQL příkaz; deklarace proměnných, které budou vidět i pro preprocesor, resp. databázi.

EXEC SQL BEGIN DECLARE SECTION
.
.
.
EXEC SQL END DECLARE SECTION

k dispozici máme atomické proměnné

  1. int,
  2. long,
  3. short,
  4. float,
  5. double,
  6. char *,
  7. char[n]
  8. 1 royměrná pole atomických hodnot
  9. (ploché) struktury atomických hodnot
  10. 1r. pole struktur

navíc atomický pro oracle, sturktura pro C:

varchar prom[n];

v céčku se z toho stane struktura, která má délku a obsah

struct { short len; char arr[]; }
k=8; j=10;
EXEC SQL insert into tabulka (K,J) values (:k,:j);

kde :x je odkaz na hostitelskou proměnnou jazyka

pro čtení z db:

EXEC SQL K,J INTO :k,:j FROM tabulka WHERE ...;

databáze musí vrátit právě jeden řádek (třeba ošetřit takové chyby)

char s1[10];
car*s2;
varchar s3[10]; .. struct viz výše
strcpy(s1,"ahoj");
s2="ahoj";

nebo

s2=malloc(100);
strcpy(s2,"ahoj");

pokud bych udělal jen tohle

strcpy(s3.arr,"ahoj");

tak to nestačí, ještě třeba nastavit tu délku

s3.len=4; 

resp.

s3.len=strlen(s3.arr);

EXEC SQL insert into tabulka (txt) values (<:s1, :s2 nebo :s3>);

načtení dat

s2=malloc(10);
EXEC SQL select txt into <:s1, :s2 nebo :s3> from tabulka ...;

- s1: v pořádku, Oracle nakopíruje data a ukončí pomocí \0
- s2: třeba přepsat 9 znaků jinéým než \0, aby strlen správně vrátil velikost
- s3: s3.arr[s3.len]='\0';
EXEC SQL CONNECT :x <-- 'jmeno/heslo@db'

nebo

EXEC SQL CONNECT :x identified by :y [using :z] <-- x .. jmeno nebo jmeno@db
E.S. CREATE TABLE Tabulka (txt varchar2(10));

nakonec

E. S. COMMIT|ROLLBACK WORK [RELEASE];

– release zaroven ukonci pripojeni k sql

soubory by měly mít příponu .ps a zkompilovat se dají skriptem pcc

2010-11-01

Start databáze

Průběh startu databáze: startup → přečíst ini soubor (obsahující parametry konfigurace) → alokace SGA → start procesů → mount → čtou se řídící soubory → kontrola datových souborů → otevření datových souborů → nastartováno

při vypínání se jde pozadu, ale počká se na dokončení načatých transakcí (commit, rollback)

control file - říkáme jaká data tvoří databázi (tabulkové prostory, kódování, soubory…)

  1. doporučuje se mít alespoň tři control soubory, pro případ crash recovery; výchozí nastavení obsahuje 2 soubory
alter database parameter=hodnota scope memory|file|both

scope říká jestli se parametr má změnit hned, v paměti (na otestování, jen v téhle instanci), nebo v ini souboru a zavést až následně po restartu nebo obojí

kontrétní hodnotu parametru zjistí

show parameter <parametr>

např. memory_target

Zálohování

zálohovat smí

  • uživatel
  • administrátor

obnovovat

  • uživatel - vlastní schéme
  • administrátor - celá dbb, schéma, soubor, ts,…)

čím

  • exp (export), imp (import) - jdou po řádcích a dumpuje je po řádcích, ale kompatibilnější - jdou i nastarších verzích databáze; při startu se zeptá na několik základních informací aby export vytvořil; dump, ač je binární, tak není nijak komprimovaný a vyplatí se ho následně zkomprimovat
  • expdp, impdb - po úrovni datových bloků → rychlejší

Pozor

  • pokud export dělal uživatel s DBA → import je možné provést také jen pro DBA
  • import nelze provést do nižší verze db → lze použít pro migraci do vyšší verze (zároven ani nejde přenášet mezi plnou a free verzí databáze)
skola/administrace-oracle.txt · Poslední úprava: 10.01.2011 15:26 autor: wladik

Nástroje pro stránku