I want to change character set of oracle database from \'WE8MSWIN1252\' to \'AL32UTF8\'
I tried to execute following steps from the link (http://download.oracle.com/
For an ALTER DATABASE CHARACTER SET
statement to execute successfully, two conditions must be fulfilled:
Because WE8MSWIN1252
is not a strict subset of AL32UTF8
this statement will fail (example: the pound sign is A3
in hex in WE8MSWIN1252
, but in AL32UTF8
it is C2 A3
).
You'll need to use CSALTER
to do this migration.
Refer to: Character Set Migration.
replace line 6 by
ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8;
this solved my problem.
The Easiest way: (Shutdown neccesary):
First, Connect as sysdba:
sqplus / as sysdba
Next, execute the following script:
alter system set nls_length_semantics=CHAR scope=both;
shutdown;
startup restrict;
alter database character set INTERNAL_USE WE8ISO8859P1;
shutdown;
startup;
It worked for me in a Oracle 12c Standard Two Edition
Taken from: https://www.elblogdelpibe.com/2015/05/como-solucionar-el-error-ora-12899.html (updated URL)
import done in AL32UTF8 character set and AL16UTF16 NCHAR character set export done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character set Warning: possible data loss in character set conversions
Database started in Restriction mode.
SQL> select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
NLS_CHARACTERSET AL32UTF8
SQL> alter database character set WE8MSWIN1252; alter database character set WE8MSWIN1252 * ERROR at line 1: ORA-12712: new character set must be a superset of old character set
SQL> alter database character set INTERNAL_USE WE8MSWIN1252;
Database altered.
SQL> select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
NLS_CHARACTERSET WE8MSWIN1252
SQL>
Cheers! RaJ...