最简单的办法是在你的本机上装个oracle客户端,安装完成后
在开始菜单中选择oracle-》配置和移植工具-->net manager
出来一个oracle net manager 的工具 其中选择 本地-》服务器命名
再点下左边的绿色加号,添加一个新的
第一步:网络服务名:这个填写你连接时需要使用的字符串可随便取名如test
第二步:选择TCP/IP
第三步:主机名:填写服务器IP 端口: 一般为1521
第四步:填写oracle的实例名
第五步:测试连通性
然后就完成了配置
打开pl/sql 会出来登录框 其中database中选择刚取的网络名(例如test)输入用户名密码即可连接1 备份数据库中所有用户的数据
以oracle用户登陆,执行以下命令
# export NLS_LANG = “SIMPLIFIED CHINESE_CHINAUTF8”
保持与数据库服务器端一致,这样在exp导出时,就不会存在字符的转换了,备份最原始的数据。
2 评估UTF8转换成ZHS16GBK的风险
转换之前,要使用Oracle的csscan工具对数据库扫描,评估字符集转换前后,数据有可能的损坏情况。如果评估情况糟糕,那就绝对要放弃了。
先安装属于 CSMIG 用户的一套表和过程。以oracle用户登陆UNIX,
#sqlplus “/ as sysdab”
SQL>@$ORACLE_HOME/ rdbms/admin/csminstsql
SQL>exit
# $ORACLE_HOME\bin\csscan -help
可以更清楚如何使用csscan。
# $ORACLE_HOME/bin/csscan system/sunday user=mmsc FROMCHAR=UTF8 TOCHAR=ZHS16GBK ARRAY=102400 PROCESS=3 > csscanlog
以上命令意思是扫描用户:mmsc中的所有数据,从字符集UTF8更改为ZHS16GBK的转换情况。然后得到三个文件:scantxt、scanout、scanerr。
查看scanout,scanerr,可以看出mmsc用户下的所有的数据都是可以转换的,并且没有出现转换“Exceptional”的情况,因此可以更放心一点。
3 更改数据库的字符集为ZHS16GBK
前面说过,通过命令“Alter Database Characeter Set XXXX”,实现从超集到子集的转换,在Oracle是不允许的。但是该命令,提供这样的命令方式:
Alter Database Character Set INTERNAL_CONVERT/ INTERNAL_USE XXXX
首先查看数据库编码:
select from nls_database_parameters where parameter ='NLS_CHARACTERSET';这个编码是否和你java的编码一致,如果不一致,建议先尝试修改java的编码,如果java编码不能改变,而且你有修改oracle码制的权限,并且可以修改(慎用!)
例如目前数据库环境的字符集是AL32UTF8,那么把它改成ZHS16GBK
1首先以sysdba的身份登录上去 conn /as sysdba
2关闭数据库shutdown immediate;
3以mount打来数据库,startup mount
4设置session
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
5启动数据库
alter database open;
6修改字符集
ALTER DATABASE CHARACTER SET ZHS16GBK;
这会可能会报错,提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改:
ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
这条语句就可以了,TERNAL_USE提供的帮助就会使oracle绕过了子集与超集的验证,这条语句和上面的语句内部 *** 作时完全相同的。
7关闭,重新启动
SQL>shutdown immediate;
SQL> startup
当然字符集最好不要轻易修改,因为这会对数据库的数据有直接的影响,如果是生产环境的话,可能会造成不可估计得损失。
1、查看服务器端编码
Select userenv('language') from dual;
我实际查到的结果为: AMERICAN_AMERICAUTF8(每人查到的可能不一样)
2、执行语句 select from V$NLS_PARAMETERS
查看第一行中PARAMETER项中为NLS_LANGUAGE对应的VALUE项中是否和第一步得到的值一样。
如果不是,需要设置环境变量。
3、设置环境变量
计算机-->属性--> 高级系统设置--> 环境变量 -->系统环境变量-->新建
设置变量名:NLS_LANG
变量值:第1步查到的值,AMERICAN_AMERICAUTF8(以你第一步查到的为准)--查看Oracle数据库字符集:
select userenv('language') from dual;
查询结果:
SIMPLIFIED CHINESE_CHINAAL32UTF8之前一个朋友在安装oracle10的时候遇到到建立实例时指定了UTF-8编码,但是程序用utf-8时还是会乱码,用实例指定为GBK编码就不会乱码了(程序还是用UTF-8编码)。现在公司开发时用的测试数据库,也是oracle10G编码是GBK,不过程序都是用的utf-8。
不过公司用的oracle11上实例编码用的就是UTF-8一切正常。前两天还从10上导数据到11上去,没有出现乱码。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)