viernes, 28 de febrero de 2014

Delete Disk from a Diskgroup

Oracle ASM | Delete Disk from a Diskgroup

Wireless Information System for Emergency Resp...
Image via Wikipedia
En la última migración de discos, se decidio cambiar  el storage de HP-EVA por la solución de EMC.
En la misma, me toco quitar discos componentes de diskgroups para ser eliminados.
Este instructivo que les dejo hace referencia al delete de discos :
  • Delete de discos, miembros de un diskgroup, de la instancia ASM.
  • Delete de discos, miembros de un diskgroup, del sistema operativo tipo unix (En mi caso RHL).
QUITANDO DISCO DE LA INSTANCIA DE ASM
Sacar los discos de ASM implica que la decisión fuera tomada por migración de discos o storage que no fue bien asignado y esta ocioso.
O circuntancias que aún no llegamos a comprender y que llegan desde muy arriba. =D
Como tarea previa tenemos conocimiento de que hay espacio de “INTERCAMBIO” de información antes de quitar el disco y reemplazarlo por otro. O quitarlo definitivamente.
Al momento de quitar el disco , comenzará el rebalanceo de los datos dentro de los discos que quedaron en el storage. Una vez que finalice el Rebalanceo, el disco desaparecerá por completo.
Bien, una vez definidos estos puntos, consultemos en la instancia que discos son los que están disponibles.
SQL> col path format a40 
     set line 120 
     select name, path, group_number from v$asm_disk;

NAME          PATH     GROUP_NUMBER
------------------------------ ---------------------------------------- ------------
OT2D1N_DG1_0002         /dev/oracleasm/disks/SAN_OT2D1N_DG1_LV2     2
OT2D1N_DG1_0003         /dev/oracleasm/disks/SAN_OT2D1N_DG1_LV1     2
DATA_0000         /dev/oracleasm/disks/SAN_DATA01      1
OT2D1N_DG1_0000         /dev/oracleasm/disks/SAN_TEMPORAL     2
OT2D1N_DG1_0001         /dev/oracleasm/disks/SAN_OT2D1N_DG1_LV3     2
Quitamos el Disco con la siguinte sentencia , donde colocamos el nombre de nuestro diskgroup y el nombre del disco que vamos a quitar.
SQL> ALTER DISKGROUP OT2D1N_DG1 DROP DISK OT2D1N_DG1_0001;

Diskgroup altered.
Consultamos la vista nuevamente para verificar que el disco no se encuentra más en la instancia de ASM.
SQL> col path format a40 
     set line 120 
     select name, path, group_number from v$asm_disk;
NAME          PATH     GROUP_NUMBER
------------------------------ ---------------------------------------- ------------
          /dev/oracleasm/disks/SAN_OT2D1N_DG1_LV3     0
OT2D1N_DG1_0002         /dev/oracleasm/disks/SAN_OT2D1N_DG1_LV2     2
OT2D1N_DG1_0003         /dev/oracleasm/disks/SAN_OT2D1N_DG1_LV1     2
DATA_0000         /dev/oracleasm/disks/SAN_DATA01      1
OT2D1N_DG1_0000         /dev/oracleasm/disks/SAN_TEMPORAL     2
Ahora que completamos la tarea de la instancia de ASM pasamos al OS.
QUITANDO DISCOS DE ASM DE ASMLIB
Cuando ya tenemos la certeza que el disco miembro no pertenece al ningún grupo, procedemos a quitarlo del sistema operativo.
Precisamos trabajar como usuario root en los equipos unix.
Vamos a comenzar listando los discos disponibles.
[root@serverlx mapper]# /etc/init.d/oracleasm listdisks
SAN_DATA01
SAN_OT2D1N_DG1_LV1
SAN_OT2D1N_DG1_LV2
SAN_OT2D1N_DG1_LV3
Ahora procedemos a borrar el disco de ASM del asmlib.
[root@serverlx mapper]# /etc/init.d/oracleasm deletedisk SAN_OT2D1N_DG1_LV3
Removing ASM disk "SAN_OT2D1N_DG1_LV3":                    [  OK  ]
Debemos Reescanear los discos.
[root@serverlx mapper]# /etc/init.d/oracleasm scandisks
Scanning the system for Oracle ASMLib disks:               [  OK  ]
Y ahora los listamos para ver efectivamente que fueron quitados del asmLib
[root@serverlx mapper]# /etc/init.d/oracleasm listdisks
SAN_DATA01
SAN_OT2D1N_DG1_LV1
SAN_OT2D1N_DG1_LV2
Como última medida antes de ser extraidos del Sistema Operativo, nos aseguramos que realmente no exista más en ela instancia de ASM como disco disponible para ser agregado en algún grupo.
SQL> select name, path, group_number from v$asm_disk;

