segunda-feira, 10 de fevereiro de 2020

Ler um arquivo CSV via Bash

Caso você queira ler um arquivo do tipo .csv, utilizando bash ou um script, basta saber qual o separador (normalmente seria ",") e rodar o seguinte comando:

while IFS=, read -r field1 field2
do
    echo "$field and $field2"
done < input.csv

Onde,

IFS=, - define o separador
input.csv - é o arquivo de entrada

A partir daí, é só se divertir.

quinta-feira, 28 de novembro de 2019

AWS SDK para Python (boto3)

Se você quiser entrar usufruir da automação, usando computação em nuvem, Python é um bom caminho.
Caso esteja usando instâncias Amazon Linux, basta reproduzir os passos seguintes para poder desenvolver com o SDK da AWS:

  1. Crie uma instância EC2;
  2. Instale o Python:
    sudo yum install -y python3
  3. Instale/atualize o AWS CLI:
    pip3 install awscli
  4. Instale o AWs SDK:
    pip3 install boto3
Pronto! Já pode começar a programar em Python, usando os recursos AWS.
Lembre-se de associar uma Role do IAM ou executar o comando 'aws configure' para garantir acesso aos recursos AWS.

E para quem está começando, segue o link da documentação:

quinta-feira, 31 de outubro de 2019

Alterando o CHARSET num banco de dados Oracle

Eventualmente, me deparo com o seguinte cenário: pedem para preparar uma instância Oracle para restaurar uma base de dados que veio de um cliente, mas as informações da base de origem são mínimas. Você realiza toda a instalação e quando chega o backup, o charset é diferente do que você configurou. E agora? Instala tudo de novo?

Primeiro, para saber qual o charset atual, execute a seguinte consulta:
SELECT value FROM nls_database_parameters 
WHERE parameter = 'NLS_CHARACTERSET';

Para proceder com a alteração, siga os passos seguintes, através de uma sessão no sqlplus:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE CHARACTER SET INTERNAL_USE WE8ISO8859P1;
SHUTDOWN IMMEDIATE;
STARTUP;

Pronto! Basta dar sequência ao trabalho agora!

segunda-feira, 2 de março de 2015

Erro "/usr/libexec/gconf-sanity-check-2 exited with status 256"

Caso receba esse erro ao inicializar o ambiente gráfico Gnome:

"There is a problem with the configuration server. (/usr/lib/libconf-2-4/gconf-sanity-check-2 exited with status 256)"


Ainda poderá receber a seguinte mensagem:
"Configuration defaults for gnome power manager has not been installed correctly" 
ou
"Os padrões de configurações para o gerenciador de energia do gnome não foram instalados corretamente. Por favor entre em contato com o administrador do computador."

E não consiga acessar, execute o seguinte comando:

# chmod 1777 /tmp/

Reinicie a interface gráfica (Ctrl+Alt+Backspace) ou o computador. O problema deverá ter resolvido.

quarta-feira, 12 de março de 2014

Importando dados de um arquivo .xlsx para SQL Server

Esse post é só pra registrar uma ajuda solicitada por um amigo meu, precisando importar uma planilha do MS-Excel 2013 para uma tabela do SQL Server 2012.

Temos um monte de opções, como é possível ver nesse link:


Mas para suportar arquivos .xlsx, temos que instalar o seguinte componente:


Notem que na página de download temos opções para ambientes 32 e 64 bits. Identifique seu sistema e escolha o mais adequado. Não é possível instalar os dois, ok?

Com isso é possível usar o SQL Server Import and Export Wizard (32 ou 64 bits), selecionar o arquivo .xlsx e seguir o assistente, que permite selecionar as colunas, os tipos de dados a serem importados, selecionar o banco de dados de destino e definir no nome da tabela de destino.

Esse link deve ajudar a usar a ferramenta:


É uma referência legal para quem não quer criar um pacote SSIS em uma importação "rápida".

quinta-feira, 12 de setembro de 2013

Dica Linux: 10 truques essenciais para administradores

Um link muito legal da IBM developersWorks, com dicas e exemplos para você reproduzir no seu ambiente.
Bem interessante e recomendo!

Lazy Linux: 10 essential tricks for admins


Agradecimentos a Vallard Benincosa, Certified Technical Sales Specialist, IBM

ATUALIZAÇÃO (12/03/2014): o link foi corrigido e agora está funcionando normalmente, podem acessar. Peço desculpas a quem não encontrou a página e agradeço a compreensão de todos.

