Reputation: 301
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/docs/cd/B10501_01/server.920/a96529/ch10.htm#1009580):
Shut down the database, using either a SHUTDOWN IMMEDIATE or a SHUTDOWN NORMAL statement. Do a full backup of the database because the ALTER DATABASE CHARACTER SET statement cannot be rolled back. Complete the following statements:
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE CHARACTER SET AL32UTF8;
But when i execute the above statement, I am getting the following error
SQL Error: ORA-12712: new character set must be a superset of old character set
Can anyone please help me in resolving this issue.
Upvotes: 5
Views: 46107
Reputation: 1
con 11g funciona
alter system set nls_length_semantics=CHAR scope=both;
shutdown;
startup restrict;
alter database character set INTERNAL_USE WE8ISO8859P1;
shutdown;
startup;
Upvotes: -1
Reputation: 347
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)
Upvotes: 6
Reputation: 107
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...
Upvotes: 3
Reputation: 1844
replace line 6 by
ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8;
this solved my problem.
Upvotes: 1
Reputation: 85488
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.
Upvotes: 10