NAME          PATH     GROUP_NUMBER
------------------------------ ---------------------------------------- ------------
OT2D1N_DG1_0002         /dev/oracleasm/disks/SAN_OT2D1N_DG1_LV2     2
OT2D1N_DG1_0003         /dev/oracleasm/disks/SAN_OT2D1N_DG1_LV1     2
DATA_0000         /dev/oracleasm/disks/SAN_DATA01      1
OT2D1N_DG1_0000         /dev/oracleasm/disks/SAN_TEMPORAL     2
Ahora podemos quitarlos definitivamente.
QUITANDO DISCOS DEL SISTEMA OPERATIVO
Ahora estamos en condiciones de quitarlos del operativo, recordemos que yo trabajo con disco SAN.
Primero revisamos en el path /dev/mapper los discos correspondientes.
[root@serverlx mapper]# ls -l
total 0
brw-rw----  1 root disk 253,  1 Aug 12 14:09 SAN_DATA01
brw-rw----  1 root disk 253, 20 Aug 12 14:09 SAN_DATA01p1
brw-rw----  1 root disk 253,  6 Aug 12 10:56 SAN_OT2D1N_DG1_LV1
brw-rw----  1 root disk 253, 19 Aug 12 10:56 SAN_OT2D1N_DG1_LV1p1
brw-rw----  1 root disk 253,  7 Aug 12 10:56 SAN_OT2D1N_DG1_LV2
brw-rw----  1 root disk 253, 11 Aug 12 10:56 SAN_OT2D1N_DG1_LV2p1
brw-rw----  1 root disk 253,  3 Aug 12 14:09 SAN_OT2D1N_DG1_LV3
brw-rw----  1 root disk 253, 21 Aug 12 14:09 SAN_OT2D1N_DG1_LV3p1
brw-rw----  1 root disk 253,  2 Aug 12 11:36 SAN_OT2D1N_DG1_LV4
brw-rw----  1 root disk 253,  9 Aug 12 11:36 SAN_OT2D1N_DG1_LV4p1
brw-rw----  1 root disk 253, 12 Aug 11 14:34 systemvg1-home_lv
brw-rw----  1 root disk 253, 13 Aug 11 14:34 systemvg1-opt_lv
brw-rw----  1 root disk 253, 14 Aug 11 14:34 systemvg1-tmp_lv
brw-rw----  1 root disk 253, 18 Aug 11 14:34 systemvg1-u01
brw-rw----  1 root disk 253, 15 Aug 11 14:34 systemvg1-usr_lv
brw-rw----  1 root disk 253, 17 Aug 11 14:34 systemvg1-var_lv
brw-rw----  1 root disk 253, 16 Aug 11 14:34 systemvg1-var_mqm_lv
Ahora modifico el archivo multipath y quito lo que no utilizo mas, o lo podemos comentar.
[root@serverlx mapper]# vi /etc/multipath.conf
Utilizo el comando partprobe, para actualizar la tabla de particiones
[root@serverlx mapper]# partprobe
Actulizamos los caminos de fibras con los comandos de Multipath.
[root@serverlx mapper]# multipath -F
SAN_OT2D1N_DG1_LV4: map in use
SAN_OT2D1N_DG1_LV2: map in use
SAN_OT2D1N_DG1_LV1: map in use
[root@serverlx mapper]# multipath [root@serverlx mapper]# multipath -ll
Revisamos nuevamente el path y vemos que ya no se encuentra mas el disco.
[root@serverlx mapper]# ls -l
total 0
brw-rw----  1 root disk 253,  1 Aug 12 14:09 SAN_DATA01
brw-rw----  1 root disk 253, 20 Aug 12 14:09 SAN_DATA01p1
brw-rw----  1 root disk 253,  6 Aug 12 10:56 SAN_OT2D1N_DG1_LV1
brw-rw----  1 root disk 253, 19 Aug 12 10:56 SAN_OT2D1N_DG1_LV1p1
brw-rw----  1 root disk 253,  7 Aug 12 10:56 SAN_OT2D1N_DG1_LV2
brw-rw----  1 root disk 253, 11 Aug 12 10:56 SAN_OT2D1N_DG1_LV2p1
brw-rw----  1 root disk 253,  2 Aug 12 11:36 SAN_OT2D1N_DG1_LV4
brw-rw----  1 root disk 253,  9 Aug 12 11:36 SAN_OT2D1N_DG1_LV4p1
brw-rw----  1 root disk 253, 12 Aug 11 14:34 systemvg1-home_lv
brw-rw----  1 root disk 253, 13 Aug 11 14:34 systemvg1-opt_lv
brw-rw----  1 root disk 253, 14 Aug 11 14:34 systemvg1-tmp_lv
brw-rw----  1 root disk 253, 18 Aug 11 14:34 systemvg1-u01
brw-rw----  1 root disk 253, 15 Aug 11 14:34 systemvg1-usr_lv
brw-rw----  1 root disk 253, 17 Aug 11 14:34 systemvg1-var_lv
brw-rw----  1 root disk 253, 16 Aug 11 14:34 systemvg1-var_mqm_lv

