Alterando Character Set no Oracle 11g

Publicado: fevereiro 27, 2013 em Character Set
Tags:
Irei fazer uma breve explicação do que é o Character Set do BD Oracle (NLS_CHARACTERSET) e irei abordar a alteração utilizando os utilitários csscan e csalter (Database Character Set Scanner utilities), os quais são disponibilizados pelo própria Oracle e seus usos recomendados para esse fim, pois nas versões 10g e 11g não deve ser usado o comando ALTER DATABASE CHARACTER SET para realizar essa alteração.
     
O NLS_CHARACTERSET define, no banco de dados Oracle, quais caracteres poderão ser armazenados no banco utilizando os tipos de dados CHAR, VARCHAR2, LONG e CLOB. Ou seja, ele não define o idioma, e sim, a faixa de caracteres que poderão ser utilizados.
     
A alteração do Character Set constitui-se em duas etapas: data scanning (csscan) e data conversion (csalter). O data scanning consiste na prévia identicação de possíveis problemas na alteração do Character Set e truncamento de dados. Nessa etapa, por exemplo, pode ser identificado tabelas que precisarão ter o tamanho das colunas aumentado ou até mesmo os caracteres que não estão no repertório do novo Character Set. E o data conversion é a conversão dos dados para o novo Character Set. IMPORTANTE: Antes de realizar a data conversion, deve realizar-se um backup full do BD. Pois pode acontecer uma corrupção de dados.
     
Vamos agora para a parte da diversão!!
     
     
Alterando Charaset Set utilizando Database Character Set Scanner Utilities (csscan / csalter)
     
Vale lembrar novamente que antes de iniciar o procedimento de alteração, recomenda-se gerar um backup full do banco. Pois, caso necessite, deverá ser realizado o restore do banco. E só então, reiniciar o processo de conversão.
     
Primeiro, vamos verificar qual Character Set está sendo utilizado no ambiente utilizando a seguinte query:
     
     SQL>SELECT value
                   FROM nls_database_parameters
                WHERE parameter = ‘NLS_CHARACTERSET’;
     
O resultado dessa query me retornou o resultado “WE8ISO8859P1″. E será alterado o Character Set atual para WE8MSWIN1252. Então deve ser iniciado o data scanning, excutando o csscan para fazer a verificação do impacto da alteração entre esses dois Character sets.
     
     [oracle@marcussoares ~]$ csscan
     

     Character Set Scanner v2.2 : Release 11.2.0.3.0 – Production on Wed Feb 27 18:35:08 2013

     Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

     Username: system
     Password:

     Connected to:
     Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 – Production
     With the Partitioning, OLAP, Data Mining and Real Application Testing options

     (1)Full database, (2)User, (3)Table, (4)Column: 1 > 1
     Current database character set is WE8ISO8859P1.
     Enter new database character set name: > WE8MSWIN125

E para as questões seguintes ENTER para utilizar o valor padrão. Na sequência será iniciado o scan nas tabelas do BD.
     
     Enumerating tables to scan…
     
     . process 1 scanning SYS.SOURCE$[AAAABIAABAAAAIRAAA]
     
     Creating Database Scan Summary Report…
     
     Creating Individual Exception Report…
     
     Scanner terminated successfully.
     
Serão criados três arquivo na pasta onde o usuário do SO se encontrava: scan.out, scan.err e scan.txt. Com informações sobre os resultados obtidos pelo csscan. Após o csscan ter validado a alteração, deve se executar o csalter para realizar a data conversion. O script “csalter.plb” encontra-se no diretório “$ORACLE_HOME/rdbms/admin” e deve ser executado com o usuário SYS. A seguir, será mostrado passo-a-passo a sua execução:
     

     SQL> SHUTDOWN IMMEDIATE
     Database closed.
     Database dismounted.
     ORACLE instance shut down.
     SQL> STARTUP RESTRICT
     ORACLE instance started.

     Total System Global Area 456146944 bytes
     Fixed Size 1345604 bytes
     Variable Size 369100732 bytes
     Database Buffers 79691776 bytes
     Redo Buffers 6008832 bytes

     Database mounted.
     Database opened.
     SQL> @?/rdbms/admin/csalter.plb

     0 rows created.

     Function created.

     Function created.

     Procedure created.

     This script will update the content of the Oracle Data Dictionary.
     Please ensure you have a full backup before initiating this procedure.
     Would you like to proceed (Y/N)?Y
     old 6: if (UPPER(‘&conf’) <> ‘Y’) then
     new 6: if (UPPER(‘Y’) <> ‘Y’) then
     Checking data validility…
     begin converting system objects

     PL/SQL procedure successfully completed.

     Alter the database character set…
     CSALTER operation completed, please restart database

     PL/SQL procedure successfully completed.

     0 rows deleted.

     Function dropped.

     Function dropped.

     Procedure dropped.

     SQL>

     
Após o término do processo, as triggers, os indexes, as contraints, entres outros, devem ser alterados para seus status originais, caso tenham sido necessárias as suas alterações. E também verificar, com a consulta da view NLS_DATABASE_PARAMETERS, o NLS_CHARACTERSET atual e assim finalizamos.
     
     SQL>SELECT value
                   FROM nls_database_parameters
                WHERE parameter = ‘NLS_CHARACTERSET’;
     

     VALUE
     —————————————-
     WE8MSWIN125

     
     
MOS Note:
     
Changing the Database Character Set ( NLS_CHARACTERSET ) [ID 225912.1]
     
Links:
     
Character Set Migration
Character Set Scanner Utilities
     
About these ads

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s