Compartilhando conhecimento com o mundo

Com tecnologia do Blogger.

Pesquisa

Download

Blogger Tricks

Blogger Themes

Visitas

Assuntos

4/23/2014

Archecker - Restauração em nível de tabela - Informix


Informix tem um recurso chamado Table-Level Restore (traduzindo seria Restauração em Nivel de Tabela) que me permite extrair apenas as linhas das tabelas que queremos a partir de um backup. Sem esse recurso teríamos que fazer uma restauração completa do dbspace em um outro banco de teste, que pode levar horas, e depois extrair as linhas da instância restaurada. Você pode usar a Table-Level Restore (TLR) para extrair uma tabela inteira ou um subconjunto de linhas em uma tabela a partir de seus backups.

Restauração Física (Physical Restore)

Se você não tem os logs lógicos do backup ou apenas deseja restaurar os dados para o momento do archive nivel 0, então você vai estar realizando uma restauração física (physical restore).

Restauração Lógica (Logical Restore)

Se você tiver os logs lógicos e deseja restaurar uma tabela em um ponto no tempo, então você vai estar realizando uma restauração logica. Isso é ótimo porque se alguém cometer um erro, você pode retornar os dados para o estado em que estava imediatamente antes do erro foi cometido pelo usuário. A restauração lógica é realizada primeira pelo TLR ao restaurar um physical restore e, em seguida, passa os logs lógicos convertendo os registros de log para instruções SQL que são aplicadas aos dados do physical restore. A restauração lógica não pode processar as mudanças que existem no log lógico atual. Se você precisar restaurar a um ponto no tempo que está contido no registro atual, você pode dar o comando para mudar para começar a salvar o log lógico em um outro log, usando o comando comando onmode -l.

Arquivo de Comando do Esquema

Aqui é onde a mágica acontece. Neste arquivo você irá definir a o nome da(s) tabela(s) de origem que você deseja restaurar, o nome nome dessa(s) tabela(s) de destino vão ficar é nele que você coloca o ponto no tempo para restaurar, o arquivo de comando de esquema contém:

SET - A instruções que permiti que certas características do TLR;
DATABASE - É para declarar o nome do banco de dados que estamos pegando os dados do backup;
CREATE TABLE - Para definir a estrutura da tabela que estamos restaurando;
INSERT INTO - Define qual tabela é a fonte e a tabela de destino, opcionalmente, quais linhas queremos restaurar;
RESTORE - Define se este é uma restauração físico ou lógico e que se desejamos restaurar a um ponto no tempo;

Configurando o Arquivo de Esquema

SET - A instrução é opcional e pode alterar o intervalo onde o padrão é de 1000 para definir o número de linhas que são inseridos durante o físico restaurar entre commits. A instrução SET também pode ser usado para alterar o dbspace trabalhar a partir do padrão de rootdbs.
set commit to 10000;
set workspace to dbspace001;
DATABASE - Define qual banco estamos trabalhando
database nome_do_banco;
CREATE TABLE - define a estrutura da tabela de origem e os dbspaces das partições em que ela esta e define a estrutura da tabela de destino. A definição da tabela de origem deve ser idêntico à forma como a tabela existe no backup. A definição da tabela alvo apenas precisa conter as colunas que deseja restaurar. Se a tabela de destino não existir, ela será criada durante a restauração.
-- Tabela de origem vive em 2 partições em dois dbspaces
create table source_table_name (
   column1           integer,
   column2           float,
   column3           char(17)
) fragment by expression
   partition p1 (column1 < 50) in dbspace001,
   partition p2 (column1 >= 50) in dbspace002;
--
-- Tabela de destino - Onde vamos salvar os dados da tabela fonte
-- Neste exemplo, a tabela tem apenas Column1 e column2 porque aqueles 
-- São as únicas colunas a serem restaurados
--
create table target_table_name (
   column1            integer,
   column2            float
) in dbspace001;
INSERT INTO vai definir a tabela de origem (a tabela que vamos pegar do backup) e a tabela de destino (a tabela que estamos inserindo). Esta declaração pode, opcionalmente, definir as colunas que deseja restaurar (como quero restaurar tudo vou colocar *).
insert into target_table_name  -- identifies target table
select 
   column1,                    -- identifies the columns we
   column2                     -- want to restore
from
   source_table_name           -- identifies the source table
where
   column1 between 30 and 100; -- identifies the rows to restore
RESTORE vai identificar se vamos usar o logical log na nossa restauração
--
-- physical restore - Não quero restaurar os logs - quero somente os dados da tabela do backup
-- restore to current with no log;
--
-- logical restore - Vou restaurar os dados até a uma determinada hora
--
restore to "2014-12-10 04:32:00";
Rodando um TLR com o Utilitário Archecker

