miércoles, 25 de mayo de 2016

Conectar SQL Developer a una base de datos remota

Cómo conectar Oracle SQL Developer a una base de datos remota.

En ocasiones es necesario consultar una base de datos Oracle en un servidor desde tu máquina local para no tener que conectarte al servidor directamente.

Al ingresar los datos de conexión en mi Oracle SQL Developer local y hacer clic en Test, tengo el siquiente mensaje de error:

Test failed: The Network Adapter could not establish the connection

Después de verificar que mi listener está prendido y mis datos de conexión son correctos, la otra opción que me faltaba es abrir el puerto 1521 desde el firewall del servidor.

El puerto 1521 es el puerto default de Oracle para permitir conexiones a la base de datos pero como este se puede cambiar, tal vez necesiten abrir otro dependiendo de su configuración.

Para abrir el puerto 1521 en el firewall de windows en su servidor, hagan lo siguiente.

1. Ir a Start - Administrative Tools - Windows Firewall with Advanced Security

2. Seleccionar Inbound Rules - New Rule. Llenar las siguientes opciones y hacer clic en OK.

Rule Type: Port
Protocolo and Ports: TCP
Specific local ports: 1521
Action: Allow the connection
Profile: Domain, Private, Public
Name: Oracle TCP 1521 (El nombre que prefieran aquí)

3. Así deben ver la nueva Inbound Rule al seleccionarla

Propiedades de Inbound Rule

Después de esto ya podrán conectarse con SQL developer a la base de datos remota y ver Status: Success al hacer clic en el botón de Test.

Conexión SQL developer

Espero les sirva.






sábado, 16 de abril de 2016

Configurar ASP.NET 4 MVC en IIS 7

Cómo configurar ASP.NET 4 MVC en IIS 7

Este error me sale cada que intento configurar un sitio ASP.NET 4.0 MVC en IIS 7 en un nuevo servidor.

HTTP Error 403.14 - Forbidden The Web server is configured to not list the contents of this directory.

Antes de continuar deben tener instalado el framework 4.0 como requisito para desplegar esta clase de aplicaciones en IIS. Además de esto la aplicación que están configurando debe tener un application pool con framework 4 también.

Pueden checar este post para ver como cambiar el framework de un application pool en IIS:
Cambiar versión de framework de un application pool en IIS

Tengo rutas de este tipo {controler}/{action}/{id} en mi aplicación y el problema que tengo es que no me resuelve las rutas de los controladores que tengo en la aplicación web.

Lo que ahora sé es que se tiene que registrar ASP.NET 4 en IIS y para eso se tiene que ejecutar el programa para registrarlo.

El programa a ejecutar para registrar ASP.NET en IIS es aspnet_regiis.exe

Para windows 32bit (x86) lo encuentran en:
%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -ir

Para windows de 64bit (x64) lo encuentran en:
%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir

Los números de las versiones pueden variar pero sólo usen las que tienen instaladas.

Con esto resuelvo mi problema y mis rutas de controladores se ven correctamente.

Espero les sirva.

Backup de base de datos Oracle 11g con RMAN

Como hacer un backup de base de datos con RMAN

Esta es una tarea que realizo en un periodo semanal o quincenal para tener un respaldo actualizado de la base de datos de Oracle en caso de alguna situación inesperada.

La base de datos con la que trabajo es una base de datos Oracle 11g en modo archivelog por lo que utilizo el Recovery Manager RMAN para hacer el backup.

Como saben, hay diversas formas de realizar un backup sin embargo aquí les dejo el que yo utilizo.

Este un backup básico completo no de los incrementales complicados que tienen toda la complicación propia de sólo respaldar los ultimos cambios desde el último backup.

Como mi base de datos está en modo archivelog, también hago backup de los archivelogs por lo que primero prefiero borrar los archivelogs obsoletos para no tener problemas de espacio al generar mi backup.

Les dejo aquí los comandos a utilizar desde una consola de comandos abierta en modo administrador.

C:\Users\user>RMAN TARGET /

RMAN> REPORT OBSOLETE;
RMAN> DELETE OBSOLETE;

RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

Si quieren saber como levantar este backup en otro servidor chequen este otro post donde explico como hacerlo.

Cómo restaurar base de datos de Oracle con RMAN

Espero les sirva.


jueves, 31 de marzo de 2016

Unrecognized attribute 'targetFramework'

Parser Error Message: Unrecognized attribute 'targetFramework'.


Este error me ha ocurrido en diversas ocasiones al intentar levantar un sitio que usa framework .NET 4.0 en IIS 7.

Server Error in '/' Application.

Configuration Error

Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

Parser Error Message: Unrecognized attribute 'targetFramework'. Note that attribute names are case-sensitive.


Esto es porque por default IIS 7 genera un application pool por cada sitio con framework .NET 2.0.

Entonces al intentar acceder al sitio hay un conflicto de versiones de framework .NET de IIS con la de la aplicación en framework .NET version 4.0.

Para resolver hay que cambiar la versión del application pool en IIS para usar el framework .NET 4.0.

Solución.

1.- Abrir IIS y expandir las opciones del servidor
2.- Click en la opción Application pools
3.- Seleccionar la application pool que tiene el nombre del sitio web que están modificando.
4.- Click derecho y seleccionar opciones avanzados (Advanced settings)
5.- La primer opción es .NET framework Version, ahí deben cambiar a v4.0 como en la siguiente imagen.


Después de esto pueden ir a refrescar desde su navegador de internet y deben poder ver el sitio o la aplicación web funcionando correctamente.

Espero les sirva.

miércoles, 30 de marzo de 2016

Enviar email con ASP.NET c# desde godaddy

Cómo enviar email con ASP.NET c# desde godaddy


En este post voy a explicar cómo enviar un correo desde un sitio web alojado en godaddy.

Tengo un formulario de contacto en html con algunos datos básicos como nombre, apellido y correo que debe ser enviado a una cuenta de correo administrativa del sitio. Estoy usando jquery para hacer el llamado al código de envío de correo e imprimiendo en un alert el mensaje de error o éxito.

Es importante mencionar que las cuenta de correo que utilizo para hacer el envío es también administrada por godaddy. Por esta razón tanto el servidor smtp de salida y el puerto los obtuve desde el panel de control de correos de godaddy.

Primero es necesario obtener los datos del servidor smtp de godaddy. Para esto deben ir a la sección de Email dentro de godaddy (Mis productos - email - administrar o algo parecido).

Deben encontrar algo parecido a esto:


De ahí deben tomar el nombre del servidor SMTP. En mi caso es smtpout.secureserver.net

Aqui está el código en c# para enviar correos desde godaddy con ASP.NET razor. Este código es de un archivo cshtml.

@using System.Net.Mail;   
@{      
    var nombre = Request["nombre"];
    var apellido = Request["apellido"];
    var email = Request["email"];
    var telefono = Request["telefono"];
    var pais = Request["pais"];   
    var ciudad = Request["ciudad"];
    var mensaje = Request["mensaje"];
 
    var bodyMail = "<p>Nombre: "+ nombre +"</p>";
    bodyMail += "<p>Apellido: "+ apellido +"</p>";
    bodyMail += "<p>Email: " + email + "</p>";
    bodyMail += "<p>Telefono: " + telefono + "</p>";
    bodyMail += "<p>Pais: " + pais + "</p>";
    bodyMail += "<p>Ciudad: " + ciudad + "</p>";
    bodyMail += "<p>Mensaje: " + mensaje + "</p>";

    MailMessage mail = new MailMessage(email, "administracion@misitio.com");
    SmtpClient client = new SmtpClient();
    client.Host = "smtpout.secureserver.net";
    client.Port = 3535;  //pueden probar con los puertos arriba disponibles   

    client.UseDefaultCredentials = false;
    client.DeliveryMethod = SmtpDeliveryMethod.Network;
    client.EnableSsl = false;
    client.ServicePoint.MaxIdleTime = 1;
    client.Timeout = 1000;
    client.Credentials = new NetworkCredential("administracion@misitio.com", "***");
    mail.IsBodyHtml = true;
    mail.Subject = "Contacto: " + nombre + apellido;
    mail.Body = bodyMail;
   
    try{
        client.Send(mail);
        @Html.Raw("El correo fue enviado correctamente.");
    }catch(Exception err){
        @Html.Raw("Ocurrió un error. Intente nuevamente.");
    }
    mail.Dispose();
}



