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; Táblaterek ========== A tábla sok paraméterét a táblatér beállításaitól örökli ha külön nem adjuk meg. A táblaterek létrehozásakor megadható paraméterek közül néhány fontosabb: ONLINE | OFFLINE BLOCKSIZE (táblaterenként szabályozható a blokkméret) UNDO (nem tehető rá normális objektum, a tranzakció-kezeléshez használatos) TEMPORARY (csak átmeneti szegmensek kerülhetnek rá, pl. rendezéskor) DATAFILE ... AUTOEXTEND ON | OFF Adatfájlonként megadható, hogy azok automatikusan növekedhetnek-e és meddig. MINIMUM EXTENT (A fragmentáció elkerülése céljából megadható, hogy mekkora lehet a legkisebb extens a táblatéren.) DEFAULT STORAGE (INITIAL, NEXT ... stb.) A tábla innen örökli, ha külön nem adtuk meg. EXTENT MANAGEMENT {DICTIONARY | LOCAL [AUTOALLOCATE | UNIFORM]} Az extensek kezelését lehet itt megadni. A lokálisan menedzselt táblatér extenseinek méretét az Oracle vagy automatikus módon határozza meg, vagy egyforma méretű extenseket használ. SEGMENT SPACE MANAGEMENT {MANUAL | AUTO} Manuális esetben a szegmensen belüli szabad helyeket szabad listák segítségével kezeli az oracle (lásd FREELISTS), automatikus esetben pedig egy bitmap térkép segítségével. Példák: CREATE UNDO TABLESPACE undots1 DATAFILE 'undotbs_1a.f' SIZE 100M AUTOEXTEND ON NEXT 20M MAXSIZE 400M; CREATE TABLESPACE tbs_1 DATAFILE 'tabspace_file2.dat' SIZE 200M DEFAULT STORAGE (INITIAL 100K NEXT 200K MINEXTENTS 1 MAXEXTENTS 999) ONLINE; CREATE TABLESPACE tbs_4 DATAFILE 'file_1.f' SIZE 100M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K; CREATE TABLESPACE auto_seg_ts DATAFILE 'file_2.f' SIZE 100M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; CREATE TEMPORARY TABLESPACE temp TEMPFILE 'temp01.dbf' SIZE 5M AUTOEXTEND ON; (Ez utóbbit nem a DBA_DATA_FILES katalógusban, hanem a DBA_TEMP_FILES katalógusban találjuk)