jueves, 27 de febrero de 2014

ver sessions activas en la instancia de bd oracle

Script para ver sessions activas en la instancia de bd oracle
1.     Creamos un script en linux
# vi versessionesactivas.sh

--

export ORACLE_SID=$1
sqlplus <<eof
connect / as sysdba
col username format a20
select instance_name from v\$instance;
select username, count(8) from v\$session
group by username;
eof

2.     Vemos el nombre de la instancia

#ps –fea | grep pmon

Ejemplo:
mineduprd8> ps -fea | grep pmon
oracle   29920     1  0 Feb25 ?        00:00:10 ora_pmon_SITMEN8

3.     Ejecutamos el script:
# sh verssionesactivas.sh NOMBRE_INSTANCIA

lunes, 17 de febrero de 2014

-- Import y Export Oracle

-- Import y Export Oracle
--Ejemplo General
exp nombreusuario file=nombreexport.dmp log=nombrelog.log owner=calidad_sa statistics=none

--ejemplo export solo de un schema:

exp jamaya file=bk_TBCUENTASCONTABLES_TCL_magangue.dmp log=bk_TBCUENTASCONTABLES_TCL_magangue.log owner=MENRHSMMAGANGUE

--copia completa de la base de datos:
$exp file=/oracle9/export_orasite.dmp full=yes log=/oracle9/log/export_orasite.log buffer=1000000

--copia de tablas especificas de un usuario/esquema
$exp user file=nombrecopia.dmp tables=(emp,dept) owner=esquema
$exp user file=nombrecopia.dmp log=nombrelog.log tables=nombreesquema.tabla

--Ejemplo:
exp jamaya file=BK_EsquemaCalidad_sa_05feb_2014.dmp log=BK_EsquemaCalidad_sa_05feb_2014.log tables=CALIDAD_SA.tabla

Despliega que usuarios estan bloqueados por otros usuarios Oracle


col "Id" format 999999
col "Tipo" format a4
col "Modo Mantenido" format a20
col "Modo requerido" format a20
col "Id1" format 999999999

break on "Id1" skip 1

