Comandos DBA Útiles
Comandos DBA Útiles
***********************************************************************************
*******************************************************
Restauraci�n Standby
/oracle/app/oracle/product/11.2.0/dbhome_1/root.sh
cd
. ./.profile_BD
export ORACLE_HOME=SID de la instancia
***********************************************************************************
**************************
Export e import de una base de datos
`date '+-%d-%m-%y'`
"/
***********************************************************************************
**************************/
dumpfile=archivof_%U.dmp
'**********************************************************************************
***************************************************
FLASHBACK TABLE
***********************************************************************************
***************************************************
Ver el n�mero de sesi�n de un proceso
***********************************************************************************
*************************************************
Formateo de la fecha y hora de la sesi�n
/alertlogs/admin/famisana/udump
/
***********************************************************************************
****************************************************/
Generar awr
@$ORACLE_HOME/rdbms/admin/awrrpt.sql
@$ORACLE_HOME/rdbms/admin/awrrpti.sql
***********************************************************************************
*************************************************
Validaci�n de Listeners
***********************************************************************************
*************************************************
N�mero de sesiones
***********************************************************************************
***********************************
Sesiones bloqueantes
SELECT
decode(L.TYPE,'TM','TABLE','TX','Record(s)') TYPE_LOCK,
decode(L.REQUEST,0,'NO','YES') WAIT,
S.OSUSER OSUSER_LOCKER,
S.PROCESS PROCESS_LOCKER,
S.USERNAME DBUSER_LOCKER,
O.OBJECT_NAME OBJECT_NAME,
O.OBJECT_TYPE OBJECT_TYPE,
concat(' ',s.PROGRAM) PROGRAM,
O.OWNER OWNER,
s.sid,
p.spid
FROM v$lock l,dba_objects o,v$session s, v$process p
WHERE l.ID1 = o.OBJECT_ID
AND s.SID =l.SID
and s.paddr = p.addr
AND l.TYPE in ('TM','TX');
***********************************************************************************
*************************************************
EXEC dbms_workload_repository.modify_snapshot_settings(interval=>minutos);
ej:EXEC dbms_workload_repository.modify_snapshot_settings(interval=>30);
**************************************************************************
Informaci�n de sesiones
SELECT
s.sid,s.process,spid,s.serial#,s.sql_id,s.username,s.machine,s.terminal,s.osuser,s.
program,
s.module,s.logon_time,w.EVENT,w.SECONDS_IN_WAIT
FROM v$session s, v$process p, v$session_wait w
WHERE p.addr = s.paddr AND s.sid = w.sid;
***************************************************************************
Renombrar sin�nimo
du -hs *
********************************************************************************
paralelismo de sesion
run
{
backup archivelog all delete input format 'E:\Backup\sicomprod\Archive\arch_%d_%u_
%s';
}
*******************************************************************************
ubicaci�n ALERT LOG
********************************************************************************
Cambiar SID de ORACLE
***********************************************************************************
*
select name, log_mode from v$database;
set ORACLE_SID=xyz
#sqlplus /nolog
SQL>conn / as sysdba
SQL>alter user USUARIO identified by CONTRASE�A;
SELECT *
FROM database_properties
WHERE property_name like '%TABLESPACE';
https://localhost:1158/em
SELECT sid,
username,
sql_id,
module
FROM v$session
WHERE sql_id IN ('4t8gnxz6ymhjx')
order by sid;
DECLARE
MYSQL VARCHAR2(250) := 'alter table emp add (mobile varchar2(15))';
IN_USE_EXCEPTION EXCEPTION;
PRAGMA EXCEPTION_INIT(IN_USE_EXCEPTION, -54);
BEGIN
WHILE TRUE LOOP
BEGIN
EXECUTE IMMEDIATE MYSQL;
EXIT;
EXCEPTION
WHEN IN_USE_EXCEPTION THEN
NULL;
END;
DBMS_LOCK.SLEEP(1);
END LOOP;
END;
*********************************************************************************
SWITCH
*
*********************************************************************************
Alter system switch logfile;
*
*
Alter system checkpoint;
*
*
Alter system flush shared_pool;
*
*********************************************************************************
SELECT OWNER, COUNT(*) FROM ALL_OBJECTS WHERE STATUS='INVALID' GROUP BY OWNER ORDER
BY 2 DESC;
SELECT E.OWNER, E.NAME, E.TYPE, E.SEQUENCE, E.LINE, E.POSITION, E.TEXT, S.TEXT LINE
***********************************************************************************
**********************
TRABAJO CON TABLESPACES
*
***********************************************************************************
**********************
TABLESPACES
select ddf.TABLESPACE_NAME,
round(ddf.BYTES/1024/1024,2) SIZE_MB,
round(dfs.BYTES/1024/1024,2) FREE_MB,
round(((ddf.BYTES-dfs.BYTES)/ddf.BYTES)*100,2) PERCENT_USED
from (select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_data_files
group by TABLESPACE_NAME) ddf,
(select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_free_space
group by TABLESPACE_NAME) dfs
where ddf.TABLESPACE_NAME=dfs.TABLESPACE_NAME
--and dfs.TABLESPACE_NAME in ('DATA_REGISTRO')
order by ddf.TABLESPACE_NAME asc;
ALTER DATABASE
DATAFILE '/u01/app/oracle/product/10.2.0/oradata/cesaora/indacademico.dbf'
RESIZE 185M;
FILE_NAME FILE_ID
RELATIVE_FNO
------------------------------------------ ---------- ------------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\DB00PRO\SYSTEM01.DBF 1
1
C:\ORACLE\PRODUCT\10.2.0\ORADATA\DB00PRO\UNDOTBS01.DBF 2
2
C:\ORACLE\PRODUCT\10.2.0\ORADATA\DB00PRO\SYSAUX01.DBF 3
3
C:\ORACLE\PRODUCT\10.2.0\ORADATA\DB00PRO\USERS01.DBF 4
4
C:\ORACLE\PRODUCT\10.2.0\ORADATA\DB00PRO\TSEJEMPLOS1 5
5
C:\ORACLE\PRODUCT\10.2.0\ORADATA\DB00PRO\PRUEBA1.DBF 6
6
C:\ORACLE\PRODUCT\10.2.0\ORADATA\DB00PRO\BIG.DBF 7
1024
C:\ORACLE\PRODUCT\10.2.0\ORADATA\DB00PRO\DF16K.DBF 8
8
8 rows selected.
Todos los datafile de tipo Big tendran como nro relativo 1024
------------------------------------------------------------------
Saber el nro maximo de datafile que puede tener su base de datos
Parametro: DB_FILES
SQL> show parameter db_files
Tipos de Datafile
Datafile de Alta disponibilidad
Datafiles de Baja disponibilidad
Datafiles de Solo Lectura
Datafile del Sistema
Redo Log Files
Cuando creamos la base de datos, se crean los datafiles iniciales, sin el datafile
del sistema no hay base de datos:
Create Database....
Con esta sentencia se suelen crear datafiles que ya existian pero se perdieron y no
hay copias, se recrea el datafile pero est� vacio:
Esto se consigue con la clausula AUTEXTEND ON NEXT, cuando un datafile est� lleno y
quiera agregar una extension mas, se extender� tanto como le pusimos
en AUTEXTEND ON NEXT para que pueda ser agregada la extension al datafile.
Tambien tenemos el MAXSIZE que sirve para dar limite al tama�o del datafile, por
mas que le demos que crezca solo siempre puede tener un limite,
podemos poner un valor y sino inlimited que indica que puede crecer hasta que le de
espacio el disco, osea su limite ser� la capacidad de disco
FILE_NAME TABLESPACE_NAME
--------------------------------------------------------- ---------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\DB00PRO\SYSTEM01.DBF SYSTEM
C:\ORACLE\PRODUCT\10.2.0\ORADATA\DB00PRO\UNDOTBS01.DBF UNDOTBS1
C:\ORACLE\PRODUCT\10.2.0\ORADATA\DB00PRO\SYSAUX01.DBF SYSAUX
C:\ORACLE\PRODUCT\10.2.0\ORADATA\DB00PRO\USERS01.DBF USERS
C:\ORACLE\PRODUCT\10.2.0\ORADATA\DB00PRO\TSEJEMPLOS1 TSEJEMPLOS
C:\ORACLE\PRODUCT\10.2.0\ORADATA\DB00PRO\PRUEBA1.DBF TBPRUEBA
C:\ORACLE\PRODUCT\10.2.0\ORADATA\DB00PRO\BIG.DBF TBBIG
C:\ORACLE\PRODUCT\10.2.0\ORADATA\DB00PRO\DF16K.DBF TB16KB
8 rows selected.
-----------------------------------------------------------------
* Una pregunta se plantea, como hacemos crecer manualmente un datafile?
Si esta en modo NoArchivelog no se puede poner offline a menos que sea para
eliminarlo, porque una vez puesto offline no se podra poner online:
Ejemplo:
Como nuestra base esta en modo archivelog:
Como no esta sincronizado el datafile con el resto de los datafile da error y pide
que se haga recovery
Para sincronizar un datafile que se quedo offline se hace el recover.
Para tareas admin es recomendable poner TODO el tablespace offline y no solo por
datafiles
-------------------------------------------------------------------
RENOMBRAR Y REUBICAR DATAFILES
PASOS:
1) PONER EL TABLESPACE OFFLINE
Si quiero mover un datafile, tengo que saber a que tablespace pertenece
--------------------------------------------------------------
ELIMINAR DATAFILE
alter tablespace .... drop datafile -----> borra los archivos del SO
Alter tablespace ......... datafile .... drop including datafiles -----> sino
coloco including no borra lo del SO
Requisitos para borrar:
El datafile tiene que estar abierto, tiene que estar online
Si no est� vac�o, no se puede borrar, si tiene extensiones no se puede borrar
No puede ser el unico datafile de un tablespace
No puede pertenecer a un tablespace en Read Only
no puede pertenecer al tablespace System ni Sysaux
********************************************************************
Ubicaci�n de la zona de archives
********************************************************************
select ddf.TABLESPACE_NAME,
round(ddf.BYTES/1024/1024,2) SIZE_MB,
round(dfs.BYTES/1024/1024,2) FREE_MB,
round(((ddf.BYTES-dfs.BYTES)/ddf.BYTES)*100,2) PERCENT_USED
from (select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_data_files
group by TABLESPACE_NAME) ddf,
(select TABLESPACE_NAME,
sum(BYTES) bytes
from dba_free_space
group by TABLESPACE_NAME) dfs
where ddf.TABLESPACE_NAME=dfs.TABLESPACE_NAME
order by ddf.TABLESPACE_NAME asc;
Usuarios administradores
********************************
USUARIOS CON ALTO CONSUMO DE CPU*
********************************
***********************************************************************************
*********************************
Versi�n de Oracle:
select value
from v$system_parameter
where name = 'compatible'
select value
from v$system_parameter
where name = 'spfile'
select value
from v$system_parameter
where name = 'control_files'
select value
from v$system_parameter
where name = 'db_name'
Vista que muestra los usuarios de Oracle conectados y el n�mero de sesiones por
usuario
Muestra los datos de una tabla especificada (en este caso todas las tablas que
lleven la cadena "EMPLO"):
select *
from ALL_ALL_TABLES
where upper(table_name) like '%EMPLO%'
select *
from ALL_TRIGGERS
Usuarios de Oracle y todos sus datos (fecha de creaci�n, estado, id, nombre,
tablespace temporal,...):
Select * FROM dba_users
Ficheros temporales:
Tablespaces:
select sum(bytes)/1024/1024 MB
from dba_data_files
Tama�o ocupado por una tabla concreta sin incluir los �ndices de la misma
select sum(bytes)/1024/1024 MB
from user_segments
where segment_type='TABLE' and segment_name='NOMBRETABLA'
Tama�o ocupado por una tabla concreta incluyendo los �ndices de la misma
select sum(vsize('NOMBRECOLUMNA'))/1024/1024 MB
from NOMBRETABLA
Espacio ocupado por los diferentes segmentos (tablas, �ndices, undo, rollback,
cluster, ...):
Espacio ocupado por todos los objetos de la base de datos, muestra los objetos
que m�s ocupan primero:
select privilege
from dba_sys_privs
where grantee = 'NOMBRE_ROL'
Lanzar Trace
execute dbms_system.set_sql_trace_in_session(sid, serial#, true);
execute dbms_system.set_sql_trace_in_session(366, 11440, true);
Formatear trace
tkprof input.trc output.txt
select
SESSION_KEY, INPUT_TYPE, STATUS,
to_char(START_TIME,'mm/dd/yy hh24:mi') start_time,
to_char(END_TIME,'mm/dd/yy hh24:mi') end_time,
elapsed_seconds/3600 hrs
from V$RMAN_BACKUP_JOB_DETAILS
WHERE TRUNC(START_TIME)>TRUNC(SYSDATE-5)
order by session_key;
/******************************************************/
SELECT
sid sid
, serial# serial_num
, b.opname opname
, TO_CHAR(b.start_time, 'mm/dd/yy HH24:MI:SS') start_time
, b.totalwork totalwork
, b.sofar sofar
, ROUND( (b.sofar/DECODE( b.totalwork
, 0
, 0.001
, b.totalwork)*100),2) pct_done
, b.elapsed_seconds elapsed_seconds
, b.time_remaining time_remaining
, DECODE( b.time_remaining
, 0
, TO_CHAR((b.start_time + b.elapsed_seconds/3600/24), 'mm/dd/yy
HH24:MI:SS')
, TO_CHAR((SYSDATE + b.time_remaining/3600/24), 'mm/dd/yy HH24:MI:SS')
) done_at
FROM
v$session a
JOIN v$session_longops b USING (sid,serial#)
WHERE
a.program LIKE 'rman%'
AND b.opname LIKE 'RMAN%'
AND b.opname NOT LIKE '%aggregate%'
AND b.totalwork > 0
ORDER BY
b.start_time
/
//**************************************************/
select a.username,
a.account_status,
b.granted_role,
(CASE WHEN granted_role in ('AQ_ADMINISTRATOR_ROLE', 'DBA',
'DELETE_CATALOG_ROLE', 'HS_ADMIN_ROLE','IMP_FULL_DATABASE', 'SCHEDULER_ADMIN',
'XDBADMIN' ) THEN 'X' ELSE '' END) Admin_priv
from dba_users a
left join user_role_privs b on A.USERNAME=B.USERNAME
where account_status='OPEN' and
granted_role is not null
order by 1,2,3;
/******************************************************/
Eliminar Job
EXEC SYS.dbms_ijob.remove(322);
*******************************************************************
Reinstalar o reparar Datapump
SQL>@E:\oracle\product\10.2.0\db_2\rdbms\admin\catdph.sql
SQL >@$ORACLE_HOME\rdbms\admin\prvtdtde.plb
SQL >@E:\oracle\product\10.2.0\db_2\rdbms\admin\catdpb.sql
SQL >@$ORACLE_HOME\rdbms\admin\dbmspump.sql
SQL >@$ORACLE_HOME\rdbms\admin\utlrp.sql
**************************************
/*Seteamos el uso maximo de SQL Server a un valor bajo (en este ejemplo, 200MB)*/
sp_configure 'max server memory', 2048;
GO
RECONFIGURE WITH OVERRIDE
GO
CHECKPOINT
GO
/*Seteamos el uso maximo de SQL Server al valor que deseamos, (en este ejemplo,
6144MB). Como la liberacion de memoria, el SQL Server no la hace inmediatamente,
hacemos un delay de 1 minuto.*/
WAITFOR DELAY '00:01:00'
GO
sp_configure 'max server memory', 9216;
GO
RECONFIGURE WITH OVERRIDE
GO
CHECKPOINT
GO
SELECT
substring(text,qs.statement_start_offset/2
,(CASE
WHEN qs.statement_end_offset = -1 THEN len(convert(nvarchar(max),
text)) * 2
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2)
,qs.plan_generation_num as recompiles
,qs.execution_count as execution_count
,qs.total_elapsed_time - qs.total_worker_time as total_wait_time
,qs.total_worker_time as cpu_time
,qs.total_logical_reads as reads
,qs.total_logical_writes as writes
FROM sys.dm_exec_query_stats qs
CROSS JOIN sys.dm_exec_sql_text(qs.sql_handle) st
LEFT JOIN sys.dm_exec_requests r
ON qs.sql_handle = r.sql_handle
ORDER BY 3 DESC
SELECT es.session_id
,es.program_name
,es.login_name
,es.nt_user_name
,es.login_time
,es.host_name
,es.cpu_time
,es.total_scheduled_time
,es.total_elapsed_time
,es.memory_usage
,es.logical_reads
,es.reads
,es.writes
,st.text
FROM sys.dm_exec_sessions es
LEFT JOIN sys.dm_exec_connections ec
ON es.session_id = ec.session_id
LEFT JOIN sys.dm_exec_requests er
ON es.session_id = er.session_id
OUTER APPLY sys.dm_exec_sql_text (er.sql_handle) st
WHERE es.session_id > 50 -- < 50 system sessions
ORDER BY es.cpu_time DESC
MYSQL
Si usted hab�a establecido previamente una contrase�a para el usuario root, pero ha
olvidado cual era, puede establecer una nueva contrase�a. El siguiente
procedimiento es para sistemas Windows. El procedimiento para sistemas Unix est�
descrito m�s adelante en esta secci�n.
Men� Inicio -> Panel de Control -> Herramientas administrativas -> Servicios
Guarde el archivo con cualquier nombre. Para este ejemplo, el nombre del
archivo ser� C:\mysql-init.txt.
Abra una ventana de comandos para obtener una consola de comandos DOS:
Los contenidos del archivo nombrado por la opci�n --init-file son ejecutados en
el inicio del servidor, cambiando la contrase�a de root. Cuando el servidor se haya
iniciado correctamente, deber�a borrar el archivo C:\mysql-init.txt.
Men� Inicio -> Panel de Control -> Herramientas Administrativas -> Servicios
Encuentre el servicio MySQL en la lista, pulse con el bot�n derecho del rat�n,
y escoja la opci�n Propiedades. El campo Ruta al Ejecutable contiene la
configuraci�n de --defaults-file.
Entre en sus sitema como usuario Unix root o bien como el mismo usuario que
ejecuta el servidor mysqld.
Puede parar el servidor MySQL enviando un comando kill (no kill -9) a el
proceso mysqld utilizando la ruta del archivo .pid en el siguiente comando:
Guarde el archivo con cualquier nombre. Para este ejemplo, el archivo tendr� el
nombre ~/mysql-init.
Los contenidos del archivo son ejecutados al inicio del servidor, cambiando la
contrase�a de root. Despu�s de que el servidor se haya iniciado con �xito, deber�a
borrar ~/mysql-init.
To dump all MySQL databases on the system, use the --all-databases shortcut:
$ mysqldump -u root -p --all-databases > [backupfile.sql]
Restoring a MySQL Database
To restore your previously created custback.sql dump back to your 'Customers' MySQL
database, you'd use:
$ mysqlimport -u sadmin -p pass21 Customers custback.sql;
'
Postgres
update public.users
set password=md5('1019005760')
WHERE user_id='co1019005760';