Archive

Posts Tagged ‘Bases de Datos’

Como recuperar una tabla si fue eliminada de la BD sin acudir a un datapump o rman

September 29th, 2009 Juanjinio No comments

Aca una leve explicación de como se utilice el FLASHBACK para recuperar una tabla que “accidentalmente” se eliminó de la BD para NO tener que acudir a recuperar un respaldo completo de la BD, 1 o 2 TB por una mísera tabla si no tenemos un export o un datapump a mano.-

Bien creamos las tablas de pruebas (OJO, el ejemplo está realizado bajo el esquema PASO_NOV08 pero se que se puede hacer desde SYSTEM de igual modo)

SQL> create table TEST2 as select * from AAA_CLIENTES_DIRECCIONES;
Table created.

Validamos que la papelera de reciclaje no tenga datos.

SQL> show recyclebin
S
QL>

Validamos cuantas tablas llamadas TEST hay:

 SQL> 
  1  select owner, segment_name, segment_type, tablespace_name, bytes/1024/1024 mb
  2  from dba_segments
  3  where segment_type=’TABLE’ and owner=’PASO_NOV08′
  4* and segment_name like ‘TEST%’ 

OWNER                          SEGMENT_NAME         SEGMENT_TYPE       TABLESPACE_NAME              MB
—————————— ——————– —————— ——————– ———-
PASO_NOV08                     TEST                 TABLE              PASO_NOV08                    2
PASO_NOV08                     TEST2                TABLE              PASO_NOV08                  728

 Ahora eliminamos la tabla, con un DROP TABLE.-

 SQL> drop table TEST2;

Table dropped.

SQL> drop table test;

Table dropped.

 Veamos que pasó con las tablas TEST del esquema de prueba…

 SQL> 
  1  select owner, segment_name, segment_type, tablespace_name, bytes/1024/1024 mb
  2* from dba_segments where segment_type=’TABLE’ and owner=’PASO_NOV08′ and segment_name like ‘TEST%’ 

no rows selected

 NO HAY TABLAS, en donde están? Hay que revisar la papelera de reciclaje de la BD para esto

 SQL> show recyclebin

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
—————- —————————— ———— ——————-
TEST             BIN$dLiZjsuLgKLgQ6wQABSAog==$0 TABLE        2009-09-29:09:43:47
TEST2            BIN$dLiZjsuKgKLgQ6wQABSAog==$0 TABLE        2009-09-29:09:43:30

 Los objetos ahora se encuentran bajo la papelera de reciclaje.- 

SQL> select owner, object_name, type, original_name, droptime, can_undrop, can_purge from dba_recyclebin;

 

OWNER        OBJECT_NAME                    TYPE     ORIGINAL_NAME    DROPTIME            CAN CAN

———— —————————— ——– —————- ——————- — —

PASO_NOV08   BIN$dLiZjsuKgKLgQ6wQABSAog==$0 TABLE    TEST2            2009-09-29:09:43:30 YES YES

PASO_NOV08   BIN$dLiZjsuLgKLgQ6wQABSAog==$0 TABLE    TEST             2009-09-29:09:43:47 YES YES

 

Sin embargo, las tablas originales físicamente se encuentran bajo el tablespace de origen… Es decir cuando se eliminan las tablas, estás se cambian de nombre a “BIN$xxx” y lógicamente bajan a estar dentro de la papelera de reciclaje.

 SQL> 
  1  select owner, segment_name, segment_type, tablespace_name, bytes/1024/1024 mb
  2  from dba_segments
  3  where segment_type=’TABLE’ and owner=’PASO_NOV08′
  4* and segment_name in (select object_name from dba_recyclebin) 

OWNER      SEGMENT_NAME                   SEGMENT_TYPE       TABLESPACE_NAME              MB
———- —————————— —————— ——————– ———-
PASO_NOV08 BIN$dLiZjsuLgKLgQ6wQABSAog==$0 TABLE              PASO_NOV08                    2
PASO_NOV08 BIN$dLiZjsuKgKLgQ6wQABSAog==$0 TABLE              PASO_NOV08                  728

OK, pero como las recuperamos?…

 

