Tárolási paraméterek ==================== Amikor létrehozunk egy táblát, a CREATE TABLE-ben megadhatunk ún. tárolási paramétereket. Megj.: nem csak a CREATE TABLE-nél lehet, hanem a CREATE INDEX, CREATE CLUSTER stb. esetén is, vagyis minden tárolást igénylő objektumnál. CREATE TABLE tipus_proba(...) TABLESPACE users PCTUSED 50 PCTFREE 20 INITRANS 1 MAXTRANS 255 STORAGE (INITIAL 32K MINEXTENTS 1 MAXEXTENTS 200 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT); STORAGE(...): hogyan viselkedjenek az extensek, mekkorák legyenek, hogyan bővüljenek stb. - INITIAL: első extens mérete - NEXT: következő extens mérete - PCTINCREASE: milyen mértékben növekedjenek az extensek (%-ban) az előzőhöz képest. (50 azt jelenti, hogy másfélszerese lesz a következő) - MINEXTENTS: minimális extens darabszám (a tábla létrehozásakor ennyit automatikusan létrehoz) - MAXEXTENTS: maximális extens darabszám stb. Az Oracle nem mindig hallgat ránk, mert vannak olyan peremfeltételek, amiket mindenképpen be kell tartania. Ilyen például a blokkméret. Hiába adunk meg bármekkora értéket is extens méretnek, annak mindenképpen a blokkméret többszörösének kell lennie. Az is előfordulhat, hogy az adott táblatéren valamilyen szabályok alapján osztja ki az oracle az extenseket, mert eleve így hoztuk létre a táblateret (lásd CREATE TABLESPACE utasítás paraméterei). Például van egy legkisebb extens (MINIMUM EXTENT) méret, aminél kisebbet nem hajlandó kiadni, vagy egy adott méret többszörösét adja ki mindig (UNIFORM). Ilyen esetekben az Oracle a peremfeltételeinek figyelembe vételével hallgat csak a megadott utasításra. PCTUSED, PCTFREE: A blokkokkal hogyan gazdálkodjon a rendszer. Általában szokás úgy csinálni, hogy a blokkokat nem rakjuk tele azért, hogy egy későbbi módosítás után is még beférjenek a sorok a blokkba. - PCTFREE: hány %-ot hagyjon szabadon - PCTUSED: ha ez alá csökken a blokk foglaltsága, akkor szabadnak nyilvánítja a blokkot, és ismét enged beleírni. Példa: CREATE TABLE t1 (o1 NUMBER, o2 CHAR(20)) NOLOGGING TABLESPACE users PCTFREE 0 PCTUSED 50 STORAGE (INITIAL 100K NEXT 200K MINEXTENTS 3 MAXEXTENTS 5); Mi van akkor, ha nem adok meg ilyen (tárolási) paramétereket? Minden felhasználónak van egy default táblatere (lásd DBA_USERS-ben) Minden táblatérnek vannak a tárolásra vonatkozó default értékei (lásd DBA_TABLESPACES) És még vannak adatbázis-szintű alapértelmezések is. A tábla növekedésekor az Oracle automatikusan újabb extenseket ad hozzá, ha szükség van rá. Mindezt manuálisan is kezdeményezhetjük, és a nem használt extenseket fel is szabadíthatjuk. ALTER TABLE emp ALLOCATE EXTENT (SIZE 200K DATAFILE '/big/oracle/oradata/oradb/users01.dbf'); ALTER TABLE emp DEALLOCATE UNUSED;