当前位置:  数据库>oracle

Oracle 11.2.0.1关于NLS_LENGTH_SEMANTICS的一个Bug

    来源: 互联网  发布时间:2017-05-06

    本文导语: 这段时间在做数据迁移,需要从10g的ZHS16GBK字符集的数据库里面迁移数据到11g的UTF8字符的数据库,并且源数据库的NLS_LENGTH_SEMANTICS参数值为Byte,目标端的NLS_LENGTH_SEMANTICS参数值为CHAR。如果直接从源使用exp/expdp导出数据,然后使用...

这段时间在做数据迁移,需要从10g的ZHS16GBK字符集的数据库里面迁移数据到11g的UTF8字符的数据库,并且源数据库的NLS_LENGTH_SEMANTICS参数值为Byte,目标端的NLS_LENGTH_SEMANTICS参数值为CHAR。如果直接从源使用exp/expdp导出数据,然后使用imp/impdp导入数据到目标的话,可能会出现数据超长的情况,这时候就不好搞了,因此我就使用了中转的方式。即,把源数据导入到NLS_LENGTH_SEMANTICS参数值为CHAR的ZHS16GBK字符集的中转数据库中,然后再从中转数据库中导出数据并导入到目标数据库中。

:这样做是有条件的,源数据库中没有长度超过4000/3个中文字符的CHAR/VARCHAR2字段,原因看这里

继续这个问题,之所以这么做,是为了在数据部超长的情况得到CHAR/VARCHAR2类型字段以CHAR存储的数据。

根据Oracle的定义,NLS_LENGTH_SEMANTICS参数可以在三个层次生效:数据库级、实例级、会话级,并且生效的优先顺序为会话级>实例级>数据库级。

但是,我发现了一个问题:不管把NLS_LENGTH_SEMANTICS在那个级别设置为CHAR,在Oracle 中,新表都做为CHAR/VARCHAR2等数据类型的存储单位,而是,除非源数据就已经指定了CHAR。

请看如下实验过程,全过程均使用普通用户,因为NLS_LENGTH_SEMANTICS参数对sys用户无效:


先查看NLS_LENGTH_SEMANTICS参数,Database、Instance和Session都设置为CHAR
srcbdb@SYS> select * from nls_session_parameters where PARAMETER='NLS_LENGTH_SEMANTICS';

PARAMETER                      VALUE
------------------------------ --------------------------------------------------
NLS_LENGTH_SEMANTICS          
srcbdb@SYS> select * from nls_instance_parameters where PARAMETER='NLS_LENGTH_SEMANTICS';

PARAMETER                      VALUE
------------------------------ --------------------------------------------------
NLS_LENGTH_SEMANTICS          
srcbdb@SYS> select * from nls_database_parameters where PARAMETER='NLS_LENGTH_SEMANTICS';

PARAMETER                      VALUE
------------------------------ --------------------------------------------------
NLS_LENGTH_SEMANTICS          

然后倒入数据

[oracle@instsvr1 dumpdp]$ impdp vip/vip directory=dumpdir dumpfile=vip.byte.dat logfile=$ORACLE_SID.vip.impdp.`date +'%Y%m%d%H%M%S'`.log

Import: Release 11.2.0.1.0 - Production on Wed Mar 7 16:21:03 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
Master table "VIP"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "VIP"."SYS_IMPORT_FULL_01":  vip/******** directory=dumpdir dumpfile=vip.byte.dat logfile=srcbdb.vip.impdp.20120307162103.log
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/DB_LINK
ORA-31685: Object type DB_LINK:"VIP"."DB_SRCBDATA" failed due to insufficient privileges. Failing sql is:
CREATE DATABASE LINK "DB_SRCBDATA"  CONNECT TO "SRCBDATA" IDENTIFIED BY VALUES '053E86648883623A93807EAD3C7A2EA776FA8F916A941AFB2E'  USING 'srcbfin'
 
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/FUNCTION/FUNCTION
Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
Processing object type SCHEMA_EXPORT/FUNCTION/ALTER_FUNCTION
Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "VIP"."SYS_IMPORT_FULL_01" completed with 1 error(s) at 16:24:48

查看表结构
[oracle@instsvr1 dumpdp]$ sqlplus vip/vip

SQL*Plus: Release 11.2.0.1.0 Production on Wed Mar 7 14:56:04 2012

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

srcbdb@VIP> select * from tab where rownum desc SNAPTBEXCHANGERATE
 Name                                                                                                              Null?    Type
 ----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
 MONEY_TYPE                                                                                                                                create table lzb (col1 char(10),col2 varchar2(10));

Table created.

srcbdb@VIP> desc lzb
 Name                                                                                                              Null?    Type
 ----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
 COL1                                                                                                                                   


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,