Compartilhando conhecimento com o mundo

Com tecnologia do Blogger.

Pesquisa

Download

Blogger Tricks

Blogger Themes

Visitas

Assuntos

1/12/2024

Otimizando a Organização de Arquivos por Meio de Automação


A reorganização de diretórios com os relatórios dos backups desempenha um papel fundamental na organização e na eficiência operacional. Um script Bash bem elaborado pode facilitar significativamente esse processo, proporcionando automação e economia de tempo para administradores de sistemas. Ao implementar um script Bash para a reorganização de diretórios em um servidor FTP, é possível criar uma estrutura lógica e ordenada, simplificando a navegação e o gerenciamento de arquivos. Esse tipo de script pode ser projetado para categorizar arquivos por tipo, data ou qualquer critério relevante, facilitando a localização e o acesso aos dados. O script poderia começar realizando uma análise do diretório atual no servidor FTP, identificando subdiretórios e arquivos. Em seguida, com base em critérios predefinidos, ele organiza esses itens de maneira lógica. Isso pode envolver a criação de novos diretórios, a transferência de arquivos entre eles e até mesmo a exclusão de itens não mais necessários.

Diretório

Esse o diretório onde estão os arquivos de FTP dos jobs dos backups - todos juntos, misturados, pra encontrar um era um trabalho - imagine esse diretório com 15 anos de relatório de backups
\\ftp\repositorio\mdf\db2\dbas

24020220611DIA.TXT
8020220610DIA.TXT
21020220610DIA.TXT
24020220610DIA.TXT
8020220609DIA.TXT
24220220611LEG.TXT
2020220206MES.TXT
3020220206MES.TXT
4020220206MES.TXT
5020220206MES.TXT
6020220206MES.TXT
7020220206MES.TXT
8020220206MES.TXT
9020220206MES.TXT
10020220206MES.TXT
12020220206MES.TXT
13020220206MES.TXT
14020220206MES.TXT
15020220206MES.TXT
Ao rodar o script bash vamos gravar para dentro de uma pasta chamada FTP_ADABAS onde vamos separar por ano e o tipo de backup
FTP_ADABAS

2022
- ANO
- DIA
- LEG
- MES
- SEG
- SEM
- SHOC
2023
- ANO
- DIA
- LEG
- MES
- SEG
- SEM
- SHOC
2024
- ANO
- DIA
- LEG
- MES
- SEG
- SEM
- SHOC
2025
- ANO
- DIA
- LEG
- MES
- SEG
- SEM
- SHOC
2026
- ANO
- DIA
- LEG
- MES
- SEG
- SEM
- SHOC

script_backup.bat

Para abordar essa questão, desenvolvemos um script em BAT denominado "script_backup.bat". Este script desempenha a função de mover os arquivos localizados na raiz do diretório para o diretório específico do ano correspondente. Sua estrutura é simples, empregando comandos do DOS do Windows. O funcionamento do script se inicia com a captura da variável referente ao ano atual. Em seguida, são movidos os backups no formato TXT do diretório principal para suas respectivas pastas no diretório ANO/PERIODICIDADE. Essa abordagem visa categorizar os backups de forma organizada, facilitando a gestão e recuperação de dados com base em critérios temporais específicos. Ao realizar esse processo de reorganização, o script contribui para a manutenção da estrutura do repositório, assegurando que os backups sejam armazenados nos diretórios correspondentes ao ano e à periodicidade desejados. Essa prática não apenas simplifica a localização de backups específicos, mas também promove uma melhor organização e gestão eficiente dos dados armazenados, otimizando assim o ambiente de backup no sistema operacional Windows.
@echo off
setlocal enabledelayedexpansion

:: ---------------------------------------------------------------------------------
:: Extract date fields - language dependent
:: ---------------------------------------------------------------------------------
::
::
for /f "tokens=1-4 delims=/-. " %%i in ('date /t') do (
       set v1=%%i& set v2=%%j& set v3=%%k
       if "%%i:~0,1%%" gtr "9" (set v1=%%j& set v2=%%k& set v3=%%l)

       for /f "skip=1 tokens=2-4 delims=(-)" %%m in ('echo.^|date') do (
           set %%m=!v1!& set %%n=!v2!& set %%o=!v3!
   )
)

:: Final set for language independency (English and Portuguese - maybe works for Spanish and French)
set year=%yy%%aa%
set month=%mm%
set day=%dd%

:: ---------------------------------------------------------------------------------
:: Validando as Variaveis que foram carregadas acima
:: ---------------------------------------------------------------------------------
::
:: echo Year:[%year%] - month:[%month%] - day:[%day%]
::

