Voor Oracle9i, als er een gebruiker aangemaakt werd zonder de DEFAULT TABLESPACE specificatie, dan werd deze aangamaakt met een default tablespace SYSTEM. Indien de gebruiker bij het aanmaken van
een segment geen tablespace naam opgaf dan werd deze vervolgens ook in SYSTEM aangemaakt, vooropgesteld dat de gebruiker ook QUOTA op deze tablespace heeft gekregen, danwel expliciet danwel middels het UNLIMITED TABLESPACE privilege. Oracle9i verlichtte dit probleem enigsinds door de DBA toe te staan om een default, temporary tablespace voor alle gebruikers aan te maken voor deie gebruikers die zonder temporaray tablespace clause waren aangemaakt In Oracle Database 10g, kan je op een soortgelijke manier default tablespaces specificeren voor gebruikers. Tijdens database creatie kan het CREATE DATABASE commando de clausule DEFAULT TABLESPACE <tsname> meekrijgen. Na creatie kan je een tabelspace deafult maken met het volgende commando: ALTER DATABASE DEFAULT TABLESPACE <tsname>; Alle gebruikers die aangemaakt worden zonder de DEFAULT TABLESPACE clausule krijgen de <tsname> als hun default tablespace. Je kan de default tablespace op ieder moment met het ALTER commando wijzigen, zodat je op veschillende momenten verschillende tabelspaces al default kan zetten. Belangrijk: Op het moment dat je de default tabelspace aanpast wordt voor voor alle gebruikers de oude tablespace naam veranderd naar <tsname>, zelfs als iets anders is gespecificeerd voor bepaalde begruikers. Bijvoorbeeld: Stel dat de default tablespaces voor begruikers USER1 en USER2 respectievelijk TS1 enTS2 zijn, en deze expliciet gezet zijn tijdens het aanmaken van de gebruikers , dan zullen zij bij het opnieuw zetten van een default tabelspace naar TS1 beiden ook TS als default tablespace hebben. Als de default tablespace niet gespecificeerd wordt tijdens de database creatie, wordt deze default gezet op SYSTEM. Hoe weet je nu wat de default is voor de bestaande database?: SELECT PROPERTY_VALUEFROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_PERMANENT_TABLESPACE'; De DATABASE_PROPERTIES view laat wat belangrijke informatie zien, naast de deafult tablespace ook de default temporary tablespace, global database name, time zone, en veel meer: PROPERTY_NAME ------------------------------ DBTIMEZONE DEFAULT_PERMANENT_TABLESPACE DEFAULT_TBS_TYPE DEFAULT_TEMP_TABLESPACE DICT.BASE EXPORT_VIEWS_VERSION GLOBAL_DB_NAME NLS_CALENDAR NLS_CHARACTERSET NLS_COMP NLS_CURRENCY NLS_DATE_FORMAT NLS_DATE_LANGUAGE NLS_DUAL_CURRENCY NLS_ISO_CURRENCY NLS_LANGUAGE NLS_LENGTH_SEMANTICS NLS_NCHAR_CHARACTERSET NLS_NCHAR_CONV_EXCP NLS_NUMERIC_CHARACTERS NLS_RDBMS_VERSION NLS_SORT NLS_TERRITORY NLS_TIMESTAMP_FORMAT NLS_TIMESTAMP_TZ_FORMAT NLS_TIME_FORMAT NLS_TIME_TZ_FORMAT Default Tablespace voor niet essentiele schema's Verschillende schemas zoals die van de intelligent agent DBSNMP en de data mining gebruiker ODM zijn niet direct geralateerd aan gebruiker operaties, maar wel belangrijk voor de integriteit van de database. Sommige van deze schemas hadden vroeger SYSTEM al hun default tablespace , nog een reden voor de uitbreiding van objecten binnen die speciale tablepsace. Oracle10g introduceerd een nieuwe tablespace SYSAUX genaamd, die de objecten voor die schema 's zal herbergen. Deze tablespace wordt automatisch aangemaakt tijdens database creatie en wordt locally managed. De enige verandering aan deze tablespace is de naam van de datafile. Deze aanpak maakt het mogelijk wanneer de SYSTEM tablespace corrupt raakt en een full database recovery noodzakelijk is. Objecten in SYSAUX kunnen recovered worden als een normale gebruikers tabelspace, terwijl de databasezelf operational zal blijven. Maar wat als je de segmenten van een bepaald schema van SYSAUX naar een andere tabelspace wilt brengen ( bijvoorbeeld die van LogMiner omdat nogal aan groei onderhevig is)? Je moet als DBA goed in de gaten houden dat je de juiste procedure gebruikt om deze spaciale objecten te moven. Gelukig is daar in Oracle 10g de V$SYSAUX_OCCUPANTS view welke de namen van de schema's in SYSAUX weergeeft, hun beschrijving , de ruimte die ze gebruik en hoe je ze moet moven. desc V$SYSAUX_OCCUPANTS
Name Null? Type ----------------------------------------------------------------OCCUPANT_NAME VARCHAR2(64) OCCUPANT_DESC VARCHAR2(64) SCHEMA_NAME VARCHAR2(64) MOVE_PROCEDURE VARCHAR2(64) MOVE_PROCEDURE_DESC VARCHAR2(64) SPACE_USAGE_KBYTES NUMBER Hernoemen van een Tablespace Het is heel gewoon in data warehouse omgevingen, typisch voor data mart architectuur, om tablespaces tussen databases te transporteren . Maar de bron en target databases mogen geen tablespaces met dezelfde naam hebben. Als er twee tablespaces met dezelfde naam zijn meoetd e segmneten in de target database gemoved worden naar een anadere tablespace en zal de originele opnieuwe aangemaakt moeten worden. Makkelijker gezegd dan gedaan. Oracle 10g heeft een simpele oplossing: je kan simpel de bestaande tabelspace renamen (behalve SYSTEM and SYSAUX ), of ze nu permanent zijn of temporary, met het volgende commando: ALTER TABLESPACE <oldname> RENAME TO <newname>; Bij het renamen van de tablespace wordt gelijk de spfile aan gepast. |