Archive for the ‘banco de dados’ Category

[CC] Ajustando encondig para pg_dumpall

Hoje um cliente me relatou que o backup lógico do seu banco PostgreSQL havia parado com a seguinte mensagem:

pg_dump: Error message from server: ERROR:  character 0xe28093 of
encoding "UTF8" has no equivalent in "LATIN1"

Descobri [1] que seria necessário ajustar a configuração de enconding do client do PostgreSQL. Descobri também que o comando “pg_dump” oferece uma opção para definir o conjunto de caracteres correto (“–encoding=UTF8”, no caso em específico).

No entanto, como eu utilizo um backup completo do banco, esta opção não me servia, já que o comando “pg_dumpall” não oferece suporte para este parâmetro. E foi no manual do “pg_dump” que encontrei minha solução: antes de exportar o banco, basta configurar a variável PGCLIENTENCODING! Segue o exemplo:

export PGCLIENTENCODING=UTF8
pg_dumpall ...

Referências:

[1] http://stackoverflow.com/questions/14525505/postgres-issue-encoding-utf8-has-no-equivalent-in-encoding-latin1

Anúncios

RedHat 7 (e similares) e novos conceitos/comandos – parte 2

Como relatei na parte 1, houve algumas modificações nesta versão 7 do RedHat (e seus similares). Uma das modificações foi o sistema de inicialização. O, até então predominante, sysVinit foi substituído pelo systemd.

Uma documentação completa sobre o systemd por ser encontrada aqui [1]. Recomendo também a leitura desta documentação [2] elaborada pela comunidade do Arch Linux.

Continue lendo

Permitindo execução de tarefas em BATs em ambiente Windows

Como administrador de banco de dados, as vezes encontro alguns Windows Server em meu caminho.

Quem me conhece sabe que minha preferência é explícita para ambiente Linux, ou eventualmente Unix (estes têm se tornado mais raros hoje em dia). Mas como o cliente tem sempre razão, nem sempre conseguimos trabalhar no melhor dos ambientes! 🙂

Por isto, qual não foi minha surpresa em descobrir que não é mais tão simples rodar um .BAT em Windows Server (provavelmente a partir do 2008 – não fiz testes em outras versões, mas no passado rodava sem dificuldades em Windows NT!)

Sim, eu conheci computadores na era do “DOSnossauros”! Não nasci na geração das janelas…

A primeira surpresa, pra mim, foi verificar que o padrão de criação de tarefas é que as mesmas apenas executem com o usuário logado. Se eu quisesse isto, eu mesmo disparava a rotina!

Ao modificar a tarefa para que esta execute tanto quando o usuário esteja logado ou quando não tiver uma sessão, é necessário escolher a opção apropriada. Ao escolher esta opção, é solicitada a senha (até aqui tranquilo, embora desnecessário, no meu ver). Ao definir a senha do usuário, recebo uma mensagem incômoda que preciso ajustar uma policy pois o comportamento padrão não permite execução de arquivos de lote.

Tentei algumas opções via GPO e não obtive muito sucesso. Até que encontrei este blog [1] onde descreviam os passos que reproduzo abaixo. Isto solucionou meu problema! Espero que ajude mais pessoas.

  1. Abrir janela de comando (cmd);
  2. Executar secpol.msc;
  3. Selecionar Local Policies no painel da esquerda;
  4. Selecione User Rights Assignment;
  5. Botão direito em Log on as batch job e escolha Properties;
  6. Clique em Add User or  Group e adicione o usuário que executará a rotina.

Referência:

[1] Keloism. Windows Task Scheduler: This task requires that the user account specified has log on as batch job rights. URL: https://ashishkelo.wordpress.com/2012/09/19/windows-task-scheduler-this-task-requires-that-the-user-account-specified-has-log-on-as-batch-job-rights/

Facilidades proporcionadas pelas ferramentas certas

Eu sempre fui um pouco avesso a ferramentas que facilitam demais nossas atividades. Não, não sou masoquista! Apenas não quero ficar dependente demais de uma ferramenta para executar meu trabalho. Sempre fui adepto do uso de ferramentas básicas para realização de minhas atividades.

No caso de Oracle, penso que devo conseguir realizar a maior parte de minhas tarefas apenas com o SQL*Plus. Pois caso chegue em algum cliente onde não exista a ferramenta que eu necessito, isto não deveria ser um empecilho!

Continue lendo

[CC] Renomear colunas de tabelas

Na semana passada precisei modificar o nome de uma coluna em uma tabela já gerada no banco de dados (Oracle). Acredito que foi a primeira vez que tive tal necessidade. Em geral sou bastante cuidadoso ao definir nomes de atributos.

As vezes até penso que gasto tempo demais neste quesito. Mas pra mim um nome bem definido prolonga a vida de um atributo e facilita o uso e manutenções posteriores.

No entanto errei o gênero do atributo e precisava modificar. Como não queria recriar a tabela, recorri à documentação em busca de uma alternativa. Eis a sintaxe:

ALTER TABLE [nome_tabela]
RENAME COLUMN [nome_atual_coluna] TO [novo_nome_coluna];

Disponível a partir da versão 9i do Oracle.

Referências:

[1] http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/tables006.htm

[2] http://www.mandsconsulting.com/oracle-rename-column-alter-table-rename-column-example-sql-syntax

Opções de compilação PostgreSQL

Hoje eu estava trabalhando na migração de um servidor para um cliente e precisava reproduzir o ambiente de produção. Como entrei no projeto já em andamento, nem tudo tenho controle ou consigo resgatar através da documentação.

Dentre as necessidades, eu precisava levantar as opções de compilação do banco PostgreSQL instalado. O diretório de compilação já não existia mais. Pensei “deve existir uma maneira…”. “Oh poderoso google, responda-me!”. E eis a solução:

http://www.postgresql.org/docs/current/static/app-pgconfig.html

O que eu procurava de mais imediato era a seguinte opção:

$ pg_config --configure

Mas também é possível recuperar o diretório de binários, de configurações, entre outras opções.