viernes, 3 de noviembre de 2023

GTT (6) - BD MUNICIPIO (6). Trucos de consultas. TABLESPACES, DATAFILES y PROCESOS BLOQUEANTES.Consultas ANALITICAS de ORACLE

 1. Utilizar LIKE con underscore "_"

Para ello hay que definir el caracer de "escape" que en el primer ejemplo es "\" y en el segundo "!"

--1. Aquí "_" es un comodin y actua parecido que "%"
SELECT * FROM ALL_TAB_COLUMNS WHERE COLUMN_NAME LIKE '%_OT' ORDER BY COLUMN_NAME;

--2. En estos 2 casos le decimos el carcter de escape y va bien
SELECT * FROM ALL_TAB_COLUMNS WHERE COLUMN_NAME LIKE '%\_OT' ESCAPE '\' ORDER BY COLUMN_NAME;
SELECT * FROM ALL_TAB_COLUMNS WHERE COLUMN_NAME LIKE '%!_OT' ESCAPE '!' ORDER BY COLUMN_NAME;


2. Crear una tabla que contenga el nombre de la tabla y el números de registro para descartar tablas vacias

--1. Aquí "_" es un comodin y actua parecido que "%"
SELECT * FROM ALL_TAB_COLUMNS WHERE COLUMN_NAME LIKE '%_OT' ORDER BY COLUMN_NAME;

--2. En estos 2 casos le decimos el carcter de escape y va bien
SELECT * FROM ALL_TAB_COLUMNS WHERE COLUMN_NAME LIKE '%\_OT' ESCAPE '\' ORDER BY COLUMN_NAME;
SELECT * FROM ALL_TAB_COLUMNS WHERE COLUMN_NAME LIKE '%!_OT' ESCAPE '!' ORDER BY COLUMN_NAME;


3. TABLESPACES y DATAFILES 

--01. Eliminar un tablespace

DROP TABLESPACE UN_TABLESPACE;


--02. Eliminar un tablespace en cascada

DROP TABLESPACE LOBDTS INCLUDING CONTENTS CASCADE CONSTRAINTS;


--03. Renombrar un tablespace

ALTER TABLESPACE UN_TABLESPACE RENAME TO DOS_TABLESPACE;


--04. No se puede borrar un DATAFILE, pero si poner fuera de línea.

-- Una vez fuera de línea, se puede borrar por sistema operativo.

-- Pero no se puede crear otro DATAFILE con la misma ruta, pues parece ser que se la guarda internamente!!!

ALTER DATABASE DATAFILE '/opt/oracle/oradata/ORCLCDB/lobdts1.dbf' OFFLINE DROP;


--05. Listar los TABLESPACES

SELECT * FROM USER_TABLESPACES ORDER BY TABLESPACE_NAME;


--06. Listar los TABLESPACES

SELECT * FROM DBA_DATA_FILES ORDER BY TABLESPACE_NAME


5. Procesos bloqueantes

A veces no hay manera de borrar una tabla pues hay un proceso trabando en ella. Para listar y matar procesos se hace:

--07. view processes that block tables. Get SID and SERIAL#

SELECT O.OBJECT_NAME, S.SID, S.SERIAL#, P.SPID, S.PROGRAM,S.USERNAME,

S.MACHINE,S.PORT , S.LOGON_TIME,SQ.SQL_FULLTEXT

FROM V$LOCKED_OBJECT L, DBA_OBJECTS O, V$SESSION S,

V$PROCESS P, V$SQL SQ

WHERE L.OBJECT_ID = O.OBJECT_ID

AND L.SESSION_ID = S.SID AND S.PADDR = P.ADDR

AND S.SQL_ADDRESS = SQ.ADDRESS;



--08. kill processes that block tables passing SID and SERIAL# as parameters

alter system kill session '12,32060'; --SID=12--> and SERIAL#=32060


4. Funciones analiticas

Es un poco rollo, y lo abandono de momento.

Syntaxis general:

Function(arg1,..., argn) OVER ( [PARTITION BY <...>] [ORDER BY <....>] [<window_clause>] )

<window_clause> is like "ROW <?>" or "RANK <?>"


No hay comentarios :

Publicar un comentario