本文详细描述了如何以sysdba身份登录并修改Oracle数据库的字符集,包括检查当前字符集、关闭和启动数据库、跳过超集检查进行更改以及处理可能的数据泵问题。最后,文章提到了执行sys.dbms_metadata_util.load_stylesheets来解决后续问题。
sqlplus as sysdbacreate pfile='/home/oracle/pfile_imng.ora' from spfile;select username,program ,count(*) from gv$sessionwhere username is not null group by username,program;
select value from NLS_DATABASE_PARAMETERSwhere parameter='NLS_CHARACTERSET';show parameter JOB_QUEUE_PROCESSESshow parameter AQ_TM_PROCESSES
集群模式关闭库:srvctl stop database -d 数据库名单机模式关闭库:sqlplus as sysdbashutdown immediateSTARTUP MOUNT exclusive;ALTER SYSTEM ENABLE RESTRICTED SESSION;ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;ALTER SYSTEM SET AQ_TM_PROCESSES=0;如果是集群,需要修改cluster_database参数为falsealter system set cluster_database=false scope=spfile;
4、修改字符集(改成你需要的字符集)
STARTUP mountALTER 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 IMMEDIATESTARTUP
6、再次查询,新数据库字符集已经变成ZHS16GBK
show parameter cluster_databaseshow parameter AQ_TM_PROCESSESshow parameter JOB_QUEUE_PROCESSESselect value from NLS_DATABASE_PARAMETERSwhere 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 sysdbaConnected.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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




