domingo, abril 29, 2012

Quiero mis papitas!!! D:

Muchos de mis seguidores son parte de la comunidad donde juego y creo podran entender mi frustración y probablemente no el resto del artículo.

Como muchos juegos online gratuitos, si quieres tener algo mas que lo que te brinda el juego gratis necesitas invertir lo que llamamos dinero real para comprar una moneda intermedia que nos sirve para adquirir aquellos tan preciados bienes.

Este fin de semana era especial, no solo estaba la tienda con un 50% de descuento sino que ademas habian sets muy especiales que uno no podia dejar de adquirir, preparo mi tarjeta de credito, selecciono cargar papitas, selecciono medio de pago, coloco los datos de mi tarjeta y me sale el mensaje que todo esta ok.

Espero unos minutos que se hagan efectivos y nada :( espero un par de horas y nada, aun espero y solo digo: Quiero mis papitas!!! D:

Transacciones.

En el mundo de las bases de datos y un poco mas alla, existen lo que llamamos transacciones, cual es la idea de una transaccion, que si yo saco dinero de una cuenta, esta aparesca en la cuenta de destino y que no se pierda en el camino, para que una transaccion sea realmente tal debe cumplir con ciertas caracteristicas, por lo que decimos que las transacciones son "ACID".

A tomica (Atomicity). Una transaccion debe ser lo mas pequeña posible y realizar solo la transaccion, esta debe ser un todo o nada, si alguna parte de la transaccion falla, toda la transaccion falla, debe considerar cada punto en la transaccion, incluyendo fallas de comunicacion, cortes de energia, etc.

C onsistente (Consistency). Las transacciones comiensan con un estado valido de los datos y deben finalizar con un estado valido y no un estado intermedio, esto incluye validaciones, triggers , etc.

I ndependiente (Insolation). Una transaccion no debe ser afectada por otras transacciones, una vez que ella comenzo no puede ser cambiado el contexto de cuando comenzo.

D durables (Durability). Una vez que la transacción a terminado se debe asegurar que no se revertira, aunque ocurran errores como cortes de energia o fallas.

Algunas de estas caracteristicas las entrega la base de datos y otras es parte responsabilidad de quienes desarrollan la transacción.

Ahora a esperar que mis papitas aparescan, lastima que ya las tendre disponibles cuando no este el evento D:

Buena Caza!!

Isha

miércoles, abril 18, 2012

Y donde esta el Cluster??

Estaba pensando en un lindo articulo sobre SQL Server tranquilamente frente a mi linda note cuando recibo una llamada telefonica, un Exchange 2010 habia perdido el DAG y las bases de datos no montaban.

Ok, quizas sea un caso interesante asi que acepte el desafio y manos a la obra viendo de que se trataba.

Efectivamente las bases estaban abajo, el DAG a simple vista se veia ok, sin embargo no se podia editar ni hacer nada, el error enviado era que no podia contactar el servicio de cluster.

Bien, vamos a mirar como esta el cluster......

El cluster .....

:S

No hay Cluster! Desaparecio, Uups!

[PS] C:\Windows\system32>Get-DatabaseAvailabilityGroup -Identity  'DAG1' -Status

Error en una operación de Active Manager. Error en la operación de clúster. Error: Error en la API de clúster 'OpenByNames('nodo1.dominio.com', 'nodo2.dominio.com') failed for each server. Specific exceptions: 'Error en una operación de Active Manager.

Error en la operación de clúster. Error: Error en la API de clúster '"OpenCluster(nodo1.dominio.com) error con 0x6d9. Error: No hay más extremos disponibles desde el asignador de extremos"'.', 'Error en una operación de Active Manager.

Error en la operación de clúster. Error: Error en la API de clúster '"OpenCluster(nodo2.dominio.com) error con 0x6d9. Error: No hay más extremos disponibles desde el asignador de extremos"'.'.'.

    + CategoryInfo          : InvalidArgument: (:) [Get-DatabaseAvailabilityGroup], AmClusterApiException
    + FullyQualifiedErrorId : 62F1FD80,Microsoft.Exchange.Management.SystemConfigurationTasks.GetDatabaseAvailabilityGRoup


(Odio los mensajes en español, no entiendo nada!!)

He ahi la causa del problema, desaparecio el Cluster y el DAG seguia haciendo referencia a el, bueno, ya tenia la causa del problema, ahora a encontrar la solucion.

Comence a buscar por internet y no encontre nada relacionado con el tema, y si trato de recrear el cluster "a mano"?? mmm a buscar info de como hacerlo, nop, el cluster no existia en ninguno de los 2 nodos, el servicio estaba instalado, pero en ambos nodos estaba desabilitado, al habilitarlo y tratar de levantarlo enviaba error. Por supuesto al tratar de conectarse al cluster tambien enviaba error de RPC.

Habian algunos articulos muy buenos como Recover from a DAG member loss sin embargo no era el escenario, no se perdio un miembro, sino todo el cluster.

Conversando con un colega sobre las alternativas veiamos 2:

1) Guardar las bases de datos, Reinstalar con la opcion /m:RecoverServer y luego colocar las bases de datos.
2) Hacer otro DAG eliminando el actual y asociando las bases a ese nuevo DAG.

Despues de un rato viendo los pro y los contras de cada opcion nos inclinamos por la segunda, aunque no sabiamos con certeza como lo hariamos.

Antes de comenzar a trabajar con el Exchange en esa opcion intente crear un nuevo cluster con ambos nodos, seguro no lo iba a hechar a perder mas de lo que ya estaba, pero no me dejaba agregarlos por que decia que ya pertenecian a un cluster, asi que hice limpieza ejecutando el comando cluster node /force. Despues del comando intente crear el cluster con otro nombre y me dejo, lo elimine y volvi al problema.

Se crea el nuevo DAG y no podemos elegir ningun server para agregar, ya que estan asociados al otro DAG. Intente sacar un nodo y envia el error indicando problema de comunicacion con el servicio de cluster, sin embargo el mismo error me recomendaba una solucion, usar el parametro -ConfigurationOnly, al buscar informacion sobre el parametro me di cuenta que lo que hacia era cambiar la configuracion pero sin intentar conectarse al servicio de Cluster, por lo que saque del DAG antiguo el servidor que habia limpiado ya la configuracion del Cluster usando el siguiente comando PowerShell:

 Remove-DatabaseAvailabilityGroupServer –Identity DAG1 –MailboxServer NODO1 –ConfigurationOnly

Eso me permitio remover el Server del DAG y agregarlo al nuevo DAG, a continuación fui a cada una de las bases de datos revise las propiedades y guarde quedando asociadas al nuevo DAG, monto una y sube ok. Repito la operacion en el otro nodo ejecutando ambos comandos, el que limpia la configuracion de cluster del nodo2, saco del DAG antiguo el nodo2 y lo agrego al nuevo DAG.

Monto el resto de las bases de datos las cuales montaron sin problemas quedando el servicio ok, excepto una que me daba error MapiExceptionCallFailed: Unable to mount database. (hr=0x80004005, ec=-550) pero eso ya es otra historia :D

Saludos!!!

Isa