set pages 300
set head on
set lines 300
set verify off
set trimspool on
set feed on
set term on
set scan on
set timing on


SELECT /* HAGC */
M.Sid "Id",
M.Type "Tipo",
        DECODE (M.Lmode,
0, 'None',
1, 'Null',
2, 'Row Share',
3, 'Row Excl.',
4, 'Share',
5, 'S/Row Excl.',
6, 'Exclusive',
        LTRIM(TO_CHAR(Lmode,'990'))) "Modo Mantenido",
        DECODE (M.Request,
0, 'None',
1, 'Null',
2, 'Row Share',
3, 'Row Excl.',
4, 'Share',
5, 'S/Row Excl.',
6, 'Exclusive',
        LTRIM(TO_CHAR(M.Request, '990'))) "Modo requerido",
        M.Id1 "Id1",
M.Id2
FROM
V$LOCK M
WHERE  (M.Request ! = 0)
        or
(M.Request = 0
and Lmode != 4
and (id1, id2) in
(
select
S.Id1,
S.Id2
from
V$LOCK S
where
Request != 0
and S.Id1 = M.Id1
and S.Id2 = M.Id2
)
)
order by
Id1,
Id2,
M.Request ;

set term on
set feed on
set verify on
set head on
set timing off

SCRIPT PARA VER TAMAÑO DE ESQUEMAS(SCHEMA) [sin los esquemas de oracle]



col owner format a30
col MB format  9999999
select trunc(sum(bytes)/1024/1024) MB from dba_segments;

select owner,trunc(sum(bytes)/1024/1024) MB from dba_segments
where owner not in ('SYS', 'SYSTEM', 'WMSYS', 'SYSMAN','MDSYS','ORDSYS','XDB', 'WKSYS', 'EXFSYS',
         'OLAPSYS', 'DBSNMP', 'DMSYS','TSMSYS','CTXSYS','WK_TEST', 'ORDPLUGINS', 'OUTLN','ORDDATA')
group by owner
having sum(bytes) >0
order by 2;

jueves, 13 de febrero de 2014

SCRIPT PARA GENERAR CONSULTAS EN VARIOS ESQUEMAS DESDE SQLPLUS y GENERAR UN SPOOL POR CADA SCHEMA CONSULTADO

SET echo off linesize 300 pagesize 0 feedback off term off
col orden noprint
col usuario noprint new_value usx
select user usuario from dual
/
show user;

spool &usx._resultado.log


--SE COLOCA LA CONSULTA /EJEMPLO:

