Que delimitador usar - Informix
Nesse artigo, o objetivo é apresentar uma sugestão envolvendo o problema de descobrir que delimitador usar em uma tabela do informix que parece que usa todos as letras/símbolos, vamos descobrir qual é a letra/simbolo que na tabela do informix menos usa, o backup é de uma tabela do Informix e restauração vai ser no SQL Server 2014.
Umas das soluções foi pesquisar no arquivo do backup da tabela do Informix e ver se tem alguma letra/simbolo disponivel, primeiro vamos preparar o script que vamos rodar o backup da tabela - o backup via external tables que é o backup mais rápido aqui pra mim;
Criar este script com o nome backup_script.sql
#!/bin/sh
###############################################################################
# Script para backup de tabelas via EXTERNAL TABLES #
# Criado Por Claudemar Martins de Sa #
# Uso: backup_script.sh [DATABASE] [TABELA] #
# Rodar: ./backup_script.sql nome_do_banco nome_da_tabela #
###############################################################################
DATABASE=${1}
TABLE=${2}
dbaccess ${DATABASE} >/dev/null << EOF
set pdqpriority 30;
CREATE EXTERNAL TABLE informix.bkp_${TABLE}
SAMEAS ${TABLE}
USING
(DATAFILES ("DISK:/export/home/informix/backup/${TABLE}.unl"),
FORMAT 'DELIMITED',
DELIMITER '',
RECORDEND '',
Deluxe,
NUMROWS 50,
MAXERRORS 50,
REJECTFILE ''
);
insert into bkp_${TABLE}
select * from ${TABLE};
drop table bkp_${TABLE}
EOF
Rodando o backup da tabela sem o delimitador - rodamos assim - ./nome_do_script nome_do_banco nome_da_tabela
./backup_script.sql faz_sgf notes_rel_baixa
Database selected.
PDQ Priority set.
Table created.
9992 row(s) inserted.
Table dropped.
Database closed.
Script que vamos analisar o backup e ver se tem alguma letra que podemos usar como delimitador
Criar este script com o nome delimitador.sql
# :%s/antes/nova/g
TABLE=${1}
echo "q - $(cat $TABLE | grep '\q' | wc -l)" ;
echo "w - $(cat $TABLE | grep '\w' | wc -l)" ;
echo "e - $(cat $TABLE | grep '\e' | wc -l)" ;
echo "r - $(cat $TABLE | grep '\r' | wc -l)" ;
echo "t - $(cat $TABLE | grep '\t' | wc -l)" ;
echo "y - $(cat $TABLE | grep '\y' | wc -l)" ;
echo "u - $(cat $TABLE | grep '\u' | wc -l)" ;
echo "i - $(cat $TABLE | grep '\i' | wc -l)" ;
echo "o - $(cat $TABLE | grep '\o' | wc -l)" ;
echo "p - $(cat $TABLE | grep '\p' | wc -l)" ;
echo "a - $(cat $TABLE | grep '\a' | wc -l)" ;
echo "s - $(cat $TABLE | grep '\s' | wc -l)" ;
echo "d - $(cat $TABLE | grep '\d' | wc -l)" ;
echo "f - $(cat $TABLE | grep '\f' | wc -l)" ;
echo "g - $(cat $TABLE | grep '\g' | wc -l)" ;
echo "h - $(cat $TABLE | grep '\h' | wc -l)" ;
echo "k - $(cat $TABLE | grep '\k' | wc -l)" ;
echo "l - $(cat $TABLE | grep '\l' | wc -l)" ;
echo "z - $(cat $TABLE | grep '\z' | wc -l)" ;
echo "x - $(cat $TABLE | grep '\x' | wc -l)" ;
echo "c - $(cat $TABLE | grep '\c' | wc -l)" ;
echo "v - $(cat $TABLE | grep '\v' | wc -l)" ;
echo "b - $(cat $TABLE | grep '\b' | wc -l)" ;
echo "n - $(cat $TABLE | grep '\n' | wc -l)" ;
echo "m - $(cat $TABLE | grep '\m' | wc -l)" ;
echo ", - $(cat $TABLE | grep '\,' | wc -l)" ;
echo ". - $(cat $TABLE | grep '\.' | wc -l)" ;
echo "; - $(cat $TABLE | grep '\;' | wc -l)" ;
echo "! - $(cat $TABLE | grep '\!' | wc -l)" ;
echo "@ - $(cat $TABLE | grep '\@' | wc -l)" ;
echo "# - $(cat $TABLE | grep '\#' | wc -l)" ;
echo "$ - $(cat $TABLE | grep '\$' | wc -l)" ;
echo "% - $(cat $TABLE | grep '\%' | wc -l)" ;
echo "& - $(cat $TABLE | grep '\&' | wc -l)" ;
echo "* - $(cat $TABLE | grep '\*' | wc -l)" ;
echo "( - $(cat $TABLE | grep '(' | wc -l)" ;
echo ") - $(cat $TABLE | grep ')' | wc -l)" ;
echo "_ - $(cat $TABLE | grep '\_' | wc -l)" ;
echo "- - $(cat $TABLE | grep '\-' | wc -l)" ;
echo "+ - $(cat $TABLE | grep '\+' | wc -l)" ;
echo "| - $(cat $TABLE | grep '\|' | wc -l)" ;
echo "~ - $(cat $TABLE | grep '\~' | wc -l)" ;
echo "? - $(cat $TABLE | grep '\?' | wc -l)" ;
echo "[ - $(cat $TABLE | grep '\[' | wc -l)" ;
echo "] - $(cat $TABLE | grep '\]' | wc -l)" ;
echo "< - $(cat $TABLE | grep '\<' | wc -l)" ;
echo "> - $(cat $TABLE | grep '\>' | wc -l)" ;
echo "{ - $(cat $TABLE | grep '\{' | wc -l)" ;
echo "} - $(cat $TABLE | grep '\}' | wc -l)" ;
echo -n '" - '
cat $TABLE | grep '"' | wc -l
Rodando o programa para descobrir que letra não existe no arquivo de backup da tabela, reparem o { não tem - vou usar ele como delimitador
./delimitador.sh notes_rel_baixa.unl
q - 8079
w - 24779
e - 19215
r - 19246
t - 17554
y - 11
u - 17609
i - 17987
o - 19566
p - 14714
a - 18981
s - 18458
d - 18332
f - 13783
g - 10093
h - 6551
k - 136
l - 18383
z - 4793
x - 8326
c - 16933
v - 13901
b - 24779
n - 19679
m - 16356
, - 13836
. - 20762
; - 1238
! - 7
@ - 1
# - 0
$ - 1364
% - 228
& - 21
* - 19
( - 1832
) - 2457
_ - 6
- - 18013
+ - 30
| - 47306
~ - 5
? - 7
[ - 1
] - 4
< - 24779
> - 24779
{ - 0
} - 1
" - 233
Alterando o arquivo de backup e colocando a letra { como delimitador
#!/bin/sh
###############################################################################
# Script para backup de tabelas via EXTERNAL TABLES #
# Criado Por Claudemar Martins de Sa #
# Uso: backup_script.sh [DATABASE] [TABELA] #
# Rodar: ./backup_script.sql nome_do_banco nome_da_tabela #
###############################################################################
DATABASE=${1}
TABLE=${2}
dbaccess ${DATABASE} >/dev/null << EOF
set pdqpriority 30;
CREATE EXTERNAL TABLE informix.bkp_${TABLE}
SAMEAS ${TABLE}
USING
(DATAFILES ("DISK:/export/home/informix/backup/${TABLE}.unl"),
FORMAT 'DELIMITED',
DELIMITER '{',
RECORDEND '',
Deluxe,
NUMROWS 50,
MAXERRORS 50,
REJECTFILE ''
);
insert into bkp_${TABLE}
select * from ${TABLE};
drop table bkp_${TABLE}
EOF
Rodando o backup da tabela no Informix
./backup_script.sql faz_sgf notes_rel_baixa
Database selected.
PDQ Priority set.
Table created.
9992 row(s) inserted.
Table dropped.
Database closed.
Criando a tabela no SQL Server 2014 igual como esta no Informix
use faz_sgf;
create table "dbo".notes_rel_baixa
(
osn_codigo integer not null ,
rel_versao integer not null ,
inscricaoestadual decimal(14,0) not null ,
baixa_dt_ini_fisc datetime2,
baixa_dt_fin_fisc datetime2,
baixa_folha varchar(10),
baixa_rudfto varchar(8),
baixa_dt_conclusao datetime2,
baixa_descritivo text,
baixa_altcadastral text,
baixa_versaosf varchar(1,1),
baixa_sit_aprovacao integer not null ,
usr_codigo_criacao integer not null ,
usr_dt_hr_criacao datetime2 ,
usr_codigo_alter integer,
usr_dt_hr_alter datetime2,
primary key (osn_codigo,rel_versao,inscricaoestadual)
);
O utilitário bcp é uma ferramenta de linha de comandos que usa a API do BCP (Programa de cópia em massa).
bcp bdfaz_faz_sgf.dbo.notes_rel_baixa format nul -c -f D:\Usuários\faz_sgf\notes_rel_baixa.fmt -T -S s905\itc005 -t "{"
Ficou assim;
11.0
16
1 SQLCHAR 0 12 "{" 1 osn_codigo ""
2 SQLCHAR 0 12 "{" 2 rel_versao ""
3 SQLCHAR 0 41 "{" 3 inscricaoestadual ""
4 SQLCHAR 0 30 "{" 4 baixa_dt_ini_fisc ""
5 SQLCHAR 0 30 "{" 5 baixa_dt_fin_fisc ""
6 SQLCHAR 0 10 "{" 6 baixa_folha SQL_Latin1_General_CP1_CI_AS
7 SQLCHAR 0 8 "{" 7 baixa_rudfto SQL_Latin1_General_CP1_CI_AS
8 SQLCHAR 0 30 "{" 8 baixa_dt_conclusao ""
9 SQLCHAR 0 0 "{" 9 baixa_descritivo SQL_Latin1_General_CP1_CI_AS
10 SQLCHAR 0 0 "{" 10 baixa_altcadastral SQL_Latin1_General_CP1_CI_AS
11 SQLCHAR 0 1 "{" 11 baixa_versaosf SQL_Latin1_General_CP1_CI_AS
12 SQLCHAR 0 12 "{" 12 baixa_sit_aprovacao ""
13 SQLCHAR 0 12 "{" 13 usr_codigo_criacao ""
14 SQLCHAR 0 30 "{" 14 usr_dt_hr_criacao ""
15 SQLCHAR 0 12 "{" 15 usr_codigo_alter ""
16 SQLCHAR 0 30 "{\n" 16 usr_dt_hr_alter ""
Coloco no servidor SQL Server os arquivos de bcp e o arquivo de backup da tabela no Informix - rodando este comando;
use faz_sgf;
BULK INSERT notes_rel_baixa --- delimitador ({)
FROM 'I:\data\bdfaz\carga_claudemar\faz_sgf\notes_rel_baixa.unl' -- unload
WITH (FORMATFILE = 'I:\data\bdfaz\carga_claudemar\faz_sgf\notes_rel_baixa.fmt'); -- bcp
Terminou ok a importação no SQL Server
(9992 row(s) affected)
0 comentários:
Enviar um comentário