暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle数据库修改字符集以及ORA-39006和ORA-39213解决办法

304

本文详细描述了如何以sysdba身份登录并修改Oracle数据库的字符集,包括检查当前字符集、关闭和启动数据库、跳过超集检查进行更改以及处理可能的数据泵问题。最后,文章提到了执行sys.dbms_metadata_util.load_stylesheets来解决后续问题。

1、修改字符集前先备份好数据库,接着检查会话信息。
    sqlplus  as sysdba
    create pfile='/home/oracle/pfile_imng.ora' from spfile;
    select username,program ,count(*) from gv$session
    where username is not null group by username,program;
    2、查询数据库字符集编码
      select value from NLS_DATABASE_PARAMETERS 
      where parameter='NLS_CHARACTERSET';


      show parameter JOB_QUEUE_PROCESSES
      show parameter AQ_TM_PROCESSES
      3、以sysdba的身份登录
        集群模式关闭库:srvctl stop database -d 数据库名
        单机模式关闭库:
        sqlplus as sysdba
        shutdown immediate
        STARTUP MOUNT exclusive;
        ALTER SYSTEM ENABLE RESTRICTED SESSION;
        ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
        ALTER SYSTEM SET AQ_TM_PROCESSES=0;


        如果是集群,需要修改cluster_database参数为false
        alter system set cluster_database=false scope=spfile;

        4、修改字符集(改成你需要的字符集)

          STARTUP mount
          ALTER SYSTEM ENABLE RESTRICTED SESSION;
          alter database open;
          ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;
          ALTER DATABASE CHARACTER SET ZHS16GBK;

          这里可能会出错,提示ORA-12712: 新字符集必须为旧字符集的超集跳过超集检查做更改:

          ALTER DATABASE character set INTERNAL_USE ZHS16GBK;

          5、调整相关参数

            ALTER SYSTEM SET JOB_QUEUE_PROCESSES=1000;
            ALTER SYSTEM SET AQ_TM_PROCESSES=1;


            alter system set cluster_database=true scope=spfile;
            SHUTDOWN IMMEDIATE
            STARTUP

            6、再次查询,新数据库字符集已经变成ZHS16GBK

              show parameter cluster_database
              show parameter AQ_TM_PROCESSES
              show parameter JOB_QUEUE_PROCESSES
              select value from NLS_DATABASE_PARAMETERS
              where parameter='NLS_CHARACTERSET';

              7、你以为这样就完了么?这个时候可能数据泵无法使用,我就碰到了。

              我在执行Oracle数据库导入,遇到报错ORA-39006: internal error、ORA-39213: Metadata processing is not available。这还是第一次遇到。

              $ oerr ora 39213

                39213, 00000, "Metadata processing is not available"
                // *Cause: The Data Pump could not use the Metadata API. Typically,
                // this is caused by the XSL stylesheets not being set up properly.
                // *Action: Connect AS SYSDBA and execute dbms_metadata_util.load_stylesheets
                // to reload the stylesheets.

                所以继续执行下边脚本,重新加载样式表。

                execute sys.dbms_metadata_util.load_stylesheets;

                  SQL> conn /as sysdba
                  Connected.
                  SQL> execute dbms_metadata_util.load_stylesheets;
                  PL/SQL procedure successfully completed.

                  最后,重新执行impdp可以成功导入。


                  8、参考信息

                  (1)如何选择或更改数据库字符集 (NLS_CHARACTERSET) (文档 ID 1525394.1)

                  (2)Changing the NLS_CHARACTERSET to AL32UTF8 / UTF8 (Unicode) in 8i, 9i , 10g and 11g (文档 ID 260192.1)

                  文章转载自数据库运维之道,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论