Formatos de Fecha en Oracle.
Para extraer de la fecha un dato en concreto, por ejemplo el día del año en el que estamos, se suele utilizar el comando TO_CHAR(date, ’formato’), en el que date es la fecha y ’formato’ es la parte de la fecha o bien el formato que le queremos dar a esta.
A continuación os añado un cuadro con las especificaciones de fecha:
CC Century
SCC Century BC prefixed with -
YYYY Year 1956
SYYY Year BC prefixed with -
IYYY ISO Year 1956
YY Year 56
RR Year 56 rollover for Y2K compatibility *
RRRR Year rollover (accepts 2 digits, returns 4) *
YEAR Year spelled out
SYEAR Year spelled out BC prefixed with -
BC BC/AD Indicator *
Q Quarter : Jan-Mar=1, Apr-Jun=2
MM Month of year 01, 02...12
MON JAN, FEB
MONTH In full [January ]...[December ]
FMMONTH In full [January]...[December]
RM Roman Month I, II...XII *
WW Week of year 1-52
W Week of month 1-5
IW ISO std week of year
DDD Day of year 1-366 *
DD Day of month 1-31
D Day of week 1-7
DAY In full [Monday ]...[Sunday ]
FMDAY In full [Monday]...[Sunday]
DY MON...SUN
DDTH Ordinal Day 7TH
DDSPTH Spell out ordinal SEVENTH
J Julian Day (days since 31/12/4713)
HH Hours of day (1-12)
HH12 Hours of day (1-12)
HH24 Hours of day (1-24)
SPHH Spell out SEVEN
AM am or pm *
PM am or pm *
A.M. a.m. or p.m. *
P.M. a.m. or p.m. *
TH Convert to ordinal format. e.g. 1 becomes 1st
MI Minutes 0-59
SS Seconds 0-59 *
SSSSS Seconds past midnight (0-86399) *
TZD Abbreviated time zone name. ie PST.
TZH Time zone hour displacement
TZM Time zone minute displacement
TZR Time zone region
· Todos estos formatos en mayúscula deben ser incluidos en la función entre comillas simples.
· La FM delante del formato nos permite suprimir los ceros a la izquierda de la fecha.
Por ejemplo (’FMMonth DD, YYYY’) nos devuelve ’June 9, 2010’ no ’June 09, 2010’.
· Los formatos de dato son resueltos con los caracteres en los que sean solicitados, por ejemplo: ’MONTH’ = ’JANUARY’; ’Month’ = January.
Publicado por
almondiguilla el dia 05-05-10 a las 09:15:53
0 comentarios Enlace permanente
ORA-19502 ORA-27061 Warning:Oracle Process Running Out Of Os Kernel I/O Resources
Este error se ha detectado para entornos SUSE 10 con Oracle 10.2.0.2.
Se produce cuando el proceso que se encarga de la escritura de los archives intenta acceder al disco para realizar la escritura del redolog cuando se realiza un log switch.
el error se debe a un bug, concretamente el
5609038.
La solución consiste en parchear el sistema operativo, recordar que este problema afecta a sistemas con SUSE 9, sp2 y tambien a SUSE 10.
O bien desactivar la comunicación asincrona de la base de datos con los dispositivos de almacenamiento modificando los parámetros
disk_asynch_io y
filesystemio_options de la siguiente forma:
· Alter system set disk_asynch_io=false scope=spfile;
· Alter system set filesystemio_options=none scope=spfile;
Esto se hace logandonos en sqlplus como sysdba, esto requieer que reiniciemos los servicios de base de datos.
Esta última solución no es válida para sistemas SAP, ya que las especificaciones de SAP para la base de datos requieren que esos parámetros estén seteados justo con los valoers contrarios a los que expongo aquí.
Publicado por
almondiguilla el dia 23-10-09 a las 08:55:46
0 comentarios Enlace permanente
Backup con RMAN sobre unidades NFS.(ORA-27504)
Cuando intentamos realizar un backup con RMAN sobre unidades montadas con nfs, existen consideraciones sobre las pa´rametros de montaje de la unidad que pueden hacer que el backup de la base de datos falle, el mensaje de error queda algo así como:
channel ORA_DISK_1: starting piece 1 at 18-SEP-09
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 09/18/2009 09:58:47
ORA-19504: fallo al crear el archivo "/backup/5tkphrum_1_1"
ORA-27054: el sistema de archivos de NFS en el que se crea o reside el archivo no se ha montado con opciones correctas
Additional information: 3
Este error se debe normalmente a las opciones de montaje de la unidad nfs sobre la que intentamos hacer el backup.
A la solución se llega con los siguientes pasos.
1º. Desmontamos la unidad nfs,a la que yo he llamado /backup
umount /backup
2º. editamos el fichero fstab, con vi, por ejemplo, con el usuario root.
vi /etc/fstab
3º. En las opciones de montaje de la unidad añadimos a continuación de "nfs" la siguiente cadena:
rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,vers=3,timeo=600,actimeo=0 0 04º. guardamos los cambios de fstab y volvemos a montar la unidad
mount /backup.
5º. Por último realizamos la backup proyectado.
Publicado por
almondiguilla el dia 18-09-09 a las 10:10:58
1 comentarios Enlace permanente
Modificación de tamaño del tablespace temporal.
En Oracle, el tamaño del tablespace temporal es relativamente sencillo de modificar, inicialmente tendremos un fichero asignado al tablespace, pongamos que este fichero tiene por nombre temp.dbf.
· si el fichero es muy pequeño; siempre podemos hacer que crezca solo activando la claüsula AUTOEXTENT, con la sentencia :
ALTER DATABASE TEMPFILE ’/path_completo/TEMP.dbf’
AUTOEXTEND ON NEXT 10M MAXSIZE 2500M,
Es conveniente cuando activamos el AUTOEXTENT de un fichero asignarle un tamaño máximo, ya que en caso contrario este crecerá indefinidamente hasta copar por completo la unidad de disco, pudiendo cotar el servicio de la base de datos por completo.
· Si por el contrario lo que deseamos es dirminuir el tamaño del fichero, lo más sencillo de hacer es: 1º. añadir un ficheroal tablespace con el tamaño que deseemos asignarle, 2º. Eliminar el fichero antiguo.
1º.
ALTER TABLESPACE "TEMP" ADD TEMPFILE ’/path_completo/temp2.dbf’ SIZE 500M2º.
ALTER DATABASE TEMPFILE ’/path_completo/temp.dbf’ DROP;· Si esta opción no es aplicable a nuestro caso, siempre podremos crear un tablespace temporal nuevo, asignarlo al sistema como tablespace temporal por defecto y más tarde eliminar el anterior.
Publicado por
almondiguilla el dia 11-08-09 a las 09:35:32
0 comentarios Enlace permanente
Script de creación de índices usando el catalogo de sistema.
Cuando se crea un objeto en una base de datos, la definición y características de estos objetos son guardadas en el catalogo del sistema de la base de datos. En concreto cuando creamos un índice, disponemos de varias vistas de sistema que nos permiten conocer sus caracteristicas, tanto de definición como de estado actual en la base de datos, estadísticas y un largo etc.
A continuación os adjunto un script que leyendo de las vistas dba_indexes y dbs_ind_columnsnos permite disponer del script de creación de ese índices, con las cláusula más comunes utilizadas para la creación del índice.
Esto puede ser util, por ejemplo, si deseamos hacer una carga masiva en una tabla, que dispone de varios índices, la tarea de la carga se hace bastante más agil si primero de eliminan los índices, lo cual nos obliga a volver a crearlos una vez terminada la carga.
Espero que os sea de utilidad.
set server output on;
DECLARE
CADENA VARCHAR2(1000) := ’’;
CADENA2 VARCHAR2(1000) := ’’;
I_NAME VARCHAR2(200) := ’’;
BEGIN
I_NAME := ’Nombre_Indice’;
SELECT ’(’ ||SUBSTR(SUBSTR(MAX(column_name),0),0,LENGTH(MAX(COLUMN_NAME))-1)|| ’)’ INTO CADENA
FROM ( SELECT SYS_CONNECT_BY_PATH(column_name, ’ ’) column_name
FROM ( SELECT ’"’ || column_name || ’",’ column_name, ROW_NUMBER() OVER (ORDER BY column_position) FILA
FROM DBA_IND_COLUMNS
where index_name = I_NAME )
START WITH FILA = 1
CONNECT BY PRIOR FILA = FILA - 1 ) ;
SELECT ’CREATE ’ || UNIQUENESS || ’ INDEX "’ || OWNER || ’"."’ || INDEX_NAME || ’" ON "’ || OWNER || ’"."’ || table_name || ’" ’ || CADENA || ’ PCTFREE ’ || PCT_FREE || ’ INITRANS ’ || INI_TRANS || ’ MAXTRANS ’ || MAX_TRANS || ’ COMPUTE STATISTICS ’ || ’ STORAGE(INITIAL ’ || INITIAL_EXTENT || ’ NEXT ’ || NVL(NEXT_EXTENT, 1048576) || ’ MINEXTENTS ’ || MIN_EXTENTS
|| ’ MAXEXTENTS ’ || max_extents || ’ PCTINCREASE ’ || NVL(PCT_INCREASE,0) || ’ FREELISTS ’ || NVL(FREELISTS,1)
|| ’ FREELIST GROUPS ’ || FREELIST_GROUPS || ’ BUFFER_POOL ’ || BUFFER_POOL || ’) TABLESPACE "’ || TABLESPACE_NAME || ’";’ INTO CADENA2
FROM DBA_INDEXES
WHERE INDEX_NAME = I_NAME ;
DBMS_OUTPUT.put_line (CADENA2);
END;
Publicado por
almondiguilla el dia 08-05-09 a las 08:38:50
0 comentarios Enlace permanente