SQL> flashback table TEST to before drop; 

Flashback complete. 

SQL> flashback table TEST2 to before drop; 

Flashback complete. 

SQL> show recyclebin

 

Una vez que se aplica el Flashback a la tabla, podemos recuperarla y listar su contenido o seguir trabajando sin problemas.- 

SQL> select owner, segment_name, segment_type, tablespace_name, bytes/1024/1024 mb
  2  from dba_segments
  3  where segment_type=’TABLE’ and owner=’PASO_NOV08′
  4  and segment_name like ‘TEST%’; 

OWNER      SEGMENT_NAME                   SEGMENT_TYPE       TABLESPACE_NAME              MB
———- —————————— —————— ——————– ———-
PASO_NOV08 TEST                           TABLE              PASO_NOV08                    2
PASO_NOV08 TEST2                          TABLE              PASO_NOV08                  728

Bien, con lo anterior se puede recuperar la tabla, pero con el mismo nombre y si la tabla se creó de nuevo con datos que le sirven al negocio, pero necesito la tabla que se borró? Podemos recuperarla con otro nombre.

SQL> flashback table TEST2 to before drop rename to TEST3;

Flashback complete.

 SQL> select owner, segment_name, segment_type, tablespace_name, bytes/1024/1024 mb
  2  from dba_segments
  3  where segment_type=’TABLE’ and owner=’PASO_NOV08′
  4  and segment_name like ‘TEST%’;

OWNER      SEGMENT_NAME                   SEGMENT_TYPE       TABLESPACE_NAME              MB
———- —————————— —————— ——————– ———-
PASO_NOV08 TEST                           TABLE              PASO_NOV08                    2
PASO_NOV08 TEST3                          TABLE              PASO_NOV08                  728

 Pero que sucede si la tabla que se eliminó con la sentencia DROP realmente se quiere eliminar de la BD?

 NOTA: Al hacer esto la papelera se libera y la tabla realmente se elimina.-

 eviso la papelera, y sigue ahí, que hacer? Purgar la tabla para que se elimine definidamente, como hacer esto? De 2 manera: 

1.- Al momento de hacer el drop se debe incluir la sentencia PURGE:

 SQL> drop table TEST purge; 

Table dropped.

 Al revisar la papelera, ésta se encuentra vacía.-

 SQL> show recyclebin

SQL>

 2.- La tabla se elimina, de manera normal (DROP TABLE XXXXXX), y ahora vaciamos la tabla a purgar de la papelera de reciclaje: 

SQL> select owner, segment_name, segment_type, tablespace_name, bytes/1024/1024 mb
  2  from dba_segments
  3  where segment_type=’TABLE’ and owner=’PASO_NOV08′
  4  and segment_name like ‘TEST%’; 

OWNER      SEGMENT_NAME                   SEGMENT_TYPE       TABLESPACE_NAME              MB
———- —————————— —————— ——————– ———-
PASO_NOV08 TEST3                          TABLE              PASO_NOV08                  728
 

SQL> drop table TEST3; 

Table dropped. 

SQL> show recyclebin

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
—————- —————————— ———— ——————-
TEST3            BIN$dLiZjsuXgKLgQ6wQABSAog==$0 TABLE        2009-09-29:10:09:47 

SQL> purge table “BIN$dLiZjsuXgKLgQ6wQABSAog==$0″; 

Table purged. 

SQL> show recyclebin

 

 Saludos

Larry Ellison Live Webcast: Oracle and Sun Product Announcement

September 14th, 2009 Juanjinio No comments

Para los que les gusta revisar webcast, aca hay unos que está fresquito y viene desde el mismimo CEO de Oracle Corp. :P

EXADATA pero ahora entre SUN y ORACLE, se veía venir esta noticia y hace unas semanas lo estaban anunciando en las noticias corporativas de Oracle.

Pueden revisar el Webcast aca

Pueden revisar la noticia aca

Larry Ellison Invites You to a Live Oracle and Sun Product Launch

Announcing the World’s First OLTP Database Machine with Sun FlashFire Technology