Cómo ven sólo regreso mensajes de error y éxito porque lo estoy llamando desde uná página html con jquery e imprimo los mensajes en un alert.

Espero les sirva.



sábado, 12 de marzo de 2016

Cargar contenido en un div con jquery load

Cómo cargar contenido en un div con jquery load


El uso de los iframes ya no está muy de moda estos días por lo que dividir y cargar contenido usando iframes ya no es muy recomendable.

Lo de hoy es jquery así que en esta publicación voy a explicar cómo cargar contenido en un div con jquery.

La función de jquery a usar es load como el album de Metallica.

En este caso tengo un menú en estructura de ul y li que contiene ligas con diferentes destinos. Lo que quiero es que cada liga cargue un contenido html (puede ser contenido dinámico también) diferente por lo que en cada liga especifico la dirección a cargar con el atributo data-id. Pueden usar su propio atributo.

El siguiente es mi menú que como ven está anidado y las ligas tienen diferentes niveles pero eso no va a ser ningun problema para jquery. El id del menú va a ser utilizado para el selector de jquery.

Aquí recomiendo invalidar las ligas en el atributo href con javascript: href="javascript:;"

<div id="ddmenuprincipal" class="ddmenuprincipal">
        <div>
            <nav>
                <ul>                   
                   <li>
                        <a class="" href="/" >Productos</a>
                        <ul class="fallback">
                            <li><a href="javascript:;" data-id="folder1/archivo1.htm">Cristalia</a></li>
                            <li><a href="
javascript:;" data-id="folder2/archivo2.aspx?var=algo">Ecar</a></li>                          
                        </ul>
                    </li>
                 </ul>
            </nav>
        </div>

</div>

A continuación el código que requiere tener una versión válida de jquery y recuerden siempre estar dentro del evento ready de jquery.

Este código indica cargar la ruta especificada en el atributo data-id en el elemento con id contenido cuando haya un click en las ligas que se encuentren en el elemento con id ddmenuprincipal. Enredado no?
Les dejo el alert para que vean la dirección del archivo que especificaron en el menú.

$(document).ready(function () {
    $('#ddmenuprincipal').on('click', 'a', function () {
        alert($(this).attr('data-id'));
        $("#contenido").load($(this).attr('data-id'));       
    });
});


Si tienen hoja de estilos definida dentro de los archivos a cargar, los estilos entrarán en conflicto así que definan antes donde van a tenerlos. Lo ideal es tenerlos en el archivo que hace la llamada.

Espero les sirva.

Failed to connect to database instance: ORA-28001: the password has expired (DBD ERROR: OCISessionBegin)

Failed to connect to database instance: ORA-28001: the password has expired (DBD ERROR: OCISessionBegin). 

Me apareció este error de Oracle al dar la contraseña del usuario DBSNMP. Parece que el password ha expirado.

Para verificar el estado del usuario en la base de datos pueden ejecutar la siguiente consulta con un usuario superior como sys.

SQL> select username, account_status from dba_users where username='DBSNMP'; 

Para cambiar el password usen la sentencia de alter user identified by, aquí abajo la dejo.

SQL> alter user dbsnmp identified by **** account unlock;

Espero les sirva.
 

miércoles, 9 de marzo de 2016

Imprimir fecha, hora, mes y día con javascript

Cómo imprimir fecha, hora, mes y día de la semana con javascript


Recientemente he tenido que imprimir la fecha con javascript en español en una página web usando javascript.

Como saben esto es algo que se puede hacer con javascript puro sin tener que utilizar ninguna librería externa como jQuery o alguna otra.

Para lograr esto deben hacer uso de la función Date() de javascript.