Você pode executar o comando archecker a nível de tabela para restaurar em três etapas distintas:

- Physical Restore da tabela do archive de nível 0;
- a Staging dos registros de log a ser aplicada à tabela;
- a Application dos registros de log/transações encenadas para a tabela restaurada;

Você pode querer restaurar em etapas para depurar um nível de tabela e resolver o problema.
Para restaurar em etapas, você deve estar restaurando registros - ou seja, a restauração por etapas não é compatível com o uso do "restore to current with no log;" na declaração no arquivo de comando do esquema.
Este utilitário dá para restaurar de backups feitos pelo ontape e onbar uma tabela somente;

Opções de restauração
archecker (-t|-b) (-s)(-v)(-X)(-d)(-D) (-f (arquivo)) (-l phys,stage,apply)
Detalhes
-t  Restaurar backup realizado com o ontape;
-b  Restaurar backup realizado com o onbar;
-s  Imprime status da execução;
-v  Imprime status em modo mais detalhado
-X  Define que a execução é uma restauração de tabela e deverá ler o schema file definido no parâmetro
    AC_SCHEMA (se o parâmetro -f não for especificado);
-d  Antes da execução remove os dados já existentes (AC_STORAGE);
-D  Idem ao -d porém também limpa as tabelas no banco sysutil quando especificado com o parâmetro -X;
-f  Especifica o schema file, sobreponto o parâmetro AC_SCHEMA
Usando os Logs

-l Define qual nível de restauração será feita, onde pode ser especificado uma ou mais opções separados por virgula, se não informado este parâmetro é considerado as três fases:
* phys : restauração física;
* stage: Passo intermediário onde identifica as transações do logical log e salva as
         informações no banco sysutils;
* apply: Aplica as alterações do Logical Log.
Este parâmetro sobrepões o comando RESTORE no schema file

Rodando o Archecker

Opções que vamos usar para restaurar
archecker -bdvs -X -f your_schema.cmd
           ||||  |  |
           ||||  |  |
           ||||  |  +--- Nome do arquivo schema
           ||||  +------ Define que a execução é uma restauração de tabela e deverá ler o schema;
           |||+--------- Imprime status da execução
           ||+---------- Imprime status em modo mais detalhado
           |+----------- Antes da execução remove os dados já existentes (AC_STORAGE)
           +------------ Restaurar backup realizado com o onbar
Rodando;
archecker -bdvs -X -f your_schema.cmd

IBM Informix Dynamic Server Version 11.50.FC6W4
Program Name:   archecker
Version:        8.0
Released:       2010-04-26 22:13:21
CSDK:           IBM Informix CSDK Version 3.50
ESQL:           IBM Informix-ESQL Version 3.50.FC4
Compiled:       04/26/10 22:13  on Linux 2.6.9-34.ELsmp #1 SMP Fri Feb 24 16:56:28 EST 2006

AC_STORAGE               /tmp
AC_MSGPATH               /tmp/ac_msg.log
AC_VERBOSE               on
AC_TAPEBLOCK             62 KB
AC_IXBAR                 /opt/informix/etc/ixbar.0
Dropping old log control tables
Extracting table database_name:source_table_name into database_name:target_table_name
........................................
........................................
........................................
.........................
Scan PASSED
Control page checks PASSED
Table checks PASSED
Table extraction commands 1
Tables found on archive 1
LOADED: st_switch:scuvr_dnis_restore produced 171721 rows.
Creating log control tables
Staging Log 18013
Staging Log 18014
Switching to log 18014
Staging Log 18015
Switching to log 18015
Staging Log 18016
Switching to log 18016
Staging Log 18017
Switching to log 18017

Logically recovered database_name:target_table_name Inserted 120 Deleted 79 Updated 38
Exemplo ARCHECKER 1

Este exemplo pega do backup os dados de uma tabela e restaura em outra - não usa log;
database fronteiras;
--
-- SOURCE Table
--
CREATE TABLE 'dba'.cep
(
    cep_numero char(8) not null ,
    mun_nome varchar(60,1) not null ,
    ufe_codigo char(2) not null ,
    cep_situacao char(1),
    primary key (cep_numero)
);
--
-- TARGET Table
--
CREATE TABLE 'dba'.cep_table_recuperada
(
    cep_numero char(8) not null ,
    mun_nome varchar(60,1) not null ,
    ufe_codigo char(2) not null ,
    cep_situacao char(1),
    primary key (cep_numero)
);
INSERT INTO 'dba'.cep_table_recuperada SELECT * FROM cep;
restore to current with no log ;
Exemplo ARCHECKER 2

Neste exemplo vamos restaurar duas tabelas de uma vez - não usa log;
database stores7;