Attend this exclusive live Webcast to see Oracle CEO Larry Ellison unveil an innovative new product, the world’s first OLTP database machine with Sun FlashFire technology. Don’t miss this opportunity to learn firsthand how the partnership between Oracle and Sun can benefit your business now, and in the future.

Tuesday, September 15, 2009, 1:00 p.m. PT/4:00 p.m. ET

RMAN NO SE CONECTA POR PRIVILEGIOS INSUFICIENTES

April 21st, 2009 Juanjinio No comments

En mas de una oportunidad cuado es necesario configurar por primera vez Rman en una instancia, al intentar ingresar a RMAN se cae… Uno revisa los privilegios y no hay problema …

server orcl $ cat backup_BD_sin_delete.rmn
connect target rman/rman@orcl;
run {
crosscheck archivelog all;
allocate channel t1 type ‘SBT_TAPE’;
allocate channel t2 type ‘SBT_TAPE’;
send ‘NSR_ENV=(NSR_CLIENT=SERVER,
NSR_SERVER=SERVER_RESPALDO)’ ;
backup filesperset 2 database plus archivelog;
sql ‘alter system archive log current’;
release channel t1;
release channel t2;
}

SERVER ORCL $ rman target rman/rman@ORCL;

Recovery Manager: Release 10.2.0.4.0 – Production on Sat Apr 18 19:04:25 2009

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: initialization of internal recovery manager package failed
RMAN-04005: error from target database:
ORA-01031: insufficient privileges

Recuerden que para que un respaldo RMAN se ejecute es necesario que la cuenta de BD tenga privilegios de SYSDBA, para esto es necesario

SERVER ORCL $ export ORACLE_SID=ORCL
SERVER ORCL $ sqlplus “/as sysdba”

SQL*Plus: Release 10.2.0.4.0 – Production on Sat Apr 18 19:05:18 2009

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP
—————————— —– —–
SYS                            TRUE  TRUE

SQL> grant sysdba to RMAN;

Grant succeeded.

Revisemos si la cuenta RMAN ahora tiene privilegios de SYSDBA…

SQL> select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP
—————————— —– —–
SYS                            TRUE  TRUE
RMAN                           TRUE  FALSE

SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

Finalmente es necesario verificar si es posible realizar la conexión …

SERVER ORCL $ rman target rman/rman@ORCL;

Recovery Manager: Release 10.2.0.4.0 – Production on Sat Apr 18 19:08:02 2009

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

connected to target database: ORCL (DBID=31134823333)

Excelente … conectividad a RMAN lista !!!

Seminarios presenciales de Oracle en Santiago

April 20th, 2009 Juanjinio No comments

En el mes de Abril hay 2 eventos de tecnología Oracle que se realizaran en el Hotel Ritz Carton, (El alcande 15, El Golf, a 1 cuadra del metro El Golf)

Seminario Business Intelligence – Oracle

Oracle es su Mejor Socio Estratégico:Posee el Conjunto Más Completo de Aplicaciones para la Inteligencia de Negocios para todas las áreas e integrantes de su organización.

En tiempos de incertidumbre financiera, la toma de decisiones es crucial y debe estar basada en la información organizacional.

Empresas de todas las industrias dependen de la información para tomar sus decisiones. A menudo, la información que necesitan es difícil de obtener dado que no reside en sus sistemas departamentales o simplemente está fragmentada en diferentes aplicaciones.

A pesar de que las funciones de la empresa como ventas, marketing, operaciones, finanzas y recursos humanos están interconectadas, los datos que producen y almacenan no lo están.

Para que una empresa alcance un desempeño óptimo, la información debe fluir a través de sus fronteras funcionales. Por ejemplo, los profesionales de ventas, marketing y servicios necesitan información de los departamentos de finanzas, recursos humanos y producción para ayudarles a realizar una mejor gestión con sus clientes.

Controle la información y procesos en forma segura y fiable, adopte decisiones asertivas y ágiles en forma oportuna. Mejore con Oracle sus procesos, rendición de cuentas, transparencia, capacidad de predicción de ingresos y costos, flexibilidad y la escalabilidad.

* ¿Cómo utilizar alertas e inteligencia anticipadas, informes empresariales, Inteligencia productiva en tiempo real y análisis portátil?

