ORA-38760: This database instance failed to turn on flashback database



Ese es un error que sucedió cuando un disco de +ASM que contenía los FlashBack logs no pudo ser montado por ASM, simplemente una corrupción, sin respaldo y sin espejamiento de discos, o sea, simplemente murió.
Documentación relacionada a FlashBack Database Logs : Flashback Database logs



Sucedió después de un corte de electricidad y se vino todo abajo, una vez que se quiso levantar la base, no montando el diskgroup malo, apareció este error en la base de datos

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-38760: This database instance failed to turn on flashback database


Pues bien, simplemente se consulto en la documentación y lo que había que hacer era deshabilitar los FlashBack logs , mediante el siguiente comando

SQL> alter database flashback off;
Database altered.


Posterior a eso, se levanta la base de datos , pero arroja el mismo error

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-38760: This database instance failed to turn on flashback database


De hecho, al tratar de dejar el FlashBack en ON, da un error de Recovery

SQL> alter database flashback on;
alter database flashback on
*
ERROR at line 1:
ORA-38706: Cannot turn on FLASHBACK DATABASE logging.
ORA-38714: Instance recovery required.


El error está relacionado a la creación de puntos de restauración (restore point)
Documentación relacionada : Restore Points


Se consulta el registro completo de los puntos de restauración , pero da un error pues simplemente no tiene acceso a ellos, ya no existen los FlashBack logs , pues no hay Diskgroup disponible

SQL> select * from v$restore_point;
select * from v$restore_point
*
ERROR at line 1:
ORA-38701: Flashback database log 3 seq 3 thread 1:
"+DGFL/prod11/flashback/log_3.545.886173601"
ORA-17503: ksfdopn:2 Failed to open file
+DGFL/prod11/flashback/log_3.545.886173601
ORA-15012: ASM file '+DGFL/prod11/flashback/log_3.545.886173601' does not exist



El procedimiento para solucionarlo es el siguiente :

- Primero consultamos el estado de nuestra base de datos, con lo cual se chequea que la base de datos posee puntos de restauración

SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
RESTORE POINT ONLY


- Consultamos sólo el nombre del punto de restauración , no el registro completo pues nos daría el mismo error que apareción antes en la nota

SQL> select name from v$restore_point;
NAME
--------------------------------------------------------------------------------
A1


- Borramos el punto de restauración

SQL> drop restore point A1;
Restore point dropped.


- Desactivamos el FlashBack Database logs

SQL> SQL> alter database flashback off;
Database altered.


- Consultamos el estado de nuestra base de datos relacionado al FlashBack logs

SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
NO


- Procedemos a abrir la base de datos, tema solucionado

SQL> alter database open;
Database altered.

;)

by Ligarius
03.09.15. 14:16:58. 458 words, 5551 views. Categories: Base de datos, FlashBack , • Send a trackback »

Convertir una base de datos Stand Alone en una base de datos RAC



¿Convertir o no convertir? Esa es la cuestión...



En el siguiente documento, les explico paso a paso como convertir una base de datos Stand Alone en una base de datos en RAC, además se menciona como incorporarlo al clusterware de Oracle, tanto la base de datos como las instancias del RAC.

Haciendo click acá pueden descargar el documento

Espero les sirva

by Ligarius
31.08.15. 12:06:50. 63 words, 2902 views. Categories: Real Application Cluster ,

Cloud y Oracle



Se habla desde algunos años del Cloud Computing y de todas las ventajas que está posee y de siglas como Iaas y Saas y varias más, ¿pero qué significan esas siglas y que relación tienen con Oracle?



Recuerden que el concepto de Cloud Computing es ofrecer un servicio a través de internet, es literalmente un servicio más , que sólo se paga mientras se consume, si lo queremos acercar a la vida real es como la cuenta de electricidad, donde pagamos sólo lo que consumimos, si la empresa necesita una máquina, no tiene por que comprarla físicamente , pueden contratar un servicio de IaaS , que le proporciona una máquina a la medida que desee el cliente y el cliente a su vez, sólo se preocupa de utilizarla y no de todo lo que conlleva tener un servidor, por ejemplo, electricidad, respaldos, networking, etc.

Oracle posee un área especial llamada Cloud, que ha venido potenciando hace bastante tiempo y que resultan muy interesantes de analizar.
Algunas definiciones a tener en cuenta y que nos servirán para ubicarnos dentro del concepto de Cloud.

