Archive for the ‘Erros $#$%!’ Category

Database Mail

Você configurou o Database Mail, criou operadores, foi na propriedade Notifications do job e definiu um operador pra receber e-mail na ocorrência de uma falha; no entanto o e-mail não é enviado.

Você resolve dar uma olhada no log pra entender o que está acontecendo e então encontra a seguinte mensagem:

NOTE: Failed to notify ‘nome_do_operador’ via email.

Pra acertar isso va na propriedade Alert System do Sql Server Agent e marque a opção Enable mail profile. Pronto. Agora é só reiniciar o agent e seguir em frente 🙂

(Não esqueça de reiniciar o agent!)

 

Bom trabalho!

Instalando o SQL Server 2008 (Parte II)

Depois de mais um tempo ausente volto pra falar sobre o erro da instalação do SQL Server 2008 no Windows XP (veja link do post aqui). Claro que esse não é o cenário ideal para instalação do SQL Server, mas se você quer instalá-lo no seu notebook ou PC, pra conhecer, estudar ou etc, então pode se deparar com o seguinte erro:

The Windows Installer service cannot update the system file C:\WINDOWS\system32\msxml6r.dll because the file is protected by Windows.  You may need to update your operating system for this program to work correctly.

Isso aconteceu comigo e depois de muitas pesquisas, agora em Outubro a Microsoft liberou um artigo falando sobre este erro.

Segundo o artigo, o erro ocorre quando tentamos instalar uma versão inglês do SQL Server (2005 ou 2008) num Windows XP SP3 não-inglês.

Solução? Não existe uma propriamente dita até o momento, mas se ao verificar o arquivo de log da instalação do SQL Server (na busca do Windows procure por SQLSetup*MSXML6*) você encontrar uma mensagem como está: “MSXML 6.0 Parser — Installation completed successfully.”, você poderá ignorar este erro.

Para ler o artigo na integra, acesse este link: http://support.microsoft.com/kb/958897

Bom trabalho, bons estudos!

Tutorial: Instalando o SQL Server 2008 Express.

Instalando o SQL SERVER 2008 (Parte I)

Ontem baixei a versão final do SQL Server 2008 e instalei aqui.

A versão é a Enterprise (Trial)  e tive dois problemas durante a instalação.

Um foi bem curioso, antes de iniciar a instalação o instalador informou que não poderia prosseguir porque existiam ferramentas do SQL Server 2005 Express instaladas e que para continuar a instalação eu deveria removê-las. O detalhe é que eu nunca instalei nenhuma versão Express nessa estação(!).

“The SQL Server 2005 Express Tools are installed. To continue, remove the SQL Server 2005 Express Tools.”

Ok… numa pesquisa rápida no fórum da Technet encontrei outros caras que já tiveram o mesmo problema e fiquei surpreso ao saber que o problema era devido a uma ferramenta que instalei, a SQL Prompt da Red Gate (essa ferramenta adiciona Intellisense no Query Analyser e SSMS). Bom, removi a ferramenta e o processo continuou normalmente…

…até eu encontrar outro erro, e infelizmente mais preocupante que o primeiro.

The Windows Installer service cannot update the system file C:\WINDOWS\system32\msxml6r.dll because the file is protected by Windows.  You may need to update your operating system for this program to work correctly.

Nas buscas pelo google e technet vi que o assunto está sempre relacionado ao Windows XP e o SP2… vou começar alguns testes hoje a tarde. Se alguém aí já viveu essa situação e tem uma sugestão de como resolver deixe sua contribuição 🙂

Editado: Solução para este problema neste post:https://diariodba.wordpress.com/2008/11/04/instalando-o-sql-server-2008-parte-ii/

Tutorial: Instalando o SQL Server 2008 Express.

Comparando text / ntext

 

No SQL Server 2005 temos os novos campos do tipo VAR…(MAX) que vieram aliviar o trabalho de muita gente. Um dos problemas mais comuns na versão anterior (2000) é quando precisamos comparar dados de campos do tipo text ou ntext, aí nos deparamos com um erro do tipo:

Server: Msg 306, Level 16, State 1, Line 1

The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.

Eu já vivi essa situação algumas vezes e deixo aqui a forma como tentei resolver (Se tiverem outras sugestões fiquem a vontade para expor, ok?).

(Não fiz testes de perfomance nessa solução, o foco está somente em comparar as colunas tipo text / ntext.)

Imagine que eu tenha duas tabelas:

CREATE TABLE #tb_msg_tela
(id INT IDENTITY(1,1), texto TEXT)

GO

CREATE TABLE #tb_msg_impressao
(id INT IDENTITY(1,1), texto TEXT)

Com os seguintes dados:

INSERT INTO #tb_msg_tela VALUES (NULL)
INSERT INTO #tb_msg_tela VALUES (‘Campo text’)
INSERT INTO #tb_msg_tela VALUES (‘Teste comparação‘)
INSERT INTO #tb_msg_tela VALUES (‘Se caísse para o exterior, para o limite do universo, encontraria uma perto e pôsteres que indicassem BECO SEM SAÍDA?’)

INSERT INTO #tb_msg_impressao VALUES (”)
INSERT INTO #tb_msg_impressao VALUES (‘Campo text’)
INSERT INTO #tb_msg_impressao VALUES (‘Teste comparacao‘)
INSERT INTO #tb_msg_impressao VALUES (‘Se caisse para o esterior, p/ o limite do universo, encontraria uma perto e pôsteres que indicassem BECO SEM SAÍDA?’)

Observe que existem diferenças em alguns textos (em vermelho).

Para realizar o relacionamento das duas tabelas e encontrar os campos diferentes não podemos simplesmente utilizar:

SELECT * FROM #tb_msg_tela a, #tb_msg_impressao b
WHERE a.id = b.id AND a.texto <> b.texto

Essa consulta retornará um erro porque estamos comparando os campos text utilizando o <>.

Então o primeiro passo é encontrar o maior texto nessa coluna, para isso podemos usar as funções DATALENGHT e MAX:

SELECT MAX(DATALENGTH(texto)) FROM #tb_msg_tela
SELECT MAX(DATALENGTH(texto)) FROM #tb_msg_impressao

O resultado será:

———–

658

———–

656

Então sabemos que o maior texto dessa coluna não ultrapassa 700 caracteres, logo, podemos utilizar esse número como apoio no próximo passo, onde utilizaremos a função SUBSTRING:

SELECT
                *
FROM  
                #tb_msg_tela a,
                #tb_msg_impressao b
WHERE
                a.id = b.id
                AND ISNULL(SUBSTRING(a.texto, 0, 700),”) <> ISNULL(SUBSTRING(b.texto, 0, 700),”)

 

A função ISNULL é importante pois sem ela os campos Nulos serão ignorados.

Veja que a consulta só ira retornar os campos com as diferenças.

É um processo simples, mas que pode dar dor de cabeça por conta das limitações do tipo de dados. Pra quem ta iniciando o desenvolvimento utilizando o SQL Server 2005 a recomendação é: substitua os datatypes ntext, text, image por nvarchar(Max), varchar(Max) e varbinary(Max). Além de outras vantagens, com os novos datatypes não existem as antigas diferenças entre varchar e text.

 

SQL Server 2005 – Erro Import/Export

Os dias estão bem corridos e só hoje pude resolver aquele problema da importação via interface (SSMS) que ocorreu na semana passada. A mensagem de erro completa é esta:

The SSIS Runtime object could not be created. Verify that DTS.dll is available and registered. The wizard cannot continue and it will terminate.

Unable to cast COM object of type ‘Microsoft.SqlServer.Dts.Runtime.Wrapper.PackageNeutralClass’ to interface type ‘Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSContainer90’.

Procurei na internet e muita gente sugeriu a reinstalação das ferramentas, no entanto encontrei uma solução mais curta que resolveu de imediato, apenas registrei a dll, veja:

No menu Iniciar > Executar

regsvr32.exe  “C:\Arquivos de programas\Microsoft SQL Server\90\DTS\Binn\DTS.dll”

e enter 🙂

Pronto!

Backup/Restore num Oracle (express)

Ok,

Minha experiência com Oracle é: nenhuma.
Ontem aparece um amigo perguntado se eu podia ajuda-lo a restaurar um backup feito num servidor com Oracle Express em outro servidor com a mesma versão.
Confesso que passei algumas horas atras de uma informação que pudesse me ajudar; encontrei diversas formas de fazer um backup: backup online, offline, frio… etc, mas não sei se foi pelo primeiro contato, mas vi que os conceitos entre Microsoft SQL Server e Oracle são bem diferentes e é complicado porque sempre procuramos associar uma coisa a outra.
Enfim, depois de algumas tentativas frustradas encontramos essa sugestão num fórum na net:

Parar o serviço do Oracle
Copiar tudo:
C:\oraclexe\oradata\XE:
CONTROL.DBF,
SYSAUX.DBF,
SYSTEM.DBF,
TEMP.DBF,
UNDO.DBF
e USER.DBF. 

+ Os bancos que existirem lá

Copiar conteúdo de C:\oraclexe\app\oracle\product\10.2.0\server\dbs. 
Copiar o conteúdo de C:\oraclexe\app\oracle\flash_recovery_area\XE\ONLINELOG. 

Restaurar tudo no mesmo lugar e iniciar o oracle.
Lembrando que a instalação tem que estar idêndica a do servidor original.

Enfim, para um DBA Oracle isso deve parecer “feio”, mas conseguimos resolver o problema.

Agora acho que aquele livro de Oracle para Iniciantes finalmente vai sair da estante de casa 🙂

 

 

Modo de autenticação

Existe uma situação famosa no Microsoft SQL Server que costuma dar trabalho a muitos iniciantes e até mesmo a alguns DBAs mais experientes.

Situação: Você acaba de instalar seu Microsoft SQL Server e logo no primeiro acesso surge o erro:

Login failed for user ‘sa’. The user is not associated with a trusted SQL Server connection. (Microsoft SQL Server, Error: 18452) 

Ok, isso acontece porque o SQL Server tem duas formas de autenticação: Autenticação Windows e Mixed Mode (Autenticação com login Windows e/ou login SQL Server), e por padrão, a instalação vem configurada como Windows Authentication, logo, quando o usuário tenta acessar a instância com um login do SQL Server (normalmente o famoso ‘SA’) o sistema manda aquela advertência.

Antes da solução, é bom frisar que por questões de segurança a Microsoft recomenda o modo Windows Authentication, mas se você quer/precisa usar o SA ou outro login criado diretamente no SQL Server, siga os seguintes passos:

Através do Microsoft SQL Server Management Studio (ou Enterprise Manager na versão 2000), clique sobre a instância (Nome do Servidor) com o botão direito e escolha a opção Properties. Na janela Server Properties, clique em Security; em Server authentication clique em SQL Server and Windows Authentication mode.

Pra concluir esta etapa clique no botão OK.

Depois disso o sistema apresenta a seguinte mensagem (que infelizmente nem todos os usuários lêem):

Some of your configuration changes will not take effect until SQL Server is restarted. 

Então é isso, para efetivar a alteração desta configuração é necessário reiniciar o serviço do SQL Server. Existem outras possíveis razões para a ocorrência deste erro, falarei sobre elas em outro dia.

Se eu não consegui te ajudar sugiro uma consulta ao Books Online ou aquela pesquisada básica no Google, ok?   

Um abraço e ótima semana.