Mostrando entradas con la etiqueta oracle. Mostrar todas las entradas
Mostrando entradas con la etiqueta oracle. Mostrar todas las entradas

domingo, 29 de enero de 2012

Eliminar todas las llaves foráneas de un usuario en Oracle

El siguiente es el código de un procedimiento Oracle que elimina todas las llaves foráneas de un usuario:

DECLARE

cadena VARCHAR(30000);

BEGIN

FOR registro IN (SELECT DISTINCT LOWER(A.TABLE_NAME) AS TABLE_NAME, LOWER(A.CONSTRAINT_NAME) AS CONSTRAINT_NAME

FROM ALL_CONSTRAINTS A, ALL_CONS_COLUMNS C

WHERE A.CONSTRAINT_TYPE = 'R'

AND A.OWNER = 'USUARIO'

AND A.CONSTRAINT_NAME = C.CONSTRAINT_NAME

ORDER BY 1,2)

LOOP

IF SUBSTR(registro.CONSTRAINT_NAME,0,1)='$' THEN

cadena := 'ALTER TABLE ' || registro.TABLE_NAME || ' DROP CONSTRAINT "' || registro.CONSTRAINT_NAME || '"';

ELSE

cadena := 'ALTER TABLE ' || registro.TABLE_NAME || ' DROP CONSTRAINT ' || registro.CONSTRAINT_NAME;

END IF;

DBMS_OUTPUT.PUT_LINE(cadena);

EXECUTE IMMEDIATE cadena;

END LOOP;

END;

Nota: es necesario reemplazar la palabra 'USUARIO' por el nombre del usuario.


domingo, 15 de enero de 2012

Consultar todos los índices en PostgreSQL y Oracle

PostgreSQL (hasta 14 índices por tabla):
SELECT
UPPER(t.relname) as table_name
UPPER(a.attname) as column_name
FROM
pg_class t,
pg_class i,
pg_index ix,
pg_attribute a,
pg_namespace
WHERE
t.oid = ix.indrelid
AND i.oid = ix.indexrelid
AND a.attrelid = t.oid
AND (
a.attnum = ix.indkey[0]
OR a.attnum = ix.indkey[1]
OR a.attnum = ix.indkey[2]
OR a.attnum = ix.indkey[3]
OR a.attnum = ix.indkey[5]
OR a.attnum = ix.indkey[6]
OR a.attnum = ix.indkey[7]
OR a.attnum = ix.indkey[8]
OR a.attnum = ix.indkey[9]
OR a.attnum = ix.indkey[10]
OR a.attnum = ix.indkey[11]
OR a.attnum = ix.indkey[12]
OR a.attnum = ix.indkey[13]
OR a.attnum = ix.indkey[14]
)
AND t.relkind = 'r'
AND t.relnamespace = pg_namespace.oid
AND pg_namespace.nspname = 'public'
ORDER BY
t.relname,
a.attname;

Oracle:
SELECT table_name, column_name
FROM user_ind_columns
ORDER BY table_name, column_name


lunes, 9 de enero de 2012

Limpiar/vaciar/eliminar un tablespace del tipo UNDO en Oracle

1-
CREATE UNDO TABLESPACE nuevo DATAFILE '/media/sdb1/nuevo.dbf' SIZE 1M AUTOEXTEND ON MAXSIZE 10M;

Donde:
  • SIZE -> Tamaño inicial en Megabytes.
  • AUTOEXTEND ON MAXSIZE -> Tamaño máximo en Megabytes.

2- 
ALTER SYSTEM SET UNDO_TABLESPACE = nuevo;

3-
DROP TABLESPACE UNDO;
Nota: reemplazar UNDO por el nombre del tablespace UNDO que quieres limpiar/vaciar/eliminar.


Como pudieron darse cuenta, la solución para limpiar/vaciar un tablespace tipo UNDO es sustituirlo por uno nuevo.

Saludos.