Este un blog que cambio de rumbo... antes era relacionado a "n" temas ahora será exclusivo para detallar todo lo que pude aprender en Oracle =)

martes, 8 de mayo de 2012

MODO ARCHIVE Y MODO NO ARCHIVE

Nuestra base de datos en ORACLE puede correr de dos maneras diferentes en modo NOARCHIVE(default) y modo ARCHIVE. En el modo NOARCHIVE que es el menos recomendado los online redologs son sobreescritos y no son backupeados , en el caso del modo ARCHIVE todos los redo logs una vez llenos son backupeados a través del background process ARCn  tomando el nombre de "archive redo logs" los cuales serán depositados en uno o mas ubicaciones del servidor, esto dependerá del valor de los parámetros LOG_ARCHIVE_DEST_1, LOG_ARCHIVE_DEST_2, ..., LOG_ARCHIVE_DEST_n .

Al tener la base de datos en modo NOARCHIVE nos limitamos a tener que bajar la base de datos para poder backupearla, sin embargo en el caso de tenerla en modo ARCHIVE podemos backupearla online mientras nuestros usuarios están trabajando.

Otra desventaja del tener la base de datos en modo NOARCHIVE es que solo podremos recuperar la base de datos hasta el momento en que el último backup fue realizado , en el caso de tenerla en modo ARCHIVE podemos recuperar hasta la última transacción comiteada.

Para verificar si tu base de datos está en modo archive o no, ejecuta el siguiente query:

select LOG_MODE from v$database;


LOG_MODE
-----------
NOARCHIVELOG


* PASOS PARA CONFIGURAR TU BASE DE DATOS A MODO ARCHIVE:

Verificar que los siguientes parámetro estén seteados correctamente:


SQL> show parameter log_archive_dest_1


SQL> Alter system set log_archive_dest_1='location=/bk_archive_1/';




-- El siguiente parámetro no es dinámico por eso se utiliza "scope=spfile"


SQL> Alter system set log_archive_format='orcl_%r_%t_%s.arc' scope=spfile;


Una vez verificado estos parámetros podemos proceder a cambiar la BD a modo Archive


[oracle@pc dbs]$ sqlplus / as sysdba
SQL>shutdown immediate
SQL>startup mount
SQL> alter database archivelog;
SQL> alter database open;



Si deseas retornar tu base de datos a modo NOARCHIVE, deberás ejecutar el siguiente comando:


[oracle@pc dbs]$ sqlplus / as sysdba

 SQL>shutdown immediate
 SQL> startup mount
 SQL> alter database noarchivelog;

alter database noarchivelog
*
ERROR at line 1:
ORA-38774: cannot disable media recovery - flashback database is enabled
(Si como en mi caso te sale este error es porque tu bd estuvo previamente en modo archive y tenías habilitado el flashback database)

Entonces debes ejecutar el siguiente  query para desactivar el flashback
SQL> alter database flashback off;
Database altered.

-- Y luego
SQL> alter database noarchivelog;
Database altered.

Para probar que has realizado correctamente la configuración , realiza el sgte. comando:

SQL> alter system switch logfile;


Listo!





sábado, 24 de julio de 2010

DECLARANDO VARIABLES PL/SQL

Las variables pueden ser usadas para almacenar data temporalmente, manipular valores almacenados y reusarlas dentro de los bloques. las variables pueden almacenar cualquier objeto PLSQL, como variables, tipos, cursores y subprogramas(Fx y Px).

