- Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 14 anos, 2 meses atrás por
rman.
-
AutorPosts
-
20 de dezembro de 2011 às 10:58 pm #102276
PR0G
ParticipanteSeguinte estou com uma situação onde já procurei e não achei quase nada, pois meu problema (acho) não é character set. E tudo que acho é csalter, csscan e coisas para mudar de charset…
Desde a instalação está WE8ISO8859P1. E não pretendo/preciso mudar (acho).
Na instalação, como o S.O estava em inglês, o banco pegou por default NLS_LANGUAGE = AMERICAN. Blz, nem pensei nisso na hora.
No dia a dia, depois de algumas incompatibilidades detectadas, mudamos para ‘BRAZILIAN PORTUGUESE’.
O problema é o que foi digitado durante o tempo que estava em AMERICAN. Ficou bem errado (acentos e afins). Foi durante uns 90 dias que ficou em AMERICAN… Ou seja, tem bastante coisa no banco sendo exibida com ? no lugar dos acentos.
Peguntas:
– Existe solução?
– Alguma boa alma já passou por isso e pode me dar uma luz?Tá assim agora:
SQL> SELECT * FROM NLS_DATABASE_PARAMETERS;
PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET WE8ISO8859P1SQL> SELECT * FROM NLS_SESSION_PARAMETERS;
PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE BRAZILIAN PORTUGUESE
NLS_TERRITORY BRAZIL
NLS_CURRENCY R$
NLS_ISO_CURRENCY BRAZIL21 de dezembro de 2011 às 3:17 pm #102285rman
Participante@PR0G
Uma coisa que vou falar que você já percebeu. Não se muda charset com dados no banco sem conversão. O grande problema que rodou 90 dias em AMERICAN e provalmente de lá pra cá rodou em BRAZILIAN PORTUGUESE, ou seja, como tem dados codificados em 2 charset, sempre 1 vai ficar quebrado, se você voltar pra AMERICAN o BRAZILIAN PORTUGUESE vai quebrar, se deixar como está o AMERICAN vai ficar quebrado.
Mas pensando numa nova situação de mudança de charset, faça o seguinte teste, crie um novo banco em AMERICAN, insira uma tabela de teste com registro com acentos. Faça um dump via Data Pump, alterar o charset pra BRAZILIAN PORTUGUESE, por fim importe o dump.
21 de dezembro de 2011 às 4:16 pm #102286PR0G
ParticipanteOpa, legal.
Eu precisava mesmo ouvir isso de alguém. Eu já imaginava que era caso perdido mesmo.Não tenho conhecimento de PL/SQL suficiente ainda (mas programo em outras linguagens – logo vai ser rápido), mas pensei em fazer uma procedure que varre o banco pegando o caracter “x” (errado) e trocando pelo “y” (certo). Isso vai “consertar” a coisa.
Agradeço a força. Vou fazer o teste com Datapump. Você me deu uma idéia. Como eu sei a data da alteração, vou fazer (vai dar trampo, mas é possível) um Dump, restaurar em duas bases novas (B1 e B2). De uma eu apago tudo que é do dia “x” para trás, outra do dia “x” para frente. Tento converter uma das duas e juntar…
São vários caminhos agora. A idéia da procedure também não é ruim…
Obrigado pelo post.
; )
21 de dezembro de 2011 às 5:13 pm #102288rman
Participante@PR0G
A ideia do procedimento para corrigir caso a caso é viável dependendo do volume de dados.
Antes de separar a base em 2 datas, faça um teste simples antes, nunca fiz a migração de charset, mas creio que o Data Pump vai tratar isso.
-
AutorPosts
- Você deve fazer login para responder a este tópico.