Como esta función solo retorna índices para especificar tanto el día de la semana como el del mes, hay que definir arreglos con los nombres respectivos de mes y día en español o cualquier idioma.

Aquí les dejo el código que utlice para esto:

<script>
var meses = new Array ("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
var diasSemana = new Array("Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado");
var f=new Date();
document.write(diasSemana[f.getDay()] + " " + f.getDate() + " de " + meses[f.getMonth()] + " " + f.getFullYear() + " " + f.getHours()+":"+ f.getMinutes());
</script>


Con este código pueden cambiar la posición de cada elemento para lograr el formato que desean.

Espero les sirva.

domingo, 6 de marzo de 2016

ORA-27486: insufficient privileges, ORA-06512: at SYS.DBMS_ISCHED, SYS.DBMS_SCHEDULER‏

ORA-06512: at SYS.DBMS_ISCHED, SYS.DBMS_SCHEDULER‏


Hola.

Me encontré con este error en Oracle 11g al intentar ejecutar un stored procedure. El error es de privilegios insuficientes de ejecución. Por lo cual es necesario saber el permiso correcto a asignar en este tipo de errores.

ORA-06512: at SYS.DBMS_ISCHED, SYS.DBMS_SCHEDULER‏

Ocurre este error al ejecutar un stored procedure sin los permisos necesarios. Usualmente con un usuario que no es el dueño del procedimiento. Es decir que el stored no se encuentra dentro del esquema del usuario.

En este caso, el stored procedure es parte de una tarea programada en Oracle através de jobs.

Solución.

Esto se resuelve asignado el permiso Manage scheduler al usuario correspondiente con la siguiente instrucción:

GRANT MANAGE SCHEDULER TO xxx;

Tomé la referencia de aquí.

Espero les sirva.

Enter the full pathname for java.exe error en SQL Developer

Enter the full pathname for java.exe error en SQL Developer

Este error ocurre al intentar iniciar Oracle SQL Developer de una reciente instalación de Oracle 11g.

A pesar de estar especificando la ruta correcta para el archivo java.exe el mismo error se presentaba cada vez.

La solución es sencilla, únicamente tienen que iniciar el SQL Developer en modo administrador.
Click derecho y seleccionar "Iniciar como administrador" o "Run as administrator".

Después de eso usar la ruta correcta hacia el archivo java.exe. En mi caso:


C:\app\administrator\product\11.2.0\dbhome_2\jdk\jre\bin

Espero les sirva.

Cómo reconfigurar el Enterprise Manager de Oracle 11g con emca

Reconfigurar el Enterprise Manager de Oracle 11g con emca

Después de una restauración de base de datos mi Enterprise Manager de Oracle 11g está corrupto y ahora quiero recuperarlo para poder utilizarlo.

Para esto hay que remover y volver a crear el repositorio utilizando la herramienta Enterprise Manager Configuration Assistant o emca

Para remover el repositorio actual:

emca -deconfig dbcontrol db -repos drop
Enter the following information:
Database SID: INSTANCIA
Listener port number: 1521
Password for SYS user:
Password for SYSMAN user:
Do you wish to continue? [yes(Y)/no(N)]: Y


Para volver a crear el repositorio:

emca -config dbcontrol db -repos create
Database SID: INSTANCIA
Listener port number: 1521
Listener ORACLE_HOME [ C:\app\administrator\product\11.2.0\dbhome_2 ]:
Password for SYS user:
Password for DBSNMP user:
Password for SYSMAN user:
Password for SYSMAN user: Email address for notifications (optional):
Outgoing Mail (SMTP) server for notifications (optional):

Do you wish to continue? [yes(Y)/no(N)]: Y 

Es probable que no hayas asignado un password al usuario DBSNMP, para eso abre otra consola y entra como sysdba a sqlplus.

SQL> ALTER USER DBSNMP IDENTIFIED BY yourpassword;

También pueden usar la instrucción recreate pero prefiero remover y después recrear porque la opción de recreate después de una restauración de base de datos en ocasiones no funciona correctamente.

emca -config dbcontrol db -repos recreate


Espero les sirva.