SELECT 1 orden,'EID,OWNER,IDEJETEMATICO,CUSTNAME,FULLNAME,SQLDATEFORMAT,CLASE,NOM_DEPENDENCIA,MEDIO,NOM_EJE,VARNAME'
from dual
UNION
SELECT 2 orden,linea
FROM (
SELECT crmentity.EID||','||
crmentity.OWNER||','||
crmentity.IDEJETEMATICO||','||
crmcustomer.CUSTNAME||','||
NVL (crmloginusers.fullname, 'Ciudadano') ||','||
TO_CHAR(TO_DATE(crmentity.duedate, 'dd/mm/yyyy'), 'yyyymmdd') ||','||
crmCLASE.CLASE||','||
CRMDEPENDENCIA.DESCRIPCION ||','||
crmMEDIO.MEDIO||','||
       DECODE (cor_tra.NOMBRE, NULL, cor_tra1.NOMBRE, cor_tra.NOMBRE) ||','||
estado.VARNAME linea
         FROM crmentity,
         crmcustomer,
         crmloginusers,
         crmCLASE,
         CRMDEPENDENCIA,
         crmMEDIO,
         CRMGEJETEMATICO cor_tra,
         CRMGEJETEMATICO cor_tra1,
         crmstatusvars estado,
         crmfuncionario func,
         CRMRADICACIONSAL salida,
         CRMSEGIMIENTO segimiento,
         CRMESTADOGUIA estado,
       CRMTIPOCIUDADANO tipociu,
         CRMTIPODOC,
         CRM_GRAL.CRMCONEXION CONE,
         CRM_GRAL.CRMENTEXTERNA ENTEXT
   WHERE     crmentity.idCUSTOMER = crmcustomer.idCUSTOMER(+)
       AND crmentity.owner = crmloginusers.idLOGINUSER(+)
         AND crmentity.IDCLASE = crmCLASE.IDCLASE(+)
         AND crmentity.IDDEPENDENCIA = CRMDEPENDENCIA.IDDEPENDENCIA(+)
         AND crmentity.IDMEDIO = crmMEDIO.IDMEDIO(+)
         AND crmentity.IDEJETEMATICO = cor_tra.IDEJETEMATICO(+)
         AND crmentity.IDEJETEMATICO = cor_tra1.IDEJETEMATICO(+)
         AND cor_tra1.ESTANDAR(+) = 1
         AND cor_tra.IDCONEXION(+) = 13000
         AND crmentity.IDSTATUS = estado.IDSTATUS
         AND crmentity.idfuncionario = func.idfuncionario(+)
         AND segimiento.ID_RADICACIONSAL(+) = salida.ID_RADICACIONSAL
         AND crmentity.EID = salida.EID(+)
         AND crmentity.PERIODO = salida.PERIODO(+)
         AND ESTADO.ID_ESTADOGUIA(+) = segimiento.ESTADO
         AND crmcustomer.IDTIPOCIUDADANO = tipociu.IDTIPO(+)
         AND crmentity.IDTIPODOC = CRMTIPODOC.ID_TIPODOC(+)
         AND TRUNC (crmentity.cdate) >= TO_DATE ('01/01/2013', 'dd/mm/yyyy')
         AND TRUNC (crmentity.cdate) <= TO_DATE ('11/02/2014', 'dd/mm/yyyy')
         AND crmentity.ENTIDAD_DESTINO = CONE.IDCONEXION(+)
         AND crmentity.IDTEXTERNA = ENTEXT.ID(+)
         AND (crmentity.IDEJETEMATICO = 10359
            OR crmentity.IDEJETEMATICO = 10360)
       ORDER  BY crmentity.TP DESC,crmentity.IDSTATUS
)-- where rownum <20
ORDER BY orden
/
spool off


_________________________________________________


-- SE CREA OTRO fichero .sql llamado ejecutar.sql
-- este ficherho tendria la lista de esquemas y contraseñas para conectase


conn  NOMBREUSUARIO/password
start script.sql;
conn  CRM_ALCALDIA_APARTADO/password
start script.sql;
conn  CRM_ALCALDIA_FACATATIVA/password
start script.sql;
conn  CRM_AMAZONAS/password
start script.sql;
conn  CRM_ANTIOQUIA/password
start script.sql;


_______________________________________________

por ultimo se ejecuta en sqlplus 

SQL>@ejecutar.sql

martes, 11 de febrero de 2014

SCRIPT GENERALES


-- Para ver todas las tablas y vistas en un esquema:
SQL> SELECT * FROM tab;


--Para listar el ultimo script realizado

SQL> L

--Para listar la ultima linea  de un script realizado

SQL>LIST LAST


--CLEAR BUFFER

SQL>CL BUFF


--List the SQL buffer:
SQL> L
SELECT employee_id, first_name, last_name
* FROM employees
SQL>

--Save the buffer to a file named myfile; the default extension will be .sql:
SQL> SAVE myfile
Created file MYFILE.sql
SQL>


--Save the file using the REPLACE keyword:
SQL> SAVE myfile REPLACE
Wrote file MYFILE.sql
SQL>

IMPORT and EXPORT Base de Datos Oracle

EXPORT 
--Ejemplo General (Export)
exp nombreusuario file=nombreexport.dmp log=nombrelog.log owner=calidad_sa statistics=none

--ejemplo export solo de un schema:

exp jamaya file=bk_TBCUENTASCONTABLES_TCL_magangue.dmp log=bk_TBCUENTASCONTABLES_TCL_magangue.log owner=MENRHSMMAGANGUE