IaaS (Infraestructure as a Service )
Este concepto implica la entrega al usuario del nivel más bajo del Cloud, la infraestructura, capacidad de procesamiento, memoria, CPUs, redes , firewall, routers, etc. Si se necesita crecer, simplemente se contrata un servicio mayor y no me preocupo de todo lo relacionado con este crecimiento.

Quien posee un increíble servicio de IaaS , es Amazon, se puede ver lo que proporciona en el siguiente link
https://aws.amazon.com/es/ec2/?hp=tile




SaaS (Software as a Service)
Es como la palabra lo indica , el software como un servicio, si lo quisieramos simplificar, es como que desde un PC , sin muchas cualidades, nos conectamos a Internet y hacemos uso de toda la plataforma Microsoft Office , o desde el midmo PC hacemos uso de todos los software que nos proporciona Oracle, sin tener la necesidad de instalar nada, ni de hacer upgrades, ni de preocuparnos con nuestra capacidad de computo, simplemente pagamos por la cantidad de horas que utilicemos un software.

Oracle posee un servicio Cloud de Saas, el cual se puede ver en la URL https://cloud.oracle.com/tryit





DaaS (Database as a Service )
Simplemente lo que andabamos buscando, una base de datos que estuviese en el Cloud, que fuera administrada por terceros, pero que sólo nosotros accediéramos a los datos, sin necesidad de estar pensando en el tuning , el backup o la infraestructura que soporta esa base de datos.



by Ligarius
27.08.15. 17:13:35. 430 words, 12571 views. Categories: Base de datos, Cloud Oracle , • Send a trackback »

Oracle 12c New Features : SQL Loader Express



Siempre lo más complicado de cargar datos mediante SQL Loader, es general el archivo de control.. pues bien, eso hoy tiene una solución rápida y sencilla



Imaginate una situación así.

- Un archivo CSV con la siguiente estructura si lo abrimos mediante un notepad


- Y si lo vemos a través de Microsoft Excel


Pues bien , generar el archivo de control , debería ser algo así

OPTIONS(EXTERNAL_TABLE=EXECUTE, TRIM=LRTRIM)
LOAD DATA
INFILE 'objetos.csv'
APPEND
INTO TABLE OBJETOS
FIELDS TERMINATED BY ","
(
NOMBRE,
EDAD,
DIRECCION
)


Esto podría ser sencillo para un archivo más pequeño, pero imagínense un archivo más grande, con muchos más campos o estructuras más complejas, en esta actividad, en crear el archivo CTL podemos ocupar varias horas, con pruebas y errores.

Pues bien.. desde Oracle 12c, existe una característica que nos permite realizar la carga de un archivo sin necesidad del archivo de control, esta característica se llama SQL LOADER EXPRESS.

¿Cómo funciona? Pues bien, mediante ejemplos probaremos su funcinamiento

- Ejecutamos el comando de la forma más básica

sqlldr usuario/password tabla=nombre_tabla


Con lo anterior , se cumplirá lo siguiente :

- SQL Loader tratará de cargar un archivo llamado nombre_tabla.dat, es lo que buscará mediante la creación de una tabla externa.
- SQL Loader asumirá los campos y tipos que posea la tabla nombre_tabla dentro de nuestra base de datos.
- Se generará por defecto un archivo de control, esto lo podemos ver si buscamos en el archivo nombre_tabla.log
- Si existen registros malos, que no se puedan cargar, se creará por defecto un archivo llamado nombre_tabla.bad
- El formato de las fechas está dado por el seteo NLS existente, el sabrá si se asume YYYY-MM-DD o DD-MM-YYYY.
- Si la tabla posee datos, SQL Loader simplemente cargará los datos al final de los registros existentes (APPEND).

Si quisieramos cargar los datos expuestos en las primeras líneas, simplemente deberíamos ejecutar el comando

sqlldr usuario/pwd table=objetos data=objetos.csv

Y el comando generaría el siguiente archivo de log

SQL*Loader: Release 12.1.0.2.0 - Production on Sáb Ago 22 19:23:49 2015

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

Express Mode Load, Table: OBJETOS
Data File:      objetos.csv
  Bad File:     objetos_%p.bad
  Discard File:  none specified
 
 (Allow all discards)

Number to load: ALL
Number to skip: 0
Errors allowed: 50
Continuation:    none specified
Path used:      External Table

