segunda-feira, 11 de abril de 2011

Transações incompletas podem armazenar grande número de bloqueios e causar bloqueio

Quando uma transação não é concluída porque uma consulta expira ou porque o lote é cancelado no meio de uma transação sem emitir uma instrução COMMIT ou ROLLBACK para concluir a transação, a transação é deixada aberta e continuam todos os bloqueios adquiridos durante essa transação a ser mantido. Transações subseqüentes executadas sob a mesma conexão são tratadas como transações aninhadas, para que todos os bloqueios adquiridos nessas transações concluídas não são liberados. Esse problema se repete todas as transações executadas da mesma conexão até que um ROLLBACK é executado. Como resultado, um grande número de bloqueios é mantido, os usuários são bloqueados e as transações são perdidos, que resulta em dados que seja diferentes da esperada.


O exemplo a seguir ilustra como os bloqueios não são liberados como resultado de uma transação aberta incompleta:
Abra o SQL Server Query Analyzer e execute o seguinte lote mas cancelar a transação antes que ela conclua:

Begin Tran
Update autores set state = 'CA'
waitfor delay "00:02:00" --Cancela o comando
Commit Tran

Exibir os bloqueios mantidas pelo executando o seguinte comando:
sp_lock

você verá que os bloqueios são mantidos para a tabela autores .

Da mesmo processo de identificação do servidor (SPID), executar o próximo lote:
Begin Tran
Update tituloautores set au_ord = 0
Commit Tran -  Transação Completa

Exibir os bloqueios mantidas pelo executando o seguinte comando:
sp_lock

você verá que, embora a última transação é concluída, bloqueios são mantidos nas tabelas de autores e títuloautores . O motivo é que a primeira transação não foi concluída e quando a transação segunda foi executada da mesma conexão, ele foi tratado como uma transação aninhada.

Você pode exibir a contagem de transação, verificando @@ trancount variável global emitindo a instrução a seguir:
select @@trancount

esta consulta retorna 1, que indica que uma transação pendente.

Quaisquer outras transações que são executadas a partir desta conexão são tratadas como aninhados. Bloqueios continuar acumular e não são liberados até que um ROLLBACK é executada, quais reversões para a transação mais externa ou para um ponto de salvamento.
Continuar com o exemplo, você pode ver como uma reversão pode causar uma transação a ser negado ao executar a transação a seguir da mesma conexão concluída:

Begin Tran
Update titles set royalty = 0
Rollback

A reversão traz o lote de volta para a transação externa, embora não haja uma transação concluída (2) em títuloautores . A reversão na transação concluída ocorre porque a transação concluída é tratada como uma transação aninhada.

Para evitar esse tipo de problema, verificar após cada transação para saber se a transação foi concluída usando a instrução a seguir:
If @@trancount > 0 rollback

fonte : microsft
abraço a todos ...

The transaction log for database is full - Erro no Sql Server

Erro: Ao tentar utilizar uma aplicação com a base de dados em SQL Server 2005, o usuário encontrava o seguinte erro: The transaction log for database ‘MyBase’ is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases ”

Código do erro: 9002

Severity: 17
State: 2

No SQL Server 7.0, no SQL Server 2000 e no SQL Server 2005, marcando a configuração de crescimento automático, arquivos de log podem crescer automaticamente. Apesar do tamanho do LOG estabilizar depois de um período inicial de crescimento, em algumas situações o log pode se tornar muito grande atingindo o espaço em disco disponível. O log pode crescer inesperadamente devido a diversas questões, entre elas:

Normalmente, você receberá a seguinte mensagem de erro quando o transaction log atingir o espaço em disco disponível e não é possível expandir mais:

The log file for database '%.*ls' is full.

Se você estiver usando o SQL Server 2005 ou 2008,  a mensagem é a mesma que mostrada no início do post.

Solução: Como esta base era utilizada apenas para homologação, resolvi rapidamente truncando o log com o comando BACKUP LOG ‘MyBase’ WITH TRUNCATE_ONLY

Apesar desta solução resolver o problema, é necessário entender que truncar o log, quebra o LOG CHAIN, portanto uma vez que isto é feito, não é mais possível efetuar backup dos logs até que se faça um full ou diif backup da base. Case um backup do log seja tentado, a seguinte mensagem poderá ocorrer:

Msg 4214, Level 16, State 1, Line 1
BACKUP LOG cannot be performed because there is no current database backup.
Msg 3013, Level 16, State 1, Line 1
BACKUP LOG is terminating abnormally.