:: ---------------------------------------------------------------------------------
:: ---- Movendo os arquivos DIA
:: ---------------------------------------------------------------------------------
::
::
move \\ftp\repositorio\mdf\db2\dbas\*DIA.TXT \\ftp\repositorio\mdf\db2\dbas\FTP_ADABAS\%year%\DIA
::
::

:: ---------------------------------------------------------------------------------
:: ---- Movendo os arquivos SEG
:: ---------------------------------------------------------------------------------
::
::
move \\ftp\repositorio\mdf\db2\dbas\*SEG.TXT \\ftp\repositorio\mdf\db2\dbas\FTP_ADABAS\%year%\SEG
::
::

:: ---------------------------------------------------------------------------------
:: ---- Movendo os arquivos SEM
:: ---------------------------------------------------------------------------------
::
::
move \\ftp\repositorio\mdf\db2\dbas\*SEM.TXT \\ftp\repositorio\mdf\db2\dbas\FTP_ADABAS\%year%\SEM
::
::

:: ---------------------------------------------------------------------------------
:: ---- Movendo os arquivos MES
:: ---------------------------------------------------------------------------------
::
::
move \\ftp\repositorio\mdf\db2\dbas\*MES.TXT \\ftp\repositorio\mdf\db2\dbas\FTP_ADABAS\%year%\MES
::
::  

:: ---------------------------------------------------------------------------------
:: ---- Movendo os arquivos ANO
:: ---------------------------------------------------------------------------------
::
::
move \\ftp\repositorio\mdf\db2\dbas\*ANO.TXT \\ftp\repositorio\mdf\db2\dbas\FTP_ADABAS\%year%\ANO
::
::  


:: ---------------------------------------------------------------------------------
:: ---- Movendo os arquivos LEG
:: ---------------------------------------------------------------------------------
::
::
move \\ftp\repositorio\mdf\db2\dbas\*LEG.TXT \\ftp\repositorio\mdf\db2\dbas\FTP_ADABAS\%year%\LEG
::
::


:: ---------------------------------------------------------------------------------
:: ---- Movendo os arquivos HOL
:: ---------------------------------------------------------------------------------
::
::
move \\ftp\repositorio\mdf\db2\dbas\*HOL.TXT \\ftp\repositorio\mdf\db2\dbas\FTP_ADABAS\%year%\SHOC\SHOL
::
::

:: ---------------------------------------------------------------------------------
:: ---- Movendo os arquivos HOM
:: ---------------------------------------------------------------------------------
::
::
move \\ftp\repositorio\mdf\db2\dbas\*HOM.TXT \\ftp\repositorio\mdf\db2\dbas\FTP_ADABAS\%year%\SHOC\SHOM
::
::

:: ---------------------------------------------------------------------------------
:: ---- Movendo os arquivos HOC
:: ---------------------------------------------------------------------------------
::
::
move \\ftp\repositorio\mdf\db2\dbas\*HOC.TXT \\ftp\repositorio\mdf\db2\dbas\FTP_ADABAS\%year%\SHOC\SHOC
::
::

:: ---------------------------------------------------------------------------------
:: ---- Movendo os arquivos RESTANTE que sobrou
:: ---------------------------------------------------------------------------------
::
::
move \\ftp\repositorio\mdf\db2\dbas\*.TXT \\ftp\repositorio\mdf\db2\dbas\FTP_ADABAS\%year%
::
::


endlocal
: pause

Rodar Automaticamente

Para que seu arquivo bat rode ao acessar o seu windows, execute os passos a seguir: Pressione as teclas Windows+R, cole
%appdata%\Microsoft\windows\start menu\programs\startup
e clique em Ok. Em seguida cole sua batch neste diretório ou se preferir navegue manualmente conforme imagem abaixo:
E cole o arquivo bat nesse diretório, todas as vezes que você logar no Windows vai executar esse arquivo movimentando os arquivos

2/28/2020

Migrando o Informix para o SQL Server


Tem vários programas para migrar o Informix para o SQL Server, a grande maioria pagos, mas encontrei um bem interessante (e código aberto) e resolvei compartilhar com vocês - O SQLines Data é uma ferramenta de transferência de dados, escalável e de alto desempenho, conversão de esquema e validação para a migração de vários bancos de dados. A ferramenta requer conexões com os bancos de dados Informix (ODBC/CLI sem ODBC Manager) e SQL Server (SQL Server Native Client).

Validando e depois transferindo os dados





Comparando a quantidade de linhas de cada tabelas de um banco com outro (bateu)

11/02/2019

Conectar o Informix a partir de um pacote SSIS


