aba DBA Team
&raqu
&ra
quo; FebruaryThursday, February 28th, 2008
管理好自己的期望
做好自己的事情
Tuesday, February 26th, 2008
在utf8字符集的数据库中如何做数据订正.这个问题对我们DBA来说是比较现实的.
矛盾在于当数据库是UTF8时, 我们用Windows的操作系统如何input到数据库一个UTF8的文本.
经过多次的探索, 发现有三种方式.
1. 当Windows是简体中文操作系统时, 一个普通的txt文件(或者sql文件)都是ZHS16GBK格式的,
这个时候如果我们期望输入数据库的UTF8文本都是属于ZHS16GBK字符集时
(简单的说就是我们想输入简体中文或繁体中文时),
直接走SecureCRT 输入的中文都可以自动被转化为UTF8的格式.
与做普通字符集的数据订正没有区别.
2.当Windows是简体中文操作系统时, 如果我们期望输入数据库的UTF8文本不属于ZHS16GBK字符集时,
有两种方法把真正的UTF8字符输入给数据库
第一种:
把需要输入的文本保存为UTF8格式, 然后本机的NLS_LANG=AMERICAN_AMERICA.UTF8,
然后用SQLLDR到数据库中, 就可以了.
第二种:
把需要执行的SQL文件保存为UTF8格式, 然后SCP到对应的服务器上, 服务器的NLS_LANG=AMERICAN_AMERICA.UTF8,
然后在sqlplus里面用@操作符来调用这个SQL文件, 就可以了.
最后一种方法比较简便, 我举个例子说明一下:
‘アイウエオ’这串字符是半角的日文, 不属于ZHS16GBK字符集.
那把如下的语句保存为名为test.sql的文件
select ‘アイウエオ’, dump(’アイウエオ’,1016) from dual;
文件保存的格式选择为utf8.
然后scp到服务器上.
[admin@japan_db1 jonathan]$ env|grep NLS_L
NLS_LANG=AMERICAN_AMERICA.UTF8
ops$admin@JAPAN>l
1* select ‘アイウエオ’, dump(’アイウエオ’,1016) from dual
ops$admin@JAPAN>@test
SP2-0042: unknown command “” - rest of line ignored.
‘アイウエ�� DUMP(’アイウエオ’,1016)
アイウエオ Typ=96 Len=15 CharacterSet=UTF8: ef,bd,b1,ef,bd,b2,ef,bd,b3,ef,bd,b4,ef,bd,b5
Elapsed: 00:00:00.00
ops$admin@JAPAN>spool off
Tuesday, February 26th, 2008
承担更大的责任
体现更大的价值
获得更大的成长
Thursday, February 21st, 2008
在9i里面测试一下,create index/alter index rebuild 的同时,加上 compute statistics,表也会同时被分析。
这样就会比较矛盾:
如果这样做,新建的index统计信息会比较好,oracle会更好的判断是否走这个index。
但是表的统计信息此时也变了,因为和这表相关的sql还是比较多的,造成很多sql都重新解析,sql走错执行计划的机率也就变大。
如果不这样做,而是先create,然后再estimate statistics,然后再选择一个合适的sample再estiamte 一下。
这样对表的统计信息没有影响,相对影响较小。
但是新的index在创建完到分析之前这段时间,统计信息是不全面的。也会造成执行计划走错的可能。
10G对此作了修改,create index/alter index rebuild 的同时,加上 compute statistics,表不会被分析。
Wednesday, February 20th, 2008
UTF8字符集几乎包含了世界上所有的语言字符,应用程序需要在同一页面显示多种语言时,我们往往会选择将数据库的字符集定为UTF8,然而,这个字符集在使用的时候,会有一些困惑
1.客户段NLS_LANG与数据库一致的时候,数据存取不需要转码,所以多语言问题只要NLS_LANG=UTF8就搞定
NLS_LANG保持与数据库一致,oracle客户段软件确实不会对数据进行转码,但他更不会关心你输入的数据格式是否真的和数据库匹配,比如我windows的语言区域是简体中文,对应的字节编码是zhs16gbk,那么他就会把zhs16gbk编码原封不动的存入utf8数据库,明明想要馒头的你却给我砖头,但我还是通吃,只不过日后你再想把这部分东西当馒头用,就会遇到麻烦
[oracle@japdev_new ~]#export NLS_LANG=AMERICAN_AMERICA.UTF8
japan@JAPDEV>select value from v$nls_parameters where PARAMETER = ‘NLS_CHARACTERSET’;
VALUE
—————————————————————-
UTF8
japan@JAPDEV>insert into myword values(’垃圾’);
1 row created.
japan@JAPDEV>select dump(word) from myword;
DUMP(WORD)
——————————————————————————————————————————————————
Typ=1 Len=4: 192,172,187,248
1 row selected.
现在找个zhs16gbk的数据库,存入同样的数据
oracps@:/home/oracps>export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
bRealy Cocksuckerchamp Szh Artists V Sex Slave Cock Sucker Chapm Alib
aba DBA Team
» 2008
&ra
quo; Februaryu q Cock o o Cock x x Chapm Sex
gRealy Cocksuckerchamp Szh Artists V Sex Slave Cock Sucker Chapm Alib
aba DBA Team
» 2008
&ra
quo; Februaryg w Sucker Sex Cock