Abraço a todos ...

quinta-feira, 7 de abril de 2011

quarta-feira, 6 de abril de 2011

Próximo "Dia do Jogo Justo" terá três dias e mais games

Próximo "Dia do Jogo Justo" terá três dias e mais games - Computação Pessoal - IDG Now!: "Criador da iniciativa espera que 2ª edição do evento tenha 'mais impacto' que a anterior, quando foram vendidos 5 mil jogos em um dia.

Após o sucesso da primeira edição, realizada em janeiro, o criador da iniciativa, Moacyr Alves Jr., afirma com convicção ao IDG Now! que o segundo Dia do Jogo Justo “será maior, com mais jogos e mais lojas parceiras”.

Para isso, a próxima edição do evento do projeto que busca reduzir os preços dos games importados no País terá três dias em vez de apenas um. Além disso, os títulos à venda com preço reduzido também superarão os números da original, que trouxe três games em promoção para as plataformas PS3, Xbox 360 e Wii: “PES 2011”, “Castlevania: Lords of Shadow” e “Assassin´s Creed: Brotherhood”.

No total, foram vendidos cinco mil unidades em 12h, já que alguns sites saíram do ar temporariamente em razão da grande demanda, resultando, assim, em uma impressionante média de sete jogos comercializados por minuto."

Fonte : Computação Pessoal - IDG Now!

quarta-feira, 30 de março de 2011

Quantos registros existem sua tabela no SQL Server?

Como identificar quantos registros existem em cada tabela no banco de dados do sql server?
Para isto utilizaremos: tabela temporária, view de sistema e cursor.

Obs:
Este script deve ser executado no ambiente de produção somente em horários nos quais não existam muitos usuários conectados, pois, você poderá bloquear muitas conexões e gerar problemas de performance momentânea.


Script

            1- Criando tabela temporária
CREATE TABLE #TMP_CONTA_TABELA
(TABELA       VARCHAR(200),
 REGISTRO    INT)