Requerimientos para nombrar variables:
- Debe iniciar con una letra.
- Puede incluir letras y números
- Puede incluir caracteres especiales ($, _ y #)
- No puede ser mayor a 30 caracteres.
- No debe incluir palabras reservadas.

Como manejamos las variables en PLSQL?
- Las variables se deben declarar en la sección declarative, puedes declarar una variable asignando un valor inicial y se puede ademas colocar el constraint de NOT NULL .
- se usan y asignan nuevos valores en la sección ejecutable.
-Las variables se utilizan para pasar los parametros a un subprograma(Fx o Px) y ademá sirven para almacenar las respuesta de estos subprogramas.

Sintaxis:
nombre_variable [constant] tipo_dato [not null] [:= valor_default];

Ejemplo:
v_contador number(2) not null := 0;

Otros parametros de la declaración de variables:
CONSTANT: el valor de la variable no puede cambiar.
NOT NULL: es un constraint que indica que la variable debe tener un valor.
DEFAULT : es otra manera de dar un valor por defctoa una variable ( es igual a :=)

En Oracle al imprimir textos literales que contienen el caracter de comilla simple (') se presentan algunos incovenientes lanzandonos un error (ORA-01756: la cadena entrecomillada no está terminada correctamente) , por lo cual oracle permite solucionar esto utilizando :

1. Dobles comillas como se muestra en el siguiente ejemplo:

Select 'Fathers''day'from dual;

y 2. es utilizar "Q o q" con un rango de delimitadores que indica que todo texto que se encuentre dentro de los delimitadores se considera texto literal , por ejemplo:

select q'[father's day ]' from dual;

Ambos ejemplos dan como resultado : Father's day sin ningún error en nuestra consola SQL*PLUS o la herramienta que utilices.


TIPOS DE VARIABLES:

1. Variables PLSQL, pueden ser:

1.1Escalares, almacenan un solo valor y no tienen componentes internos (puede sre un valor booleano). Pueden ser de tipo:

- Char, varchar2, number(p,s), binary_integer, pls_integer, boolean, binary_float, binary_double.
- Date, timestamp, timestamp with time zone, timestamp with local time zone, interval year to month, interval year to second.

*number(p,s): p , puede tomar valores d 1 hasta 38 y s, puede tomar valores de -84 hasta 127.
*pls_integer: requiere menos almacenamiento y es más rápido que los tipo de datos NUMBER
*boolean, almacena tipos de datos :false, true y null. puede utilizar operadores and, or y not .
*timestamp: almacena año, mes, día, hora, minutos , segundos y fracciones d segundos , la precisión de los segundos se encuentra en 6 seg. por default, pero puede ir desde 0 hasta 9 .[timestamp(x)]

Ejemplo:

DECLARE
v_emp_job varchar(100);

1.2.Compuestas, tambien llamada coleccionts, pueden almacenar datos de tipo RECORD , TABLE, NESTED TABLE y VARRAY .
1.3.Referidas, son llamados pointers (punteros) , por que apuntan hacia una localización de almacenamiento.
1.4Large Object (LOB), almacena valores de tipos de datos LOB (CLOB, BLOLB, BFILE y NCLOB), son llamados locators(localizadores), por que especifican la localiación de LOBS que son almacenados fuera de las tablas.

2. Variables NO PLSQL o Bind Variables or Host variables
son creadas en un ambiente diferente a la sección DECLARE de un bloque pl/sql, son creadas con la palabra VARIABLE, son usadas en sentencias sql y PL/SQL . Pueden ser consutadas aun cuando el bloque PL/SQL ya se ejecutó.
Cuando declaras una bind variable number , no puedes indicar la precisión. Para coloarla dentro de un bloque plsql debes colocar :NOMBRE_VARIABLE

sintaxis:
VARIABLE nombre_variable number

sintaxis para imprimir una bind variable:
VARIABLE v_dato number
begin
select salary into :v_dato from employees where employee_id='8';
end;
/
print v_dato

Se puede utilizar:
SET AUTOPRINT ON, Para mostrar automaticamente el valor de la bind variable.

Como declarar variables??
- Cuando declaras una variable PL/SQL debemos evitar colocar el mismo nombre de la columna a la cual hacemos referencia .
- Cuando a una variable no se coloca un valor por defecto , este toma el valor de null.
- Dos variables pueden tener el mismo nombre sólo si son definidos en bloques diferentes.
- Si en la declaración de la variable has colocado al opción de NOT NULL, necesariamente debe tener un valor por default en la declaración.

Declarar variables utilizando el atributo %TYPE
Lo usamos para declarar una variable de cuerdo a una columna definida en la BD o otro variable declarada.
Para declarar un variable con atributo %type , se debe anteponer el nombre de la tabla de la base de datos y el nombre de la columna o el nombre de la variable declarada.
No es aplicable utilizar constraint NOT NULL para variables que utilizan %type

sintaxis:
nombre_variable table.column_name%type;
nombre_variable nombre_variable%type;

PLSQL (Procedural Language extension to SQL) Introducción



Beneficios de PL/SQL
-PL/SQL permite la integración de procedimientos construidos con SQL.Permite especificar no sólo que hacer con un comando SQL , sino como hacerlo, dando un mejor control para su ejecución.
-Mejora la peformance, ya que a través de PLSQL podemos unir varias sentencias SQl en un solo programa, por lo tanto se envía un solo bloque a la BD en lugar de enviar una sentencia SQL a la vez.
-Modularized programa development: la unidad basica en un programa PL/SQL es el bloque.Los Bloques se pueden hallar secuencialmente o se pueden encontrar anidados.
Modularizar consiste en utilizar procedimientos, funciones, paquetes.
-Integración con herramientas, PL/SQL se encuentra integradoi con herramientas como Oracle Forms, Oracle Reports, otros.
-Portable: PLSQL corre en cualquiere servidor Oracle.
-Manejo de Excepciones, permite manejar eficientemente las excepeciones.


Estructura de un Bloque PL/SQL

Tiene 3 secciones :
1.DECLARATIVE
DECLARE (opcional)
-Permite declarar variables, crusores y excepciones

2.EXECUTABLE(inicia con begin y finaliza con end) esta sección necesariamente debe contener al menos una sentencia.
BEGIN(mandatorio)
- SQL y PL/SQL sentencias
EXCEPTION(opcional)
- Acciones a desarrollar cuando ocurren errores.
END;(mandatorio)

3.EXCEPTION HANDLE(Manejo de excepciones) esta sección se encuentra anidada dentro de la sección ejecutable e inicia con la palabra EXCEPTION


TIPOS DE BLOQUES
Existen 3 tipos de bloques que comprenden un Programa PL/SQL
1.Anónimos
No tienen nombre y son compilados cada vez que la aplicación es ejecutada ya que estos bloques nose almacenan en la bd.
2.Subprogramas(Procedimientos & Funciones)
Tienen un nombre especifico y son almacenados en la BD, por ello podemos invocarlos cuando lo necesitemos. Los tipos son : procedimientos y funciones, los primeros desarrollan una acción y las funciones calculan y DEBEN retornan un valor.

Ejemplos de un bloque anónimo



1. Habilitar la salida de mensajes en SQL* PLUS

set server output on

2. Utilizaremos el paquete de oracle para mostrar los mensajes:

DBMS_OUTPUT.PUT_LINE();
3. detallamos un bloque anónimo :

Finalizamos el bloque con el "/" para proceder a su ejecución.






miércoles, 14 de octubre de 2009

USING THE DATA RECOVERY ADVISOR (DRA)

The DRA is a new tool introduced in oracle 11G, that automatically diagnose database failures and determines the appropriate recovery options. in addition, it can perform the recovery after the DBA confirms the operation. DRA can proactively check for failures, before the database process detects corruption and signals an error.

DRA may be used with Em or RMAN command line. DRA supports only single -instance databases(no RAC environments ).

Support workbench tool is invoked from the software and support tab of the EM, and shows the failures in the Database . when you clicking the launch recovery advisor button, you can invoke DRA.

The health monitor (Hm) tool in the oracle 11G proactively monitors the health of the database . it assesses data failures and reports to the DRA , that assigns the priority based on the failure.

failure chcks in the database(DB) can be reactive or proactive. when an error occurs in the db , reactive checks are automatically executed. the following are examples of data failures where the Dra suggest reapir options:
- Missing or corrupted datafiles
- datafiles with incorrect OS permissions
- offline tablespaces
- corrupt index entry or dictinonary entry
- i/o failures
- number of open files exceeded





RECUPERANDO BD EN ORACLE - cuando pierdes UN control file(resumen sybex)

Losing one of the multiplexed control file immediately aborts the instance.
1- shutdown abort
2- copy one of the good copies of the control file to the location of the corrupted or missings control file.
if the corrupted Cfile resided on a failed disk , copy it to another suitable location and update the initialization parameter to update the cfile reference or you can remove the reference from this initialization parameter until you find a suitable location.
you must have at least two control files in your Db.
3-start the instance with startup.

you´ll change the initialization parameter control_file using the alter system set scope=spfile when the instance is started in no mount mode.

jueves, 14 de febrero de 2008

Quien dijo q la Seguridad Informática es aburrida!!!!

Traducción:
Dogbert el consultor de seguridad.
Si ven a alguien sin su identificación…
… desnúdenlo y regístrenlo, confisquen su billetera, y enciérrenlo en el closet de limpieza hasta que muera de hambre!
PHB (jefe de pelo puntiagudo): Eso me parece un poco extremo.
Dogbert: Estás a un minuto de vivir de agua de trapeador.



De hecho que la identificación de las personas es muy importante en una organización, no vamos a permitir que un cracker ingrese a un centro de cómputo, ¿cierto? Aunque claro, la identificación debe ser hecha con buenos modales y respeto por la persona, nada que ver con nuestro malévolo Dogbert ....

=)