Table OBJETOS, loaded from every logical record.
Insert option in effect for this table: APPEND

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
NOMBRE                              FIRST     *   ,       CHARACTER            
EDAD                                 NEXT     *   ,       CHARACTER            
DIRECCION                            NEXT     *   ,       CHARACTER            

Generated control file for possible reuse:
OPTIONS(EXTERNAL_TABLE=EXECUTE, TRIM=LRTRIM)
LOAD DATA
INFILE 'objetos.csv'
APPEND
INTO TABLE OBJETOS
FIELDS TERMINATED BY ","
(
  NOMBRE,
  EDAD,
  DIRECCION
)
End of generated control file for possible reuse.

created temporary directory object SYS_SQLLDR_XT_TMPDIR_00000 for path C:\Hector

enable parallel DML: ALTER SESSION ENABLE PARALLEL DML

creating external table "SYS_SQLLDR_X_EXT_OBJETOS"

CREATE TABLE "SYS_SQLLDR_X_EXT_OBJETOS" 
(
  "NOMBRE" VARCHAR2(100),
  "EDAD" NUMBER,
  "DIRECCION" VARCHAR2(100)
)
ORGANIZATION external 
(
  TYPE oracle_loader
  DEFAULT DIRECTORY SYS_SQLLDR_XT_TMPDIR_00000
  ACCESS PARAMETERS 
  (
    RECORDS DELIMITED BY NEWLINE CHARACTERSET WE8MSWIN1252
    BADFILE 'SYS_SQLLDR_XT_TMPDIR_00000':'objetos_%p.bad'
    LOGFILE 'objetos_%p.log_xt'
    READSIZE 1048576
    FIELDS TERMINATED BY "," LRTRIM 
    REJECT ROWS WITH ALL NULL FIELDS 
    (
      "NOMBRE" CHAR(255),
      "EDAD" CHAR(255),
      "DIRECCION" CHAR(255)
    )
  )
  location 
  (
    'objetos.csv'
  )
)REJECT LIMIT UNLIMITED

executing INSERT statement to load database table OBJETOS

INSERT /*+ append parallel(auto) */ INTO OBJETOS 
(
  NOMBRE,
  EDAD,
  DIRECCION
)
SELECT 
  "NOMBRE",
  "EDAD",
  "DIRECCION"
FROM "SYS_SQLLDR_X_EXT_OBJETOS"

dropping external table "SYS_SQLLDR_X_EXT_OBJETOS"

Table OBJETOS:
  4 Rows successfully loaded.

Run began on Sáb Ago 22 19:23:49 2015
Run ended on Sáb Ago 22 19:23:50 2015

Elapsed time was:     00:00:00.82
CPU time was:         00:00:00.03

La documentación
http://www.oracle.com/technetwork/database/enterprise-edition/learnmore/sqlldr-express-mode-wp-1991038.pdf

Espero les sirva

by Ligarius
22.08.15. 17:33:16. 664 words, 5620 views. Categories: Oracle 12c , • Send a trackback »

Oracle 12c New Features : Comando VALIDATE de RMAN



En Oracle 12c existe un comando que nos puede hacer la vida muy sencilla, o ayudar en que sea más placentera.



El comando VALIDATE para RMAN (Recovery Manager), este comando puede hacer variadas cosas de utilidad para realizar chequeo de corrupción a nivel lógico de bloques (intrablock, o internamente de un sólo bloque) , como a nivel físico de bloques (interblock, o entre bloques).

Cada vez que se ejecuta el comando VALIDATE se chequea de forma manual alguna corrupción lógica o física , cada vez que ejecutamos una validación de por lo menos un datafile, RMAN chequea cada uno de los bloques del archivo y si en este análisis encuentra un bloque corrupto lógica o físicamente , se procede a actualizar la vista V$DATABASE_BLOCK_CORRUPTION, en esta vista queda inscrito el bloque que presenta problemas.