2- Inserindo dados na tabela temporária
DECLARE @COMANDO        VARCHAR(500)
DECLARE C_CountTable CURSOR FAST_FORWARD FOR
SELECT distinct
'SELECT TABELA = ''' + SU.NAME + '.' + SO.NAME + '''
, REGISTRO = COUNT(*) FROM ' + SU.NAME + '.' + SO.NAME
FROM SYSOBJECTS SO INNER JOIN SYSUSERS SU
ON     SO.UID = SU.UID
AND   SO.XTYPE = 'U'
AND   SO.NAME <> 'dtproperties'
OPEN C_CountTable
FETCH NEXT FROM C_CountTable
INTO @COMANDO
               WHILE @@FETCH_STATUS = 0
                   BEGIN      
                       EXECUTE ('INSERT INTO #TMP_CONTA_TABELA '+ @COMANDO)
                   FETCH NEXT FROM C_CountTable
                            INTO @COMANDO
     END
CLOSE C_CountTable
DEALLOCATE C_CountTable

3- Identificando quantos registros tem em cada tabela.
SELECT * from #TMP_CONTA_TABELA ORDER BY 2 DESC

Resultado

TABELA                                  REGISTRO
---------------------------     -----------
TB_AUDITORIA                          267804
TB_COBRANCA                          191938
TB_CAD_CLIENTE                      118919
TB_CAD_PRODUTO                     86995

Fonte: Devmedia (Darci Leandro)
Abraço a todos ...

segunda-feira, 14 de março de 2011

Como listar o tamanho de tabelas e índices de um Database no SQL Server

Este script usa duas procedures não documentadas para obter uma lista de todas as tabelas da base onde o script é executado. Para cada tabela é apresentado os espaços ocupados pelos índices, dados, total, percentual ocupado pela tabela dentro do database e o espaço total que as tabelas ocupam dentro da base.

Obs: As tabelas de sistemas não são listadas.

Para utilizar o script é bem simples basta você copiar o script abaixo e colar na query do SQL Server e executar.

---- Início do Script ----
/********************************************************************************
* Script para listar tamanho das tabelas e indices do Database no SQL Server *
********************************************************************************/

-- Create tabela auxiliar

CREATE TABLE #temp(
 rec_id int IDENTITY (1, 1),
 table_name varchar(128),
 nbr_of_rows int,
 data_space decimal(15,2),
 index_space decimal(15,2),
 total_size decimal(15,2),
 percent_of_db decimal(15,12),
 db_size decimal(15,2))


-- Obtém todas as tabelas, nomes e respectivos tamanhos
EXEC sp_msforeachtable @command1="insert into #temp(nbr_of_rows, data_space, index_space) exec sp_mstablespace '?'", @command2="update #temp set table_name = '?' where rec_id = (select max(rec_id) from #temp)"

-- Define o tamanho total e o tamanho total no database
UPDATE #temp SET total_size = (data_space + index_space), db_size = (SELECT SUM(data_space + index_space) FROM #temp)

-- Define o percentual ocupado pela tabela dentro da base
UPDATE #temp SET percent_of_db = (total_size/db_size) * 100

-- Lista as tabelas
SELECT * FROM #temp  ORDER BY total_size DESC

-- Exclui a tabela temporária ! Comente a linha abaixo caso queira fazer posteriores consultas nesta tabela
DROP TABLE #temp



---- Fim do Script ----

Abraço a todos ...

10 dicas para usar redes sociais para gerenciar equipes

Confira as orientações de uma especialista para ajudar sua política de gestão em tempos de Web 2.0.


O ano de 2010 promete grandes rupturas. Depois de um momento de crise internacional, há uma expectativa de que as empresas apostem em novos modelos de negócio e, ao mesmo tempo, valorizem mais os profissionais que estejam preparados para mudanças.

Dentro desse contexto, os gestores de TI, bem como de outras áreas, terão de aprender a utilizar as redes sociais para gerenciar suas equipes, defende a fundadora da consultoria de negócios RiverFork Consulting, Melissa Dutmers. A seguir, Melissa faz uma lista de qual o caminho para que o gestor transforme as redes sociais em aliadas e, por consequência, consiga ser encarado como um agente de mudança pelas organizações:

1. Tenha um blog – Quando se trata de uma grande empresa ou de departamentos com muitos colaboradores, um blog pode ser a alternativa ideal para entrar em contato com as pessoas. É claro que  se comunicar pessoalmente é muito mais eficaz para formar um vínculo com os colaboradores, mas é preciso perceber que não existe tempo hábil para isso, principalmente se levarmos em conta que – embora muitas organizações não saibam – os gestores também têm vida pessoal. A ideia do blog é estender a influência além das fronteiras geográficas representadas por salas, andares, unidades de negócios, cidades e países.

2. Seja transparente – Todos sabem que um alto executivo não pode dizer publicamente o que sabe, mas eles têm a missão de se apresentarem como pessoas reais e comuns. Para isso, a dica é: deixe deu posto de lado por um instante e expresse no blog quem você realmente é por trás do título de liderança na corporação.

3. Conte histórias nos blogs – Não há nada que prenda mais a atenção de um leitor do que uma boa história.

4. Incentive o diálogo – É importante que os gestores façam perguntas nos blogs, respondam a questionamentos e mostrem que realmente são eles mesmos quem gerenciam o site e, além disso, que estão preocupados com as impressões e dúvidas de suas equipes.

5. Realize enquetes – Mesmo que não sejam uma grande ferramenta de comunicação, as enquetes são ótimos parâmetros para que os líderes identifiquem qual, exatamente, é o perfil de seu público mais atuante.

6. Não seja um fantasma – Algumas pessoas reagirão negativamente à iniciativa do blog, bem como a alguns textos postados. No momento em que expressarem descontentamento, é importante que os executivos mantenham o diálogo com essas pessoas. Isso porque, dessa forma, mostrarão que podem argumentar e que ouvem as opiniões contrárias às suas.

7. Demonstre – Nada é mais marcante do que uma imagem. Por isso, é interessante que os “blogueiros executivos” postem vídeos em suas páginas. Uma boa sugestão é a de que entrevistem outros gestores da mesma companhia sobre determinados temas de interesse do público e divulguem no blog.

8. Peça ajuda – É normal que os gestores não estejam familiarizados com as tecnologias colaborativas. Assim, é válido que peçam o auxílio de funcionários mais jovens, demonstrando humildade e reconhecimento dos talentos alheios.

9. Reconheça publicamente – Depois de auxiliados, os líderes devem postar algum comentário reconhecendo em público quão importante foi o apoio daqueles que o ajudaram. Nada é mais gratificante do que o reconhecimento.

10. Vá em frente – As iniciativas às vezes demoram um pouco para cair nas graças do público, por isso é importante que os executivos não desistam do blog e utilizem-no como ferramenta para liderar as mudanças que serão necessárias em 2010.

Abraço a todos ...