Assim como ocorre com muitos produtos de terceiros, o objeto de conexão Informix OLEDB da IBM é menos simples quando se trata de configurá-lo para funcionar com o SSIS. Após algumas pesquisas, criei a seguinte maneira de conectar-se ao banco de dados Informix através do SSIS em um ambiente Windows x64. Eu tive que passar por pilhas de documentação da IBM, muitos artigos na internet e algumas tentativas e erros antes de chegar a uma solução funcional. Eventualmente, consegui obter a conexão bem-sucedida com um banco de dados Informix a partir de um pacote SSIS (Works for Excel etc.). Espero que este post poupe algum trabalho.

Primeiro, faça o download da versão mais recente do Informix Client Software Development Kit (32 bits) no site da IBM. É um freeware, mas você precisa se registrar no site da IBM para fazer o download do produto. Não use as versões de 64 bits, a menos que esteja trabalhando com o BIDS 2008R2 ou o SQL 2012 Data Tools, pois qualquer coisa anterior a esse (BIDS) ainda é um aplicativo de 32 bits, e seus fornecedores de 64 bits não serão mostrados na lista de fornecedores. Você pode baixar a versão mais recente do SDK do cliente aqui .

A próxima etapa é adicionar um caminho para “C:\Windows\SysWOW64” ao início da variável ambiental do caminho antes de instalar o SDK do cliente. Caso contrário, você receberá uma mensagem de erro dizendo adicionar um prefixo à variável de caminho. Em seguida, instale o produto, incluindo o pacote de driver do servidor de dados IBM.



Após instalar o SDK do cliente, use a ferramenta Setnet32 para configurar um servidor Informix padrão. Você pode encontrar o aplicativo Setnet32 em "Todos os programas > IBM Informix Client SDK".



Preencha as informações do servidor e do host com os detalhes corretos no servidor Informix. Você encontrará que as variáveis ​​ambientais INFORMIXDIR e INFORMIXSERVER estão preenchidas com valores referentes ao servidor padrão. Em seguida, adicione uma nova entrada ao seu arquivo de serviços. O arquivo de serviço pode ser encontrado em "C:\Windows\System32\drivers\etc".



O formato do arquivo de serviço é mencionado claramente no início do arquivo. A primeira entrada é o nome do serviço, o número da porta e o protocolo. Após editar o arquivo de serviço, você pode criar uma nova Conexão Aberta à Base de Dados (ODBC). Não use a ferramenta Administrador da fonte de dados em “Arquivos de programas > Ferramentas administrativas”; em vez disso, use “C:\Windows\SysWOW64\odbcad.exe” para adicionar e configurar a nova fonte de dados. Estranho eu sei, não me pergunte por que funciona dessa maneira, mas funciona



Selecione IBM INFORMIX ODBC DRIVER e clique em concluir. A janela de configurações será exibida. Dê qualquer nome à fonte de dados e preencha os detalhes de conexão apropriados. Clique em aplicar e testar a conexão.



Quase pronto! configurando seu ambiente para conectar-se ao Informix. Abra Lances e crie um novo projeto SSIS. Vá para adicionar nova fonte de dados, você encontrará “O IBM OLE DB Provider para Informix” está listado em Provedores OLE DB. Crie uma nova conexão com o servidor Informix e divirta-se com Data.



O nome do servidor deve ser fornecido no formato de banco de dados @ servername . Isso é CRÍTICO ! Defina apropriedade Run64BitRunTime do seu projeto SSIS como " False " Project> Properties> Debugging

Update Statistic - Informix


Para compreender verdadeiramente a importância de UPDATE STATISTICS, você precisa entender exatamente o que acontece quando uma consulta SQL é colocada pelo usuário para execução. Cada consulta SQL que é inserido deve ser analisado, otimizado e executado.

O otimizador é o componente que prepara um plano de consulta. Um plano de consulta ideal e aquele que consulta a execução da minha query - ou seja, ele determina a forma mais eficiente para buscar os dados. Para isso, ela faz uso de um conjunto de dados estatísticos, no entanto, estes dados estatísticos não pode ser assumida para ser exato. A precisão dos dados depende de um grande número de fatores, como o tipo de algoritmo de amostragem utilizado, o número de amostras colhidas, e a distorção dos dados.

O otimizador de consulta não recalcula automaticamente do perfil para as tabelas. Em alguns casos, reunindo as estatísticas pode levar mais tempo do que executar a consulta. Para garantir que o otimizador escolhe um plano de consulta que melhor reflete o estado atual de suas tabelas, execute UPDATE STATISTICS em intervalos regulares.

Como trabalha o UPDATE STATISTICS

O UPDATE STATISTICS deve ser executada após uma carga inicial dos dados e criação de índices. Ele também deve ser executado após quaisquer mudanças significativas nas tabelas do banco de dados, incluindo qualquer inserção em larga escala, ou operações de atualização ou excluir. Se você não implementar UPDATE STATISTICS, o otimizador tem dados imprecisos para determinar os melhores caminhos de acesso aos seus dados.

