Archive for the ‘Sql Server’ Tag

1 ANO DE BLOG (post atrasado!!)

A vida ta uma correria né?
Tenho conversado com muitos DBAs e desenvolvedores e estamos todos no mesmo barco: faculdade, certificações, trabalho, família e etc.
Em Abril este blog completou um ano, lembro que no início tive a intenção de escrever um post por semana, mas logo vi que a coisa seria complicada, porque na maioria dos dias, depois do trânsito, trabalho e faculdade a gente só pensa mesmo em chegar em casa e dormir! Mas está tudo bem.
Neste momento tenho focado meus estudos no SQL Server 2008 e tenho me surpreendido com todas as novas features e a robustez deste produto.
Estou lendo o Accelerated SQL Server 2008 e pretendo em dois meses fazer o
exame 70-432. Tenho o MCITP no SQL Server 2005, mas não optei pelo exame de upgrade porque quero percorrer com calma e atenção todos os passos para as certificações do SQL Server 2008.
Neste 1º ano de blog, partindo de uma média de 15 para 1.000 visitas por mês, posso concluir que este canal tem servido ao meu aprendizado e ao suporte de tantos outros profissionais de TI que, como eu, estão aí, tentando manter o ritmo na correria do dia-a-dia.

Bom trabalho, bons estudos.

Silas Mendes

Anúncios

SQL Server 2008 – Habilitando suporte a rede

A partir da versão 2005 do SQL Server, algumas opções de configuração vem desabilitadas por padrão (e por uma questão de segurança), uma delas é o suporte a rede. Mas habilita-las é muito simples.

No menu Iniciar > Programas > Microsoft SQL Server 2008 > Configuration Tools escolha a opção SQL Server Configuration Manager (ou no menu Iniciar > Executar, digite SQLServerManager10.msc).

Na janela SQL Server Configuration Manager, expanda a opção SQL Server Network Configuration e clique na subopção que contém o nome da sua instância.

image

No meu caso, o nome da minha instância é SQLEXPRESS2008, então selecionei a subopção Protocols for SQLEXPRESS2008.

Ao clicar, observe no lado direito os diversos protocolos de rede disponíveis. Para habilitar o suporte a sua rede TCP/IP, de um double-clique sobre esse protocolo. Na nova janela, na opção Enabled, selecione a opção Yes. Feito isto, clique em OK.

Agora é necessário reiniciar seu serviço SQL Server o que pode ser feito na mesma janela. Vá na opção SQL Server Services, escolha o serviço SQL Server e com o botão direito clique em Restart.

Instalando o SQL Server 2008 Express

Hoje vou descrever os passos BÁSICOS para a instalação do SQL Server 2008 Express, esta que é a edição gratuita do SQL Server e atende muito bem pequenas aplicações (além de ser uma ótima opção pra quem quer estudar esse banco).

Na edição gratuita do SQL Server 2000 (conhecida por MSDE) até mesmo alguns DBAs sofriam para instalá-la. De lá pra cá muita coisa mudou e hoje você já conta com ferramentas gráficas para instalar e gerenciar sua instância. Essa edição do SQL Server suporta 1 CPU (com suporte a multi-core), 1 GB de RAM e bases de dados de até 4 GB, e ao contrário do que muitas pessoas dizem, as edições Express tem suporte a rede; o fato é que essa opção vem desabilitada, mas é muito simples ativá-la.

Nesse post vou demonstrar a instalação do SQL Express + ferramentas. Se você desejar o mesmo, ao realizar o download escolha a opção Microsoft SQL Server 2008 Express with Tools (executável: SQLEXPRWT_x86_ENU.exe); o tamanho do executável é de aproximadamente 220 MB. Segue abaixo o link para download: http://www.microsoft.com/brasil/servidores/sql/editions/express.mspx Antes de iniciar a instalação do SQL Server Express você deverá verificar:

Após as devidas verificações e atualizações, podemos iniciar a instalação. Execute o arquivo SQLEXPRWT_x86_ENU.exe e observe que do lado esquerdo da tela que é apresentada existem as opções Planning, Installation, Maintenance e etc. Na guia Planning escolha a opção System Configuration Cheker.

tela1_sql2008

Neste momento será feita uma breve verificação para indicar se falta algo para o andamento da instalação. Obtendo um retorno positivo clique em Ok e selecione na guia Installation a opção New SQL Server stand-alone installation or add features to an existing installation (Nova instalação ou adiciona opções para uma instalação já existente). tela3_sql2008

O instalador fará uma nova verificação, se estiver tudo certo (para ver os detalhes dessa verificação clique no botão Show Details) clique no botão OK. SQLExpress_Parte1 Na próxima tela clique em Install para instalar os arquivos que darão suporte ao restante da instalação. Clique Next.

Na tela Product Key clique em Next (observe que você não precisa de uma chave já que é esta é uma versão free). Marque a opção: “I accept the license terms” e clique em Next. Quando esta etapa finalizar, você irá escolher o que deseja instalar. Marque somente a opção Database Engine Services. Essa opção instalará o engine do SQL Server Express. Se desejar instalar também as ferramentas marque a opção Management Tools – Basic. tela2 1 Na próxima tela você deverá escolher por uma instância padrão (Default Instance) ou uma instância nomeada (Named Instance). Esta etapa define o nome pelo qual seu servidor SQL irá responder. Se escolher pela instância padrão o SQL terá o mesmo nome de seu servidor, se for uma instância nomeada o SQL irá atender por: NOME_SERVIDOR\NOME_SQL. tela2 Clique em Next.

A próxima tela traz um resumo sobre o espaço em disco que será utilizado. Clique em Next.

A seguir você deverá informar sob qual conta do Windows rodarão os serviços do SQL Server. No meu caso, como estou instalado no notebook, na caixa Account Name vou escolher a conta AUTORIDADE NT\SYSTEM para o serviço do SQL e o padrão para o SQL Browser. Em casos onde seu SQL Server utilizar recursos de rede será importante utilizar uma conta de domínio.

Clicando em Next você deverá optar pelo modo de autenticação no SQL. As duas opções são:

Windows Authentication Mode – Nessa opção, apenas contas do Windows poderão autenticar no seu SQL.

Mixed Mode – Nessa opção, poderão autenticar tanto contas Windows e contas criadas posteriormente dentro do SQL.

A Mixed Mode é a mais utilizada (apesar de não ser a recomendada pela Microsoft).

Nesse post vou escolher a opção Mixed Mode e definir uma senha para a conta system administrator (SA). Também irei adicionar uma conta Windows ao grupo de administradores do SQL. Você pode adicionar uma conta de administrador e também o usuário atual clicando no botão Add Current User. tela3 O SA é o usuário master do seu SQL Server, por isso não atribua uma senha fraca a ele e não ESQUEÇA essa senha .

Se estiver em dúvida sobre o modo de autenticação que deve usar, fique tranqüilo, essa configuração pode ser alterada depois. Como estamos realizando uma instalação padrão, neste momento ignore as abas Data Directories e FILESTREAM. Clique em Next.

A próxima tela pergunta se você deseja enviar automaticamente relatórios de possíveis erros para a Microsoft. Faça sua escolha e clique em Next. Agora o instalador faz uma nova verificação para validar os parâmetros informados até aqui. Se estiver tudo ok, clique em Next.

Verifique o resumo da instalação e finalmente clique em Install. Agora é só aguardar a finalização da instalação.

Considerações: Se você realizar essa instalação numa maquina com Windows XP em português, ao final poderá encontrar o seguinte erro na instalação: erro_sql2008 Segundo a Microsoft isso não é efetivamente um erro. Isso ocorre quando tentamos instalar uma versão inglês do SQL Server (2005 ou 2008) num Windows XP SP3 não-inglês (como já comentei neste post).

