a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 159|回复: 1

[考试辅导] Oracle性能调优:字符集

[复制链接]
发表于 2012-8-4 14:06:19 | 显示全部楼层 |阅读模式
oracle字符集问题解决分为两种情况:% i# X: U2 V9 \
    / H0 t5 D0 _" E7 S  F
    一、解决客户端问题,临时解决。(意思是把当前的环境变量设置来和系统的语言一样。以oracle为准。)* }  }6 e' J2 N+ {5 E# W7 M* u9 v
   
7 G+ W7 f9 ^/ H) }6 H- \    查看oracle字符集- D  V# I! y0 f) ~' g' T
    8 d8 ^: l7 i0 f; L. @9 _
    SQL> select userenv('language') from dual;
$ W2 h4 R( _- h8 i; s# i   
* j8 J' y5 f8 L& M1 [+ Q9 z    USERENV('LANGUAGE')
7 a2 q: J1 X6 w" c4 e8 c   
/ u$ Z5 d. S9 h8 A1 ?% r' T    --------------------------------------------------------------------------------4 j' ]- m2 |- `3 S7 D  Q$ I
   
! s) U$ E- u  }2 s2 Q3 P    SIMPLIFIED CHINESE_CHINA.UTF8' H& x5 h& i; K9 V
    ) |& D7 J/ M+ N9 D9 ^; n/ m+ e' t5 {
    查看linux系统字符集
$ Y0 Z/ j' L6 K& D9 t    / |9 v! V$ V2 A1 v$ \  ^% V
    [root@ora ~]# env |grep LANG1 ~  r! f" x0 K$ ?5 V0 Y9 l
    9 @# S# ]2 r9 y0 ~( v3 l
    LANG=zh_CN.UTF-8
+ B# r# d; B: h! u( m6 _8 b    ; k' F. P7 o3 _! O  h
    GDM_LANG=zh_CN.UTF-8* M* D* b3 [7 o7 _. Z
    + x0 ~4 l2 w% _
    定义linux系统字符集+ P5 T' b1 a) f9 g
   
: _% n! r& H6 U    [root@ora ~]# export NLS_LANG='SIMPLIFIED CHINESE_CHINA.UTF8'+ N7 J& M. E' d
   
5 }& m4 X5 _7 L8 Z0 T6 t$ P; V( Q! b    定义oracle环境字符集( N3 [3 d5 `: X- f  g
   
. s! Y' C, {( R% c$ A3 H    [root@ora ~]# su - oracle
  L8 }4 Z" u( ?# E% }9 O( ^+ V    + P1 \. g0 [- Q
    [oracle@ora ~]$ export NLS_LANG='SIMPLIFIED CHINESE_CHINA.UTF8'
