quarta-feira, 9 de junho de 2010

Trabalhando com Updatable Views no SQL Server - 2 de 2

Continuando post anterior (http://sqlbrasil.blogspot.com/2010/05/trabalhando-com-updated-views-no-sql.html)  vou demonstrar agora como criar Updatable Views no SQL Server:

Vamos criar um exemplo baseado em uma tabela de pedidos bem simplificada conforme instrução de create abaixo:

Create Table Pedidos

(DataPedido DateTime Not Null,
NroOrdem Int Not Null,
CodCliente Int,
ValorTotal Decimal(11,2),
Desconto Decimal(11,2),
DataEntrega DateTime,
Observacoes Varchar(80),
Primary Key (DataPedido, NroOrdem));

Vamos considerar "quebrar" esta tabela em três novas conforme a data do pedido
  • Pedidos até 01/01/2009
  • Pedido de 01/01/2009 até 31/12/2009
  • Pedidos posteriores a 31/12/2009
Na verdade para garantir que os dados respeitarão estas"regras devemos acrescentar uma CHECK CONSTRAINT, abaixo o início da criação das três novas tabelas, os outros campos ficam iguais a tabela original.

Create Table PedidosAte2008

(DataPedido DateTime Not Null CHECK (DataPedido < '01/01/2009'),
...
Create Table Pedidos2009

(DataPedido DateTime Not Null CHECK (DataPedido between '01/01/2009' and '31/12/2009'),
...
Create Table PedidosApos2009

(DataPedido DateTime Not Null CHECK (DataPedido > '31/12/2009'),

A seguir insira os dados nas tabelas "quebradas" conforme a check constraint:


Insert into PedidosAte2008
   Select * From Pedidos
   Where DataPedido < '01/01/2009';


Insert into Pedidos2009
Se fores utilizar a view com o mesmo nome da tabela original, renomeie ou exclua a tabela pedidos.
Agora basta criar a view "juntando" os dados das três tabelas:

Create View Pedidos
    With SchemaBinding
as
   Select DataPedido, NroOrdem, CodCliente,ValorTotal,Desconto,DataEntrega,Observacoes
    from dbo.PedidosAte2008
Union All
  Select DataPedido, NroOrdem, CodCliente,ValorTotal,Desconto,DataEntrega,Observacoes
   from dbo.Pedidos2009
Union All
   Select DataPedido, NroOrdem, CodCliente,ValorTotal,Desconto,DataEntrega,Observacoes
    from dbo.PedidosApos2009;

Com a view criada é possível utilizar Insert, Update e Delete nela que o SQL Server irá se basear na check constraint para identificar qual das três tabelas que deverá ser alterada.

Como no exemplo utilizamos o mesmo nome da tabela original, os programas que utilizavam a tabela Pedidos não precisarão ser alterados.

sexta-feira, 28 de maio de 2010

Versões gratuitas do Informix

Este mês coloquei um post sobre a nova versão gratuita do SQL Server 2008 R2 e recebi um comentário do meu xará César (DBA Informix - www.imartins.com.br/informix) comentando sobre o recente lançamento (25/05/2010) das versões gratuitas do Informix, que estou transcrevendo abaixo porque julguei bem interessante:

"Se tratando de banco de dados gratuitos, gostaria de informa-los dobre um anuncio que IBM fez esta semana:


Ela divulgou duas versões gratuitas para produção do Informix (isso agora, dia 25/Maio/2010). O Informix Innovator-C e Ultimate-C

A versão Innovator-C é mais restrita , limitada a 2GB memoria , 4 cores e certas restrições no DML. Porém disponível para *todas* plataformas.

A versão Ultimate-C é mais parruda, suporta até 4 sockets/16cores , 16GB de memoria . Porém disponível apenas para Windows e MacOS.

AMBAS: Permitem 1 nós de clustar ATIVO-ATIVO, tamanho de banco de dados ILIMITADO e sem limite de conexões.

Para maiores informações:

http://www.ibm.com/informix
http://www.imartins.com.br/informix/artigos/fix-1150-xc7-disponivel-aqui-revolucao-comeca
http://informix-technology.blogspot.com/2010/05/new-informix-editions-bargain-time.html
http://www.ibm.com/developerworks/data/library/techarticle/dm-0801doe/index.html

terça-feira, 25 de maio de 2010

Trabalhando com Updatable Views no SQL Server - 1 de 2

No SQL Server podemos criar views que permitam atualização de suas informações, recurso que também existem em outros bancos de dados como o Oracle.

A diferença no SQL Server frente ao Oracle é que podemos também atualizar views que utilizam consultas com o operador UNION do SELECT. O SQL Server através de constraints definidas na criação das tabelas consegue identificar qual a tabela correta onde ele deve incluir, alterar e excluir os dados.

E qual a vantagem disto?

Bom sabe aquelas tabelas com milhões de dados armazenados com dados históricos desde a implantação do sistema, pois bem exatamente elas são ótimas candidatas para utilizar este recurso, porque permite que ela seja dividida em vários "pedaços" diminuindo a quantidade de registros que o SQL Server pesquisa quando consultamos parcialmente os dados.

Como funcionaria:
  • Quebre a tabela existente em diversas tabelas com os diferentes níveis de acesso aos dados, ou com históricos anuais, ou semestrais, etc; conforme os dados que estão na tabela.  
  • Depois crie uma view “juntando” os dados de todas estas tabelas com o nome original da tabela. Desta forma não é necessário alterar as referências existentes nos sistemas para os dados.
  • Em consultas com seleção pelo campo da constraint, possibilita ao otimizador do SQL Server buscar as informações somente na tabela onde eles estão evitando que sejam considerados todos os dados originais.
No próximo post vou demonstrar como criar esta estrutura.

terça-feira, 11 de maio de 2010

Tech-Ed 2010

O principal evento da Microsoft no Brasil será realizado em setembro/2010, é o Tech-Ed, nos dias 13, 14  e 15.
Vale a pena conferir, tem palestras das principais ferramentas da Microsoft com demonstrações práticas, discutindo tendências e novidades em todas as áreas onde a empresa atua.
No site do evento http://www.teched.com.br/ tem um mailing para ficar atualizado sobre as novidades do evento.

sábado, 8 de maio de 2010

SQL Server 2008 R2 Express

Mês passado a Microsoft disponibilizou a versão oficial do SQL Server 2008 R2. Uma alteração importante na versão Express (gratuita), é que o limite de tamanho da Database que era de 4 Gb na versão anterior, alterou para 10 Gb. É possível baixar este versão gratuita no endereço: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=967225eb-207b-4950-91df-eeb5f35a80ee

segunda-feira, 19 de abril de 2010

Base Firebird Corrompida

Quando temos o desprazer de nos deparar com uma base corrompida no Firebird podemos tentar alguns procedimentos que podem vir a recuperar o banco de dados, algumas vezes perdendo informações dependendo do tamanho do problema, abaixo algumas dicas:

gfix -v -f -user sysdba -password masterkey arquivo.fbd
gfix -m -i -user sysdba -password masterkey arquivo.fbd

backup e restore do banco de dados com o utilitário gbak.

Em algumas situações ao restaurar o banco de dados ocorrem problemas com as chaves estrangeiras, porque estão inconsistentes.
Um procedimento que pode ser feito neste caso é restaurar sem ativar elas:

gbak -user sysdba -password masterey -i -r arquivo.fbk arquivo.fbd

Depois deste procedimento o ideal é criar um novo banco de dados somente com os objetos criados (tabelas, views, funções, ...) e copiar as informações para ela.

Antes de mais nada caso exista um backup atualizado, muitas vezes o melhor caminho é utilizar ele antes de fazer estes procedimentos, porque como disse, conforme o tamanho do problema, talvez algumas informações sejam perdidas, e não tem como saber tudo que pode ter sido perdido.

terça-feira, 6 de abril de 2010

Login bloqueado no SQL Server

Quando um login fica bloqueado no SQL Server ao utilizar a autenticação do SQL Server, e mesmo desmarcando a opção "Login is locked out" não libera o usuário. Verifique se não está ativa a opção de policies para as senhas da autenticação do SQL Server. Neste caso pode ser que a política está obrigando a troca de senha do usuário.