-- SOURCE Table
create table customer (
  customer_num serial,
  …
  phone char(18)
) in rootdbs ;

-- Second SOURCE Table
create table orders(
  order_num serial,  
  …
  paid_date date
) in rootdbs ;

insert into orders select * from orders;
insert into customer select * from customer;

restore to current with no log ;
Exemplo ARCHECKER 3

Vamos pegar os dados da tabela customer e carregar ela em duas outras tabelas - não usa log
database stores7;

-- SOURCE Table
create table customer (
  customer_num serial,
  …
  phone char(18)
) in rootdbs ;

-- CA TARGET Table
create table customer_california(
  customer_num serial,
  …
  phone char(18)
) in rootdbs ;

-- NJ TARGET Table
create table customer_nj (
  customer_num serial,
  …
  phone char(18)
) in rootdbs ;

insert into customer_california
  select * from customer
    where state = "CA";
insert into customer_newjersey
  select * from customer
    where state = "NJ";

restore to current with no log
Exemplo ARCHECKER 4

Restaura a tabela do banco de dados stores7 para a mesma tabela. Se a tabela existir, as linhas serão acrescentados. Se a tabela não existe, ele é criado. Os registros serão aplicadas durante a restauração lógica - usa o log até a hora corrente
database stores7;

-- SOURCE and TARGET Table

create table customer (
  customer_num serial not null ,
  fname char(15),
  lname char(15),
  company char(20),
  address1 char(20),
  address2 char(20),
  city char(15),
  state char(2),
  zipcode char(5),
  phone char(18)
) in rootdbs ;
insert into customer
  select * from customer;

restore to current;
Exemplo ARCHECKER 5

Restaura a tabela cliente no banco de dados stores7 ao customer_california tabelas no banco de dados e customer_nj stores7 - não usa log;
database stores7;

-- SOURCE Table
create table customer (
  customer_num serial,
  …
  phone char(18)
) in rootdbs ;

-- CA TARGET Table
create table customer_california(
  customer_num serial,
  …
  phone char(18)
) in rootdbs ;

-- NJ TARGET Table
create table customer_nj (
  customer_num serial,
  …
  phone char(18)
) in rootdbs ;

insert into customer_california
  select * from customer
    where state = "CA";
insert into customer_newjersey
  select * from customer
    where state = "NJ";

restore to current with no log;
Exemplo ARCHECKER 6

Restaura a tabela cliente no banco de dados stores7 ao customer_file tabela externa, que é na verdade um arquivo chamado customer.unl. Este arquivo será um ASCII delimitado arquivo com o símbolo pipe ("|") - não usa log
database stores7;

-- SOURCE Table
create table customer (
  customer_num serial,
  …
  phone char(18)
) in rootdbs ;

-- TARGET Table
create external table customer_frag (
  customer_num serial,
  …
  phone char(18)
) using ( "customer.unl", DELIMITED );

insert into customer_file
  select * from customer;

restore to current with no log ;
Exemplo ARCHECKER 7

Restaura a tabela cliente no banco de dados stores7 para a mesma tabela no banco de dados stores7. Os logs lógicos serão aplicadas durante uma restauração lógica de parar no tempo especificado.
database stores7;  

-- SOURCE and TARGET Table
create table customer (
  customer_num serial not null ,
  …
  phone char(18)
) in rootdbs ;

insert into customer
  select * from customer;

restore to '2006-05-08 02:00:00';
Clique Aqui

4/16/2014

Monitoramento de AF no Informix


Todos os dias faço vários checagens, como:

- O banco tem espaço livre disponível;
- O backup rodou ok;
- Deu alguma mensagem no log do Informix;
- Entre outras checagens;

Um dia um dba pode estar com tantas tarefas que alguma coisa passa, para ajudar a fazer esta checagem criei um script que monitora os erros do informix mais conhecidos como AF (Assert Failed), bem facil, ocorrendo o AF recebo um e-mail todos os dias as 05 horas (pois coloquei para rodar na crontab, primeiro vou colocar o resultado que vou receber pelo e-mail;
Ocoreu um AF no servidor XXXX, favor checar o mais rapido possivel;
  
01/30/14 07:44:36  stack trace for pid 18829 written to /opt/informix64/tmp/af.6582d14
01/30/14 07:44:36   See Also: /opt/informix64/tmp/af.6582d14
01/30/14 07:46:02  stack trace for pid 18829 written to /opt/informix64/tmp/af.6582d14
01/30/14 07:46:02   See Also: /opt/informix64/tmp/af.6582d14
04/16/14 07:44:36  stack trace for pid 18829 written to /opt/informix64/tmp/af.6582d14
  
Campo Grande 16/04/2014 14:12:15
Download do Script Shell Completo - Clique Aqui