设为首页 收藏本站
查看: 516|回复: 0

[经验分享] 利用csscan转换ORACLE数据库的字符集

[复制链接]
YunVN网友  发表于 2016-8-13 06:27:42 |阅读模式
1.安 装Character Set Scanner
  参考:
  http://www.oracle.com/technetwork/database/globalization/index-085942.html
  一般地。安装oracle 系统就会有这个工具。

  bash-3.00$ which csscan

/orahome/oracle/product/11.2.0/dbhome_1/bin/csscan



  2.
  执行下面的命令:
  Csscan\"sys/<syspassword>@<TNSalias> as sysdba\" FULL=YFROMCHAR=WE8MSWIN1252TOCHAR=AL32UTF8LOG=dbcheck CAPTURE=N ARRAY=1000000 PROCESS=2
  
  3. 检查相关的输出文件
  $ ls dbch*
  dbcheck.err dbcheck.outdbcheck.txt

charcheck.out – 所有经过扫描的扫描项列表
charcheck.txt – 扫描结果的总结
charcheck.err – 扫描项中的异常
  
  对于某些可能在转换过程中丢失的数据或不能被转换成目标字符集的数据可以通过下面的SQL语句查询得到:f

  SELECT DISTINCTz.owner_name
  || '.'
  || z.table_name
  || '('
  || z.column_name
  || ') - '
  || z.column_type
  || ' ' LossyColumns
  FROMcsmig.csmv$errors z
  WHERE z.error_type='DATA_LOSS'
  ORDER BYLossyColumns;
  如果有 ORA-01401或者 ORA-12899的错误,你可以利用利用import再做处理,首先通过查看哪些列被标识成了”Truncation”,然后看哪些表中的列可能会被影响了。mportgo p

  你可通过下面的查询查看哪些列被标识了 "Truncation" 和新列所需要的最小长度。

conn / AS sysdba

SET serveroutput ON

DECLARE

newmaxsz NUMBER;

BEGIN

FOR rec IN

( SELECT DISTINCT u.owner_name,

u.table_name,

u.column_name ,

u.column_type,

u.owner_id,

u.table_id,

u.column_id,

u.column_intid

FROM csmv$errors u

WHERE u.error_type='EXCEED_SIZE'

ORDER BY u.owner_name,

u.table_name,

u.column_name

)

LOOP

SELECT MAX(cnvsize)

INTO newmaxsz

FROM csm$errors

WHERE usr# =rec.owner_id

AND obj# =rec.table_id

AND col# =rec.column_id

AND intcol#=rec.column_intid;


DBMS_OUTPUT.PUT_LINE(rec.owner_name ||'.'|| rec.table_name||' ('||rec.column_name ||') - '|| rec.column_type ||' - '|| newmaxsz || ' Bytes');

END LOOP;

END;

/

  
  4. 可以通过查询dbcheck.err来了解转换过程可能发生的错误。
  
  bash-3.00$more dbcheck.err
  DatabaseScan Individual Exception Report
  
  
  [DatabaseScan Parameters]
  
  Parameter Value
  ------------------------------------------------------------------------------
  CSSCANVersion v2.1
  InstanceName XXX
  DatabaseVersion 11.2.0.2.0
  Scantype Full database
  Scan CHARdata? YES
  Databasecharacter set WE8MSWIN1252
  FROMCHAR WE8MSWIN1252
  TOCHAR AL32UTF8
  Scan NCHARdata? NO
  Array fetchbuffer size 1000000
  Number ofprocesses 2
  Captureconvertible data? NO
  ------------------------------------------------------------------------------
  
  [DataDictionary individual exceptions]
  
  
  [Applicationdata individual exceptions]
  
  
  然后通过查询dbcheck.out对发生的异常进行处理。
  
  
  如果重新收集直方图的数据:
  $ORACLE_HOME/nls/csscan/sql/analyze_histgrm.sql
  
  EXECDBMS_STATS.DELETE_TABLE_STATS ('SERV_INFRA', ' SC_T_SERVICE_UP');
  EXECDBMS_STATS.DELETE_TABLE_STATS ('CAM', ' USERS');
  
  清除没有正确转换的应用
  /orahome/oracle/product/11.2.0/dbhome_1/apex
  connect /as sysdba
  @apxremov.sql
  
  5.再次执行转换:
  Conn/ as sysdba
  exec DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB')
  --execdbms_workload_repository.modify_snapshot_settings(interval => 0,retention=>1440);
  
  EXECDBMS_STATS.DELETE_TABLE_STATS ('SERV_INFRA', 'SC_T_SERVICE_UP');
  selectsystimestamp - dbms_stats.get_stats_history_availability from dual;
  execdbms_stats.alter_stats_history_retention(0);
  清除统计信息:
  execDBMS_STATS.PURGE_STATS(systimestamp);
  selectcount(*) from SYS.WRI$_OPTSTAT_HISTGRM_HISTORY;
  css.sh -the actual character set conversion checker ( creates dbcheck.* files)
  run_conv.sql- steps to run the conversion

  
  Csscan\"sys/<syspassword>@<TNSalias> as sysdba\" FULL=YFROMCHAR=WE8MSWIN1252TOCHAR=AL32UTF8LOG=dbcheck CAPTURE=N ARRAY=1000000 PROCESS=2
  
  导入没有转换的数据:
  impdpfull=n tables=metadata.log_request dumpfile=convert.dmp logfile=meta.logtable_exists_action=append

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-256906-1-1.html 上篇帖子: 《Oracle编程艺术》学习笔记(22)-表类型 下篇帖子: 如何搞垮他的数据库——谈Oracle安全
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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