Verbeterde Tablespace Management - Oracle 10g

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_VALUE

FROM 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.

 

Advertentie

>

Poll

Voorkeur
 

Wie is er aanwezig

We hebben 157 gasten online