Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #102276
    PR0G
    Participante

      Seguinte 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 WE8ISO8859P1

      SQL> SELECT * FROM NLS_SESSION_PARAMETERS;
      PARAMETER VALUE
      ------------------------------ ----------------------------------------
      NLS_LANGUAGE BRAZILIAN PORTUGUESE
      NLS_TERRITORY BRAZIL
      NLS_CURRENCY R$
      NLS_ISO_CURRENCY BRAZIL

      #102285
      rman
      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.

        #102286
        PR0G
        Participante

          Opa, 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.

          ; )

          #102288
          rman
          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.

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.