A base do otimizador de consulta estima o custos sobre o número de linhas a serem recuperadas de cada tabela. Por sua vez, a estimativa do número de linhas é baseado na seletividade de cada expressão condicional, que é utilizado na cláusula WHERE. Um filtro é uma expressão condicional, que é usado para selecionar as linhas. A seletividade é um valor entre 0 e 1 que indica a porcentagem de linhas dentro da tabela que o filtro pode passar. Um filtro seletivo, que passa algumas linhas, tem seletividade para 0, e um filtro que passa quase todas as linhas tem seletividade 1.

O otimizador pode usar as distribuições de dados para calcular a seletividade para os filtros em uma consulta. No entanto, na ausência de distribuição de dados, o servidor de banco de dados calcula a seletividade em relação aos filtros de diferentes tipos com base em índices de tabela. A correção de estimar a seletividade altamente influencia o custo de cada plano de execução. Assim, a precisão de obter um plano ideal é totalmente dependente da informação estatística atual dos objetos de banco de dados envolvidos na consulta.

Cada vez que a consulta UPDATE STATISTICS é executado, as seguintes tabelas de catálogo do sistema são atualizadas. Os itens listados em cada ponto devem colunas em tabelas.

SYSTABLES
+-------------+--------------------------------------------------------------------+
| nindexes    | Número de índices na tabela;                                       | 
+-------------+--------------------------------------------------------------------+
| nrows       | Número de linhas na tabela;                                        |
+-------------+--------------------------------------------------------------------+
| npused      | Número de páginas usadas para armazenar "nrows" na tabela;         |
+-------------+--------------------------------------------------------------------+
SYSCOLUMNS
+-------------+--------------------------------------------------------------------+
| colmin      | Segundo valor mínimo da coluna                                     |
+-------------+--------------------------------------------------------------------+
| Colmax      | Segundo valor máximo da coluna                                     |
+-------------+--------------------------------------------------------------------+
SYSINDEXES e SYSFRAGMENTS
+-------------+--------------------------------------------------------------------+
| levels      | Número de níveis na B-Tree                                         |
+-------------+--------------------------------------------------------------------+
| leaves      | Número de leaves contidas na B-tree                                |
+-------------+--------------------------------------------------------------------+
| nunique     | Número de valores distintos                                        |
+-------------+--------------------------------------------------------------------+
| clust       | Clusterdness em relativo a tabela;                                 |
+-------------+--------------------------------------------------------------------+
SYSDISTRIB

- Linhas que tenham informações sobre como os valores das tabelas e dados do usuário são distribuídos. (Então, todas as colunas são afetadas)
- Também mantém a resolução e nível de confiança da distribuição.

Modos do UPDATE STATISTICS

A três modos de atualização, os dados estatísticos são low (baixa), medium (média) e high (alta).

O modo de low preenche apenas os valores estatísticos escalares (ou seja, não existem indicações de distribuição) de uma tabela. Todas as informações, como os níveis de índice B-tree, número de páginas consumidas pela tabela, número de valores distintos de uma coluna são armazenados.

No modo medium, além de estatísticas modo de low, a declaração classifica um conjunto de amostras de valores de coluna e preenche os dados de distribuição na tabela do catálogo do sistema sysdistrib que representa esta amostra. De modo geral, tem uma margem de confiança no intervalo de 85% a 99%.

No modo de high, além de estatísticas modo de low, a declaração classifica todos os valores da coluna e preenche a tabela com informações sysdistrib distribuição exata em todos os valores da tabela no momento da execução. Embora possa parecer uma boa ideia usar sempre o UPDATE STATISTICS no modo de high, isso não é realmente o caso. O modo de high usa muitas box para alcançar maior precisão devido à sua baixa resolução de 0,5. Portanto, ele consome uma grande quantidade de espaço em disco, especialmente quando a tabela é muito grande. Além disso, é bastante pesado executar o UPDATE STATISTICS no sistema no modo high em produção que funciona continuamente. Além disso, o modo de high nem sempre garante uma estimativa perfeita uma vez que nenhum plano de execução é garantia de ser 100% melhor desde que o plano se baseia em uma estimativa.

Resolução e Confiança

Dois termos importantes para entender em relação ao update statistic que são resolução e confiança. A resolução é um número entre 0.005 e 10. Confiança é uma medida de equivalência entre as estimativas obtidas e os valores reais obtidos. É expressa como um valor entre 0,80 e 0,99. O ideal é que ele é necessário para a consulta para ter um valor alto confiança. A resolução padrão para o modo de alta é de 0,5 e, para o modo médio, é 2,5. A confiança padrão para o modo de high é de 0,99. Encontra-se entre 0,85 e 0,99 para o modo medium.

Histograma e o UPDATE STATISTICS