Neste texto abordei somente os passos básicos para a instalação do SQL Server 2008 Express. Pretendo detalhar outras opções nos próximos posts… no próximo iremos habilitar o acesso a rede, por enquanto, bom trabalho e bons estudos.

Veja como habilitar suporte a rede aqui.

xp_getfiledetails – Propriedades do arquivo

No SQL Server 2000 existe uma procedure não documentada que traz as propriedades de um arquivo, como data de criação, data de alteração e etc; sem dúvidas um recurso bastante interessante.

Veja um exemplo da chamada:

xp_getfiledetails ‘C:\WINDOWS\EXPLORER.EXE’

Problemas? Sim… essa proc não está mais disponível a partir da versão 2005.
Esse sem dúvidas é um bom motivo para não nos apegarmos à funcionalidades não documentadas… depois dá uma dor de cabeça enorme e um monte de DBA indignado correndo atrás de uma solução similar.

(Bom, mas pra quem continua com o SQL Server 2000, ainda é uma ótima opção! 😀 )

Espaço em disco

 

Para verificar o espaço livre nos discos do seu servidor de banco de dados, dentro do Query Analyser ou Management Studio execute esta procedure:

xp_fixeddrives

O resultado será algo parecido com este aí:

drive    MB free
C        38177
D        130733
X        138790
Y        8140
Z        57013

(5 row(s) affected)

Até +

Consultando Metadados

 

Durante o processo de desenvolvimento é comum realizar consultas a metadados, ou seja, consultas que retornam informações sobre o próprio banco; algo como a consulta abaixo,  que retorna todas as tabelas de um determinado banco, junto com o nome de suas colunas e o tipo de dados:

SELECT

      t.name      nome_tabela,

      c.name      nome_coluna,

      ty.name     tipo_dado

FROM

      sysobjects t, syscolumns c, systypes ty

WHERE

      t.id = c.id AND

      t.type = ‘U’ AND

      c.xtype = ty.type

 

 

Isto está errado?

Não.

No entanto não é uma boa prática realizar consultas diretamente nas tabelas de sistema. Além do esforço em entender a estrutura dessas informações e construir a query, existe a possibilidade de no futuro a Microsoft alterar a estrutura de umas dessas tabelas. E aí? O que acontece com sua aplicação que estava buscando dados naquela estrutura?

Para evitar esse tipo de problemas o Microsoft SQL Server oferece um catalogo de views de metadados (desenvolvidas de acordo com os padrões ISO); a idéia é que essas views sempre retornarão os dados independente da versão do SQL Server, logo se houverem mudanças nas tabelas de sistema, sua aplicação não será afetada porque ela está buscando dados de uma view, além disso, a forma de consulta é muito simples. Veja só:

Se você quer obter os mesmos dados da consulta acima utilizando uma dessas views, precisa somente disso:

SELECT

      TABLE_NAME, COLUMN_NAME, DATA_TYPE

FROM

      INFORMATION_SCHEMA.COLUMNS

Veja como é mais simples.

Quer consultar todas as tabelas de sua base que comecem com tb_pedido? Então tente isso:

 

SELECT

      TABLE_NAME

FROM

      INFORMATION_SCHEMA.TABLES

WHERE

      TABLE_NAME like ‘tb_pedido%’

 

Se quiser consultar todas as procedures que iniciam com ‘listar%’ utilize:

SELECT

      *

FROM

      INFORMATION_SCHEMA.ROUTINES

WHERE

      SPECIFIC_NAME like ‘listar%’ and ROUTINE_TYPE = ‘PROCEDURE’

Além destas existem outras views que podem te auxiliar na consulta a metadados. Veja uma  lista completa aqui.

Bom trabalho!

 

 

 

 

Convertendo dados – CAST ou CONVERT?

 

