Os caracteres acentuados são mostrados com interrogação.

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
Avatar do usuário
wbarrence
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 55
Registrado em: Qui, 06 Out 2011 10:30 am
Localização: SP
--
WABS

Olá Pessoal,

Eu fiz uma carga de dados através do SQL*Loader, de um esquema para outro (no mesmo banco), no esquema de origem os caracteres acentuados são mostrados corretamente, mas no esquema de destino os caracteres acentuados são mostrados com pontos de interrogação ao invés dos acentos.

Alguém sabe me informar porque isso acontece???

Att,
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Oi Wbarrence !

Pode se tratar da configuração de NLS (idioma) na sessão corrente que você está usando para executar o SQL*LOADER.

Alguns pontos para você refletir:

- Você está rodando o SQLLOADER no servidor de banco de dados ou na sua máquina local?
- O SQLLOADER precisa de um arquivo texto com os dados. Entendo que de alguma forma você gerou os dados do schema de origem em um arquivo texto. Você chegou a abrir o arquivo TXT gerado, com os dados do "schema normal"?
- A acentuação das palavras no arquivo texto estão OK?
- O local onde as operações de UNLOAD e o LOADER são exatamente os mesmos? Ou seja, você executa tudo em uma mesma máquina?

Sugiro o seguinte plano de ação:

A)Conecte-se na máquina onde está executando o SQL*LOADER;
B) Abra uma sessão de SQL*PLUS (tem que ser o SQL*PLUS) com o usuário de banco que você está usando no SQL*LOADER;
C) Execute o comando

Selecionar tudo

SELECT * FROM NLS_SESSION_PARAMETERS;
Analise então o resultado do comando acima. Se indicar que NLS_LANGUAGE é diferente de BRAZILIAN (ex: AMERICAN ENGLISH), pode ser que este seja o motivo de seus caracteres acentuados não serem reconhecidos.

Você então precisa configurar a sessão de banco de dados para que esta funcione sempre com o idioma português. Você poderia - por exemplo - criar uma TRIGGER de LOGON para o schema de destino, que executaria um

Selecionar tudo

ALTER SESSION SET NLS_LANGUAGE='BRAZILIAN PORTUGUESE' 
Isso iria assegurar que independente do client onde você executar o SQLLOADER, ele sempre adotará este idioma na sessão que for aberta.

Não sei se consegui esclarecer sua dúvida. Por favor, fique à vontade para postar outras dúvidas, se não for este o caso.

Abraços,

Sergio Coutinho
marlonsc
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 28 Ago 2012 4:33 pm
Localização: São Paulo
Contato:

Use variáveis de ambiente NLS_LANG para configurar corretamente, pois ele deve estar entrando como ASCII (7 bits), use export para Linux e set para Windows.

Se o dado de entrada estiver codificado em ambiente Windows:

Selecionar tudo

export/set NLS_LANG='AMERICAN_AMERICA.WE8MSWIN1252'
Em ISO-8859-P1 (Unix):

Selecionar tudo

export/set NLS_LANG='AMERICAN_AMERICA.WE8ISO8859P1'
Em UTF-8:

Selecionar tudo

export/set NLS_LANG='AMERICAN_AMERICA.AL32UTF8'
Sds,

Marlon Costa
http://www.marlonscdba.com
Avatar do usuário
fbifabio
Moderador
Moderador
Mensagens: 199
Registrado em: Ter, 22 Fev 2011 1:51 pm
Localização: São Paulo - SP
Contato:
Fábio Prado
www.fabioprado.net

Também é possível especificar o character set dentro do arquivo de controle do sql loader. Veja exemplo no artigo abaixo:

http://www.fabioprado.net/2010/10/carga ... o-sql.html

[]s
Fábio Prado
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 10 visitantes