我想将oracle数据库的字符集从'WE8MSWIN1252'更改为'AL32UTF8'
我尝试从链接执行以下步骤(http://download.oracle.com/docs/cd/B10501_01/server.920/a96529/ch10.htm#1009580):
使用SHUTDOWN IMMEDIATE或a关闭数据库 SHUTDOWN NORMAL语句。执行数据库的完整备份,因为 ALTER DATABASE CHARACTER SET语句无法回滚。 填写以下声明:
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;
但是当我执行上述语句时,我收到以下错误
SQL错误:ORA-12712:新字符集必须是旧字符集的超集
任何人都可以帮我解决这个问题。
答案 0 :(得分:9)
要成功执行ALTER DATABASE CHARACTER SET
语句,必须满足两个条件:
由于WE8MSWIN1252
不是AL32UTF8
的严格子集,因此此语句将失败(例如:A3
中的英镑符号为WE8MSWIN1252
,但{{1}它是AL32UTF8
)。
您需要使用C2 A3
来执行此迁移。
答案 1 :(得分:1)
最简单的方法:(关机必要):
首先,以sysdba身份连接:
sqplus / as sysdba
接下来,执行以下脚本:
alter system set nls_length_semantics=CHAR scope=both;
shutdown;
startup restrict;
alter database character set INTERNAL_USE WE8ISO8859P1;
shutdown;
startup;
它在Oracle 12c标准二版中对我有用
取自:http://www.blogdelpibe.com/2015/05/como-solucionar-el-error-ora-12899.html
答案 2 :(得分:1)
用
代替第6行 ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8;
答案 3 :(得分:0)
以AL32UTF8字符集和AL16UTF16 NCHAR字符集完成导入 以WE8MSWIN1252字符集和AL16UTF16 NCHAR字符集完成导出 警告:字符集转换中可能会丢失数据
数据库以限制模式启动。
SQL>从nls_database_parameters中选择*,其中parameter ='NLS_CHARACTERSET';
NLS_CHARACTERSET AL32UTF8
SQL> alter database character set WE8MSWIN1252; 更改数据库字符集WE8MSWIN1252 * 第1行发生错误: ORA-12712:新字符集必须是旧字符集的超集
SQL>更改数据库字符集INTERNAL_USE WE8MSWIN1252;
数据库已更改。
SQL>从nls_database_parameters中选择*,其中parameter ='NLS_CHARACTERSET';
NLS_CHARACTERSET WE8MSWIN1252
SQL>
干杯! RaJ ...