Já ouvi diversas pessoas perguntarem a diferença entre o CAST e CONVERT, e às vezes coisas comuns passam despercebidas. A idéia é a mesma: as duas funções permitem converter um tipo de dado em outro, no entanto a função CAST é padrão ANSI, então teoricamente ela pode ser usada em qualquer SGBD; já a função CONVERT é uma função T-SQL, ou seja, específica do Microsoft SQL Server. Além desta diferença, a função CONVERT tem um opcional que permite a conversão do dado e a possibilidade de formatar o resultado, é o que chamamos de estilo, e isso é muito útil quando você trabalha com datatypes datetime e money/float.

Então, por exemplo,  se você quiser converter uma data e deixá-la no formato dd/mm/aaaa deve usar o CONVERT:

select CONVERT(varchar(60), current_timestamp, 103)

No exemplo acima estamos pegando a data atual e convertendo para VARCHAR e formatando a data como dd/mm/aaaa. A formatação neste caso está utilizando o estilo 103.

Uma tabela completa com os estilos disponíves pode ser acessada neste link: http://msdn.microsoft.com/en-us/library/ms187928.aspx

Bom trabalho 🙂

 

Reduzindo tráfego com SET NOCOUNT ON

Uma dica:

 

Ao executar uma procedure o SQL Server retorna para a aplicação o total de linhas afetadas.

Ex: (1 row(s) affected)

 

Para evitar esse tráfego (que custa no seu tempo de resposta) coloque sempre no início de suas procedures a cláusula SET NOCOUNT ON.

Na maioria das vezes esse número é aparentemente irrelevante,  mas imagine sua aplicação executando uma proc que faça centenas ou milhares de operações (INSERT, UPDATE, etc) diversas vezes num dia…

Como dizem os mais velhos, de grão em grão a galinha enche o papo, na nossa realidade, de mili em milisegundos o seu banco também 🙂

Bom trabalho!

BULK INSERT

Realizar tarefas utilizando interface e nosso amigo (mickey) mouse pode ser muito confortável, no entanto, nem sempre elas estão disponíveis ou em alguns cenários podem não ser a solução mais adequada.

Hoje pela manhã precisava importar dados para uma de nossas bases, a tarefa era urgentíssima, mas como sabemos é justamente nessas horas que dá tudo errado! Meu Management Studio acordou mal humorado e quando cliquei na opção importar ele disse sem pestanejar:

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

“Putz. Ok, hoje é sexta-feira, posso ir no Google e pesquisar sobre esse (maldito) erro”. Enquanto pensava nisso meu querido gerente liga perguntando: “Já importou os dados?”…

Ok, vamos deixar o Google pra lá (por enquanto).

Existe uma forma muito prática de importar dados no SQL Server e foi a ela que recorri, o comando T-SQL é o BULK INSERT e é bem simples, veja o exemplo:

 

BULK INSERT tb_unidade_taxas FROM ‘C:\arquivos_temp\tx_unid.txt’

WITH

      (

      FIRSTROW = 2,

      FIELDTERMINATOR =‘;’

      );

 

Neste caso o arquivo que eu precisava importar era o tx_unid.txt e ele foi gravado em C:\arquivos_temp do meu servidor SQL. Os dados desse arquivo foram importados para a tabela [tb_unidade_taxas] e como ele tinha algumas particularidades tive que informar no BULK INSERT que ele deveria ignorar a primeira linha (era uma linha com descrição das colunas) e o caractere o que separava um campo do outro era o ponto-e-vírgula (FIELDTERMINATOR =’;’).

 

Pronto! Arquivo importado.

O BULK INSERT tem diversos parâmetros que você pode conferir aqui.

 

Em outra oportunidade irei comentar outras vantagens da utilização do BULK INSERT e também pretendo comentar sobre o BCP, mas agora vou ao Google ver se encontro o remédio pro mau humor do meu Management Studio 🙂

 

Até +

 

Novidades – Certificação SQL Server

Essa semana tá uma correria aqui mas pra não passar em branco posto abaixo um link com novidades sobre certificações Microsoft, em especial, para o SQL Server.

O post é do meu amigo Salvador Scardua e você pode conferir clicando aqui.

Um bom fim de semana a todos 🙂