--copia completa de la base de datos:
$exp file=/oracle9/export_orasite.dmp full=yes log=/oracle9/log/export_orasite.log buffer=1000000

--copia de tablas especificas de un usuario/esquema
$exp user file=nombrecopia.dmp tables=(emp,dept) owner=esquema
--Ejemplo:
exp jamaya file=BK_EsquemaCalidad_sa_05feb_2014.dmp log=BK_EsquemaCalidad_sa_05feb_2014.log owner=CALIDAD_SA


IMPORT 

-- Importar una tabla de un usuario concreto
$imp scott/tiger file=orasitempleados.dmp fromuser=scott touser=scott tables=dept
-- Importar todo el archivo exportado
$imp system/manager file=c:\orasitefull.dmp full=yes ignore=yes 
log=c:\orasite\log\import_log.log buffer=1000000

VERIFICAR Y SELECCIONAR UN TABLESPACE CON TAMAÑO SUPERIOR AL 90% Y GENERAR SCRIPT PARA AMPLIAR

--SELECCIONAR UN TABLESPACE CON TAMAÑO SUPERIOR AL 90% Y GENERAR SCRIPT PARA AMPLIAR


set lines 150
col a.tablespace_name format a25
col Mbusado format a10
col Sentencia format a90
col Mbusado format 999,999,999

select a.tablespace_name,((a.bytes/1024/1024) - (b.bytes/1024/1024)) Mbusado,round(((a.bytes-b.bytes)/a.bytes)*100,2) pct_usado,
'alter database datafile '''||c.file_name||''' resize '||round(((c.bytes+0.16*a.bytes - 1.16*b.bytes)/1024/1024),0)||'M;' Sentencia
from  (select tablespace_name
  , sum(bytes) bytes
from dba_data_files
  group by tablespace_name
) a
,(select tablespace_name
  , sum(bytes) bytes
  , max(bytes)/1024/1024 largest
from dba_free_space
  group by tablespace_name
) b, (select a.tablespace_name,a.file_name, a.bytes
 from (select tablespace_name, file_name, bytes from dba_Data_files) a,
(select tablespace_name, min(bytes) min from dba_data_files
  group by tablespace_name) b
where a.bytes=b.min
and a.tablespace_name=b.tablespace_name
order by 1) c
where a.tablespace_name = b.tablespace_name
and c.tablespace_name = b.tablespace_name
and ((a.bytes-b.bytes)/a.bytes)*100 > 90
--and (c.bytes)/1024/1024 < 20000
order by a.Tablespace_name asc

GESTION DE USUARIOS -BD ORACLE

-- crear un usuario, ejemplo:

CREATE USER jamaya IDENTIFIED BY password
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
  PROFILE DEFAULT
  ACCOUNT UNLOCK;
  -- 4 Roles for jamaya
  GRANT EXP_FULL_DATABASE TO jamaya;
  GRANT RESOURCE TO jamaya;
  GRANT CONNECT TO jamaya;
  GRANT DBA TO jamaya;
  ALTER USER jamaya DEFAULT ROLE ALL;
  -- 1 System Privilege for jamaya
  GRANT UNLIMITED TABLESPACE TO jamaya;
  -- 1 Object Privilege for jamaya
    GRANT READ, WRITE ON DIRECTORY SYS.EXPORT TO jamaya WITH GRANT OPTION;


--Cambiar session de usuario desde SYS


ALTER SESSION SET CURRENT_SCHEMA = NOMBRESCHEMA;

SCRIPT PARA VER ULTIMO REINICIO DE LA INSTANCIA DE LA BD

--SCRIPT PARA VER ULTIMO REINICIO DE LA INSTANCIA DE LA BD


SQL>alter session set nls_date_format = 'dd/mm/yyyy hh24:mi:ss';

SQL>select ' Instancia: '||instance_name|| ' Server: '||host_name||' Fecha: '|| startup_time

from v$instance;


--para ver la direccion de log y/o tracer 

SQL>show parameter background