Lo que contiene el presente post.

  • Validación de datafiles
  • Validación de algún bloque en partícular de una datafile
  • Validación de base de datos completa
  • Validación de backupsets
  • Validación por secciones de datafiles

    El detalle de lo comentado :

  • Validación de datafiles : Para realizar el chequeo completo de un datafile, se ejecuta el siguiente comando, el cual arroja entre otras cosas la cantidad de bloques examinados y el valor del SCN más alto encontrado.

    VALIDATE DATAFILE "número datafile";

    Salida del comando :

    RMAN> validate datafile 1;

    Starting validate at 30/05/15
    using channel ORA_DISK_1
    channel ORA_DISK_1: starting validation of datafile
    channel ORA_DISK_1: specifying datafile(s) for validation
    input datafile file number=00001 name=C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\O1_MF_SYSTEM_BDONOH43_.DBF
    channel ORA_DISK_1: validation complete, elapsed time: 00:00:15

    List of Datafiles
    =================
    File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
    ---- ------ -------------- ------------ --------------- ----------
    1    OK     0              18958        104974          18064429
      File Name: C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\O1_MF_SYSTEM_BDONOH43_.DBF
      Block Type Blocks Failing Blocks Processed
      ---------- -------------- ----------------
      Data       0              68354
      Index      0              13822
      Other      0              3826

    channel ORA_DISK_1: starting validation of datafile
    channel ORA_DISK_1: specifying datafile(s) for validation
    including current control file for validation
    including current SPFILE in backup set
    channel ORA_DISK_1: validation complete, elapsed time: 00:00:01
    List of Control File and SPFILE
    ===============================
    File Type Status Blocks Failing Blocks Examined
    ------------ ------ -------------- ---------------
    SPFILE OK 0 2
    Control File OK 0 612
    Finished validate at 30/05/15

    RMAN>



  • Validación de algún bloque en partícular de una datafile : También se puede realizar el chequeo de un sólo bloque dentro de un datafile, quizás por que en el archivo de alertas o un aplicativo nos indico que allí existe una corrupción.

    VALIDATE DATAFILE "número datafile" block "número de bloque";

    Salida del comando :

    RMAN> validate datafile 7 block 1;

    Starting validate at 30/05/15
    using channel ORA_DISK_1
    channel ORA_DISK_1: starting validation of datafile
    channel ORA_DISK_1: specifying datafile(s) for validation
    input datafile file number=00007 name=C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
    channel ORA_DISK_1: validation complete, elapsed time: 00:00:01
    List of Datafiles
    =================

    
    File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
    ---- ------ -------------- ------------ --------------- ----------
    7    OK     0              0            1               0
      File Name: C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
      Block Type Blocks Failing Blocks Processed
      ---------- -------------- ----------------
      Data       0              0
      Index      0              0
      Other      0              1
    

    Finished validate at 30/05/15





  • Validación de base de datos completa : En la validación de la base de datos completa, simplemente se le indica que el VALIDATE será a nivel de base y el genera un informe con todos los bloques que ha recorrido y a que datafile corresponde.

    VALIDATE DATABASE;

    Salida del comando :

    RMAN> validate database;

    Starting validate at 30/05/15
    using channel ORA_DISK_1
    channel ORA_DISK_1: starting validation of datafile
    channel ORA_DISK_1: specifying datafile(s) for validation
    input datafile file number=00007 name=C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
    ****Muestra todos los datafiles que están siendo analizados

    channel ORA_DISK_1: validation complete, elapsed time: 00:01:05

    **** Muestra un resumen por cada uno de los datafiles que han sido analizados, mostrando la cantidad de bloques procesados, con problemas y el tipo de bloques.


    List of Datafiles
    =================
    File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
    ---- ------ -------------- ------------ --------------- ----------
    7 OK 0 129369 131072 18061221
    File Name: C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
    Block Type Blocks Failing Blocks Processed
    ---------- -------------- ----------------
    Data 0 1542
    Index 0 0
    Other 0 161



  • Validación de backupsets : Se le puede indicar un número de backupsets para que sea analizado y nos muestra la misma información que los comandos anteriores, por ejemplo, la cantidad de bloques que ha leído y el máximo SCN que posee el datafile, con esto podemos validar que nuestro backupset es válido para realizar una restauración.

    VALIDATE BACKUPSET "número backupset" ;

    Salida del comando :

    RMAN> validate backupset 1;

    Starting validate at 31/05/15
    using channel ORA_DISK_1
    channel ORA_DISK_1: starting validation of datafile backup set
    channel ORA_DISK_1: reading from backup piece C:\ORACLE12C\FAST_RECOVERY_AREA\PROD12C\BACKUPSET\2015_05_30\O1_MF_NNNDF_TAG20150530T205937_BPNMQ9WG_.BKP
    channel ORA_DISK_1: piece handle=C:\ORACLE12C\FAST_RECOVERY_AREA\PROD12C\BACKUPSET\2015_05_30\O1_MF_NNNDF_TAG20150530T205937_BPNMQ9WG_.BKP tag=TAG20150530
    7
    channel ORA_DISK_1: restored backup piece 1
    channel ORA_DISK_1: validation complete, elapsed time: 00:00:15
    Finished validate at 31/05/15

    RMAN>



  • Validación por secciones de datafiles : Podemos realizar la validación de un datafile , pero si este es muy grande , podemos dividir el trabajo en canales por paralelo, simplemente indicando un número o tamaño de sección para el datafile. Imaginense que poseen un sólo datafile de 100GB, pues bien un sólo canal será capaz de tomarlo y procesarlo, pero si lo dividimos en secciones de 10Gb, podríamos tener hasta 10 canales procesando las 10 partes de nuestro gran datafile.

    RUN
    {
    *** Se declaran los canales que serán utilizados para que en paralelo se tome un sólo datafile
    ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
    ALLOCATE CHANNEL c2 DEVICE TYPE DISK;
    ALLOCATE CHANNEL c2 DEVICE TYPE DISK;

    *** Se le indica el tamaño de la sección a analizar por cada canal generado
    VALIDATE DATAFILE 7 SECTION SIZE 200M;
    }

    Salida del comando :

    RMAN> run
    2> {
    3> allocate channel c1 device type disk;
    4> allocate channel c2 device type disk;
    5> allocate channel c3 device type disk;
    6> validate datafile 7 section size 200m;
    7> }

    released channel: ORA_DISK_1
    allocated channel: c1
    channel c1: SID=7 device type=DISK

    allocated channel: c2
    channel c2: SID=367 device type=DISK

    allocated channel: c3
    channel c3: SID=6 device type=DISK

    *** Se muestran todas las secciones que serán analizadas por cada canal declarado en RMAN
    Starting validate at 30/05/15
    channel c1: starting validation of datafile
    channel c1: specifying datafile(s) for validation
    input datafile file number=00007 name=C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
    validating blocks 1 through 25600
    channel c2: starting validation of datafile
    channel c2: specifying datafile(s) for validation
    input datafile file number=00007 name=C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
    validating blocks 25601 through 51200
    channel c3: starting validation of datafile
    channel c3: specifying datafile(s) for validation
    input datafile file number=00007 name=C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
    validating blocks 51201 through 76800
    channel c1: validation complete, elapsed time: 00:00:08
    channel c1: starting validation of datafile
    channel c1: specifying datafile(s) for validation
    input datafile file number=00007 name=C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
    validating blocks 76801 through 102400
    channel c2: validation complete, elapsed time: 00:00:09
    channel c2: starting validation of datafile
    channel c2: specifying datafile(s) for validation
    input datafile file number=00007 name=C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
    validating blocks 102401 through 128000
    channel c1: validation complete, elapsed time: 00:00:03
    channel c1: starting validation of datafile
    channel c1: specifying datafile(s) for validation
    input datafile file number=00007 name=C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
    validating blocks 128001 through 131072
    channel c3: validation complete, elapsed time: 00:00:11
    channel c2: validation complete, elapsed time: 00:00:04
    channel c1: validation complete, elapsed time: 00:00:01
    List of Datafiles
    =================

    File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
    ---- ------ -------------- ------------ --------------- ----------
    7    OK     0              129369       131067          18061221
      File Name: C:\ORACLE12C\ORADATA\PROD12C\DATAFILE\DATOS01_01.DBF
      Block Type Blocks Failing Blocks Processed
      ---------- -------------- ----------------
      Data       0              1542
      Index      0              0
      Other      0              156

    Finished validate at 30/05/15
    released channel: c1
    released channel: c2
    released channel: c3




    En definitiva, el comando VALIDATE es muy poderoso para realizas chequeos rápidos y certeros sobre las condiciones de nuestros respaldos y de nuestras bases de datos, buscando de manera óptima los posibles bloques corruptos, ya sea , física como lógicamente.

    Documentación del comando VALIDATE
    https://docs.oracle.com/database/121/BRADV/rcmvalid.htm#BRADV90063
    https://docs.oracle.com/database/121/RCMRF/rcmsynta2025.htm#RCMRF162

  • by Ligarius
    30.05.15. 21:24:20. 1427 words, 6007 views. Categories: Oracle 12c, RMAN (Recovery Manager) ,

    << 1 2 3 4 5 6 7 8 9 10 11 ... 44 >>