Oracle Chile lo invita a conocer la respuesta a muchas de sus interrogantes.

Mas información en:

http://www.oracle.com/webapps/events/EventsDetail.jsp?p_eventId=91059&src=6646152&src=6646152&Act=17

Fusion Middleware Seminar – Oracle 2009

La agenda definitiva será informada a la brevedad.

Esta actividad esta orientada a:

  • Ejecutivos : CIO´s, CEO´s, CFO’s, CMO’s.
  • Directores y Gerentes de TI / IS. Gerentes de Infraestructura, de Proyecto y Business Planners. Jefes, de Proyectos, Operaciones, Analistas de negocios, Arquitectos, Desarrolladores.

Profesionales responsables de Unidades funcionales como finanzas, marketing, Diseño, Publicidad y ventas.

Temas a tratar:

  • Casos de referencia y experiencias de clientes.
  • WebLogic, BPM , SOA, BPM, portales, etc.

Mas información en:

http://www.oracle.com/webapps/events/EventsDetail.jsp?p_eventId=91041&src=6646366&src=6646366&Act=17

Fuente:

http://events.oracle.com

Oracle compra Sun Microsystem

April 20th, 2009 Juanjinio 1 comment

Asi como lo leen desde ambos portales web http://www.oracle.com y http://www.sun.com la noticia se anuncia, hoy se dió a la luz la compra de la compañia de sistemas operativos y java por parte del lider de las bases de datos.

El comunicado indica que se podría realizar la compra por casi U$ 10 dolares por acción, por un total no menor de U$ 7.4 billones.

De llegar a buen puerto, con esta fusión será posible tener un abanico no menor de tecnologías integradas en un único proveedor. Habrá que tener cuidado con el monopolio comercial. Ahora se podrá tener Storage, servidores, Solaris/Linux, BD, Fusión Middleware, Java y aplicaciones de desarrollo, Fusión applications, Enterprise Manager.-

Mas información en:

http://www.oracle.com/sun/index.html

http://www.sun.com/aboutsun/media/presskits/2009-0420/index.jsp

Mas detalles:

http://www.oracle.com/sun/sun-general-presentation.pdf

Webcast con el comunicado:

http://phx.corporate-ir.net/playerlink.zhtml?c=67786&s=wm&e=2180970

Fuentes: www.oracle.com – www.sun.com

Mover índices a otro tablespace

September 29th, 2008 Juanjinio No comments

Muchas veces para disminuir la contención de disco por I/O es necesario tener los objetos en tablespaces diferentes ya sea para data y para indices, para esto primero que todo deben existir estos tablespaces (se crean con la sentencia CREATE TABLESPACE).

Para el ejemplo los tablespaces ya existen

Tablespaces para Tabla y para Indices

Para mover objetos que no correspondan al tipo de datos que se almacena en cada tablespace, por ejemplo hay tablas que están almacenadas en tablespaces de índices y viceversa se debe determinar primero que todo identificar estos objetos, y para esto podemos usar el script

select owner, tablespace_name,segment_type, count(segment_type)
from dba_segments
group by tablespace_name,owner,segment_type
order by 1 asc

Tabla de objetos
Tabla de Objetos

Si nos fijamos bien en la tabla anterior, podemos ver que hay índices que estan en el tablespace “DATOS“, “LABORATO_DATA” y “USERS” en donde se registran 2, 11 y 31 índices respectivamente.

Ahora bien estos índices encontrados anteriormente son candidatos para que sean movidos a su ubicación correcta, es decir al tablespaces de índices “LABORATO_INDEX

Para mover estos índices a otro tablespaces se deben identificar, se puede usar la siguiente query:

select owner, tablespace_name,index_name from dba_indexes
where owner='LABORATO'
and tablespace_name in ('DATOS', 'USERS','LABORATO_DATA')
order by 2,3 asc

OBS: Aca usé el nombre del Owner y los tablespaces que había determinado anteriormente, aca dependerá de cada instancia

El resultado de los índices es el siguiente:

Indices que deben ser movidos

Una vez que ya tenemos estos indices identificados, procedemos a generar la consulta que los va a mover.

