<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Thunder-Boy &#187; Banco de Dados</title>
	<atom:link href="http://jf.eti.br/category/banco-de-dados/feed/" rel="self" type="application/rss+xml" />
	<link>http://jf.eti.br</link>
	<description>Aprender é Bom Demais!!!</description>
	<lastBuildDate>Wed, 08 Feb 2012 04:32:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Postgresql &#8211; Como fazer um dump de uma tabela específica de seu banco de dados</title>
		<link>http://jf.eti.br/postgresql-como-fazer-um-dump-de-uma-tabela-especifica-de-seu-banco-de-dados/</link>
		<comments>http://jf.eti.br/postgresql-como-fazer-um-dump-de-uma-tabela-especifica-de-seu-banco-de-dados/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 18:47:58 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[HowTo - Como fazer]]></category>

		<guid isPermaLink="false">http://jf.eti.br/?p=2262</guid>
		<description><![CDATA[Muito fácil: pg_dump -U &#60;usuario&#62; &#8211;inserts -t &#60;tabela&#62; &#60;banco&#62; &#62; dump.sql Um exemplo real: pg_dump -U postgres &#8211;inserts -t municipio geral &#62; municipios.sql &#160;]]></description>
			<content:encoded><![CDATA[<p>Muito fácil:</p>
<p>pg_dump -U &lt;usuario&gt; &#8211;inserts -t &lt;tabela&gt; &lt;banco&gt; &gt; dump.sql</p>
<p>Um exemplo real:</p>
<p><em>pg_dump -U postgres &#8211;inserts -t municipio geral &gt; municipios.sql</em></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://jf.eti.br/postgresql-como-fazer-um-dump-de-uma-tabela-especifica-de-seu-banco-de-dados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Howto: Gerando Dump do Postgresql e transferindo o arquivo para uma máquina com Windows Server</title>
		<link>http://jf.eti.br/howto-gerando-dump-do-postgresql-e-transferindo-o-arquivo-para-uma-maquina-com-windows-server/</link>
		<comments>http://jf.eti.br/howto-gerando-dump-do-postgresql-e-transferindo-o-arquivo-para-uma-maquina-com-windows-server/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 00:25:32 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[HowTo - Como fazer]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://jf.eti.br/?p=2241</guid>
		<description><![CDATA[&#160; Howto: Gerando Dump do Postgresql e transferindo o arquivo para uma máquina com Windows Server O objetivo deste howto não é discutir qual é a melhor forma de realizar um backup PostgreSQL, mas sim propor uma forma de realizar um Dump da base de dados em um servidor Linux e transferir para um servidor [...]]]></description>
			<content:encoded><![CDATA[<p><a class="lightbox" title="Untitled-1" href="http://jf.eti.br/wp-content/uploads/Untitled-1.jpg"><img class="alignnone size-full wp-image-2243" title="Untitled-1" src="http://jf.eti.br/wp-content/uploads/Untitled-1.jpg" alt="" width="411" height="106" /></a></p>
<p>&nbsp;</p>
<p><strong>Howto: Gerando Dump do Postgresql e transferindo o arquivo para uma máquina com Windows Server</strong></p>
<p>O objetivo deste howto não é discutir qual é a melhor forma de realizar um backup PostgreSQL, mas sim propor uma forma de realizar um Dump da base de dados em um servidor Linux e transferir para um servidor de arquivos que rode Windows, isso é muito comum em empresas e instituições, onde muitas vezes no servidor Windows encontra-se instalada algumas ferramentas de terceiro para gerenciar fitas, robôs e etc.</p>
<p>Não custa citar o <a href="http://www.midstorm.org/~telles/2010/05/06/dump-nao-e-backup/" target="_blank">ótimo artigo do Fábio Telles Rodriguez</a>, onde o mesmo deixa claro que Dump não é considerado a melhor forma de realizar um backup. Vamos lá.</p>
<p>Imaginemos o seguinte cenário:</p>
<ul>
<li>Uma rede controlada por um Windows Active Directory &#8211; AD (Windows 2003 ou maior);</li>
<li>Um servidor de arquivos na rede, que pode estar rodando na mesma máquina do AD ou em outra;</li>
</ul>
<ul>
<li>Servidor Linux (Ubuntu ou outro qualquer) e rodando o SGBD PostgreSQL 8.x;</li>
</ul>
<p>A idéia é o seguinte:</p>
<ul>
<li>Uma vez por dia o SGBD PostgreSQL irá gerar um Dump da base de dados, através de uma tarefa agendada na <a href="http://www.zago.eti.br/agenda.html" target="_blank">Crontab</a>.</li>
<li>O dump gerado será armazenado em um diretório na mesma máquina do SGBD (não é uma boa prática deixar na mesma máquina) e uma cópia do mesmo será enviado para o servidor de arquivos Windows.</li>
</ul>
<p><strong>Mãos a massa:</strong></p>
<ol>
<li>Vamos considerar que o servidor Linux seja Ubuntu (ou debian) . Se estiver utilizando CentOS  é só instalar os mesmos pacotes pelo Yum Instal;</li>
</ol>
<p><span style="text-decoration: underline;"><strong>Instalando os requisitos:</strong></span></p>
<p># apt-get install samba samba-common smbfs smbclient</p>
<p><em>Criando a pasta que servirá de montagem:</em></p>
<p># mkdir /mnt/ntserver</p>
<p><em>No servidor de domínio, Windows Server &#8211; Active Directory, você deve ter um usuário com privilégio de escrita na pasta compartilhada. Basta executar a linha abaixo para testar a montagem:</em></p>
<p># mount -t smbfs //<strong>192.168.0.10/pasta_compartilhada</strong> /mnt/ntserver -o username=<strong>usuario_de_dominio</strong>,password=<strong>senha_de_dominio</strong></p>
<p><em> Claro trocando os termos em negrito para os da sua rede.</em></p>
<p># ls /mnt/ntserver</p>
<p><em>Com este comando deve listar o conteudo da pasta campartilhada lá do servidor de arquivos Windows. Ok, agora, vamos desmontar:</em></p>
<p># umount /mnt/ntserver</p>
<p><span style="text-decoration: underline;"><strong>Criando o script de backup do PostgreSQL</strong></span></p>
<p><em></em><em>Criando a pasta onde ficará armazenado localmente os Dumps</em></p>
<p># mkdir /home/bkp_pg</p>
<p><em>Crie o arquivo chamado bkp.sh</em></p>
<p><em></em># vim /etc/init.d/bkp.sh</p>
<p><em>Insira o seguinte conteúdo:</em></p>
<pre class="brush: shell">#!/bin/sh
# script que gera backup de bases de dados PostGreSQL
# Referencia: http://www.htmlstaff.org/postgresqlmanual/app-pgdump.html
# Jonas Ferreira - jonas.ferreira@gmail.com - http://jf.eti.br
# C 2010 03 19
#

# VARIAVEIS ##################
export PGPASSWORD=postgres            # Exportando a senha do PostGreSQL para o ambiente (Ubuntu)
vU=&quot;postgres&quot;                          # Usuario no PostGreSQL
vP=&quot;postgres&quot;                        # Senha
vB=nome_base                             # Base De dados
vBI=&quot;/usr/lib/postgresql/8.3/bin/&quot;     # Diretorio raiz dos binarios do PostGreSQL
vR=&quot;/home/&quot;                                # Diretorio raiz
vD=&quot;bkp_pg/&quot;                     # Destino do Backup
vPre=&quot;basePG&quot;                       # Prefixo no nome do arquivo de saida
vE=&quot;.dmp&quot;                              # extencao do arquivo de saida
vH=&quot;localhost&quot;                      # Host do servidor
vAno=`date +%Y`                     #Ano
vMes=`date +%m`                     #Mes
vDia=`date +%d`                     #Dia
vHor=`date +%H`                     #Hora
vMin=`date +%M`                     #Min
vCod=`date +%N`                     #date [date (GNU coreutils) 5.3.0]
vDat=&quot;$vAno$vMes$vDia-$vHor$vMin-$vCod&quot;
vA=$vPre&quot;-&quot;$vB&quot;-&quot;$vDat$vE

# VALIDACAO ##################
if [ -z $vU ]; then
echo &quot;Sem usuario&quot;;
exit 0;
fi
if [ -z $vP ]; then
echo &quot;sem senha&quot;;
exit 0;
fi
if [ -z $vB ]; then
echo &quot;informe o nome da base de dados&quot;;
exit 0;
fi

# BACKUP #####################
echo &quot;# Gerando backup. Aguarde...&quot;
echo &quot;# Destino: $vR$vD&quot;
echo &quot;# Nome do arquivo: $vA&quot;

echo &quot;#################################&quot;

echo &quot;# Compactando backup. Aguarde...&quot;

# Caso queira gerar com inserts (arquivo fica maior)
#$vBI&quot;&quot;pg_dump -U $vU -h $vH --inserts $vB | gzip -c &amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; $vR$vD$vA.out.gz

# Caso queira gerar com copy (arquivo fica menor)
$vBI&quot;&quot;pg_dump -U $vU -h $vH  $vB | gzip -c &amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; $vR$vD$vA.out.gz

echo &quot;#################################&quot;
echo &quot;# Transferindo o o arquivo para o servidor Windows...&quot;

# Montando a pasta
mount -t smbfs //192.168.0.10/pasta_compartilhada /mnt/ntserver -o username=usuario_de_dominio,password=senha_de_dominio

# copiando o arquivo
cp $vR$vD$vA.out.gz /mnt/ntserver

# desmontando a pasta
umount /mnt/ntserver

# limpando a variavel de ambiente
export PGPASSWORD=
exit
</pre>
<p>&nbsp;</p>
<p><em>Setando permissão de execução no script:</em><em><br />
</em></p>
<p># chmod +x /etc/init.d/bkp.sh</p>
<p>Colocando o <em>script na Crontab:<br />
</em></p>
<p># crontab -e</p>
<p>Adicione a seguinte linha:</p>
<p>#Realizando Backup do PostgreSQL &#8211; Todos os dias a meia noite<br />
00 00 * * * /etc/init.d/bkp.sh</p>
<p><em>Salve o arquivo e pronto, já pode testar:</em></p>
<p># /etc/init.d/bkp.sh</p>
<p>Como saída, você verá algo como:</p>
<p># Gerando backup. Aguarde&#8230;<br />
# Destino: /home/bkp_pg/<br />
# Nome do arquivo: basePG-nome_base-20111116-2012-048760000.dmp<br />
#################################<br />
# Compactando backup. Aguarde&#8230;<br />
#################################<br />
# Transferindo o o arquivo para o servidor Windows&#8230;</p>
<p>Verifique na pasta de destino se foi criado o arquivo:</p>
<p># ls /home/bkp_pg</p>
<p><em>Deve listar o arquivo compactado:</em></p>
<p>basePG-nome_base-20111116-2012-048760000.dmp.out.gz</p>
<p>Verifique também lá no servidor de arquivo do Windows, na pasta compartilhada, se este mesmo arquivo existi por lá.</p>
<p>Pronto, você acabou de implementar uma solução de Dump de uma base PostgreSQL e transferiu para um servidor de arquivos Windows. Espero que seja útil para você.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://jf.eti.br/howto-gerando-dump-do-postgresql-e-transferindo-o-arquivo-para-uma-maquina-com-windows-server/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Deletando registros com mais de 30 dias &#8211; MySQL</title>
		<link>http://jf.eti.br/deletando-registros-com-mais-de-30-dias-mysql/</link>
		<comments>http://jf.eti.br/deletando-registros-com-mais-de-30-dias-mysql/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 23:01:34 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>

		<guid isPermaLink="false">http://jf.eti.br/?p=2161</guid>
		<description><![CDATA[Se você quiser excluir registros com mais de X dias no MySQL, há uma maneira simples de fazer: DELETE FROM tabela WHERE date &#60; DATE_SUB(NOW(), INTERVAL 30 DAY);]]></description>
			<content:encoded><![CDATA[<p>Se você quiser excluir registros com mais de X dias no MySQL, há uma maneira simples de fazer:</p>
<pre class="brush: sql">DELETE FROM tabela WHERE date &lt; DATE_SUB(NOW(), INTERVAL 30 DAY);</pre>
]]></content:encoded>
			<wfw:commentRss>http://jf.eti.br/deletando-registros-com-mais-de-30-dias-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Schema Sync: Sincronização de esquemas entre Banco de Dados MySQL</title>
		<link>http://jf.eti.br/schema-sync-sincronizacao-de-esquemas-entre-banco-de-dados-mysql/</link>
		<comments>http://jf.eti.br/schema-sync-sincronizacao-de-esquemas-entre-banco-de-dados-mysql/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 15:10:09 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>

		<guid isPermaLink="false">http://jf.eti.br/?p=2103</guid>
		<description><![CDATA[Schema Sync é uma interessante ferramenta que pode te ajudar muito, por exemplo, considere o seguinte caso: Estamos trabalhando em dois ambientes distintos, um de desenvolvimento e outro de produção. No ambiente de desenvolvimento realizamos várias modificações no esquema de Banco de Dados, até chegar o momento de precisarmos aplicar tais modificações no Banco de [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" src="http://www.devart.com/dbforge/mysql/studio/images/schema-data-sync-logo.gif" alt="" width="177" height="196" /></p>
<p><a href="http://schemasync.org/" target="_blank">Schema Sync</a> é uma interessante ferramenta que pode te ajudar muito, por exemplo, considere o seguinte caso:</p>
<ul>
<li>Estamos trabalhando em dois ambientes distintos, um de desenvolvimento e outro de produção. No ambiente de desenvolvimento realizamos várias modificações no esquema de Banco de Dados, até chegar o momento de precisarmos aplicar tais modificações no Banco de produção. Se não tivermos feito uma lista de cada alteração (não considerando ferramentas que armazenam logs das transações) ai teremos um grande problema.</li>
</ul>
<p>Justamente ai que entra o <a href="http://schemasync.org/" target="_blank">Schema Sync</a>, que basicamente faz a comparação das Bases de Dados (desenvolvimento e produção) e gera um script.sql com as mudanças para que você possa aplicar no ambiente de produção, além disso também gera um script para reverter as mudanças caso tenha feito algo errado.</p>
<p>Muito útil&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jf.eti.br/schema-sync-sincronizacao-de-esquemas-entre-banco-de-dados-mysql/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Postgresql &#8211; Retornando o nome dos campos de uma tabela que sejam not null</title>
		<link>http://jf.eti.br/postgresql-retornando-o-nome-dos-campos-de-uma-tabela-que-sejam-not-null/</link>
		<comments>http://jf.eti.br/postgresql-retornando-o-nome-dos-campos-de-uma-tabela-que-sejam-not-null/#comments</comments>
		<pubDate>Wed, 23 Feb 2011 22:34:01 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>

		<guid isPermaLink="false">http://jf.eti.br/?p=2072</guid>
		<description><![CDATA[$sql_colnotnull = &#34;SELECT c.column_name FROM information_schema.columns c WHERE c.column_name &#60;&#62; &#039;id&#039; and c.is_nullable = &#039;NO&#039; and table_name = &#039;$tablename&#039;&#34;;]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.credativ.com/de/static/postgreslogo.png" alt="" /></p>
<pre class="brush: sql">
$sql_colnotnull = &quot;SELECT c.column_name FROM information_schema.columns c WHERE c.column_name &lt;&gt; &#039;id&#039; and c.is_nullable = &#039;NO&#039; and table_name = &#039;$tablename&#039;&quot;;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://jf.eti.br/postgresql-retornando-o-nome-dos-campos-de-uma-tabela-que-sejam-not-null/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resetando a senha de Root do Mysql</title>
		<link>http://jf.eti.br/resetando-a-senha-de-root-do-mysql/</link>
		<comments>http://jf.eti.br/resetando-a-senha-de-root-do-mysql/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 16:19:36 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[HowTo - Como fazer]]></category>

		<guid isPermaLink="false">http://jf.eti.br/?p=1982</guid>
		<description><![CDATA[Como sempre esqueço com fazer isso, vou deixar aqui, pra quando eu precisar novamente: Como resetar a senha de Root do Mysql =================================== [root@servidor ~]# lsof -i :3306 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME mysqld 31792 mysql 3u IPv4 434089 TCP *:mysql (LISTEN) [root@servidor ~]# kill -9 31792 [root@servidor ~]# /etc/init.d/mysql start [...]]]></description>
			<content:encoded><![CDATA[<p>Como sempre esqueço com fazer isso, vou deixar aqui, pra quando eu precisar novamente:</p>
<p>Como resetar a senha de Root do Mysql<br />
===================================</p>
<pre class="brush: shell">[root@servidor ~]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
mysqld 31792 mysql 3u IPv4 434089 TCP *:mysql (LISTEN)
[root@servidor ~]# kill -9 31792
[root@servidor ~]# /etc/init.d/mysql start
Mysql Started

[root@servidor ~]# mysql
Access denied for user ‘root’@&#039;localhost’ (using password: NO)

[root@servidor ~]# /etc/init.d/mysql stop

[root@servidor ~]# mysqld_safe –skip-grant-tables &amp;amp;

[root@servidor ~]#
[root@servidor ~]# mysql -u root
mysql&amp;gt;
mysql&amp;gt; use mysql;
mysql&amp;gt; update user set password=PASSWORD(“NEW-ROOT-PASSWORD”) where
User=’root’;
mysql&amp;gt; flush privileges;
mysql&amp;gt; quit

NEW-ROOT-PASSWORD above is whatever password you want to set.

[root@servidor ~]# # /etc/init.d/mysql stop
[root@servidor ~]# lsof -i :3306
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
mysqld 31792 mysql 3u IPv4 434089 TCP *:mysql (LISTEN)
[root@servidor ~]# kill -9 31792
[root@servidor ~]# fuser -k /usr/bin/mysqld_safe ( in
case you see mysql process is still running )

[root@servidor ~]# vi /root/.my.cnf
[root@servidor ~]# cat /root/.my.cnf
[client]
user=”root”
pass=”NEW-ROOT-PASSWORD”
[root@servidor ~]#

[root@servidor ~]# service mysql restart

[root@servidor ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.1.21-standard-log

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql&amp;gt; quit
Bye
[root@servidor ~]#
</pre>
]]></content:encoded>
			<wfw:commentRss>http://jf.eti.br/resetando-a-senha-de-root-do-mysql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress: Backup automatico da base de dados</title>
		<link>http://jf.eti.br/wordpress-backup-automatico-da-base-de-dados/</link>
		<comments>http://jf.eti.br/wordpress-backup-automatico-da-base-de-dados/#comments</comments>
		<pubDate>Tue, 14 Sep 2010 16:49:26 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[Dicas Web]]></category>

		<guid isPermaLink="false">http://jf.eti.br/?p=1965</guid>
		<description><![CDATA[A grande maioria das pessoas são muito relaxadas quando se trata de fazer backups regulares do Banco de Dados, alegando que dá muito trabalho, ou com aquele pensamento: &#8220;quais são as chances que vai acontecer comigo uma perda geral de dados?&#8221; Mas e se o backup acontecesse automaticamente todos os dias, armazenando a cópia do [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-1966" title="bk_gmail_wp" src="http://jf.eti.br/wp-content/uploads/bk_gmail_wp.jpg" alt="" width="540" height="145" /></p>
<p>A grande maioria das pessoas são muito relaxadas quando se trata de fazer backups regulares do Banco de Dados, alegando que dá muito trabalho, ou com aquele pensamento: &#8220;quais são as chances que vai acontecer comigo uma perda geral de dados?&#8221;</p>
<p>Mas e se o backup acontecesse <strong>automaticamente todos os dias</strong>, armazenando a cópia do Banco <strong>em outro servidor</strong> de forma segura? Seria ótimo! Vejamos então como fazer isso:</p>
<p><strong>1 &#8211; Registar uma nova conta do Gmail</strong></p>
<p>O Gmail oferece 7 GB de armazenamento e até 20MB de arquivos anexados por mensagem (O maior tamanho de anexo que encontrei para uma conta de e-mail gratuito). É grátis e é completamente fora do seu servidor de hospedagem, por isso, <strong>se o seu provedor perder tudo, você não terá perdido os seus backups</strong>.</p>
<p>Vá até <a href="http://mail.google.com/" target="_blank">http://mail.google.com/</a> e &#8220;Inscreva-se no Google Mail&#8221;. O cadastro leva apenas um minuto para preencher e agora você terá 7GB de espaço de armazenamento gratuito.</p>
<p><strong>2 &#8211; Instalar o Plugin</strong></p>
<p>Existem vários plugins de backup diferente, mas vamos utilizar aqui o <a href="http://lesterchan.net/portfolio/programming/php/" target="_blank">WP-DB Manager</a>, porque é o<strong> único que eu sei que vai funcionar</strong>, e porque você pode contar que ele será atualizado a cada nova versão do WordPress.</p>
<p>Baixe o plugin, faça o upload para a pasta plugins e ative-o como qualquer outro plugin.</p>
<p>Você então tem que procurar a pasta <em><strong>wp-content/backup-db</strong></em>, e fazer o upload do arquivo <strong>.htaccess</strong> da pasta do plugin.</p>
<p>Se a pasta db-backup não existir, você deve criá-la e dar previlégios total (CHMOD 777) (Na maioria dos clientes FTP, você pode dar um &#8220;CHMOD&#8221; com um clique direito e escolhendo &#8220;chmod&#8221; ou &#8220;atributos de arquivo&#8221; etc).</p>
<p><strong>3 &#8211; Definir as configurações<br />
</strong><br />
Um link chamado <strong>&#8220;Database&#8221;</strong> será adicionado ao seu painel principal do <strong>WP-Admin</strong>. Clique nele, depois clique na aba &#8220;Opções do DB&#8221;.</p>
<p>Na seção de agendamento automático, <strong>escolha todos os dia</strong>s, <strong>Gzip Sim</strong> e digite o seu endereço do Gmail. Agora clique em &#8220;Update Options&#8221; e está feito.</p>
<p><img class="alignnone size-full wp-image-1969" title="bk_gmail_wp2" src="http://jf.eti.br/wp-content/uploads/bk_gmail_wp2.jpg" alt="" width="560" height="295" /><br />
<strong>4 &#8211; Lycos Mail, para quando o seu banco de dados for muito grande</strong></p>
<p>A desvantagem do método acima é que você está limitado a um <strong>tamanho máximo de 20MB de seu banco de dados</strong>.</p>
<p>O Banco do wordPress tende a ser pequeno, e gzippiando o arquivo irá lhe ajudar imensamente, mas se seu site crescer acima do limite de 20MB, você terá que encontrar uma conta de e-mail melhor.</p>
<p>Nesse caso, tente <a href="http://mail.lycos.com/" target="_blank">Lycos Mail</a>. Eles oferecem 3 GB de armazenamento gratuito, mas ilimitado tamanho de anexo de email.</p>
<p>No entanto, com a versão gratuita, você deve entrar a cada 30 dias, ou eles vão excluir permanentemente todos os seus e-mails. Você pode evitar as exclusões da Lycos comprando uma conta Profissional, que custa U$5,95 dólares por ano (ainda assim muito barato).</p>
<p>É isso&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jf.eti.br/wordpress-backup-automatico-da-base-de-dados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como retornar um update feito sem querer em um banco Oracle?</title>
		<link>http://jf.eti.br/como-retornar-um-update-feito-sem-querer-em-um-banco-oracle/</link>
		<comments>http://jf.eti.br/como-retornar-um-update-feito-sem-querer-em-um-banco-oracle/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 22:55:23 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>

		<guid isPermaLink="false">http://jf.eti.br/?p=1867</guid>
		<description><![CDATA[Você conhece o Rollback em Bancos transacionais? É uma mão na roda, quando se precisa recuperar algo que você fez e se arrependeu, como alteração dem vários campos com valores errados, ou até mesmo excluiu um ou mais registros e deu COMMIT. Sim, você pode recuperar os dados&#8230; É uma tarefa muito simples, basta fazer [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.cs.umbc.edu/portal/help/oracle8/server.815/a67781/c02bloa5.gif" alt="" width="269" height="396" /></p>
<p>Você conhece o Rollback em Bancos transacionais? É uma mão na roda, quando se precisa recuperar algo que você fez e se arrependeu, como alteração dem vários campos com valores errados, ou até mesmo excluiu um  ou mais registros e deu COMMIT. Sim, você pode  recuperar os dados&#8230;</p>
<p>É uma tarefa muito simples, basta fazer  um select normalmente na  tabela,  com os campos e condições que  você quer e, no FROM, após o nome da tabela, colocar &#8220;<strong>as of timestamp  systimestamp &#8211; interval &#8216;X&#8217; minute</strong>&#8220;, onde esse &#8220;X&#8221; é o tempo que passou  desde a a besteira que  fez até agora.</p>
<p>Veja a seguinte situação hipotética:</p>
<p>Imagine que se tenha uma  tabela <strong>CLIENTE</strong> e você atualiza os clientes  que não fazem compras há mais de 1 mês para <strong>Inativos</strong>. Você faz isso com um update,  atualizando o campo <strong>STATUS_CLIENTE</strong> para &#8220;I&#8221;, de inativo,  depois de  fazer um select que retorna os  clientes que não compraram no último  mês.</p>
<p>Após a execução do update (COMMIT), alguns clientes estavam com o STATUS &#8220;A&#8221; de  Ativo, &#8220;D&#8221; de Devedor, &#8220;V&#8221; de VIP. Passa 30 minutos seu chefe entra na sala, e lhe fala que esse update não pode ser feito em clientes <strong>VIP</strong>, e agora? Faz assim:</p>
<pre class="brush: sql">
select ID_CLIENTE
from CLIENTE
as of timestamp systimestamp - interval &#039;30&#039; minute
where STATUS_CLIENTE = &#039;V&#039;;
</pre>
<p>PRONTO! Peguei todo mundo que tava com o campo STATUS_CLIENTE = &#8216;V&#8217; 30 minutos atrás. Com os IDs, é possível fazer um novo  update, passando esse pessoal que  está com o STATUS = &#8216;I&#8217;, pra &#8216;V&#8217;.</p>
<p><small>Via: <a href="http://estacaozn.blogspot.com/">Estação ZEN</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://jf.eti.br/como-retornar-um-update-feito-sem-querer-em-um-banco-oracle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entendendo JOIN</title>
		<link>http://jf.eti.br/entendendo-join/</link>
		<comments>http://jf.eti.br/entendendo-join/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 16:41:02 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>

		<guid isPermaLink="false">http://jf.eti.br/?p=1824</guid>
		<description><![CDATA[Entendendo os JOIN Este é um problema bastante comum entre desenvolvedores que lidam com banco de dados: Realiza-se uma busca (SELECT) e como resultado tem-se uma lista de ID´s. Agora como trazer os dados desses ID´s? Algumas pessoas utilizam a seguinte lógica para solucionar este problema: SELECT * FROM países foreach($países as $país) { SELECT [...]]]></description>
			<content:encoded><![CDATA[<p>Entendendo os JOIN</p>
<p>Este é um problema bastante comum entre desenvolvedores que lidam com banco de dados:<br />
Realiza-se uma busca (SELECT) e como resultado tem-se uma lista de ID´s. Agora como trazer os dados desses ID´s?</p>
<p>Algumas pessoas utilizam a seguinte lógica para solucionar este problema:</p>
<pre class="brush: sql"> SELECT * FROM países
foreach($países as $país) {
SELECT * FROM ciudades WHERE país = $país
foreach ($ciudades as $ciudad) {
</pre>
<p><span id="more-1824"></span><br />
Como pode-se ver, não é apenas confuso de ler como também é impossível de crescer logicamnte. Sem falar que gera um gasto excessivo de memória.</p>
<p>Ai é que entra os JOIN´s&#8230;</p>
<p>Por exemplo, usando JOIN, pode-se ter um set de resultados de países com a seguinte query:</p>
<pre class="brush: sql">SELECT * FROM localidade. AS dir
JOIN países AS p ON p.país = dir.pais
WHERE … qualquer condição</pre>
<p>Esta busca geraria o seguinte resultado hipotético (veja que esta organizado pela coluna &#8216;pais&#8217;):</p>
<pre class="brush: sql">
p.id  |  p.pais   | dir.id  | dir.pais  | dir.localidade
1     |  USA      | 3       | USA       | 200 West Chadderdon Avenue
2     |  Mexico   | 4       | Mexico    | 823 Monte Libano
4     |  Colombia | 2       | Colombia  | Carrera 9B Bis #117-32
3     |  Colombia | 1       | Colombia  | Calle 127 #42-45
</pre>
<p>Fácil né? Bem, parece simples a primeira vista, porém com isso estamos apenas raspando a superfície do problema, como por exemplo, se existir duas tabelas que não necessariamente contenham dados simétricos.</p>
<p>Para solucionar este problema, tem que se usar os JOINS por completo: LEFT JOIN, RIGHT JOIN, INNER JOIN e OUTER JOIN.</p>
<p>Vejamos o exemplo abaixo de duas tabelas que contenham alguns dados em comum:</p>
<pre class="brush: sql">
id nombre       id  nombre
-- ----         --  ----
1  Pirata       1   Rutabaga
2  Mico         2   Pirata
3  Ninja        3   Darth Vader
4  Spaghetti    4   Ninja
</pre>
<p>Certo? Agora vejamos como mesclar os dados com JOIN, no caso o INNER JOIN:</p>
<pre class="brush: sql">
SELECT * FROM TablaA
INNER JOIN TablaB
ON TablaA.name = TablaB.name

id  name       id   name
--  ----       --   ----
1   Pirata     2    Pirata
3   Ninja      4    Ninja</pre>
<p>Como resultado teremos uma lista com registros que existam tanto em A como em B simultaneamente.</p>
<p><a class="lightbox" title="join-inner" href="http://jf.eti.br/wp-content/uploads/join-inner.png"><img class="alignnone size-full wp-image-1825" title="join-inner" src="http://jf.eti.br/wp-content/uploads/join-inner.png" alt="" width="502" height="329" /></a></p>
<p>FULL OUTER JOIN</p>
<pre class="brush: sql">
SELECT * FROM TablaA
FULL OUTER JOIN TablaB
ON TablaA.name = TablaB.name

id    name       id    name
--    ----       --    ----
1     Pirata     2     Pirata
2     Mico       null  null
3     Ninja      4     Ninja
4     Spaghetti  null  null
null  null       1     Rutabaga
null  null       3     Darth Vader
</pre>
<p>Gerará uma lista com incluem todos os resultados de A e B, assim não existirá relação alguma entre os campos.</p>
<p><a class="lightbox" title="join-cartesian" href="http://jf.eti.br/wp-content/uploads/join-cartesian.png"><img class="alignnone size-full wp-image-1826" title="join-cartesian" src="http://jf.eti.br/wp-content/uploads/join-cartesian.png" alt="" width="502" height="329" /></a></p>
<p>LEFT OUTER JOIN</p>
<pre class="brush: sql">
SELECT * FROM TablaA
LEFT OUTER JOIN TablaB
ON TablaA.name = TablaB.name;

id  name       id    name
--  ----       --    ----
1   Pirata     2     Pirata
2   Mico       null  null
3   Ninja      4     Ninja
4   Spaghetti  null  null
</pre>
<p>Todos os resultados que se encontram na tabela A e os resultados na mesma ordem na tabela B.</p>
<p><a class="lightbox" title="join-left" href="http://jf.eti.br/wp-content/uploads/join-left.png"><img class="alignnone size-full wp-image-1827" title="join-left" src="http://jf.eti.br/wp-content/uploads/join-left.png" alt="" width="502" height="329" /></a></p>
<p>Usos e Derivações:</p>
<p>Agora que vimos como que funciona o JOIN, vejaamos outros exemplos com JOIN´s completas:</p>
<pre class="brush: sql">
SELECT * FROM TablaA
LEFT OUTER JOIN TablaB
ON TablaA.name = TablaB.name WHERE TablaB.id is null;

id  name       id     name
--  ----       --     ----
2   Mico       null   null
4   Spaghetti  null   null
</pre>
<p>Só quero ver os registros únicos que existam na tabela A</p>
<p><a class="lightbox" title="join-left-outer" href="http://jf.eti.br/wp-content/uploads/join-left-outer.png"><img class="alignnone size-full wp-image-1828" title="join-left-outer" src="http://jf.eti.br/wp-content/uploads/join-left-outer.png" alt="" width="502" height="329" /></a></p>
<pre class="brush: sql">
SELECT * FROM TablaA
FULL OUTER JOIN TablaB
ON TablaA.name = TablaB.name
WHERE TablaA.id is null
OR TablaB.id is null

id    name       id    name
--    ----       --    ----
2     Mico       null  null
4     Spaghetti  null  null
null  null       1     Rutabaga
null  null       3     Darth Vader
</pre>
<p>Mostra-me os registros que não tenham relação alguma entre a tabela A e tabela B</p>
<p><a class="lightbox" title="join-outer" href="http://jf.eti.br/wp-content/uploads/join-outer.png"><img class="alignnone size-full wp-image-1829" title="join-outer" src="http://jf.eti.br/wp-content/uploads/join-outer.png" alt="" width="502" height="329" /></a></p>
<p>Veja que o LEFT JOIN é intercambiável em sintaxe (mas não na lógica) com o RIGHT JOIN, onde:</p>
<pre class="brush: sql">
SELECT * FROM TablaA
LEFT JOIN TablaB
ON TablaA.name = TablaB.name

… é equivalente a:

SELECT * FROM TablaB
RIGHT JOIN TablaA
ON TablaA.name = TablaB.name</pre>
<p>Fonte: <a href="http://pt.wikibooks.org/wiki/PostgreSQL_Pr%C3%A1tico/DML/Consultas_Join">http://pt.wikibooks.org/wiki/PostgreSQL_Pr%C3%A1tico/DML/Consultas_Join</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jf.eti.br/entendendo-join/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PostgreSQL Prático</title>
		<link>http://jf.eti.br/postgresql-pratico/</link>
		<comments>http://jf.eti.br/postgresql-pratico/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 16:15:59 +0000</pubDate>
		<dc:creator>Jonas</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>

		<guid isPermaLink="false">http://jf.eti.br/?p=1807</guid>
		<description><![CDATA[Uma das melhores apostilas de Postgresql, um pouco antiga, porém extremamente útil. Você verá em detalhes: Instalação DDL (Data Definition Language) DML (Data Manipulation Language) Funções Internas Funções Definidas pelo Usuário e Triggers DCL (Data Control Language) &#8211; Administração Transações Administração Replicação Configurações Metadados (Catálogo) Conectividade Ferramentas Apêndices Exercícios Tudo em Português. Download:  http://www.fop.unicamp.br/]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.fop.unicamp.br/informatica/index.php?option=com_docman&amp;task=doc_view&amp;gid=113&amp;Itemid=36" target="_blank"><span class="lightbox"><img class="alignnone size-full wp-image-1808" style="border: 0pt none;" title="Postgresql_Apostila_pratico" src="http://jf.eti.br/wp-content/uploads/Postgresql_Apostila_pratico.gif" alt="" width="417" height="193" /></span></a></p>
<p>Uma das melhores apostilas de Postgresql, um pouco antiga, porém extremamente útil. Você verá em detalhes:</p>
<ul>
<li>Instalação</li>
<li>DDL (Data Definition Language)</li>
<li>DML (Data Manipulation Language)</li>
<li>Funções Internas</li>
<li>Funções Definidas pelo Usuário e Triggers</li>
<li>DCL (Data Control Language) &#8211; Administração</li>
<li>Transações</li>
<li>Administração</li>
<li>Replicação</li>
<li>Configurações</li>
<li>Metadados (Catálogo)</li>
<li>Conectividade</li>
<li>Ferramentas</li>
<li>Apêndices</li>
<li>Exercícios</li>
</ul>
<p>Tudo em Português.</p>
<p>Download:  <a href="http://www.fop.unicamp.br/informatica/index.php?option=com_docman&amp;task=doc_view&amp;gid=113&amp;Itemid=36" target="_blank">http://www.fop.unicamp.br/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jf.eti.br/postgresql-pratico/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

