La idea de este post es acercarles una función que quizás en algún momento les sea de utilidad.
El propósito de la función es concatenar el resultado de un query que devolvió varias filas en solo 1,
la función es la siguiente:
CREATE OR REPLACE FUNCTION concatfilas(qry IN VARCHAR2) RETURN VARCHAR2 IS
filaFinal VARCHAR2(4000);
result VARCHAR2(4000);
cur sys_refcursor;
BEGIN OPEN cur FOR qry;
LOOP
FETCH cur INTO result;
EXIT WHEN cur%NOTFOUND;
IF filaFinal IS NULL THEN
filaFinal := resul;
ELSE
filaFinal := filaFinal ',' result;
END IF;
END LOOP;
RETURN filaFinal;
END;
/
Ejemplo
SQL> create table prueba (nombre varchar2(30));
Table created.
SQL> insert into prueba values(‘Luis’);
1 row created.
SQL> insert into prueba values(‘Bruno’);
1 row created.
SQL> insert into prueba values(‘Matias’);
1 row created.
SQL> insert into prueba values(‘Gonzalo’);
1 row created.
SQL> commit;
1 row created.
SQL> select concatfilas('SELECT nombre FROM prueba') as nombres
2 FROM dual;
NOMBRES
------------------------------------------------------------------
Luis, Bruno, Matias, Gonzalo
Espero les haya servido
Saludos!
Gondalf.
jueves, 10 de junio de 2010
miércoles, 9 de junio de 2010
Perdida de un Control File
Lo que primero tenemos que tener en claro que la pérdida de un control file multiplexado inmediatamente realiza un abort a la instancia. Como nosotros tenemos multiplexado nuestro control file (de no tenerlo, hacerlo!), realizar una recuperación de la instancia no es nada complicado.
Para el siguiente ejemplo supongamos que tenemos 3 control files:
/u02/oradata/test/control01.ctl
/u03/oradata/test/control02.ctl
/u04/oradata/test/control03.ctl
Por un fallo en el /u04 perdemos el control03.ctl, por ende la instancia cae dada esta perdida.
Para poder hacer el recover de la instancia lo que hacemos es modificar el parámetro CONTROL_FILES dentro del SPFILE suprimiendo el control03.ctl.
Los pasos a seguir son:
- Levantamos la base en NOMOUNT, lo hacemos en este modo dado que en MOUNT la base ya realiza un chequeo de los control files.
SQL> startup nomount
ORACLE instance started.
Total System Global Area 188743680 bytes
Fixed Size 778036 bytes
Variable Size 162537676 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
- Con la instancia en NOMOUNT podemos modificar el paramentro CONTROL_FILE dentro del spfile:
SQL> alter system set control_files =
2 '/u02/oradata/test/control01.ctl',
3 '/u03/oradata/test/control02.ctl'
4 scope = spfile;
System altered.
- Bajamos la instancia
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
- Levantamos la instancia con el nuevo parametro aplicado
SQL> startup
ORACLE instance started.
Total System Global Area 188743680 bytes
Fixed Size 778036 bytes
Variable Size 162537676 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
Database mounted.
Database opened.
- Por último lo que podemos hacer es checkear que el parametro haya quedado correcto para lo cual hacemos la siguiente consulta
SQL> select name, value
2 from v$spparameter
3 where name = 'control_files';
Espero les haya servido
Saludos!
Gondalf
Para el siguiente ejemplo supongamos que tenemos 3 control files:
/u02/oradata/test/control01.ctl
/u03/oradata/test/control02.ctl
/u04/oradata/test/control03.ctl
Por un fallo en el /u04 perdemos el control03.ctl, por ende la instancia cae dada esta perdida.
Para poder hacer el recover de la instancia lo que hacemos es modificar el parámetro CONTROL_FILES dentro del SPFILE suprimiendo el control03.ctl.
Los pasos a seguir son:
- Levantamos la base en NOMOUNT, lo hacemos en este modo dado que en MOUNT la base ya realiza un chequeo de los control files.
SQL> startup nomount
ORACLE instance started.
Total System Global Area 188743680 bytes
Fixed Size 778036 bytes
Variable Size 162537676 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
- Con la instancia en NOMOUNT podemos modificar el paramentro CONTROL_FILE dentro del spfile:
SQL> alter system set control_files =
2 '/u02/oradata/test/control01.ctl',
3 '/u03/oradata/test/control02.ctl'
4 scope = spfile;
System altered.
- Bajamos la instancia
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
- Levantamos la instancia con el nuevo parametro aplicado
SQL> startup
ORACLE instance started.
Total System Global Area 188743680 bytes
Fixed Size 778036 bytes
Variable Size 162537676 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
Database mounted.
Database opened.
- Por último lo que podemos hacer es checkear que el parametro haya quedado correcto para lo cual hacemos la siguiente consulta
SQL> select name, value
2 from v$spparameter
3 where name = 'control_files';
NAME VALUE
--------------- --------------------------------------
control_files /u02/oradata/test/control01.ctl
control_files /u03/oradata/test/control02.ctl
Espero les haya servido
Saludos!
Gondalf
Suscribirse a:
Entradas (Atom)