quarta-feira, junho 22, 2005

Cluster em Cabo Verde

Faz algum tempo que não venho para estes lados escrever as minhas aventuras. Estou em Cabo Verde num cliente onde faz algum tempo, instalamos um servidor cluster HP com storage Area Network. Fantastica esta maquina, e não somos muitos os que têm a oportunidade de trabalhar e mexer num "monstro tecnológico" como esta máquina. A intalação e configuração demora muito tempo, e num negócio de alto risco, onde não existe espaço para paragens, a noite é a nossa companhia. Passei a noite em branco, para configurar esta máquina. Windows enterprise nos dois nós, configurar dns, dhcp, contas de utilizador, unidades organizacionais,administrador de cluster e por fim o sql developer. Poderia ser o enterprise também. O standard não suporta instalações em cluster. No fundo o que um cluster faz, é partilhar recursos nas duas máquinas, de forma a que quando uma for abaixo por um qualquer motivo, a outra entra em funcionamento, serviço este denominado por Fail-over cluster.
Enganem-se aqueles que disserem que é um serviço de load-balance, pois não é. No fundo uma máquina está desactiva e só entra em funcionamento após falha da primeira. Existe uma paragem minima de 1 minuto ou 2.Bom, mais tarde especifico o assunto que aqui abordei.

quinta-feira, junho 02, 2005

Andei perdido

Pois, isto de ter uma base de dados de conhecimentos perde-se algum tempo, coisa que não tive durante estes dias desaparecido. Tive bastante trabalho, algum dele delicado. Tive duas semanas a lançar 2 páginas, a elaborar 2 base de dados para um software de gestão conhecido, a instalar um servidor com bastantes serviços e ainda guardei tempo para ir ao "Get Ready for SQL Server 2005 RoadShow" que decorreu na antiga FIL, no Centro de Congressos de Lisboa. A organização foi boa e o tema foi separado por salas entre diversas sessões. Recomendo a darem uma espreitadela nas melhorias e novidades deste poderoso Sistema de Gestão de Base de Dados. Escrevo algo sobre isto mais à frente. Andei num enorme rodopio.
Elaborei uma página em tempo recorde de 5 dias sem dormir 2 pois tinhaprazo estipulado até dia 30. Lancei com alguns Bugs, mas somente na zona de administração (Zona responsável pela colocação de artigos, eventos, configurações gerais, etc...), pensando eu que essa zona não iria ser mostrada no briefing de apresentação... Erro meu. O briefing não correu da melhor maneira. Links perdidos, erros de escrita na base de dados (também 2 dias sem dormir não se podia pedir melhor). Bom, de qualquer maneira já está no ar e agora vou fazer a última actualização do dll criado. Um grande BUG meu, que tem uma resolução fácil, mas díficil de chegar até ela sem informação dísponivel.

sexta-feira, maio 13, 2005

IIS com Framework .NET para sistema de Suporte ao Cliente

Hoje vou instalar uma plataforma de suporte ao cliente numa das empresas para qual trabalho, que consiste num sistema de apoio ao cliente e de base de dados de conhecimento para os técnicos. Vou começar por preparar um servidor Web para integrar na DMZ da empresa com IIS 6, plataforma .NET windows server 2000.
Poderia tentar o windows server 2003 , mas a compatibilidade da base de dados do active directory 2000/2003 não me oferece confiança. Sei do comando adprep/domainprep (Infrastructure Master) e adprep/forestprep (schema master) para actualizar e preparar os controladores de dominio, mas as coisas por vezes não são tão lineares quanto isso. O interface gráfico vou programa-lo em asp.net com base de dados MSSQLSERVER. E ver vamos como fica.

quarta-feira, maio 11, 2005

Perda de dados em tabelas de ERP

Hoje fui a um cliente apressadamente porque a aplicação de gestão, não estava a reportar-lhe os extractos bancários. Achei estranho, mas lembrei-me que na 2º feira tinham-me ligado dessa empresa a dizer que uma alteração a uma transferência bancária, tinha demorado mais do que o costume, 20 minutos mais do que o costume.
Pensei que tivesse algo a ver com updates de tabelas, pois a aplicação tinha sofrido um upgrade à pouco tempo. Cheguei lá e constatei que todos os movimentos de tesouraria, todas as linhas, tinham sido actualizadas com os dados da alteração à transferência bancária. Que fazer?? Backup???...apesar de terem sido avisados mais do que uma vez, a verdade é que o último backup que havia era de julho de 2004. Sorte a minha e do cliente, que quando fiz o upgrade, tinha efectuado uma cópia de segurança (IMPORTANTÍSSIMO!!), só que com 1 mês de atraso. Apaguei as tabelas de movimentos de tesouraria e extractos bancários e copiei as duas tabelas da cópia de segurança para a base de dados que estava a ser usada. Antes disso certifiquei-me que os triggers estavam desactivados (pois as duas tabelas tinham triggers para insert, update e delete.), fiz truncate table xxxx (Reinicia a tabela) e passei os dados para as tabelas vazias. Muito bem...Mantiveram documentos, transferências, recibos, pagamentos etc, apenas teriam de processar novamente (fazendo o desprocessamento/processamento) para que o movimento fosse novamente inserido na tabela de movimentos e extractos.
Agora é esperar e ver se não me esqueci de algo importante. Ainda para mais a base de dados está na plataforma MSDE, que como suspeitam, limitava-me muito as tarefas que tinha de realizar.Porque aconteceu e o quê??... Bem liguei para a linha de apoio a cliente do softwre em causa, e estes limitavam-se a dizer pois...acho que sim, enquanto colocava o problema, expunha a solução e ainda lhe explicava porque tinha acontecido. O que de facto tinha acontecido, foi ao gravar um registo, um campo que funciona como chave primária de regist e que se relaciona com outras tabelas, tinha ficado em branco.
Daí até ao problema, foi um clique...

domingo, maio 08, 2005

Cannot perform an aggregate function on an expression containing an aggregate or a subquery

Deparei hoje com este erro quando estava a construir um mapa de analise para um cliente. Precisava somar todos os valores decorrentes de um conjunto de condicionantes (Case when end) mas n MS Sql não é possivel somar agregações. Não envio a query toda para aqui, pois é muito grande e complicada, mas dou um exemplo daquilo que falo:

select avg(count(ip)) from pagehits where [month] = 2 group by ip daria o seguinte erro "Cannot perform an aggregate function on an expression containing an aggregate or a subquery" e a unica maneira de dar a volta é usar o que se chama "Tabelas derivadas".

select avg(ipcount) from (select count(ip) ipcount from pagehits where [month] = 2 group by ip) as sub

Devo dizer que não existe muita informação quando se trata de queries bem mais complicadas.