??xml version="1.0" encoding="utf-8" standalone="yes"?>
建库旉用utf8~码Q表也是utf8~码。对中文应该是支持的。排除数据库的问题?br />
只能从要导入的文本文件考虑Q将其编码用ultraEdit转换~码为utf8后,q行导入Q成功导入。数据也没有出现错误?nbsp;
本h在ؓ某电厂mis(oracle数据?数据采用oracle的导入导出工具从windows ntq_UL到digital unixq_旉到的关于字符集的问题和ȝ出的l验与大家来分n?
1. UL环境
原操作系l^収ͼ windows nt
数据库: oracle 8.0.5 for windows nt
服务器:hp netserver lh3
目标操作pȝq_Qdigital unix alpha v4.0
数据库:oracle 8.0.4 for digital unix
服务器:alphaserver es40 型?
2. 数据导出
在nt服务器上用oracle导出工具q行数据导出,oracle导出工具有命令行和图形界面两U方式?
本h直接用命令行方式q行数据导出Q?
c:> exp80 gxmisdba/manager file=c:expdat.dmp log=c:export.log
卛_导出指定的用?..
. 正在导出用户gxmisdba的外部函数程序库名称
. 正在导出用户gxmisdba的对象类型定?
卛_导出gxmisdba的对?...
. 正在导出数据库链?
. 正在导出序号
. 正在导出集定义
. 卛_导出gxmisdba的表通过常规路径 ...
. . 正在导出? aaaaa 0 行被导出
. . 正在导出? evt_carrier_configuration 0 行被导出
. . 正在导出? tbl_aj_agks 331 行被导出
.
.
.
. 正在导出同义?
. 正在导出视图
. 正在导出存储的过E?
. 正在导出参考资料一致性约束条?
. 正在导出触发?
. 正在导出后期表活?
. 正在导出快照
. 正在导出快照日志
. 正在导出作业队列
. 正在导出hl和子组
在没有警告的情况下成功终止导出?
3.数据导入
在nt服务器上通过ftp命o导出的输出转存二进制文件expdat.dmp(使用binary传输模式)传输至digital unix服务器上?
用oracle for digital unix 数据导入工具命o行方式进行数据导?
$imp gxmisdba/manager file=/expdat.dmp full=y log=u01import.log
connected to: oracle8 enterprise edition release 8.0.4.0.0 - production
pl/sql release 8.0.4.0.0 - production
export file created by export:v08.00.05 via conventional path
. importing gxmisdbas objects into gxmisdba
. . importing table "aaaaa" 0 rows imported
. . importing table "evt_carrier_configuration" 0 rows imported
. . importing table "tbl_aj_stk" 331 rows imported
imp-00017: following statement failed with oracle error 2437:
"alter table "tbl_kj_jlry" add constraint "pk_tbl_kj_jlry" primary key ("fld_kj_jlry_bh","fld_kj_jlry_xm") using index pctfree 10 initrans 2 maxtrans 255 storage (initial 10240 next 10240 minextents 1 maxextents 2147483645 pctincrease 50 freelists 1 freelist groups 1 buffer_pool default)"
" enable novalidate"
imp-00003: oracle error 2437 encountered
ora-02437: cannot enable (gxmisdba.pk_tbl_kj_jlry) - primary key violated
.
.
.
import terminated successfully with warnings.
数据导入出现20多个以上cM错误Q后分析其中报错?tbl_aj_stk"表,发现"fld_kj_jlry_xm"字段?关键字组成之一)Z文字W而在digital unix服务器oracle数据库中"fld_kj_jlry_xm"字段值显C的?????"(在客L用oracle sql plus查看)Q从而造成关键字冲H?
在客Loracle sql plusҎ行显C?????"的字DD行修改,如改成中文值”测试?提交后,用sql语句查看Q刚修改的行中显C?????"的字D值变成了”测试”,q说明了digital unin服务器上的oracle数据集可以存储中文字W,但oracle 8.0.4 for digital unin的导入工具imp未能oracle 8.0.5 for windows nt imp80导出的中文数据进行{换?
4.查看字符集参?
4.1查看oracle 8.0.5 for windows nt props$内容
sql> connect sys/change_on_install
sql> col value$ format a40
sql> select name,value$ from props$;
name value$
---------------------------------------
dict.base 2
nls_language american
nls_territory america
nls_currency $
nls_iso_currency america
nls_numeric_characters .,
nls_calendar gregorian
nls_date_format dd-mon-yy
nls_date_language american
nls_characterset zhs16gbk
nls_sort binary
nls_nchar_characterset zhs16gbk
nls_rdbms_version 8.0.5.0.0
global_db_name oracle.world
export_views_version 7
已选择15行?
4.2查看oracle 8.0.4 for digital unin 的props$内容
sql> connect sys/change_on_install
sql> col value$ format a40
sql> select name,value$ from props$;
name value$
---------------------------------------
dict.base 2
nls_language american
nls_territory america
nls_currency $
nls_iso_currency america
nls_numeric_characters .,
nls_calendar gregorian
nls_date_format dd-mon-yy
nls_date_language american
nls_characterset zhs16cgb231280
nls_sort binary
nls_nchar_characterset zhs16cgb231280
nls_rdbms_version 8.0.4.0.0
global_db_name orcl.world
export_views_version 7
15 rows selected.
发现oracle 8.0.4 for digital unin 采用了oracle在digital unix环境下徏议的中文字符集zhs16cgb231280,两者的字符集不同,于是本h在digital unin服务器上重新安装oracleQ选择了与nt上同L字符集zhs16gbk(中国体汉?6位国标库)。安装完成后Q通过查看props$的内容,认了oracle 8.0.4 for digital unin和oracle 8.0.5 for windows nt的字W集一致。于是用oracle 8.0.4 for digital unin的导入工具imp重新q行数据导入Q但q是报同L错误Q问题还未得到解冟?
5.问题解决办法
后来本h发现在oracle 8.0.5 for windows nt的服务器(或装有oracle 8.0.5 for windows 95/98的工作站)上直接用oracle 8.0.5 for windows nt的导入工具imp80q程对oracle 8.0.4 for digital unin数据库进行数据导入,问题竟得到解冟?
5.1在nt的服务器上,修改tnsnames.ora(或通过oracle net8 easy config)讄数据库连接字W串gxmis(可自行设?指向oracle 8.0.4 for digital unin服务器?
5.2在nt的服务器上进行数据远E导?
c:>imp80 gxmisdba/manager@gxmis file=c:expdat.dmpfull=y log=c:import.log
已连接到Qoracle8 enterprise edition release 8.0.4.0.0 - production
pl/sql release 8.0.4.0.0 - production
l由常规路径导出由export:v08.00.05创徏的文?
. 正在gxmisdba的对象导入到 gxmisdba
. . 正在导入?"aaaaa" 0行被导入
. . 正在导入?"evt_carrier_configuration" 0行被导入
. . 正在导入?"tbl_aj_agks" 331行被导入
.
.
.
准备启用U束条g...
成功l止导入
5.3把oracle 8.0.4 for digital unin字符集重新又Ҏzhs16cgb231280,q行数据q程导入试Q数据也同样地导入成功。说明zhs16cgb231280字符集可以兼容zhs16gbk字符集?
6.l验ȝ
6.1在oracle 8.0.4 for digital unin服务器上(字符集zhs16gbk)?.0.4 for digital unin的导出工具exp已正常(卛_存储和显CZ?的数据库导出?
$ exp gxmisdba/manager file=/u01/expdat.dmp log=/u01/export.log
昄成功导出?
在用oracle 8.0.4 for digital unin的导入工具impq行导入
$imp gxmisdba/manager file=/u01/expdat.dmp full=y log=u01import.log
错误又重现?
6.2在nt服务器上通过ftp命o在oracle 8.0.4 for digital unin服务器上刚导出的输出转存二进制文件expdat.dmp下蝲至nt服务器上Q用imp80q行q程导入?
c:>imp80 gxmisdba/manager@gxmis file=c:expdat.dmp full=y log=c:import.log
已连接到Qoracle8 enterprise edition release 8.0.4.0.0 ?production
pl/sql release 8.0.4.0.0 ?production
imp-00016: 不支持要求的字符集{换(从类??52Q?
imp-00000: 未成功终止导?
6.3在nt服务器上对digital unin服务器上的数据进行远E导?备䆾)
c:>exp80 gxmisdba/manager@gxmis file=c:expdat.dmp log=c:export.log
昄成功导出。再q行q程导入
c:>imp80 gxmisdba/manager@gxmis file=c:expdat.dmp full=y log=c:import.log
昄成功导入。通过客户端oracle sql plus查看中文昄正常?
从而说明在oracle 8.0.4 for digital unin服务器上对含有中文的数据库的数据UL、备份、数据恢复不要用oracle 8.0.4 for digital unin本n自带的导入导出工具imp,expQ应使用能进行中文导入导出的工具Q如imp80,exp80?