zoukankan      html  css  js  c++  java
  • Oracle修改字符集ORA02374,ORA12899,ORA02372

    Oracle修改字符集ORA-02374,ORA-12899,ORA-02372

    [日期:2018-05-05] 来源:Linux社区  作者:ritchy [字体:  ]
     

    IMPDP时部分日志显示这个警告
    ORA-02374: conversion error loading table "MEMXXX"."T_MEMBER_XXXX"
    ORA-12899: value too large for column SUBJECT (actual: 148, maximum: 100)
    ORA-02372: data for row: SUBJECT : 0X'B2E2CAD4C9CCC6B7B2E2CAD4C9CCC6B7B2E233CAD4C9CCC6B7'
    解释
    zhsgbk16 和 utf8 对数据编码之后,存储格式不同,对于中文来讲,gbk存放一个汉字占用2个字节,utf8存放一个汉字占用3个字节,这样就会导致,比方说:原先GBK字符编码的数据库中的某张表中,存放中文的字段:colum001的类型是varchar 长度为200 ,并且该字段的大多数行的现有数据长度基本上在180个字节,那么该表导入UTF8编码的数据库中时,该字段原先存储的大多数180个字节的汉字,就需要180*3/2=270个字节左右的字符长度才能正常存放;而此时在执行impdp导入操作的时候,表结构是不会改变的,也就是原先的字段定义colum001的长度还是保持着200,因此在导入的时候,就会报错,出现上述错误信息。

    字符集源端和目标端不一致容易出现上面问题,好烦人。。。但也不是没有办法解决
    先查下两端的字符集,这是要修改目标端的字符集跟源端的一致,也可以反过来,就是更麻烦
    这里是将其改为 ZHS16GBK

    SQL> SELECT NLS_CHARACTERSET,NLS_NCHAR_CHARACTERSET,t.* FROM V$NLS_PARAMETERS T;

    [Oracle@test199 ~]$ sqlplus / as sysdba

    SQL*Plus: Release 11.2.0.4.0 Production on 星期五 5月 4 12:38:25 2018

    Copyright (c) 1982, 2013, Oracle. All rights reserved.

    连接到:
    Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options

    SQL> shutdown immediate;
    数据库已经关闭。
    已经卸载数据库。
    ORACLE 例程已经关闭。
    SQL> STARTUP MOUNT EXCLUSIVE;
    ORACLE 例程已经启动。

    Total System Global Area 3975139328 bytes
    Fixed Size 2259360 bytes
    Variable Size 2634024544 bytes
    Database Buffers 1325400064 bytes
    Redo Buffers 13455360 bytes
    数据库装载完毕。
    SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;

    系统已更改。

    SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

    系统已更改。

    SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;

    系统已更改。

    SQL> ALTER DATABASE OPEN;

    数据库已更改。

    SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
    ALTER DATABASE CHARACTER SET ZHS16GBK
    *
    第 1 行出现错误:
    ORA-12712: 新字符集必须为旧字符集的超集


    SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;

    数据库已更改。

    SQL> SHUTDOWN immediate;
    数据库已经关闭。
    已经卸载数据库。
    ORACLE 例程已经关闭。
    SQL> startup;
    ORACLE 例程已经启动。

    Total System Global Area 3975139328 bytes
    Fixed Size 2259360 bytes
    Variable Size 2634024544 bytes
    Database Buffers 1325400064 bytes
    Redo Buffers 13455360 bytes
    数据库装载完毕。
    数据库已经打开。
    验证下看看改过来了没。。。
    SQL> select userenv('language') from dual;

    USERENV('LANGUAGE')
    --------------------------------------------------------------------------------
    SIMPLIFIED CHINESE_CHINA.ZHS16GBK

    SQL>
    OK!

  • 相关阅读:
    PHP实现无限极分类
    html2canvas生成并下载图片
    一次线上问题引发的过程回顾和思考,以更换两台服务器结束
    Intellij IDEA启动项目报Command line is too long. Shorten command line for XXXApplication or also for
    mq 消费消息 与发送消息传参问题
    idea 创建不了 java 文件
    Java switch 中如何使用枚举?
    Collections排序
    在idea 设置 git 的用户名
    mongodb添加字段和创建自增主键
  • 原文地址:https://www.cnblogs.com/yaoyangding/p/15746084.html
Copyright © 2011-2022 走看看