深入浅出oracle ebs之字符集与转换_第1页
深入浅出oracle ebs之字符集与转换_第2页
深入浅出oracle ebs之字符集与转换_第3页
深入浅出oracle ebs之字符集与转换_第4页
深入浅出oracle ebs之字符集与转换_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

OracleERPE-BusinessOracle应用技术 Creation October29,Last October23, ReferenceNumber> DRAFT1A<Approver <Approver Copy ControlChange4DraftNoPrevious Copy1LibraryProject2Project34NoteToIfyoureceiveanelectroniccopyofthis andprintitout,pleasewriteyournameontheequivalentofthecoverpage,for controlpurposes.Ifyoureceiveahardcopyofthis,pleasewriteyournameonthefrontcover,forcontrolpurposes. Code Character Cloneand Materialized LossDatainSys Exceed User Background 组合字 系 对 Set Loss Exceed System SYS. SYS. SYS. SYS. SYS. SYS. SYS. Index DBCharacterSetChangingMethod ALTERDATABASECHARACTER CombinationofALTERDATABASECHARACTERSETand Inline ConvertOracleApplicationtoNewCharacterSet DB APPSORA DatabasePackagesand FormResource APPLTEMP OpenandClosedIssuesforthis Open Closed CodeCodePoint就是字符的“内码”,即数据实际将以怎样的二进制串。以“杨”为ZHS16CGB231280的CodePoint是D1EE,UTF8的CodePoint是E69DA8;以“A”为例,ZHS16CGB231280的CodePoint是41,UTF8的CodePoint也是41。可以用RAWTOHEX函数看字符的CodePoint,配合Convert函数,就基本可以看任何字符集的CodePoint,如selectrawtohex(convert('A','UTF8fromdual;也可以使用LocaleBuilder工具可以查看字符集的CodePoint表,该工具在 mon/nls/lbuilder下,如果要看UTF8的CodePoint,需要 同一个字,在不同字符集下CodePoint可能相同也可能不同;如果字符集A所有的字符在字符集B中都存在,并且CodePoint也相同,这个时候我们说字符集A是字符集B的Select*Fromnls_database_parametersSIMPLIFIED_.ZHS16GBKCharacter下面是UCS-2和UTF8的CodePointUCS-2bitUTF-8bitUTF-8byte70x0000-1(内码相同0x0080-110xxxxx20x0800-1110xxxx10xxxxxx3Character,RecementCharacter通常是一个问号“?”。以“珺”,用LocalBuilder搜索ZHS16CGB23128文件找不到该字,Oracle的ZHS16CGB231280中并没有“珺”的编码;搜索UTF8文件,则可以找到,在如果在PL/SQLDeveloper(操作系统NLS_LANG和数据库一样)中把“珺”Insert到是乱码,它是无法用函数转成其他字符集的、在中也是报告为Loss以通过设置PL/SQLDeveloper的Grid的字体来验证。CharacterSetScanner是Oracle提供的字符集扫描工具,可从OTN,扫描需要通过扫描可以发现几类数据:Changeless(CodePoint相同)、Convertible(CodePoint不同但可以找到对应的内码)、ExceedSize(CodePoint不同且可以找到对应的CSSNCvertile、ExeedSze、Lss6csmg$csscansystem/managerFULL=YFROMCHAR=ZHS16CGB231280TOCHAR=UTF8ARRAY=102400PROCESS=1CAPTURE=Y。Cloneand Object Char类型的数据,极可能出现ExceedSize错误。原因很简单,因为Char类型字段,其MaterializedLossDatainSysExceedMetalink124721.1说“NEVERextendacolumninorderto modatetheexistingdata”,这个是有道理的。修改字段的风险是无法估计的:Oracle升级/Patch是否会不再满足字段长度的要求;Form中字段的MaxLength默认都和做Form时数据库字段User是Export/Import,字符集转换没有转换这些数据;而加密基础是的CodePoint,由于新环境下字符相同的同一串,其CodePoint不同,这样,用同样的算法加密Background一些程序,如Job、Schedule的ConcurrentProgram、系统的回写等,他们可ConcurrentManager停掉再运行CSSCAN。OracleDBLink可以自动进行字符集转换,所以不用当心不同字符集Instance之间的连从本DB读:对本DB没有影响,但系统如果读到自己没有编码的字符,就会变成乱ZH16CGB231280广多了);或者读到的字符转成自己的编码后ExceedSize了(比如UTF8系统从ZH16CGB231280系统读数,所以目前BIS系统的字段基本是EBS的3SetLoss有在新字符集下一一更新成正确的CodePoint了。Exceed一是用ROWID,速度最快,适合单个修改。Scan出来结果会哪个表哪个ROWID哪个字段有问题,可以直接用UpdateTable_NameSetField_Name=New_DataWhereROWID=SCAN_ROWIDandField_Name=OLD_DATA。后面这个条件是个二是用Rece,适合有规律的批量修改,全表扫描全表更新。比如要把某一字段中所有“XXX中民XXX”改为“XXX X”,语句:UpdateTable_NameSetField_Name=Rece(Field_Name,’中民’,’中国’)。第三,ROWID可能变了,那么也可以通过UpdateTable_NameSetField_Name=New_DataWhereField_Name=OLD_DATA,该方法全表扫描、局部System SYS.SYS. SYS.SYS.SYS.SYS.SYS.源代码包含和新字符集CodePoint不同的字符,这个问题比较常见,因为代码中通常如果源代码没有Loss和ExceedSize数据,也可以采用Inline转换的方法,即用Convert函数转换CodePoint(这一步可以和处理用户数据时一起处理),再用AlterObject_TypeOwner_Name.Object_NameCompile。<Stopallqueueswithdbms_aqadm.stop_queue(queue_name=>'<queuename>');>SHUTDOWN<doafulldatabasebackup>STARTUPMOUNT;ALTERSYSTEMENABLERESTRICTEDSESSION;ALTERSYSTEMSETJOB_QUEUE_PROCESSES=0;ALTERSYSTEMSETAQ_TM_PROCESSES=0;ALTERDATABASEOPEN;<makesurewhatthecurrentcharactersetiswiththefollowingselect:selectvaluefromnls_database_parameterswhere<settheNLS_LANGenvironmentvariabletothesamethecharacterset<exportsys.RULE$<exportanyotherconvertible(user)dataifthereisanyleft>TRUNCATETABLESYS.METASTYLESHEET;TRUNCATETABLE<truncateordeletetheother(user)datathatwasexportedALTERDATABASECHARACTERSETINTERNAL_USE<new_character_set>;SHUTDOWNIMMEDIATE;STARTUPALTERSYSTEMENABLERESTRICTEDSESSION;ALTERSYSTEMSETJOB_QUEUE_PROCESSES=0;ALTERSYSTEMSETAQ_TM_PROCESSES=0;ALTERDATABASEOPEN;<makesurethatNLS_LANGisstillsetthesameaswhentheexportwasdone<importsys.RULE$<importanyotherdatathatwasexportedUPDATESYS.JOB$SETNLSENV=CONVERT(NLSENV,<newcharacterset>,'<oldcharacterset>');<For9.2:<For9.0.1:SHUTDOWNIMMEDIATE;<startthequeuesagainIndex运行请求RebuildHelpSearchIndex(实际调用$FND_TOP/sql/aflobbld.sql)的时候$sqlplusSQL>dropindexFND_LOBS_CTX;SQL>exit;$cd$FND_TOP/admin/sql(或者sqlplusSQL>startAFLOBCX3.sqlapplsysDBCharacterSetChangingMethodALTERDATABASECHARACTER为仅仅是修改数据库的字符集申明,并不改变实际数据的CodePoint。所以如果旧字CombinationofALTERDATABASECHARACTERSETandALTERDATABASECHARACTERSETInline对于那些Convertible的数据,从底层看,当用ALTERDATABASECHARACTERSET改变数据库字符集之后,其CodePoint还是原始的CodePoint。Setcolumn_nameconvert(column_name,’New_CS’,’OLD_CS’)直接处理,同++ALTERDATABASECHARACTERConvertOracleApplicationtoNewCharacter cdautoconfigcontextfile=<SID>.xmlConvertcharacterGeneratemessageGenerateformGeneratereportGenerateproductJARCompile$IAS_ORACLE_AddTypetext/htmlhtmhtml改为AddType"text/html;charset=utf-8"htm$ORACLE_DBDB$ORACLE_APPSORA$ORACLE_$ORACLE_添加NLS_LANG="AMERICAN_AMERICA.UTF8";exportNLS_LANG,如果没有的DatabasePackagesandFormResourcecd$ORACLE_HOME/forms60/admin/resource/ZHScpfmrweb.resfmrweb.res.bakcpfmrweb_utf8.res !

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论