Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

84

积分

1

好友

27

主题
1#
发表于 2013-1-31 11:15:06 | 查看: 4342| 回复: 2
本帖最后由 ShineCQY 于 2013-1-31 16:14 编辑

  数据库环境:11.2.0.3
  pl/sql developer version 7.1.4
  数据库NLS相关参数:
SQL> show parameter nls

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
nls_calendar                         string      
nls_comp                             string      BINARY
nls_currency                         string      
nls_date_format                      string      
nls_date_language                    string      
nls_dual_currency                    string      
nls_iso_currency                     string      
nls_language                         string      AMERICAN
nls_length_semantics                 string      BYTE
nls_nchar_conv_excp                  string      FALSE
nls_numeric_characters               string      
nls_sort                             string      
nls_territory                        string      AMERICA
nls_time_format                      string      
nls_time_tz_format                   string      
nls_timestamp_format                 string      
nls_timestamp_tz_format              string      
  数据库字符集:NLS Database Parameters
Parameter Value
NLS_CALENDAR GREGORIAN
NLS_CHARACTERSET ZHS16GBK
NLS_COMP BINARY
NLS_CURRENCY $
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_DUAL_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_LANGUAGE AMERICAN
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_NCHAR_CONV_EXCP FALSE
NLS_NUMERIC_CHARACTERS .,
NLS_RDBMS_VERSION 11.2.0.1.0
NLS_SORT BINARY
NLS_TERRITORY AMERICA
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
   windows 7客户端字符集:NLS_LANG     SIMPLIFIED CHINESE_CHINA.ZHS16GBK
  奇怪的现象:同事向一个表中插入数据时,某列下老是少一个字符(应该为3个字符)
  表结构:SQL> desc test1
Name                      Type           Nullable Default Comments
------------------------- -------------- -------- ------- --------
SAFE_CODE                 NVARCHAR2(3)                             
SAFE_SHORTNAME_IN_CHINESE NVARCHAR2(100) Y                        
SAFE_SHORTNAME            NVARCHAR2(100) Y                        
NATIONALITY_CODE          NVARCHAR2(3)   Y                        
COUNTRY_CODE              NVARCHAR2(3)   Y      
插入的数据是:SAFE_CODE        SAFE_SHORTNAME_IN_CHINESE        SAFE_SHORTNAME        NATIONALITY_CODE        COUNTRY_CODE
ABW        阿鲁巴        ARUBA                AW
AFG        阿富汗        AFGHANISTAN        AFG        AF
AGO        安哥拉        ANGOLA        AGO        AO
AIA        安圭拉        ANGUILLA        KNA        AI
ALB        阿尔巴尼亚        ALBANIA        ALB        AL
AND        安道尔        ANDORRA                AD
ANT        荷属安的列斯        NETHERLANDS ANTILLES        ANT        AN
ARE        阿联酋        UNITED ARAB EMIRATES        ARE        AE
ARE        阿联酋        UNITED ARAB EMIRATES        UAE        AE
ARG        阿根廷        ARGENTINA        ARG        AR
ARM        亚美尼亚        ARMENIA        ARM        AM
ASM        美属萨摩亚        AMERICAN SAMOA                AS
ATA        南极洲        ANTARCTICA                AQ
ATF        法属南部领地        FRENCH SOUTHERN TERRITORIES                TF
ATG        安提瓜和巴布达        ANTIGUA AND BARBUDA                AG
AUS        澳大利亚        AUSTRALIA        AUS        AU
AUT        奥地利        AUSTRIA        AUT        AT
AZE        阿塞拜疆        AZERBAIJAN        AZE        AZ
BDI        布隆迪        BURUNDI        BDI        BI
BEL        比利时        BELGIUM        BEL        BE
BEN        贝宁        BENIN        BEN        BJ
BFA        布基纳法索        BURKINA FASO        BFA        BF
BGD        孟加拉国        BANGLADESH        BDN        BD
插入完数据后查看会发现:SAFE_CODE        SAFE_SHORTNAME_IN_CHINESE        SAFE_SHORTNAME        NATIONALITY_CODE        COUNTRY_CODE
AB        阿鲁巴        ARUBA                AW
AF        阿富汗        AFGHANISTAN        AF        AF
AG        安哥拉        ANGOLA        AG        AO
AI        安圭拉        ANGUILLA        KN        AI
AL        阿尔巴尼亚        ALBANIA        AL        AL
SAFE_CODE  和NATIONALITY_CODE 都少了一个字符。
解决方法就是:把nvarchar2类型改为varchar2就可以了。
非常郁闷,为什么会出现这样的情况,更郁闷的是问题解决后在实验环境中没法重现,折腾了老长时间。
希望大牛们给出意见。

和这个哥们儿遇到的问题一样,很显然重装pl/sql developer 和把nvarchar2 改为varchar2都不是最根本的解决方法。
2#
发表于 2013-1-31 14:07:50
select dump(SAFE_CODE) from  test1

先确认服务端问题还是客户端问题。

回复 只看该作者 道具 举报

3#
发表于 2013-1-31 15:36:35
问题的原因找到了,oracle 客户端问题。如果使用11.1.0.7版本就会呈现这样的问题,其他的客户端版本则不会。难道这是我发现的一个BUG?

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-12-26 13:48 , Processed in 0.056491 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569