Informix utiliza histogramas para armazenar a informação de distribuição de dados. Os histogramas são usados ​​para calcular a seletividade dos predicados. Eles são comprovados para produzir estimativa de taxa baixa de erros e incorrer em quase nenhum run-time overhead.

Um histograma é usado para sintetizar graficamente e exibir a distribuição de um conjunto de dados do processo. O Informix utiliza histogramas de altura equilibrad (isto é, largura/altura) como range de transbordo, em oposição aos histogramas largura equilibrada. Tendo a altura em relação significa o mesmo número de valores em cada range é mantido. Dependendo dos valores, a gama é determinada, e um range representa uma gama. Abaixo está um exemplo de um histograma:
       ^
Número |
de     |
linhas |  altura constante
       +------------------------
       |
       |
       |
       |
    ---+------------------------
       | 5  25  29  77  118
       | range de valores
Suponha que há mil linhas em uma tabela. Se o número do range é fixada em 10, a proporção será de 1000-1010, assim existem 100 linhas em cada range. Esta 100 representa a altura. No caso de um histograma em relação altura, este valor (100) é fixo.

A distribuições de dados são gerados pelo servidor para colunas individuais de uma tabela, e são armazenados como histogramas encoded e coluna encdat do catálogo do sistema sysdistrib. O número padrão de caixas pode ser adequada se os dados são uniformemente distribuídas em todo o domínio de valores para essa coluna. No entanto, se os dados são altamente distorcidos, então são necessários um número maior de caixas (menor resolução) para garantir que os dados não é muito inclinada.

A mágica do UPDATE STATISTICS

Basicamente, sempre que o comando UPDATE STATISTICS é executado tanto no modo de alta ou média, dois tipos de caixas são criados, os distribution bin e o overflow bin. Cada entrada no bin é composto da seguinte maneira:

Distribuição bin
- Número de linhas no lixo;
- Número de valores distintos na bin;
- Maior valor de dados no lixo;
Overflow bin
- Valor dos dados
- Frequência de valor de dados
Ilustração

Agora, vamos considerar uma tabela de inventário que consiste em três colunas - item_num, customer_name e amount. Iremos realizar UPDATE STATISTICS na coluna item_num, em seguida, ver como as duas caixas são construídas.

Table 1. Inventory table
item_num customer_name amount
1         manoj         92.5
1         prasanna 43.75
1         bharath         90
1         ranjani         78.5
1         priya         23.5
1         radhika         126.75
1         vaibhav         75
1         harsha         300.50
1         vishwas         20
2         deepak         32.5
2         vinay         90
2         archit         65.20
2         vishnu         32.75
2         samir         48.3
2         ravi         49.5
3         srini         67.5
4         rahul         56.0
5         sudev         73.0
Para preencher a distribuição de dados, execute do UPDATE STATISTICS no modo de alta ou média. A informação no histograma pode ser recuperada a partir do utilitário Informix chamado dbschema invocando o seguinte comando:
$ Dbschema-d (dbname) -hd [(table)]
A listagem a seguir mostra a distribuição dos dados acima quando o update statistic é executado no modo médio com uma resolução de 10.

Listing 1. Distribution output
$ dbschema -d newdb -hd Inventory

DBSCHEMA Schema Utility INFORMIX-SQL Version 11.10.FC2
Copyright IBM Corporation 1996, 2006 All rights reserved
Software Serial Number AAA#B000000