segunda-feira, 10 de junho de 2013

Removendo Manualmente LakeSide SQL Deadlock Detector

Não sei se vocês já encontraram a ferramenta de detecção de Deadlock, da empresa SQL Solutions (http://www.sqlsolutions.com/products/sql-deadlock-detector/index.html), em algum servidor de banco de dados. Ferramenta simples, instalação fácil... o problema é pra remover!

Eles disponibilizam uma ferramenta chamada PluginUninstaller, mas que eu me lembre, só funcionou em uma ocasião, nas outras eu fiquei na mão. Você clica Uninstall e... nada!

Se a ferramenta ajuda a encontrar as consultas que estão causando os deadlocks, por que remover?
Por um simples motivo: ela usa o banco de dados de sistema msdb para criar tabelas, stored procedures, filas e serviços.
Quem instalou, percebeu um crescimento absurdo do msdb (dica para os desenvolvedores: criem um banco exclusivo para essa aplicação)!

Primeiro identificamos as filas e paramos as mesmas. Você não pode apagar diretamente pois estão vinculadas aos serviços correspondentes. Então:

  1. Paramos as filas
  2. Apagamos os serviços
  3. Apagamos as filas
  4. Apagamos stored procedures e tabelas

Serviços e Filas


Stored Procedures


Tabelas



Depois desses procedimentos, finalmente conseguimos desinstalar a ferramenta!

quinta-feira, 23 de maio de 2013

Dicas Hyper-V e Powershell: 10 cmdlets incríveis!

Mais um link de referência, para quem está envolvido no mundo da virtualização e engatinhando no domínio do Powershell:


10 Awesome Hyper-V Cmdlets


Dicas de como inicializar ou parar uma VM, saber quais VMs estão em um host, fazer backup, obter informações de rede das VMs e mais outras dicas interessantes.

segunda-feira, 22 de abril de 2013

sexta-feira, 19 de abril de 2013

SQL Server: Problema com Database Mirroring (Error 1418)

Eu estava configurando um espelhamento de um banco de dados e tomei todos os cuidados necessários:

  1. Banco com recovery model Full
  2. Restaurei o backup na instância que iria hospedar o espelhamento (Full backup + transaction log backups) e deixei o banco em recovery (WITH NORECOVERY)
  3. Como as duas máquinas estavam no mesmo domínio, apenas segui o wizard para estabelecer o espelhamento
Tudo certo e, ao final, após decidir iniciar o espelhamento (Start Mirroring), recebo a seguinte mensagem:
The server network address "TCP://servidor02.dominio.local:5022" can not be reached or does not exist. Check the network address name and that the ports for the local and remote endpoints are operational. (Microsoft SQL Server, Error: 1418)
Bom, imediatamente, chequei como estava o firewall do Windows e vi que as portas que eu estava utilizando estavam ambas liberadas nos dois servidores. E ativas! Inclusive, consegui dar um telnet nelas (telnet servidor02.dominio.local 5022). O que mais poderia ser?

A parte interessante: as duas instâncias estavam usando a conta NETWORK SERVICE para executar o serviço SQL Server, e não uma conta de domínio (ou local) exclusiva para esse fim. Como eram duas instâncias não configuradas por mim (normalmente eu crio uma conta para o serviço do SQL Server e habilito dois recursos que eu gosto muito: "Instant File Initialization" e permitir  "Lock Pages in Memory") e não tinha janela para efetuar essa alteração, iniciei o serviço "as is".

Como resolver esse problema? Criei um login com as contas de computador do domínio e dei permissão CONNECT em ambas máquinas. Veja como ficou:

Na instância principal:
CREATE LOGIN [DOMINIO\SERVIDOR02$] FROM WINDOWS
GO
GRANT CONNECT ON endpoint::[Nome-do-Mirror-Endpoint] to [DOMINIO\SERVIDOR02$]
GO
Onde,
SERVIDOR02 é o nome do servidor onde está a instância que será o espelho;
Nome-do-Mirror-Endpoint é o nome do endpoint criado quando você configurou o espelhamento; pode ser obtido pela consulta SELECT name FROM sys.database_mirroring_endpoints.


Na instância espelho:
CREATE LOGIN [DOMINIO\SERVIDOR01$] FROM WINDOWS
GO
GRANT CONNECT ON endpoint::[Nome-do-Mirror-Endpoint] to [DOMINIO\SERVIDOR01$]
GO

Onde,
SERVIDOR01 é o nome do servidor onde está a instância principal;

Após isso, iniciei o espelhamento e tudo ficou funcionando!

sexta-feira, 12 de abril de 2013

Descobrindo o espaço usado por cada tabela no banco de dados

Para saber quanto uma tabela está usando de espaço num banco de dados, basta usar a stored procedure 'sp_spaceused' e o nome da tabela como parâmetro:


sp_spaceused tabela

name rows reserved  data index_size  unused
tabela 3650326  1415392 KB 1204728 KB  210440 KB  224 KB


Mas se eu quiser saber quanto cada tabela de um banco de dados está ocupando?
Vamos usar uma outra stored procedure, 'sp_MSforeachtable'.

É aí que entra esse script que resolve nosso problema:


CREATE TABLE #TabelaTemporaria
(
    [name] NVARCHAR(128),
    [rows] CHAR(11),
    reserved VARCHAR(18),
    data VARCHAR(18),
    index_size VARCHAR(18),
    unused VARCHAR(18)
)

insert #TabelaTemporaria exec sp_MSforeachtable 'EXEC sp_spaceused ''?'''

select [name] as Tabela, [rows] as Linhas,
cast(replace(reserved, ' KB','') as int) as Reservado,
cast(replace(data, ' KB','') as int) as Dados,
cast(replace(index_size, ' KB','') as int) as Tam_Index,
cast(replace(unused, ' KB','') as int) as NaoUsado
into #TabelaFinal
from #TabelaTemporaria

select * from #TabelaFinal order by Reservado desc

drop table #TabelaFinal
drop table #TabelaTemporaria

O resultado será parecido com esse:









Neste caso, já sabemos quem é a tabela que está alocando mais espaço dentro do banco de dados.

quinta-feira, 4 de abril de 2013

Powershell: Diretiva de execução de scripts

Ao executar pela primeira vez um script powershell num computador é comum que a seguinte mensagem seja retornada:


.\script.ps1 : File C:\Path-to-Script\script.ps1 cannot be loaded because running
scripts is disabled on this system. For more information, see about_Execution_Policies at
http://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\script.ps1
+ ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

Isso significa que a diretiva padrão está habilitada, que é a mais restritiva.
Ao executar o cmdlet Get-ExecutionPolicy é possível ver qual está em uso:


PS C:\> Get-ExecutionPolicy
Restricted


As diretivas de execução do Windows PowerShell são as seguintes:
  • Restricted (padrão)  
  • AllSigned 
  • RemoteSigned 
  • Unrestricted 
  • Bypass 
  • Undefined
Para maiores detalhes, visite http://technet.microsoft.com/pt-BR/library/dd347641.aspx
Para alterar o comportamento conforme suas necessidades, utilize o cmdlet 
Set-ExecutionPolicy <nome-da-diretiva>

Lembre-se sempre da importância da segurança e do uso da política do menor privilégio.
Um abraço!


segunda-feira, 2 de janeiro de 2012

SQL Server e Linux?

Não. O SQL Server não vai rodar no sistema operacional Linux.
Mas já temos um cliente liberado pela Microsoft.
Um notícia legal para os entusiastas de interoperabilidade: um driver ODBC 64 bits para Red Hat Enterprise Linux 5 com suporte a aplicações C/C++.
Compatível com SQL 2008 R2 e SQL 2012, dará suporte ao protocolo de autenticação Kerberos, SSL e codificação UTF-8 client-side.
Além disso, os utilitários sqlcmd e BCP estarão incluídos também.

Quem quiser conferir:

Available Today: Preview Release of the SQL Server ODBC Driver for Linux

Download
Microsoft® SQL Server® ODBC Driver for Linux Community Technology Preview


sábado, 1 de outubro de 2011

Virtualização: Disk2vhd e disco dinâmicos

Há uma suíte de utilitários, que foi criada por Mark Russinovich e Bryce Cogswell, que não pode faltar para profissionais de TI e desenvolvedores, que são os Sysinternals.

Um desses utilitários, o Disk2vhd, é usado para auxiliar processos de P2V (Physical to Virtual), gerando arquivos .vhd compatíveis com Hyper-V e Virtual PC. Inclusive pode ser executado mesmo com o sistema on-line, usando recursos de snapshot de volume presentes a partir do Windows Server 2003/Windows XP.

Posso dizer que o processo é muito rápido e eficiente, mas em uma ocasião, quando precisei efetuar em um servidor com mirror set, subentende-se discos dinâmicos no contexto, me deparei com um pequeno problema ao tentar montar (attach) os discos no meu sistema destino. O disco apareceu como inválido e ao tentar reativá-lo, retornou a seguinte mensagem:
This operation is not allowed on the invalid disk pack.
Vocês devem estar se perguntando, se eu queria virtualizar por que fui inventar de anexar o .vhd ao servidor? Foi uma oportunidade de expandir a partição e isso fica muito fácil usando o Gerenciador de Discos do Windows 2008 ou Windows 7, que permite alterar o tamanho de partições sem o uso de ferramentas de terceiros. Claro que primeiro eu expandi o Disco Virtual, com o Edit Disk do Hyper-V.

Voltando ao nosso assunto. Após algumas buscas no google, descobri que teria que editar o arquivo .vhd e manualmente alterar o tipo de partição.
Como fazer isso? Vou reportar o que eu fiz no meu caso:

  1. Mirror Set no servidor físico: Quebrei o espelho. Após isso realizei o processo com Disk2vhd.
  2. Fiz o download do HxD, que é um editor hexa de discos, imagens de disco e arquivos.
  3. Anexei o arquivo .vhd gerado pelo Disk2vhd através do Gerenciador de discos do Windows (Win7 ou Server 2008)
  4. Com o HxD, selecionei o disco que foi anexado para edição
  5. Procurei editar o setor 0x01C2, que possui o tipo de partição (mais informações). Devemos encontrar o valor 0x42 (Dynamic Disk Volume) para 0x07 (NTFS partition). Salve as alterações.
  6. Desanexe o disco e depois anexo-o novamente.
  7. Pronto, seu volume já deve estar disponível novamente para ser usado na sua máquina virtual
Aproveito e compartilho 2 links que me ajudaram a chegar até aqui:

terça-feira, 27 de setembro de 2011

Habilitando 'Instant File Initialization' em um servidor SQL Server 2005/2008

Talvez já tenham percebido o tempo que normalmente o SQL Server demora ao criar um banco, alterar seu tamanho ou restaurar uma base.
Hoje, ao ter que restaurar uma base de 560 GB, recordei que demoraria um pouco até começar a receber as mensagens de progresso da minha tarefa. Sabem porque? Os arquivos tem que ser inicializados (preenchidos com 'zeros').

Então me lembrei de um recurso, que ainda não tinha usado: 'Instant File Initialization', que permite que esses arquivos sejam instantaneamente criados sem a necessidade de preencher o mesmo com zeros. Isso trata-se de um privilégio de sistema operacional, não exatamente do SQL Server.
Para ativar esse recurso, você terá que atribuí-lo à conta de serviço que foi utilizada para executar a sua instância do SQL Server. Sempre é recomendado que seja uma conta com o mínimo possível de privilégios. Mesmo sabendo que o Administrador da máquina já tem esse direito, essa não é a conta mais adequada para executar os serviços relacionados ao SQL Server (nem qualquer outro!).

Um pequeno passo-a-passo:
  • Abra o console de Diretivas de Seguraça Local (Local Security Policy)
  • Em Security Settings, Local Policies, User Rights Assignment, selecione Perform Volume Maintenance Tasks
  • Abra o diálogo com um duplo clique e adicione a conta de serviço do SQL Server e clique OK
  • Feche o console
  • Reinicie sua instância do SQL Server
Bom, o resultado é que meu restore, de 560 GB, levou apenas 52 minutos e eu achei muito bom!

Para quem quiser saber mais, seguem uns bons links a seguir :

How and Why to Enable Instant File Initialization (SQL Server Premier Field Engineer Blog)
Database File Initialization (BOL)
Misconceptions around instant file initialization (Paul S. Randal)
Instant Initialization - What, Why and How? (Kimberly L. Tripp) - Nesse tem umas métricas interessantes

quinta-feira, 22 de setembro de 2011

Erro na aba Settings, do GP Management Console

Vim postar uma pequena dica para quem usa o Group Policy Management Console.

Ao acessar a aba Settings (Configurações) de algumas diretivas, recebia a seguinte mensagem de erro:

An error occurred while generating report:
An unknown error occurred while the HTML report was being created.
Para resolver, foi necessário editar o seguinte arquivo:

C:\WINDOWS\SYSVOL\sysvol\domain\Policies\{guid}\user\Microsoft\ieak\install.ins,

onde {guid} é o Unique ID da GPO.
Onde for encontrado:
[Security Imports]
ImportSecZones=1
Altere para zero e salve o arquivo.
Faça um refresh no console e já será possível ver as configurações da GPO novamente.


sexta-feira, 9 de setembro de 2011

Instalando CentOS 5 no Hyper-V

Segue um guia que eu compilei, juntando uma série de referências para instalar o CentOS 5.x com o Integration Components 2.1, da Microsoft, em uma máquina virtual num servidor Hyper-V:


  • Prepare uma máquina virtual com memória e discos dos tamanhos desejados
  • Remova o Network Adapter e adicione um Legacy Network Adapter
  • Defina um MAC Address estático para este adaptador (se for utilizar Live Migration)
  • Defina a imagem ou a mídia para a instalação do sistema operacional
  • Adicione o grupo de programas “Development Tools” durante a instalação. Caso tenha esquecido, utilize o comando ‘yum groupinstall “Development Tools”’
  • Certifique-se de ter instalados os seguintes pacotes:
    • kernel-devel
    • gcc
    • make
    • adjtimex (se for 64-bit)
  • Adicione o repositório RPMforge (http://packages.sw.be/):
  • Instale o pacote dkms:
    # yum install dkms
  • Com o dkms instalado, precisaremos baixar o ISO do Integration Services 2.1 do site da MS e carregar na máquina virtual:
    # mkdir -p /mnt/cdrom
    # mount /dev/cdrom /mnt/cdrom
    # cp –rp /mnt/cdrom /usr/src/linuxic-2.1
    # umount /mnt/cdrom
    # cp /usr/src/linuxic-2.1/scripts/dkms.conf /usr/src/linuxic-2.1/
  • Edite o arquivo /etc/modprobe.conf para carregar os módulos do Integration Services. Adicione as seguintes linhas:
    alias scsi_hostadapter1 vmbus
    alias scsi_hostadapter2 blkvsc
    alias scsi_hostadapter3 storvsc
    alias scsi_hostadapter4 netvsc
  • Compile e instale o Integration Services:
    # dkms add -m linuxic -v 2.1
    # dkms build -m linuxic -v 2.1
    # dkms install --force -m linuxic -v 2.1
  • Desligue a máquina virtual.
  • Com a máquina virtual desligada, podemos remover o Legacy Network Adapter e adicionar um Network Adapter. Se for usar Live Migration, lembre-se de adicionar um MAC Address estático.
  • Pode adicionar, caso necessite, até 4 processadores virtuais.
  • Ejete o ISO do Integration Components
  • Quando for configurar sua nova interface de rede na máquina virtual, agora estará disponível uma seth0 (e não uma eth0). Se não reconhecer de início a nova interface, um novo boot poderá resolver esta questão. Pode remover o arquivo /etc/sysconfig/network-scripts/ifcfg-eth0.bak
Para mais informações:

quinta-feira, 25 de agosto de 2011

The Story of Linux: Commemorating 20 Years of the Linux Operating System

Linux: 20 anos! Parabéns!

I'll be celebrating 20 years of Linux with
The Linux Foundation!

Eu tenho muito que comemorar, pois graças ao Linux aprendi muito e continuo aprendendo com ele e ajudei muitos clientes e seus negócios a serem mais seguros, produtivos com soluções baseadas no nosso querido "Tux"...rs
Parabéns a comunidade do software livre!

terça-feira, 28 de junho de 2011

Agora MCITP DBA SQL 2005!

Grande dia!
Após alguns meses de estudo e vários simulados, a ansiedade de chegar logo o dia e hora da prova, cada clique  nervoso no botão 'Next' do exame e a tela em branco antes do resultado, finalmente posso dizer que passei no exame e superei mais uma fase, que até reconheço ter demorado pra chegar, mas valeu a pena e será um incentivo para o próximo objetivo: MCITP SQL 2008.
Vamos ver se tento ser mais ágil, pois o SQL Codename 'Denali' já está chegando com muita coisa legal.

O importante é o incremento da auto-estima e ver que os esforços valeram!

Obrigado a todos que acreditaram e principalmente ao Criador que permitiu que eu chegasse aqui!
UHUU!!!