现在的位置: 首页 > 综合 > 正文

oracle修改字符集

2013年08月19日 ⁄ 综合 ⁄ 共 1802字 ⁄ 字号 评论关闭

   一般来说,数据库在创建完成后就不能修改字符集了,如要修改字符集,需要对原有数据进行导入导出后重建数据
库来修改。但是也有一些例外的,如果从子集升级到超集,则可以直接修改而无需重建数据库。
   1.子集到超集,在8I/9I中,简单的修改步骤如下:
###############################################################################
SHUTDOWN IMMEDIATE;
-- make sure there is a database backup you can rely on, or create one
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE CHARACTER SET <new_character_set>;
-- a alter database takes typically only a few minutes or less,
-- it depends on the number of columns in the database, not the
-- amount of data.
SHUTDOWN;
-- If you use Oracle8 then also do:
STARTUP RESTRICT;
SHUTDOWN;
###############################################################################
但是,以上步骤只适用于8I/9I,对于10g,oracle明确指出不能这样干了,在10g,oracle提供了一个新工具CSALER来修改字符集。
   2.  10g用修改字符集,下面从的例子从ZHS16CGB231280修改为ZHS16GBK
       2.1关闭数据库并备份
       2.2使用csscan检查字符集转换是否可行
          @?/rdbms/admin/csminst.sql
          csscan SYSTEM/aceway FULL=y FROMCHAR=ZHS16CGB231280 TOCHAR=ZHS16GBK ARRAY=1024000 PROCESS=2
       2.3运行CSALTER修改字符集
          @?/rdbms/admin/csalter.plb
       2.4重启数据库
          shutdown immediate
          startup

   ZHS16GBK是ZHS16CGB231280的超集,可以直接修改字符集。

   CSSCAN扫描数据库的所有数据并测试字符集转换是否可行。 csscan有四种扫描模式:全库扫描、按用户扫描、按表扫描、按列扫描.
因为我们这里是测试改变全库的字符集,所以要用全库扫描模式,并且要求扫描用户有DBA权限:

   运行CSSCAN需要一系列的权限和表,因此需要先运行一个脚本(?/rdbms/admin/csminst.sql),否则会报错。

   默认情况下,CSSCAN扫描结束后,会产生三个文件:scan.txt、scan.err、scan.out,分别查看这三个文件,如果没有异常,方可以继续修改。

   CSSCAN会把最近一次执行扫描的参数写入表csm$parameters中,这个表的参数非常重要,它决定着下一步进行字符集转换需要的参数,如要转成什么字符集等。
   CSALTER是10g新推出的用于修改oracle字符集的工具,它位于$ORACLE_HOME/RDBMS/ADMIN/中,其实这个工具并不神秘,它只不过是把文章开头提到的9i中修改字符集的主要步骤写成脚本,
并新增一些自动检查功能,简化操作并尽量避免错误产生。
   CSSCAN参数说明:
      username/password :数据库用户名和口令,需要有dba权限
      FULL :是否进行全库扫描
      FROMCHAR :原字符集,可以省略,默认为连接数据库的当前字符集
      TOCHAR :目标字符集
      ARRAY :读取数据的缓冲区大小
      PROCESS :同时启动几个进程进行扫描

抱歉!评论已关闭.