{

Distribution for informix.Inventory.item_num

Constructed on 2007-11-09 04:47:00.00000

Medium Mode, 10.000000 Resolution, 0.950000 Confidence

--- DISTRIBUTION ---

    (                     1)
 1: (  2,   2,            4)
 2: (  1,   1,            5)

--- OVERFLOW ---

 1: ( 9,                 1)
 2: ( 6,                 2)

Definir o número de caixas

A fórmula para calcular o número de caixas é: 

100/resolution = número de caixas. 

Uma resolução de 1 significa que 1% dos dados entra em cada bin (100/1 = 100 caixas) 
A resolução de 10 significa que 10% das os dados vão para cada bin (10 caixas são criados).
Compreender a distribuição bin

O bin sempre começa com um número bin ou um identificador que é incrementado sequencialmente para cada linha. Cada fila tem três colunas associados. Todas as três colunas estão representadas com os parênteses. A primeira coluna indica o tamanho da caixa. A segunda coluna indica o número de elementos diferentes dentro do intervalo, e a terceira coluna indica os valores mais elevados dentro do range.

Por exemplo, pegando acima a saída da Distribuição em consideração, a primeira linha pode ser lida da seguinte forma:

- O tamanho bin = 2

- Existem dois elementos distintos entre o intervalo de 1 e 4. Você pode ver isso quando você olha para a tabela de inventário. Os dois valores distintos são 3 e 4. Um observador realmente interessado deve ter notado que os valores 1 e 2 não são levados em consideração. A contagem para este está incluído na caixa de overflow e não é para ser tomada em consideração para este bem.

- O intervalo é entre os valores 1 e 4.

Compreender o overflow bin

Como o bin de distribuição, a overflow bin também está representada em linhas. Cada linha começa com um identificador que é incrementado para cada linha. Existem apenas duas colunas nesta bin, cada um representado dentro do parêntese. A primeira coluna indica o número de vezes que o valor da segunda coluna é repetida. A segunda coluna especifica o próprio valor da coluna.

Por exemplo, na tabela acima, pode ser visto que o C1=1 é repetido 9 vezes e C1=2 é repetido 6 vezes. Note que apenas os valores de coluna que cruzam 25% do tamanho da bin são colocados na overflow bin. As contagens obtidas aqui são valores absolutos tiro certo que podem ser utilizados para as estimativas. NOTA : A saída do dbschema não pode ser comparado com o conceito regular de filas e colunas. Os termos de linhas e colunas aqui estão literalmente tomadas e não têm ligação com a concepção de linhas e colunas usadas em bancos de dados.

Ilustração de um plano de consulta

Considere duas tabelas, cliente e ordens . A tabela cliente tem a atributos customer_num , CEP e customer_name ; ordens tem o atributos customer_num , quantidade e item_num .

Abaixo está um exemplo de como um plano de consulta ficaria assim para a consulta:
select * from orders a, customer b where a.customer_num > 435 and b.zipcode > "65*" ;
Listing 2. SQEXPLAIN output
QUERY:
------
Completed pass 1 in 0 minutes 0 seconds

UPDATE STATISTICS:
==================

Table:          informix.customer
Mode:           HIGH
Number of Bins:      288        Bin size       11
Sort data            0.2 MB     Sort memory granted          0.2 MB
Estimated number of table scans 1
PASS #1 zipcode
Light scans enabled
Scan 0 Sort 0 Build 0 Insert 0 Close 0 Total 0
Completed pass 1 in 0 minutes 0 seconds
QUERY:
------
select * from orders a, customer b where a.customer_num > 435 and b.zipcode > "65*"

Estimated Cost: 9805
Estimated # of Rows Returned: 244530
Maximum Threads: 1

  1) informix.b: INDEX PATH

    (1) Index Keys: zipcode   (Parallel, fragments: ALL)
        Lower Index Filter: informix.b.zipcode > '65*'

  2) informix.a: INDEX PATH

    (1) Index Keys: customer_num   (Parallel, fragments: ALL)
        Lower Index Filter: informix.a.customer_num > 435
NESTED LOOP JOIN
Como seria se não existisse o UPDATE STATISTICS

Considere um cenário típico em que a importância de UPDATE STATISTICS pode ser demonstrada. Considere três tabelas, T1, T2 e T3. Suponha que eles têm 10, 100 e 1000 linhas, respectivamente. Agora, suponha que você tem que realizar uma operação 'EQUI-JOIN' em todas as três tabelas. O otimizador seria checaria o plano de consulta antes de realizar a própria operação de junção real, fazendo uso dos dados estatísticos. Você assume que esses dados estatísticos estão atualizados e continua seguir em frente.

Agora, quantas maneiras você pode executar esta operação participar? Como você sabe que T1*T2 não é o mesmo que T2*T1, que é uma questão simples de descobrir. Você tem três tabelas e, portanto, você teria essas forma 3!*2!*1! executar uma operação de junção. Isso é de 12 maneiras diferentes de fazê-lo. Para este exemplo, apenas 5 casos do 12 são usados.
Case 1 -- (T1 * T2) * T3 results in 1,011,010 row accesses.
Case 2 -- (T2 * T1) * T3 results in 1,101,100 row accesses.
Case 3 -- (T1 * T3) * T2 results in 1,011,010 row accesses.
Case 4 -- T1 * (T2 * T3) results in 1,001,010 row accesses.
Case 5 -- T3 * (T2 * T1) results in 1,011,000 row accesses.
Agora, suponha que havia um grande número de operações realizadas, e essas tabelas foram manipulados. O cenário atual resultaria em T1, T2 e T3 com 1000, 100 e 10, linhas respectivamente. Desde o UPDATE STATISTICS não é executado automaticamente, as tabelas de catálogo do sistema não seria atualizada e ainda estaria mantendo os dados estatísticos de data. Agora, você deve executar novamente a operação de junção por igualdade.

