Pràctica ASI-C6-ASGBD: Arquitectura d'Oracle

De wikijoan
La revisió el 13:07, 19 abr 2010 per Joan (discussió | contribucions)
(dif) ← Versió més antiga | Versió actual (dif) | Versió més nova → (dif)
Salta a la navegació Salta a la cerca

Objectius

  • Unitat Didàctica: UD 2. Arquitectura d'Oracle

En aquesta pràctica has d'executar les sentències bàsiques que mostren informació de l'arquitectua d'un servidor Oracle, i així afiançar la teoria vista a classe.

Desenvolupament

Al final de la pràctica, l'alumne haurà de pujar al servidor un fitxer comprimit que contingui el script realitzat i el fitxer de sortida (log).

El script, que es dirà script_arq_XX.sql (XX és el número d'usuari), constarà de:

SPOOL script_arq_XX.log
sentències...
SPOOL OFF

comentaris REM allà on calgui

També podeu utilitzar PAUSE si voleu que el script no s'executi de forma ininterrompuda

Espais de taules:

DESC user_tablespaces;
select * from user_tablespaces;

En comptes de *, ficar els camps que consideris significatius

Dins de cada espai de taules es poden emmagatzemar objectes de diferent naturalesa: taules, index, etc. Però no es poden mesclar. Necessitem una manera de separar-los, i això són els segments.

La taula que guarda la informació dels segments d'usuari és user_segments:

DESC user_segments;
select * from user_segments;

En comptes de *, ficar els camps que consideris significatius

Fitxers de dades:

select 'dades' tipus, substr(name,1,70) nombre from v$datafile;

Taules i columnes

DESC ALL_ALL_TABLES
select table_name, num_rows, OWNER from all_all_tables where owner='ASI2AXX';

DESC ALL_TAB_COLUMNS

select RPAD(COLUMN_NAME, 10), RPAD(DATA_TYPE,10), DATA_LENGTH, DATA_PRECISION, COLUMN_id from ALL_TAB_COLUMNS where  owner='ASI2AXX' and table_name='ORDINADOR';

Restriccions de taules

Una tabla puede tener asociadas restricciones que deben cumplir todas las filas. Entre las restricciones que se pueden fijar algunas reciben nombres especiales.: clave primaria, clave ajena.

describe all_constraints

select constraint_name, constraint_type, last_change from all_constraints where table_name='ORDINADOR' and OWNER='ASI2A01';

Usuaris:

describe ALL_USERS
select * from all_users where username like '%ASI%';

Index: Los índices se crean automáticamente cuando se define una restricción UNIQUE o PRIMARY KEY.

Per exemple, per al cas de la taula MUNICIPIS (8000 files), seria bo crear un index sobre aquesta taula de manera que quedin ordenats els municipis de forma alfabètica:

CREATE INDEX ASI2AXX.INDX_MUNICIPIS ON ASI2AXX.MUNICIPIS(MUNICIPI);
ALL_INDEXES
DESC ALL_INDEXES

SELECT INDEX_NAME,INDEX_TYPE,TABLE_OWNER,TABLE_NAME, TABLE_TYPE FROM ALL_INDEXES WHERE OWNER='ASI2AXX' AND TABLE_NAME='MUNICIPIS';

Vistes:

Conceptualmente, una vista puede considerarse como una máscara que se extiende sobre una o más tablas, de modo que cada columna de la vista se corresponde con una o más columnas de las tablas subyacentes. Cuando se consulta una vista, esta traspasa la consulta a las tablas sobre las que se asienta. Las vistas no se pueden indexar.

Las vistas no generan almacenamiento de datos, y sus definiciones se almacenan en el diccionario de datos.

CREATE VIEW MUNICIPIS_BARCELONA AS
SELECT MUNICIPI FROM MUNICIPIS M, PROVINCIES P WHERE M.COD_PROV=P.COD_PROV AND PROVINCIA='Barcelona';

SELECT * FROM MUNICIPIS_BARCELONA WHERE MUNICIPI LIKE 'A%';

DESCRIBE ALL_VIEWS

SELECT VIEW_NAME FROM ALL_VIEWS WHERE OWNER='ASI2AXX';

Seqüències:

Las definiciones de secuencias se almacenan en el diccionario de datos. Son mecanismos para obtener listas de números secuenciales.

DESCRIBE ALL_SEQUENCES

SELECT * FROM ALL_SEQUENCES WHERE SEQUENCE_OWNER='SYSTEM';

Procediments i Funcions

Un procedimiento es un bloque de código PL/SQL, que se almacena en el diccionario de datos y que es llamado por las aplicaciones. Se pueden utilizar para implementar seguridad, no dando acceso directamente a determinadas tablas sino es a través de procedimientos que acceden a esas tablas. Cuando se ejecuta un procedimiento se ejecuta con los privilegios del propietario del procedimiento. La diferencia entre un procedimiento y una función es que ésta última puede devolver valores.

DESCRIBE ALL_OBJECTS

de fet, amb la vista ALL_OBJECTS podem veure no només procediments, sinó qualsevol objecte del diccionari i dels usuaris:

SELECT DISTINCT OBJECT_TYPE FROM ALL_OBJECTS;

Per veure els procediments:

SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE='PROCEDURE' AND OWNER='ASI2AXX';

'''Fitxers redo log''':
<pre>
DESCRIBE V$LOGFILE

select group#, status, substr(member,1,60) from v$logfile;
Per saber quin és el fitxer actiu, he de mirar quin fitxer té status='STALE'

Si vull mirar informació detallada d'aquests arxius, número de seqüencia, etc...:

DESCRIBE V$LOG
select * from v$LOG;

Puc provocar un canvi de fitxer de Redo Log (i així simular que hi ha hagut activitat a la base de dades):

SQL> ALTER SYSTEM SWITCH LOGFILE;

select * from v$LOG;

ara puc veure com el número de seqüència ha canviat. Per saber quin és el grup de redo log que està actiu (equivalent a un fitxer), ara miraré STATUS='CURRENT'. v$log i v$logfile estan units pel camp group#

Informació: Val a dir que les taules-vistes que comencen per V$ no són pròpiament taules de la base de dades, i es poden consultar amb la base de dades tancada.

Actualment estem treballant en mode No-arxivat. Per comprovar-ho mitjançant SQL, haurem de tenir els privilegis suficients:

SQL> connect system/manager@bbdd as sysdba
SQL> archive log list;

Ficheros de control

select 'control' tipus, substr(name,1,70) nom from v$controlfile
union all
select 'datos' tipus, substr(name,1,70) nom from v$datafile
union all
select 'redo log' tipus, substr(member,1,70) nom from v$logfile
/

Entrega

  • entregar el script SQL que has generat i el fitxer de log, indicant clarament el nom i el número de classe (script_arq_XX.sql, script_arq_XX.log). Exercici individual o per parelles. En el nom del fitxer s'haurà d'identificar clarament el número de pràctica i el número de classe. Si has d'entregar diferents fitxers m'envies un sol fitxer comprimit (rar, zip).
  • entregar al Moodle: http://192.168.0.15/moodle

Recursos

Durarda

2 hores



creat per Joan Quintana Compte, novembre 2009