Para mover un índice de un tablespace a otro se usa la siguiente consulta:

Alter index NOMBRE_INDICE rebuild tablespace TBS_DESTINO;

OBS: El movimiento de índices (sin mover tablas) se usa para mover estos objetos de ubicación. Si uno quiere mover tablas de un tablespace a otro, necesariamente deberá mover y recrear los indices asociados a las tablas, ya que sino estos índices quedaran en estado invalido

Job de limpieza de Log de Transancciones

September 22nd, 2008 Juanjinio No comments

Por lo general el Log de transacciones siempre está creciendo cada cierto tiempo, dependiendo obviamente de si la BD es muy transaccional o no, es por eso que para evitar que el Log de transacciones crezca mucho y se llene el disco es mejor dejar programada una tarea que se encargue de esta labor, para esto se debe realizar lo siguiente:

1.- Detectar cual es el FileId del Log de Transacciones de la BD que deseamos automatizar. Para el ejemplo la bd se llama “BD_Amin”, para saber cual es el FileId es necesario ejecutar el comando desde el Query Analyzer

sp_helpdb BD_Amin

Lo que nos dará la siguiente salida:

Salida comando sp_helpdb

Observar que el campo “usage” indica el tipo de archivo que tiene cada base de datos, para nuestro ejemplo el tipo es “Log Only“, de aquí se obtiene el “FileId“, que será “2″

1.- Luego se debe crear un JOB desde el Sql Server Enterprise. En donde se debe tener en cuenta el “FileId” que se obtuvo en el punto 1.

El detalle del JOB será:

-- Shrink
use BD_Amin
go
checkpoint
go
dump tran BD_Amin with no_log
go
dbcc shrinkfile (2,0) --ldf

2.- Luego en la pestaña “Programaciones” se podrá ingresar la programación del JOB.-

3.- Por último revisar que en la pestaña “Notificaciones” se encuentre habilitado el campo “Escribir en el registro de sucesos de aplicación de Windows”, de esta manera podemos saber su historial.-

Saludos

Privilegios de usuarios de BD

September 9th, 2008 Juanjinio No comments

Este script te permite saber que permisos tienen los usuarios de BD. Es bastante util porque indica los privilegios “poderosos” que por motivos de seguridad NO deberían ser otorgados

select grantee, privilege, admin_option
from sys.dba_sys_privs
where (privilege like '% ANY %'
or privilege in ('BECOME USER', 'UNLIMITED TABLESPACE')
or admin_option = 'YES')
and grantee not in ('SYS', 'SYSTEM', 'OUTLN', 'AQ_ADMINISTRATOR_ROLE',
'DBA', 'EXP_FULL_DATABASE', 'IMP_FULL_DATABASE',
'OEM_MONITOR', 'CTXSYS', 'DBSNMP', 'IFSSYS',
'IFSSYS$CM', 'MDSYS', 'ORDPLUGINS', 'ORDSYS',
'TIMESERIES_DBA')
/

Determinar Tablespaces fragmentados

September 9th, 2008 Juanjinio No comments

Este script permite ver que Tablespaces están fragmentados y el tipo de fragmentación que tiene.

SELECT dfsc.tablespace_name tablespace_name,
DECODE (
dfsc.percent_extents_coalesced,
100,
(DECODE (
GREATEST ((SELECT COUNT (1)
FROM dba_free_space dfs
WHERE dfs.tablespace_name = dfsc.tablespace_name), 1),
1,
'No Frag',
'Bubble Frag'
)
),
'Possible Honey Comb Frag'
)
fragmentation_status
FROM dba_free_space_coalesced dfsc
ORDER BY dfsc.tablespace_name;

Crecimiento mensual de una instancia

September 9th, 2008 Juanjinio No comments

Este script te permite ver el crecimiento de la instancia en Mb desde el último reinicio de la BD

set pagesize 50000
select to_char(creation_time, 'RRRR Month') "Mes",
sum(bytes)/1024/1024 "Crecimiento en MB"
from sys.v_$datafile
where creation_time > SYSDATE-365
group by to_char(creation_time, 'RRRR Month')