. [8 h, b3 S- G; I8 G3 w    ( e# j2 B( U4 _% C3 ]
    [oracle@ora ~]$ !sql5 N$ s6 Y! Y1 k+ a; }0 _
    3 u3 x, A# B: _' m0 Y! R( G
    查看结果. U& C" A; q  U' M, z  j" l% P' U
    / e, _' J1 b# i. Q7 A
    SQL> select * from database_properties;
/ w% E5 R! N$ r( F& d- L   
/ O- `3 r" b- ^. [. a    二、这种刚好相反,修改oracle与os一样(这种是盖总写的,一起学习了)下面也写出了两种方法,copy过来的,请大家参考
" A3 K% d% T# @$ a3 L% F: C   
7 [% \* l, c/ ~3 Z& Z    Linux 下更改 oracle客户端字符集和服务端字符集8 U& w5 |) t1 e. |! d- U
   
) _/ U" W% L+ n3 I    1.Linux 下更改 oracle客户端字符集,即设置环境变量" NLS_LANG"的值
: s1 f( S  Z. \/ a8 W( X/ R7 S; g0 b    / g9 w7 L6 A% l0 i
    查看客户端字符集,在终端下执行:
8 x2 J) ?' Z3 x, \: F5 L/ t    * q8 X2 E1 A& E) _
    echo $NLS_LANG/ @6 d& {; C( }( s: F- `
    ; E' d9 f6 o- R. h
    修改客户端字符集:
  \: C. _1 K9 [$ J1 [   
9 `% C. s7 P2 H) G    sudo gedit /etc/environment
' U4 l  S* F* Q% M    ! H, m6 \. O7 y  J; W0 ?2 i5 o
    在environment 文件中增加以下内容:0 V, c  b) J* Z
   
+ `, A. e: ]3 Z! v6 O    NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK") c# b+ S# _' j! A$ w  S
    1 s- z# T! x. o" h; n8 ]' D. F
    export NLS_LANG
, m6 D8 E, H# q/ Z6 Y* o+ }   
' z5 _1 m& c$ z& [  i/ y    重新启动操作系统即可。
. M( i+ P5 D* O3 u" U    ' i9 m& P- n) `, k! s# R, J" ^& J
    2. 修改 oracle服务端的字符集。
( q7 [' E% V8 J, g   
) l% Z8 p$ e0 ^( ~2 f" E' i    查看服务端字符集:
( A. D6 z8 S' n' }   
3 |2 v0 ?" z  l2 f- o0 M+ T3 m6 D/ p* l    select userenv('language') from dual;, r( @0 h' C" K4 ~) \/ S
    % K, h- X. s6 b* {. W
    修改服务端字符集,终端下执行:
; |$ |5 [6 O0 l' F+ k    : V/ K. U4 |' s( `$ L& Y+ g
    $ORACLE_HOME/bin/sqlplus /nolog0 ?# a- _+ T6 C
   
" R8 }7 F. [6 b; e: u    进入sqlplus 命令行! Z  E, ~9 L/ n+ r5 i  s
   
, t( A/ T8 S8 f! A) ^% s5 P, e    SQL>conn / as sysdba;
# R8 x7 U0 F( m- w& E9 N7 t# L/ k    3 [5 s, O9 B" b7 w4 M5 n# q" H
    1 ) . 关闭数据库, U# j6 Z: O3 |" e
    5 _9 E. v, s0 E* X1 o5 o
    SQL>SHUTDOWN IMMEDIATE;; B, E& S8 f8 N; ~- r
   
- D, p/ N. Z- ~3 D8 c    2 ) . 启动到 Mount; @. Q* X# V( y- V6 `' Q
   
8 [# B+ R$ g2 S( F9 D' @( c2 j* P. J" p    STARTUP MOUNT;
; M9 [% t' @. |/ y! [# T) @    9 D$ o3 ~/ ?1 X) x3 R
    ALTER SYSTEM ENABLE RESTRICTED SESSION;
& V, y+ O+ |. x# o  N6 T    - B* _0 _# [0 q& d" X; H3 x
    ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
) I% @  F( i5 ~& }7 e   
9 \3 ?0 P6 M2 r) }- x* J    ALTER SYSTEM SET AQ_TM_PROCESSES=0;6 B* |$ h5 [2 R$ C- }0 L
   
( D4 p6 O% I* {' @" p% s" ]; z    ALTER DATABASE OPEN;
5 ]8 \0 K9 W9 k7 P   
: h% ]8 F8 l* J* Y# J$ q% g/ I    ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;9 X* _4 s. [! x* {9 q
   
1 P' F5 |* j1 o' e    -- 下面一行语句可能会出现错误提示,可以不理会
4 `+ K" W( u9 l2 b8 Z    9 D& }7 o5 V5 f
    ALTER DATABASE national CHARACTER SET INTERNAL ZHS16GBK;
; S- a' K' i1 Y: ^    5 ^) W5 G+ m7 d8 Z$ f. H+ H
    SHUTDOWN IMMEDIATE;+ I! @- r5 B. t& P4 Y
   
6 Q' W, @9 ~5 H' h0 P' \1 }2 v    STARTUP;
回复

使用道具 举报

 楼主| 发表于 2012-8-4 14:06:20 | 显示全部楼层

Oracle性能调优:字符集

3. 修改 dmp文件字符集
# C. M( g5 z& e; x- W    ! d/ t! t0 Q, M$ K* r5 h* p/ w- F
    dmp 文件的第2第3 字节记录了字符集信息,因此直接修改dmp文件的第2 第3字节的内容就可以'骗'过oracle 的检查。这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集,如 US7ASCII,WE8ISO8859P1 ,ZHS16CGB231280,ZHS16GBK 基本都可以改。因为改的只是dmp文件,所以影响不大。, }- y, X. }, m% [( I  u& l- v
   
. `* x% `4 D" C8 i" N5 G4 s: i- y    具体的修改方法比较多,最简单的就是直接用UltraEdit 修改dmp文件的第2 和第3个字节。比如想将dmp 文件的字符集改为ZHS16GBK,可以用以下SQL 查出该种字符集对应的16进制代码:
& _* j" u% a5 C+ ~9 w" k   
% d( w& x% b7 f+ Z9 _4 u+ _' N    SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;3 e) b* E. [- D" `. N9 b- K: l+ I
   
6 C0 B& Y; \' e% O5 J) H    0354
3 k/ Q) f$ r! B! e# C4 Z    ' j5 Y7 v$ l' l
    然后将dmp 文件的2、3 字节修改为0354即可。$ c6 v/ \" K& Z( z1 m1 J
    - L, P& V" @' b
    Oracle 提供标准函数,对字符集名称及 ID进行转换 :" [. K, J' R# P9 P1 R
   
# A' ?8 W& u8 j8 I0 ]/ n+ F    SQL> select nls_charset_id('ZHS16GBK') from dual;: X* M" s" k/ N/ F% d' C) x9 f
   
* F9 e0 o  \0 L    NLS_CHARSET_ID('ZHS16GBK')  v& O6 ~# r; g2 z0 ]( A& h: x
    ( T7 j" Z# h4 r5 q, l) N
    -------------------------9 M: n. D6 a8 a5 z1 ]" k
    * X) ]7 |. q' n: d$ v7 D
    852) f" w" y7 ~1 _& A/ L
    & F( Y0 A1 F( L
    1 row selected.
0 n( V5 p7 m% ~2 `5 B) P, G- M    . M2 R! J/ x+ i
    SQL> select nls_charset_name(852) from dual;
/ i+ U8 E* q) Z( {    % ?2 n' C& t5 Z8 N- u, t- |6 s* \; ^
    NLS_CHAR$ J$ Z1 p5 q' ~$ P4 E
    + O$ G$ ]4 S+ v* Z! m& K
    --------
& c: Q" Y4 h$ h, Y" k   
) X; N' E4 e, {* W$ J. @    ZHS16GBK
# L4 K5 K0 c$ q  L   
6 O. q$ Y" a5 [& }' \    1 row selected.& w% d+ v$ Q- h* W
   
1 z! u9 X2 I' Y# ~    十进制转换十六进制 :' _. j, k. ?- s3 U  Q0 z
   
9 {; F. w6 t$ F2 k2 O    SQL> select to_char('852','xxxx') from dual;
. W5 L) U, z/ V' R5 Q: z    1 Z& t. G! M8 }8 ^" Q: L3 D1 v9 q
    TO_CH
8 y( G1 J: v  t8 `& w3 N! S4 M" _    , Y, j& k& ?  V$ b
    354
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-17 19:01 , Processed in 0.215474 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表