BASES DE DADES ORACLE
UD2: ADMINISTRACIÓ DE LA BASE DE DADES
Tema 2.1: Administració remota amb l'Schema Manager
Activitat 2.1.6. Altres objectes de la BD: instantànies,
rutines enmagatzemades, vincles, seqüències, clusters
Instantànies: Introducció
-
Les instantànies (snapshot) són còpies de només
lectura d'una taula o d'un subconjunt de les dades d'una taula. De forma
semblant a les vistes es crean a partir d'una sentència SQL de selecció,
però es diferèncien en que les dades que mostren són
estàtiques: si modifiquem la taula original la instantània
no reflectirà els canvis, al menys no inmediatament. De aquí
el nom instantània: ve a ser com una "fotografia" de les dades d'una
taula en un cert instant.
-
La instantània pot ser creada i no actualizada o bé es pot
refrescar periódicament.
-
Les principals raons per a implementar instantànies són:
1. Si molts usuaris accedeixen sovint a una taula per consultar-la,
els temps de resposta milloren si accedeixen a una instantània en
lloc de a la taula original.
2. En un entorn de BD distribuïdes podem
disposar instantànies en servidors remots de la xarxa. D'aquesta
forma els usuaris de la xarxa no hauràn d'accedir a un servidor
remot a través d'Internet sinó que accedeixen a la instàntania
en el servidor local. A banda de l'augment de velocitat i l'estalvi en
connexions que aixó comporta, si el servidor remot es penja o bé
tenim problemes de connexió amb Internet sempre podem accedir a
la instantània local.
-
Per crear una instantània d'una taula amb l'Schema Manager triem
la icona "crear objecte", opció "snapshot" i en la finestra
omplim les següents dades:
Name: nom de la instantània. Es convenient triar un nom
significatiu.
Schema: el nostre esquema
Tablespace: acceptar Default (l'assignat al nostre usuari per
defecte)
Refresh Type: els valors són:
Complete: les dades de la instantània es prenen
del resultat d'executar una senténcia SQL. És la més
habitual.
Fast: les dades es prenen d'un altre instantània
associada (una snapshot log) que ha d'estar creada previament.
Force: intenta prendre les dades d'una snapshot log i
si no és possible llavors executa la sentència SQL
Start Date: Data en la qual s'executa el refresc de dades
per primer cop. L'hora per defecte és les 00:00:00.
Next Date: Data d'actualització de les dades
Snapshot Subquery: sentència SQL que proporciona les dades
-
En la següent figura teniu un exemple de creació d'instantània:
Creació d'una instantània que pren dades
de la taula Alumnes
-
Un cop creada la instantània podem accedir a ella com si sigues
una taula:
select * from instantània
Instantànies: exercicis
1. Crear una instantània anomenada Publi_instant que selecciona
les files de la taula publicacions tals que l'editorial sigui "Anaya".
Les dades es copiaràn avui mateix dins de cinc minuts a partir de
l'hora actual. Per programar la cópia amb una precissió d'hores,
minuts i segons utilitzeu el següent format en el camp Start Date:
to_date('19/01/2001 17:00:00', 'DD/MM/YYYY HH24:MI:SS')
En aquest exemple programem la cópia per que es realitzi
el 19/1/2001 a les 17:00:00.
2. Quan hagi pasat l'hora determinada per la copia, comproveu
el contingut de la instantània des de SQL amb una SELECT
igual que si sigues una taula o una vista. Aixó es posible perque
Oracle crea automàticament una vista de només lectura connectada
a la instantània. Comproveu aquesta afirmació: ha d'existir
una vista anomenada Publi_instant en el vostre esquema.
3. Intenteu modificar (INSERT o UPDATE) les dades
de la instantània des de SQL. Què passa? Perquè?
4. En crear una instantània Oracle també crea un
objecte del tipus Refresh Groups que conté detalls
sobre l'actualització periódica de les dades. Podem utilitzar-lo
per actualitzar manualment les dades. Seguim les següents passes:
4.1 Afegiu un altre fila a la taula Publicacions. Després
de fer-ho la instantània i la taula ja no coincidiran. Comproveu
aquest punt des de SQL.
4.2 Obriu el Refresh Group anomenat Publi_instant. El
aspecte serà semblant al de la figura (que mostra una instantània
diferent de la d'aquesta pràctica)
Premeu el botó Refresh Now per actualitzar la instantània
i després premeu Ok. Torneu a SQL i comproveu que ara el contingut
de la taula i de la instantània tornen a coincidir.
Vincles de la base de dades
-
L'utilitat dels objectes vincle (Database Links) és la de
proporcionar accés a bases de dades remotes de forma transparent.
Oracle utilitza el terme transparència d'ubicació: les programes
poden utilitzar sempre un nom fix per accedir a una taula, independentment
del lloc on estigui situada.
-
Quan utilitzem un vincle per accedir a dades remotes en una BD distribuida,
el nostre servidor s'encarrega d'iniciar una sessió en el servidor
remot i accedir a les dades, emprant els paràmetres que hem proporcionat
en crear el vincle.
-
En la següent figura veiem la definició d'un vincle a una BD
remota:
Creació d'un objecte tipus vincle (Database
Link)
-
El vincle s'ha definit com Public. L'usuari utilitzat en la connexió
pot ser l'actual que estem utilitzant en l'Schema Manager (opció
Connected
User), un usuari privilegiat donat d'alta en totes les BD de la xarxa
que no té necessitat de donar cap password (current User)
o bé un usuari fix, com ara Scott (opció
Fixed
User). Per últim indiquem el nom del servei Net8 utilitzat per
a connectar-se, en aquest cas s'anomena orc0. Cal remarcar que aquest
nom de servei no és local, sinó que està definit en
el propi servidor al que estem connectats, de forma que és ell el
que fa la feina de cerca i connexió a l'altre servidor remot. Des
del client no podem veure els detalls del servei orc0 de forma que
no sabem, si no ens ho diuen, a quin servidor estem accedint. En aquest
exemple orc0 ens connecta a un altre BD situada en un altre servidor
NT.
-
Un cop creat el vincle es pot comprovar el seu funcionament accedint-hi
(botó dret del ratolí, opció Quick Edit) i
prement el botó Test.
-
Utilitzar un vincle des de SQL es molt fàcil. La següent instrucció
mostra la taula Emp de l'usuari Scott d'una BD remota en
la xarxa utilitzant el vincle Vincle_BD_Administrador :
select * from scott.emp@vincle_bd_administrador
Vincles: Exercicis
1. En la BD remota a la qual podem accedir a través del
servei orc0 existeix un usuari anomenat convidat amb password guest
. Crear un vincle en el vostre esquema anomenat convidat per accedir a
aquesta BD remota amb aquest usuari. Valideu el seu funcionament.
2. L'usuari convidat té dret de lectura sobre la taula
Dept de l'usuari Scott de la mateixa BD remota. Des
de SQL proveu a accedir a la taula Dept usant el vincle. El resultat
ha de ser:
DEPTNO DNAME
LOC
---------- -------------- -------------
10
ACCOUNTING NEW YORK
20
RESEARCH DALLAS
30
SALES CHICAGO
40
OPERATIONS BOSTON
Seqüències (Sequences)
-
En les taules que tenen una clau primaria numèrica de tipus automàtic
(el sistema genera un número automàticament quan insetem
una fila) les seqüències indiquen la configuració d'aquests
índexs. Per exemple poden enmagatzemar els nombres en memòria
caché aumentant la velocitat d'accés. O bé podem especificar
un valor inicial diferent d'1, o que la numeració sigui en ordre
invers.
-
En la següent figura es mostra un exemple de configuració d'una
seqüència:
Una seqüència associada a una clau primaria
Agrupacions físiques de dades (clusters)
Quan tenim columnes de taules interrelacionades que sabem que s'accediran molt
sovint pot ser més eficient la recuperació de les dades si aquestes
columnes ocupen un espai proper en el disc físic. Definim un objecte
cluster com una agrupació física de les columnes de diverses
taules.
Exemple: volem crear dues taules anomenades MARQUES i MOTOS rel·lacionades
per el camp comú marca. Aqeust camp comú volem que estigui en
un cluster per accelerar la recuperació d'informació. Procedirem
com segueix:
1r) Crearem un cluster. La figura mostra els paràmetres que cal informar:
- Name: nom que donem a l'objecte cluster
- Schema, Tablespace: ubicació del cluster
- Size: estimació de la grandària màxima que tindrà
per tal de que Oracle reservi l'espai adient
- Type: forma d'accés a les dades del cluster. Podem indexar les dades
o bé fer un accés calculat (hashing); en aquest cas caldrà
donar una estimació del nombre de claus diferents que contindrà
i especificar quina funció de càlcul de claus utilitzarà,
la que té Oracle per defecte o la nostra pròpia funció.
- Cluster Key Columns: columnes que formen part del cluster i per tant s'indexaran
(o calcularan en el cas del hashing)
Les targetes Storage i Options són semblants a les seves homònimes
en taules i no les tornem a explicar.
2n) Un cop creat el cluster creaem les taules que en formen
part. Aixó ho podem fer des de l'objecte cluster que acabem de crear
fent clic-dret sobre ell i seleccionant crear taules.
Per tant ara creem la taula MARQUES amb les següents especificacions:
- Targeta General: Definim els camps MARCA VARCHAR(20) i DESCRIPCIO VARCHAR(80)
- Targeta Constraints: Definim el camp MARCA com clau primària
- Targeta Cluster Columns: Seleccionarem la columna MARCA per tal de que correspongui
amb la seva homònima en el cluster

Fem "Create" per crear la taula.
3r) Creem al segona taula, MOTOS, amb les seguents especificacions:
- Targeta General (canvieu l'esquema JCUESTA per el vostre):
- Targeta Constraints: definim la cla primària i la forània
per rel·lacionar la taula MOTOS amb la taula MARQUES:
- Targeta Cluster Columns: procedim igual que amb la taula MARQUES
En acabar l'exemple l'aspecte de l'¡objecte cluster serà com aquest:
En la següent figura definim un cluster per algunes de les columnes
més sol.licitades de les taules interrelacionades alumnes i cursos: