Erro no BIDS – Digital Signature

Hoje cedo ao tentar abrir meu BIDS, na verdade um projeto de SSIS me deparei com o erro:
“Could not load type ‘Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSPackageSigning100’ from assembly ‘Microsoft.SqlServer.DTSRuntimeWrap, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91′”

Ta…Ao pensar um pouco sobre o que poderia ser, em primeira instancia ja imaginei projeto corrompido…Fui tentar abrir um outro e tive o mesmo erro, reiniciei a maquina (Estava a umas 3 semanas ligadas) e tive o mesmo erro…fui tentar criar um novo projeto…e mesmo erro…Pesquisando um pouco sobre o erro cheguei a seguinte solução:

“Deschecar” essa opção no BIDS antes de abrir o projeto:
Tools – Options – Business Intelligence Designers – Integration Services Designers – General – “Check digital signature when loading a package”

Feito isso consegui abrir normalmente o projeto ou criar novos.

Anúncios

Como habilitar erros remotos no SSRS (Report Server)

Para se habilitar erros remotos no SSRS, ou seja, quando uma aplicação chama através do web service uma renderização de um arquivo do reporting service e o mesmo gera um erro, apenas com erros remotos habilitados no SSRS que será possivel em aplicação ver o mesmo no exception.

1 – Crie um arquivo chamado: “EnableRemoteErrors.rss”

2 – Dentro deste arquivo coloque o seguinte conteudo:
Public Sub Main()
Dim P As New [Property]()
P.Name = “EnableRemoteErrors”
P.Value = True
Dim Properties(0) As [Property]
Properties(0) = P
Try
rs.SetSystemProperties(Properties)
Console.WriteLine(“Remote errors enabled.”)
Catch SE As SoapException
Console.WriteLine(SE.Detail.OuterXml)
End Try
End Sub

3 – Execute via commando line no prompt:
rs -i D:\EnableRemoteErrors.rss -s http://IpOuHostNameDaInstanciaSSRS/NomeConfiguradoNoSSRSManager

Novo contribuinte ao Blog

Boa tarde a todos os leitores!!!

Quero antes de mais nada agradecer ao Fabrizzio pelo convite de escrever aqui, é uma grande honra poder estar contribuindo com todos.

Espero que meus posts venham ajudar no dia a dia ou até mesmo em algum problema específico. Espero também receber comentários sendo positivos ou negativos de forma que eu possa acrescentar as minhas experiências e cada vez mais melhorar os temas que irei abordar.

Em breve iniciarei por aqui, espero que gostem!!!

Um grande abraço a todos!

Eric Malzone

Movendo Arquivos dos Databases – SQL Server

OnlyWhatMatters

Neste artigo irei mostrar um método para alterar o caminho dos arquivos de log e data dos databases.

Este método pode ser utilizado do SQL Server 2000 até a mais atual, o SQL Server 2012.

Este método contém os seguintes passos:
• Obter o diretório atual dos arquivos;
• Alterar o database para SINGLE_USER, para fechar todas as conexões no banco;
• Alterar o status do database para OFFLINE para que ele não leia mais os arquivos;
• Realizar o comando T-SQL para fazer o “detach” no database, ou seja, durante este processo o db engine ignora a existência dessa base;
• Mover os arquivos para o novo diretório;
• Realizar o comando T-SQL para fazer o “attach” no database;
• Alterar o status do database para ONLINE para subir o database e para ler os arquivos;
• Alterar o database para MULTI_USER para que outras…

Ver o post original 289 mais palavras

Alterando o default collation de uma instancia SQL Server

Apesar de N referencias na internet, faço do meu blog um arquivo pessoal para que alem dos outros eu tambem possa ter um repositorio online de codificação, então este post é apenas mais um na internet visando este proposito pessoal.

Para se alterar o collation default de uma instancia:

1 – Pare o serviço correspondente do SQL Server;

2 – Abra um prompt de comando (Executar -> CMD)

3 – Vá para o diretorio de instalação da instancia do SQL Server que voce deseja alterar. No meu caso: cd C:\Program Files\Microsoft SQL Server\MSSQL10.SQL200802\MSSQL\Binn

4 – Execute o comando: sqlservr -m -sNomeDaInstancia -T4022 -T3659 -q”NomeDoNovoCollation”

Será executado N comandos e reconstruções de indices, porem no final uma mensagem de sucesso conforme abaixo deve aparecer informando que a alteração foi realizada sem maiores problemas.

Foto 01

FORCEPLAN – Utilização e explicação

Existe uma opção no SQL Server denominada FORCEPLAN que faz com que o SQL Server execute os joins na sequencia em que foram escritos na query.

O SQL Server Query Optimizer segue algumas heurísticas de otimização com a ajuda nas estatísticas para que seja encontrada a melhor tabela a ser lida primeiro para a conclusão de uma consulta, essa regra tende a ser a menor caso nenhum filtro seja aplicado. Abaixo um script e fotos da execução do FORCEPLAN.

--Object creation
IF(OBJECT_ID('Tabela01') IS NOT NULL)
	DROP TABLE Tabela01

CREATE TABLE Tabela01
(
	Id	INT	IDENTITY(1,1)	PRIMARY KEY,
	Nome	VARCHAR(100)	NOT NULL
)
	
IF(OBJECT_ID('Tabela02') IS NOT NULL)
	DROP TABLE Tabela02

CREATE TABLE Tabela02
(
	Id	INT	IDENTITY(1,1)	PRIMARY KEY,
	Sobrenome1	VARCHAR(100)	NOT NULL
)
	
IF(OBJECT_ID('Tabela03') IS NOT NULL)
	DROP TABLE Tabela03

CREATE TABLE Tabela03
(
	Id	INT	IDENTITY(1,1)	PRIMARY KEY,
	Sobrenome2	VARCHAR(100)	NOT NULL
)
GO

--Data load
INSERT INTO Tabela01(Nome)
SELECT CHECKSUM(NEWID())
GO 5000

INSERT INTO Tabela02(Sobrenome1)
SELECT CHECKSUM(NEWID())
GO 10000

INSERT INTO Tabela03(Sobrenome2)
SELECT CHECKSUM(NEWID())
GO 15000

--Sql query

--Sem forceplan
SELECT a.Sobrenome2, b.Nome, c.Sobrenome1
FROM Tabela03 a
INNER JOIN Tabela01 b
	ON (a.Id = b.Id)
INNER JOIN Tabela02 c
	ON (a.Id = c.Id)

Sem_Force_Plan

--Com forceplan
SET FORCEPLAN ON

SELECT a.Sobrenome2, b.Nome, c.Sobrenome1
FROM Tabela03 a
INNER JOIN Tabela01 b
	ON (a.Id = b.Id)
INNER JOIN Tabela02 c
	ON (a.Id = c.Id)

SET FORCEPLAN OFF

Com_Force_Plan

Ou seja, é possível observar que com o FORCEPLAN OFF a primeira tabela a ser lida foi a 01 pois possui apenas 5.000 linhas enquanto que após a ativação do FORCEPLAN para ON a primeira tabela a ser lida foi a 03 mesmo possuindo 15.000 linhas pois é a primeira tabela especificada em meu JOIN.

Outra característica interessante é que fisicamente com o FORCEPLAN OFF o método de join escolhido foi o MERGE JOIN, porem ao fazermos a alteração para FORCEPLAN ON temos apenas nasted loops, ou seja, ao habilitar o FORCEPLAN teremos priorização para Nasted Loops a não ser que seja especificado outro meio de join via join hint conforme script abaixo.

--Com forceplan e join hint
SET FORCEPLAN ON

SELECT a.Sobrenome2, b.Nome, c.Sobrenome1
FROM Tabela03 a
INNER MERGE JOIN Tabela01 b
	ON (a.Id = b.Id)
INNER MERGE JOIN Tabela02 c
	ON (a.Id = c.Id)

SET FORCEPLAN OFF

Com_Force_Plan_E_Join_Hint

Sua utilização ou não vai para cada cenário, eu particularmente não gosto pois estamos inibindo o Query Optimizer de fazer o seu trabalho alem de que será necessário muito mais conhecimento técnico e aprofundado do desenvolvedor no momento da programação.

Query últimos Backups – SQL Server Pt. 2

OnlyWhatMatters

Como dito no último post, irei mostrar uma simples query que retornará onde os Backups foram salvos e o tamanho dos mesmos.

A query irá retornar os seguintes campos:

Database_Name: o nome do database.
Physical_Device_Name: o local e nome do arquivo do backup realizado. Caso o Backup tenha sido salvo em uma fita, o resultado será parecido como esse: {7878439E-5007-4EB3-96AC-447AEE19EBE6}1
Size: o tamanho do backup em MB.
Backup_Start_Date: horário de início do backup.
Backup_Finish_Date: horário de término do backup.
Seconds_Duration: o tempo, em segundos, da realização do backup.
Backup_Type: tipo do Backup.
Server_Name: nome do servidor onde foi realizado o backup.

Nessa query estou utilizando um parâmetro de dias x backup_start_date para listar os backups.

Links úteis:
BackupSet
BackupMediaFamily

Ver o post original

Query últimos Backups – SQL Server Pt. 1

OnlyWhatMatters

Neste post irei mostrar uma query que mostra o último Backup realizado em todos os databases, exceto o tempdb, pubs, northwind e o model.

* Em um próximo post irei mostrar o tamanho dos backups realizados e onde os backups foram salvos.

A query retorna os seguintes campos:

Servidor – Instancia: retorna o servidor (hostname) e a instância dos databases.
Database_Name: nome do database
Full_Dias: diferença de dias do último backup FULL realizado.
Full_Termino: data e hora do término do backup FULL.
Full_Tamanho_MB: tamanho do backup FULL em MB.
Diff_Dias: diferença de dias do último backup DIFFERENTIAL realizado.
Diff_Termino: data e hora do término do backup DIFFERENTIAL.
Diff_Full_Diff: diferença dos dias entre o backup FULL e o DIFFERENTIAL.
Diff_Tamanho_MB: tamanho do backup DIFFERENTIAL em MB.
Tran_Minutos: diferença em minutos do último…

Ver o post original 27 mais palavras

Erro DTS Designer SQL Server Management Studio 2008 – SQL Server 2000 DTS Designer components are required to edit DTS packages. Install the special Web download, “SQL Server 2000 DTS Designer Components” to use this feature.

Ainda me surpreende em pleno ano de 2013, com o SQL Server 2012 já estável e um service pack lançado alguns lugares estarem ainda com o SQL Server 2000, não entrarei em detalhes do por que disso (Custo de mudança, licença, pessoas, hardware…Enfim!) mas de vez em quando temos de aceitar o fato com as coisas que temos de lidar. Ontem precisei fazer algumas alterações em um pacote DTS, Sim! DTS e não DTSX.

O primeiro passo a ser feito é ter o designer de pacotes DTS em sua maquina, aqui eu só tinha uma versão Enterprise do SQL Server 2008R2 tanto em relação Database Engine como em relação as ferramentas (Business Inteligence Development Studio e SQL Server Management Studio) o que faz com que o primeiro passo seja baixar tal designer. O mesmo pode ser obtido neste link: Aqui

O arquivo especifico que baixei foi o: SQLServer2005_DTS.msi de 5.0MB

E realizei a instalação do mesmo, conforme solicitado fiz um reboot na maquina e para minha surpresa ao tentar pelo SQL Server Management Studio -> Management -> Legacy -> Data Transformation Services -> Botão direito do mouse -> Open Package File, eu tive o erro abaixo:

SQL Server 2000 DTS Designer components are required to edit DTS packages. Install the special Web download, “SQL Server 2000 DTS Designer Components” to use this feature. (Microsoft.SqlServer.DtsObjectExplorerUI)SSMS

Ou seja, mesmo depois de instalado o erro de que o componente não foi encontrado persistia…. Depois de algumas tentativas frustradas de solução e muita pesquisa, encontrei o maravilho link cujo qual foi a solução do meu problema.

Uma solução simples, mas que talvez seja difícil de ser encontrada a força por uma pessoa de banco de dados…

A solução consiste em uma simples alteração de uma variável de ambiente do windows. No meu caso estou utilizando o windows 7 e os passos foram os seguintes:

1 – Abrir o painel de controle
01

2 – Clicar em “Sistemas e segurança”
02

3 – Clicar em “Sistema”
03

4 – Clicar em “Configurações avançadas do sistema”
04

5 – Ir para a aba “Avançados” e clicar em “Variáveis de ambiente”
05

6 – Buscar a variável “Path”
06

7 – E alterar seu conteúdo de forma que a linha

C:\Program Files (x86)\Microsoft SQL Server\80\Tools\Binn\;

Fique acima da linha

C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;

Ou seja, em minha maquina o conteudo da mesma estava:

C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;
%SystemRoot%\system32;
%SystemRoot%;
%SystemRoot%\System32\Wbem;
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;
C:\Program Files\Intel\DMIX;
C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;
C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;
C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;
C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;
C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;
C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;
C:\Program Files (x86)\Microsoft SQL Server\80\Tools\Binn\;
C:\Program Files (x86)\Borland\StarTeam SDK 11.0\Lib;
C:\Program Files (x86)\Borland\StarTeam SDK 11.0\Bin

E foi alterado para:

C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;
%SystemRoot%\system32;
%SystemRoot%;
%SystemRoot%\System32\Wbem;
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;
C:\Program Files\Intel\DMIX;
C:\Program Files (x86)\Microsoft SQL Server\80\Tools\Binn\;
C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;
C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;
C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;
C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;
C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;
C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;
C:\Program Files (x86)\Borland\StarTeam SDK 11.0\Lib;
C:\Program Files (x86)\Borland\StarTeam SDK 11.0\Bin

XML – RAW – 01

Dando inicio a uma serie de pequenos artigos sobre XML e suas possiveis variações em SQL Server vou começar falando sobre a mais simples de todas, denominada FOR XML RAW. Nela o SQL Server faz uma formatação padrão nos dados e os joga em um XML simples conforme podemos observar abaixo:

--Criando a tabela com os dados de exemplo
IF(OBJECT_ID('TabelaDadosXML') IS NOT NULL)
	DROP TABLE TabelaDadosXML

CREATE TABLE TabelaDadosXML
(
	Nome		VARCHAR(100),
	SobreNome	VARCHAR(100),
	DataDeNasc	DATETIME
)

--Inserindo dados de teste
INSERT INTO TabelaDadosXML(Nome, SobreNome, DataDeNasc)
VALUES
('Nome01', 'SobreNome01', '19910921'),
('Nome02', 'SobreNome02', '19930909'),
('Nome03', 'SobreNome03', '19931009'),
('Nome04', 'SobreNome04', '19931109'),
('Nome05', 'SobreNome05', '19931209'),
('Nome06', 'SobreNome06', '19850109'),
('Nome07', 'SobreNome07', '19860109'),
('Nome08', 'SobreNome08', '19880109'),
('Nome09', 'SobreNome09', '19980109'),
('Nome10', 'SobreNome10', '19980909')

--RAW
SELECT
	a.Nome,
	a.SobreNome,
	DATEDIFF(YEAR, a.DataDeNasc, GETDATE()) As Idade
FROM TabelaDadosXML a
FOR XML RAW
/*
<row Nome="Nome01" SobreNome="SobreNome01" Idade="22" />
<row Nome="Nome02" SobreNome="SobreNome02" Idade="20" />
<row Nome="Nome03" SobreNome="SobreNome03" Idade="20" />
<row Nome="Nome04" SobreNome="SobreNome04" Idade="20" />
<row Nome="Nome05" SobreNome="SobreNome05" Idade="20" />
<row Nome="Nome06" SobreNome="SobreNome06" Idade="28" />
<row Nome="Nome07" SobreNome="SobreNome07" Idade="27" />
<row Nome="Nome08" SobreNome="SobreNome08" Idade="25" />
<row Nome="Nome09" SobreNome="SobreNome09" Idade="15" />
<row Nome="Nome10" SobreNome="SobreNome10" Idade="15" />
*/

Ou seja, o xml veio sem formatação nenhuma, colocando todos os dados como atribudos de uma TAG chamada ROW
Para se alterar o nome desta tag basta alterar para:

SELECT
	a.Nome,
	a.SobreNome,
	DATEDIFF(YEAR, a.DataDeNasc, GETDATE()) As Idade
FROM TabelaDadosXML a
FOR XML RAW('LinhaDeDados')

Fazendo com que o seguinte output seja gerado

/*
<LinhaDeDados Nome="Nome01" SobreNome="SobreNome01" Idade="22" />
<LinhaDeDados Nome="Nome02" SobreNome="SobreNome02" Idade="20" />
<LinhaDeDados Nome="Nome03" SobreNome="SobreNome03" Idade="20" />
<LinhaDeDados Nome="Nome04" SobreNome="SobreNome04" Idade="20" />
<LinhaDeDados Nome="Nome05" SobreNome="SobreNome05" Idade="20" />
<LinhaDeDados Nome="Nome06" SobreNome="SobreNome06" Idade="28" />
<LinhaDeDados Nome="Nome07" SobreNome="SobreNome07" Idade="27" />
<LinhaDeDados Nome="Nome08" SobreNome="SobreNome08" Idade="25" />
<LinhaDeDados Nome="Nome09" SobreNome="SobreNome09" Idade="15" />
<LinhaDeDados Nome="Nome10" SobreNome="SobreNome10" Idade="15" />
*/