O otimizador escolhe Caso 4, uma vez que determinou que ela tem o número mínimo de acessos linha e, portanto, deve ser eficiente. Mas, o plano não produz o melhor resultado. De acordo com a situação atual, um plano eficiente seria usar Caso 5 - (T3 * (T2 * T1) - ao passo que o otimizador escolhe Caso 4 -. T1 * (T2 * T3) Isso resulta em uma linha extra enorme '9990' acessos. Este número pode crescer para trilhões para bancos de dados volumosos, o que reduz drasticamente a eficiência da consulta. Se você tivesse executado a instrução UPDATE STATISTICS, teria sido muito mais eficiente. Este exemplo mostra porque UPDATE STATISTICS tem de ser executado periodicamente. Resumindo tudo isso, use a instrução UPDATE STATISTICS para executar qualquer uma das seguintes tarefas:

- Calcula-se a distribuição dos valores da coluna.
- Atualizar as tabelas de catálogo do sistema que o servidor de banco de dados usa para otimizar as consultas.
- Força re-otimização de rotinas SPL.
- Converta índices existentes quando você atualizar o servidor de banco de dados.

Sintaxe de UPDATE STATISTICS

Versão 1: Para atualizar as estatísticas para todo o banco de dados
UPDATE STATISTICS (LOW | MEDIUM | HIGH);
Versão 2: Para atualizar as estatísticas para uma tabela específica em um banco de dados. Todas as colunas são atualizados neste caso.
UPDATE STATISTICS (LOW | MEDIUM | HIGH) FOR TABLE (table_name) ;
Versão 3: Para atualizar as estatísticas para uma determinada coluna de uma tabela específica em um banco de dados.
UPDATE STATISTICS (LOW | MEDIUM | HIGH) FOR TABLE (table_name) (column_name);
Versão 4: Para atualizar as estatísticas para um procedimento armazenado em um banco de dados.
UPDATE STATISTICS (LOW | MEDIUM | HIGH) FOR PROCEDURE;
Versão 5: Para executar UPDATE STATISTICS, definindo a sua própria resolução.
UPDATE STATISTICS (LOW | MEDIUM | HIGH) FOR TABLE (table_name) RESOLUTION 10;
O comando UPDATE STATISTICS não é executada automaticamente. É de responsabilidade do usuário para executar esta declaração manualmente. Este comando deve ser executado periodicamente para que o otimizador tem os mais recentes dados com ele para chegar a um plano eficaz para buscar os dados. Idealmente, é preferido para executar esta indicação quando um volume de dados é manipulado na base de dados. Por padrão, o UPDATE STATISTICS é executado no modo de baixo. Neste modo, as distribuições de dados não são gerados. Nunca use o modo de alta para um banco de dados inteiro ou todas as tabelas em um banco de dados ou até mesmo todas as colunas de uma tabela, a menos que o banco de dados ou as tabelas são de um tamanho consideravelmente menor. Link

Remmina - Conexão Remota - Linux Mint


Remmina é uma aplicação de desktop remoto, um software e livre coberta pela licença GNU GPL, escrito em C e GTK+, e disponível apenas para sistemas baseados em Unix/Linux. É muito útil para administradores de sistemas e para aqueles que precisam acessar computadores remotos.

O Remmina suporta vários protocolos de rede em uma interface integrada e consistente, no momento em que os protocolos RDP, VNC, NX, SPICE, XDMCP e SSH são suportados. Adicionalmente, você pode instalar os plugins Remmina: RDP, VNC, NX, XDMCP, SSH e Telepathy.

Principais características do Remmina:

  • Permite manter uma lista de perfis de conexão, organizados por grupos;
  • Permite fazer conexões rápidas colocando diretamente o endereço do servidor;
  • Os desktops remotos com resoluções mais elevadas são roláveis​/escaláveis ​​na janela e no modo de tela cheia;
  • Modo de tela cheia View-port: a área de trabalho remota rola automaticamente quando o mouse se move sobre a borda da tela;
  • Barra de ferramentas flutuante no modo de tela cheia, permite alternar entre os modos, ativar o teclado, minimizar, etc;
  • Interface com guias, opcionalmente gerenciada por grupos;
  • Ícone da bandeja, permite acessar rapidamente perfis de conexão configurados.
  • Para instalar no Ubuntu, Linux Mint, Elementary OS e Deivados, execute:
    $ sudo apt-add-repository ppa:remmina-ppa-team/remmina-next 
    $ sudo apt-get update 
    $ sudo apt-get install remmina remmina-plugin-rdp libfreerdp-plugins-standard
    Telas de instalação no Linux Mint.









11/01/2019

Recuperação de Arquivos Deletados


DiskDigger é um software para Windows e Android que permite recuperar arquivos diversos no computador, que foram deletados do disco rígido ou de um pendrive, por exemplo. O processo de recuperação é fácil e dura apenas alguns minutos – dependendo do tamanho da unidade scaneada.

Passo 0. Escolher o idioma que vamos usar o programa;



Passo 1. Com o DiskDigger no seu computador – não requer nem mesmo instalação – abra o programa e selecione o disco que será analisado para recuperação posterior de arquivos. Clique no botão “Seguinte”;



Passo 2. Escolha entre “Pesquisa funda” e “Pesquisa avançada”. O primeiro recupera arquivos deletados, o segundo faz isso e também procura por vestígios de antigos arquivos, os “arquivos mortos”, que não servem para nada e só ocupam espaço – este segundo, porém, leva mais tempo. Em seguida, clique em “Seguinte”;



Passo 3. Aguarde o processo de pesquisa. O tempo varia de acordo com o tamanho da unidade escolhida para ser pesquisada;



Passo 4. Ao final, o programa vai exibir quantos arquivos foram encontrados, clique em “Ok”;



Passo 5. Escolha o arquivo que você deseja recuperar e clique em “Guardar ficheiros selecionados” para salvá-lo novamente no computador;







SIM



Arquivo recuperado



Abrindo o arquivo

Migrando Dados do SQL Server para o MySQL


Este artigo mostra como usar o programa ESF Database Migration Toolkit migrar rapidamente dados do SQL Server para o MySQL! Ajudá-lo a resolver tarefas complexas e economizar muito tempo!

Requisitos:
Download - ESF Database Migration Toolkit.
Windows 7 ou superior.
SQL Server 6.5 ou superior.
MySQL 3.23 ou superior.
Introdução:

1. Na caixa de diálogo (Choose a Data Source) "Escolha uma fonte de dados", escolha "Microsoft SQL Server";

  • Digite o nome do host do SQL Server (você também pode adicionar um nome de instância). por exemplo: localhost\sqlexpress.
  • Se estiver usando o método TCP/IP, insira a porta do servidor (o padrão é 0 e use o método pipe). Além disso, você precisará fornecer um nome de usuário (por exemplo: sa) e senha.
  • Marque a caixa de seleção (Windows Authentication) "Autenticação do Windows" se estiver usando a autenticação do Windows.
  • Pressione o botão (Refresh Database) "Atualizar banco de dados" para listar todos os bancos de dados, selecione um banco de dados existente ou insira um novo nome de banco de dados; este kit de ferramentas criará automaticamente o novo banco de dados durante o processo de migração.
  • Pressione o botão (Refresh Schema) "Atualizar esquema" para listar todos os esquemas, você pode selecionar um esquema existente ou inserir um novo nome de esquema.

Este kit de ferramentas criará automaticamente o novo esquema durante o processo de migração. Se você deixá-lo vazio, o padrão é "dbo".



2. Na caixa de diálogo (Choose a Destination) "Escolha um destino", escolha "MySQL";

  • Digite o nome do servidor (padrão: localhost), porta (padrão: 3306), nome de usuário e senha.
  • MySQL suportando alguns mecanismos de armazenamento diferentes, clique aqui para obter mais informações sobre o MySQL Storage Engine.
  • Escolha um conjunto de caracteres, por exemplo: UTF-8.
  • Pressione o botão (Refresh) "Atualizar" para listar toda a automação de bancos de dados MySQL, você pode escolher um banco de dados existente ou inserir um novo nome de banco de dados; este kit de ferramentas cria automaticamente o novo banco de dados durante o processo de migração.



3. Na caixa de diálogo "Select source Tables(s) & View(s)";

Selecione as tabelas/visualizações que serão migradas.



Clique em "..." para definir as opções da tabela ou remapear a estrutura da tabela.



Você pode definir o método de transferência de dados (Overwrite Table/Empty Data/Append Data/Skip Table) traduzindo (Substituir tabela/Dados vazios/Anexar dados/Ignorar tabela) ou filtrar os dados antes da transferência.

Escolha a opção (Field Mapping) "Mapeamento de campos", você pode redefinir os campos na tabela de destino, por exemplo: nome do campo, tipo de dados, valor padrão, comentário e também.

4. Na caixa de diálogo (Execution) "Execução";

Clique em (Submit) "Enviar" para iniciar a migração. Este kit de ferramentas o ajudará a migrar rapidamente dados do SQL Server para o MySQL sem intervenção.



  • Clique em "Browse Log" para acessar o log de migração completo.
  • Clique em (Save as job) "Salvar como trabalho" para salvar as configurações de migração em um arquivo de trabalho, para que você possa "Carregar trabalho" para recarregar rapidamente o trabalho de migração no futuro ou executar o trabalho de migração via prompt de comando. Execute "esf-cmd --help" no prompt de comando para obter os parâmetros completos do comando.

5. Terminado!

O programa concluirá a migração o mais rápido possível e gerará um relatório de migração para você. Tudo o que você precisa fazer é sentar e esperar.