`
hehch
  • 浏览: 40906 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

oracle 11g 字符集更改

阅读更多
oracle 11g,在导入其他机器上的备份数据的时间,发生一个错误:

IMP-00019: 由于 ORACLE 错误 12899 而拒绝行
IMP-00003: 遇到 ORACLE 错误 12899
ORA-12899: 列 "ZHENG"."D_DIC"."DICEXPLAIN" 的值太大 (实际值: 140, 最大值: 100)

这是字符集的问题

在日志文件里,开始导入时候有这样一个提示:

已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)

在windows server 2003系统上安装oracle,默认的字符集跟操作系统一致,是AL32UTF8。

AL32UTF8里,一个汉字是占用3个字符位,而一般我们用Windows XP中默认的是ZHS16GBK ,一个汉字用2个字符位。这样,直接导入数据就直接溢出了。

在网上找到一个修改字符集的方法:

"
<SQL> conn sys/sys as sysdba;
SQL> shutdown immediate;
SQL> STARTUP MOUNT;
SQL> ALTER SESSION SET SQL_TRACE=TRUE;
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;

SQL> Shutdown immediate;
SQL> startup;
"

oracle数据库的字符集更改

A、oracle server端字符集查询

select userenv(‘language’) from dual
其中NLS_CHARACTERSET 为server端字符集
NLS_LANGUAGE 为 server端字符显示形式

B、查询oracle client端的字符集
$echo $NLS_LANG
如果发现你select 出来的数据是乱码,请把client端的字符集配置成与linux操作系统相同的字符集。如果还是有乱码,则有可能是数据库中的数据存在问题,或者是oracle服务端的配置存在问题。

C、server端字符集修改


*****************************************************************
* 更改字符集步骤方法(WE8ISO8859P1 --> ZHS16GBK)                    *
*****************************************************************

SQL>
将数据库启动到RESTRICTED模式下做字符集更改:
SQL> conn /as sysdba
Connected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 236000356 bytes
Fixed Size                   451684 bytes
Variable Size             201326592 bytes
Database Buffers           33554432 bytes
Redo Buffers                 667648 bytes
Database mounted.
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
System altered.
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
System altered.
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
System altered.
SQL> alter database open;
Database altered.
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
ALTER DATABASE CHARACTER SET ZHS16GBK
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改:
SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
Database altered.
SQL> select * from v$nls_parameters;

19 rows selected.
重启检查是否更改完成:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 236000356 bytes
Fixed Size                   451684 bytes
Variable Size             201326592 bytes
Database Buffers           33554432 bytes
Redo Buffers                 667648 bytes
Database mounted.
Database opened.
SQL> select * from v$nls_parameters;

19 rows selected.
我们看到这个过程和之前ALTER DATABASE CHARACTER SET操作的内部过程是完全相同的,也就是说INTERNAL_USE提供的帮助就是使
Oracle数据库绕过了子集与超集的校验.

注意备份。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

D、client端字符集修改
在 /home/oracle与 /root用户目录下的.bash_profile中
添加或修改 export NLS_LANG="AMERICAN_AMERICA.UTF8" 语句
关闭当前ssh窗口。
注意 NLS_LANG变量一定要配置正确否则会引起sqlplus 失效
分享到:
评论

相关推荐

    oracle11g字符集修改

    oracle11g字符集的修改,本人亲自用过,按照文档内容一步一步操作准没错,不要忘了先将数据备份或导出pdm哦!!!O(∩_∩)O哈哈~

    Oracle11g 字符集 AL32UTF8 修改为ZHS16GBK

    ### Oracle11g 字符集 AL32UTF8 修改为 ZHS16GBK 的步骤与注意事项 #### 一、背景介绍 在Oracle11g环境下,可能会遇到需要更改数据库字符集的情况,例如从AL32UTF8修改为ZHS16GBK。这种变更通常发生在需要支持特定...

    修改ORACLE11G字符集

    ### 修改Oracle 11g字符集 在Oracle数据库管理中,字符集的设置至关重要,它直接影响到数据的存储和检索。对于已经安装并运行的Oracle 11g数据库,如果发现默认字符集不符合需求(例如默认为US7ASCII),则需要进行...

    ORACLE11g更改字符集

    ### 一、更改Oracle 11g字符集的意义 在Oracle 11g数据库中,字符集用于定义如何存储和处理文本数据。不同的字符集支持不同的语言和符号。例如,ZHS16GBK字符集主要支持中文简体字符。更改字符集通常发生在以下情况...

    oracle11g更改字符集

    oracle11g导入报错,很多情况下是字符集不同导致失败,附件为oracle11g更改字符集操作说明,多次实测有效。

    oracle修改字符集

    针对这种情况,我们可以按照以下步骤来修改Oracle 11g数据库的字符集,使其更改为ZHS16GBK。 首先,确保你有数据库的系统管理员权限,因为修改字符集需要以SYSDBA身份进行。在Windows环境下,打开命令行窗口(cmd)...

    Oracle10g字符集设置,解决中文乱码

    Oracle 10g字符集设置是数据库管理中的一个重要环节,特别是在处理中文数据时,正确的字符集配置至关重要。在Windows环境下,Oracle 10g客户端的安装可能会遇到中文乱码问题,这通常是因为新安装的客户端与旧版本...

    Oracle 字符集详解

    本篇将深入探讨Oracle字符集的查看、修改、导入导出以及转换原理。 一、Oracle字符集的查看 在Oracle中,可以通过以下SQL查询来查看当前数据库的字符集设置: ```sql SELECT * FROM NLS_DATABASE_PARAMETERS ...

    Oracle切换客户端字符集

    在某些情况下,用户可能需要在客户端侧更改字符集,以便正确地显示或处理特定语言的数据。本文将详细讲解如何在Oracle客户端进行字符集的切换。 一、理解字符集 1. 字符集概念:字符集是用于表示文本的一系列符号...

    修改Oracle数据库字符集的方法

    本文将详细介绍如何在Oracle 10g中通过命令行方式修改数据库字符集。 #### 前提条件 在进行字符集修改之前,请确保满足以下前提条件: 1. **有足够的权限**:必须具备sysdba权限才能执行这些操作。 2. **备份...

    oracle10g字符集的查看与修改.doc

    在Oracle 10g中,数据库字符集是在创建数据库时设定的,一般不建议后期修改。数据库字符集决定了CHAR、VARCHAR2、CLOB、LONG等数据类型的存储格式,同时也影响表名、列名和PL/SQL变量的表示。国家字符集(NATIONAL ...

    oracle 10g xe 版本更改数据库字符集

    例如,如果需要支持更多的国际字符或特殊符号,则可能需要将数据库字符集更改为AL32UTF8。这不仅能够提高数据处理的灵活性,还能确保数据的一致性和完整性。 #### 二、重要概念 1. **字符集**:用于表示文字和符号...

    Delphi7 ado 连接远程oracle11g

    ### Delphi7 ADO 连接远程 Oracle11g 的详细步骤及注意事项 #### 一、概述 本文档旨在提供一套完整的解决方案,帮助用户在 Delphi7 环境下通过 ADO 连接到远程 Oracle11g 数据库。整个过程涉及到服务器端的安装与...

    Oracle10G_RAC环境下字符集

    在一个节点上启动数据库实例,以便在不干扰其他节点的情况下进行字符集更改: ```bash [oracle@dbserver1 bin]$ ./srvctl start instance -d ltaiswk -i ltaiswk1 ``` 4. **验证字符集更改**: 连接到刚刚...

    linux安装oracle 11g乱码(图解)

    在Linux环境下安装Oracle 11g数据库时,可能会遇到字符编码问题导致乱码现象,这主要是由于系统默认的字符集与Oracle数据库所使用的字符集不一致导致的。本篇文章将详细解析三种解决Linux安装Oracle 11g乱码的方法。...

    oracleXE字符集改成GBK

     不过Oracle XE目前的beta2缺省安装的字符集是WE8MSWIN1252,不是中文字符集,并且不能通过直接运行 alter database character set ZHS16GBK ; 来修改,因为ZHS16GBK不是缺省字符集的超集。过去流传很广的直接修改...

    oracle11g安装步骤.

    7. **创建数据库**:在创建数据库阶段,你需要设置数据库的名称、字符集、管理选项等参数。默认的管理选项通常是Automatic Storage Management (ASM)。 8. **设置系统管理员密码**:在创建数据库的过程中,你需要为...

    Linux 下修改Oracle 10G的字符集:WE8ISO8859P1 修改为 ZHS16GBK

    ### Linux下修改Oracle 10G的字符集:WE8ISO8859P1 修改为 ZHS16GBK #### 知识点概述 在Linux环境下,有时我们需要更改Oracle数据库的字符集来适应不同的语言环境或数据输入需求。本文将详细介绍如何在Oracle 10G...

Global site tag (gtag.js) - Google Analytics