Oracle 10g komt met verbeterde ondersteuning voor Very Large Databases (VLDBs) inclusief:
- Bigfile Tablespaces
- Temporary Tablespace Groups
- Skip Unusable Indexes
- Hash-Partitioned Global Indexes
Bigfile tablespaces Bigfile tablespaces zijn tablespaces met een enkele grote datafile. In tegenstelling tot normale (smallfile) tablespaces die meerdere datafiles kunnen hebben maar die ieder een gelimiteerde grootte hebben. De voordelen van bigfile tablespaces zijn:
- Een Oracle database kan uit een maximumvan 64,000 datafiles bestaan wat zijn totale capaciteit limiteert. Om tablespaces toe te staan met een enkele grote datafile wordt de totale capaciteit van de database vergroot. Een bigfile tablespace met 8K en 32K blokken kan respectievelijk 32 terabyte en 128 terabyte datafiles bevatten.
- Als je minder kleine datafiles gebruikt kan de DB_FILES en MAXDATAFILES parameters verminderd worden waardoor je weer SGA en controlfile ruimte bespaard.
- De ALTER TABLESPACE syntax is geupdate om operaties om tabelspace niveau uit te voeren in plaats van datafile niveau.
- Typisch voor bigfile tablespaces is dat ze locally managed moeten zijn met automatic segment-space management. Uitzonderingen op deze regel zijn temporary tablespaces, de SYSTEM tablespace en locally managed undo tablespaces die manual segment-space management mogen hebben.
Bigfile tablespaces worden gemaakt met het CREATE BIGFILE TABLESPACE commando. De eerste 2 statements hebben hetzelfde effect als de EXTENT MANAGEMENT LOCAL en SEGMENT SPACE MANAGEMENT AUTO clausules de default acties zijn, terwij het laatste zal fout gaan.
-- Geldig statement. CREATE BIGFILE TABLESPACE mybigtbs DATAFILE '/u01/oracle/MYSID/mybigtbs01.dbf' SIZE 100G;
-- Valid statement. CREATE BIGFILE TABLESPACE mybigtbs DATAFILE '/u01/oracle/MYSID/mybigtbs01.dbf' SIZE 100G EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
-- invalid statement. CREATE BIGFILE TABLESPACE mybigtbs DATAFILE '/u01/oracle/MYSID/mybigtbs01.dbf' SIZE 100G EXTENT MANAGEMENT DICTIONARY SEGMENT SPACE MANAGEMENT MANUAL;
De grootte van de file kan gespecificeerd worden in kilobytes (K), megabytes (M), gigabytes (G), of terabytes (T).
De default tablespace type is SMALLFILE tenzij anders aangegeven in het CREATE DATABASE commando. Als de database al gemaakt is dan kan het ALTER DATABASE commando gebruikt worden om de settings dynamisch te veranderen.
CREATE DATABASE mydb USER SYS IDENTIFIED BY password USER SYSTEM IDENTIFIED BY password SET DEFAULT BIGFILE TABLESPACE UNDO TABLESPACE undotbs DEFAULT TEMPORARY TABLESPACE temp;
ALTER DATABASE SET DEFAULT BIGFILE TABLESPACE; ALTER DATABASE SET DEFAULT SMALLFILE TABLESPACE;
Wanneer de default tablespace type is gezet naar bigfile dan zal het BIGFILE keyword niet meer nodig zijn in het CREATE TABLESPACE statement, maar creatie van een smallfile tablespace behoeft wel het SMALLFILE keyword.
Het ALTER TABLESPACE commando kan gebruikt worden om de grootte en autoextend functionaliteit van bigfile tablespaces te veranderen.
ALTER TABLESPACE mybigtbs RESIZE 100G; ALTER TABLESPACE mybigtbs AUTOEXTEND ON NEXT 10G;
Een BIGFILE kolom (YES of NO) isi toegevoegd aan de DBA_TABLESPACES, USER_TABLESPACES an V$TABLESPACE views om het type tablespace aan te geven.
Een aantal aandachtpunten voor je bigfile tablespaces gaat gebruiken:
Bigfile tablespaces zouden gestriped moeten worden zodat parallel operaties elkaar niet in de weg staan. Oracle verwacht dat bigfile tablespace wordt gebruikt in combinatie met Automatic Storage Management (ASM) of aneder volume managers die striping of RAID ondersteunen. Bigfile tablespaces zouden niet gebruikt moeten worden op systemen met restricties op de file grootte.
Temporary Tablespace Groups Tablespace groups stelt gebruikers in staat om meer dan 1tablespace te gebruiken om tijdelijke segmenten in op te slaan. De tablespace group wordt impliciet aangemaakt a;s de eerste tablespace er wordt aangehaakt:
-- Create group by adding existing tablespace.
ALTER TABLESPACE temp TABLESPACE GROUP temp_ts_group;
-- Add a new tablespace to the group.
CREATE TEMPORARY TABLESPACE temp2 TEMPFILE '/u01/app/oracle/oradata/DB10G/temp201.dbf' SIZE 20M TABLESPACE GROUP temp_ts_group;
De tablespaces die aan een group gekoppeld zijn kunnen bekeken worden met: SELECT * FROM dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAMETEMP_TS_GROUP ------------------------------ ------------------------------ TEMPTEMP_TS_GROUP TEMP
22 rows selected.
Als de group eenmaal is gemaakt, kan het toegewezen worden aan een gebruiker net als een tabelspace aan een gebruiker of als de default temporary tablespace:
-- Assign group as the temporary tablespace for a user.
ALTER USER scott TEMPORARY TABLESPACE temp_ts_group;
-- Assign group as the default temporary tablespace.
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp_ts_group;
Een tablespace kan verwijderd worden van een groep met:
ALTER TABLESPACE temp2 TABLESPACE GROUP '';
SELECT * FROM dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME ------------------------------ ------------------------------ TEMP_TS_GROUP TEMP
1 row selected.
Er is geen theoretisch maximum limiet aan het aantal tablespaces in een tablespace group, maar het moet er m instens 1 zijn. De group wordt impliciet gedropped als het laatste lid wordt verwijderd. Het laatste lid van een group kan niet verwijderd worden van een group als het nog steeds is aangewezen als de default temporary tablespace. In dit voorbeeld heo je het laatste lid van de group verwijderd:
-- Switch from the group to a specific tablespace.
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;
-- Remove the tablespace from the group.
ALTER TABLESPACE temp TABLESPACE GROUP '';
-- Check the group has gone.
SELECT * FROM dba_tablespace_groups;
no rows selected
Tablespace groups hebben dezelfde 'namespace' als tablespaces zodat een group en tablespace niet dezelfde naam kunnen hebben.
Skip Unusable Indexes In Oracle 10g kan de SKIP_UNUSABLE_INDEXES parameter op instance level of op sessie level gezet worden en staat nu default op TRUE. Indein hij op TRUE staat zal Oracle niet proberen om of rapporteren dat een index als unusable staat gemarkeerd.
De parameter kan gereset worden met het ALTER SYSTEM en ALTER SESSION commando als onder.
ALTER SYSTEM SET SKIP_UNUSABLE_INDEXES = TRUE; ALTER SYSTEM SET SKIP_UNUSABLE_INDEXES = FALSE; ALTER SESSION SET SKIP_UNUSABLE_INDEXES = TRUE; ALTER SESSION SET SKIP_UNUSABLE_INDEXES = FALSE;
Deze setting zal de manier waarop indexen die unique constraints supporten niet beinvloeden, mede omdat indien ze genegeerd worden er contstraint violation kan ontstaan.
Hash-Partitioned Global Indexes
Global indexes kunnen nu hash partitioned worden met de volgende syntax:
CREATE TABLE mytable ( column_1 NUMBER(10), column_2 VARCHAR2(10), column_3 NUMBER(10), column_4 VARCHAR2(50));
CREATE INDEX myindex ON mytable (column_1,column_2,column_3) GLOBAL PARTITION BY HASH (column_1, column_2) (PARTITION myindex_part_1 TABLESPACE users, PARTITION myindex_part_2 TABLESPACE users, PARTITION myindex_part_3 TABLESPACE users, PARTITION myindex_part_4 TABLESPACE users);
Onderhoud van hash partitioned global indexes kunnen met de volgende statements uitgevoerd worden:
-- Add a new partition.
ALTER INDEX myindex ADD PARTITION mytable_part_5;
-- Reduce the number of partitions by 1.
ALTER INDEX myindex COALESCE PARTITION;
-- Rebuild partition.
ALTER INDEX myindex REBUILD PARTITION mytable_part_1 TABLESPACE users;
-- Rename partition.
ALTER INDEX myindex RENAME PARTITION mytable_part_1 TO mytable_part_a;
-- Clean up.DROP INDEX myindex;
DROP TABLE mytable;
Voor meer informatie zie: Multiple Temporary Tablespaces: Het gebruik van Tablespace Groups Managing Partitioned Tables en Indexes |