软讯网络 > 冲浪宝典 > 网络资源 > Oracle 数据库字符集的更改
【标 题】:Oracle 数据库字符集的更改
【关键字】:
Oracle
【来 源】:http://www.cublog.cn/u/16308/showart.php?id=219521
Oracle 数据库字符集的更改
昨天boss让我写份关于oracle字符集更改的doc,现传上来,分享一下,8i和9i均能通过
在更改字符集之前,应该严格做好备份!在shutdown immediate之后对整个数据文件做一次cold buckup,以便在字符集更改失败时进行recover操作。
首先需要确认,在oracle9i库中,如果表中有包含clob字段,那么将不能允许对字符集进行修改,如果是用户表,可以先把该表导出==》drop==》转换完成后在导入,对于系统表,可以先truncate table Metastylesheet(这个表就是系统中包含clob字段的表),转换完成后使用脚本rdbms\admin\catmet.sql(windows),rdbms/admin/catmet.sql(unix)进行重建。
C:\Documents and Settings\zhouyu>sqlplus /nolog
SQL*Plus: Release 8.1.7.0.0 - Production on 星期四 12月 21 15:20:13 2006
(c) Copyright 2000 Oracle Corporation. All rights reserved.
SQL> conn sys/change_on_install as sysdba
已连接。
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA. ZHS16CGB231280
--这里是我机器上的字符集设置,为ZHS16CGB231280,现在要将它改为ZHS16GBK
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 213911580 bytes
Fixed Size 75804 bytes
Variable Size 108933120 bytes
Database Buffers 104824832 bytes
Redo Buffers 77824 bytes
数据库装载完毕。
SQL> show parameter job_queue_processes;
NAME TYPE VALUE
-------------- ------------ ---------------
job_queue_processes integer 10
SQL> show parameter AQ_TM_PROCESSES;
NAME TYPE VALUE
-------------- ------------ ---------------
job_queue_processes integer 2
--以上job_queue_processes和AQ_TM_PROCESSES参数先用show parameter命令查看出现在系统--使用的value,并且记录下来,以便更改后使用。
SQL> alter system enable restricted session;
系统已更改。
--该语句启动或关闭访问限制功能。在做更改时防止用户访问。
SQL> alter system set job_queue_processes =0;
系统已更改。
SQL> alter system set aq_tm_processes = 0;
系统已更改。
SQL> alter database open;
数据库已更改。
SQL> alter database character set INTERNAL_USE ZHS16GBK;
数据库已更改。
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
--可以看到,现在的字符集设置已经改为ZHS16GBK
现在需要将前面更改的job_queue_processes和aq_tm_processes参数改回来
命令如下:
SQL> alter system set job_queue_processes =10;
系统已更改。
SQL> alter system set aq_tm_processes = 2;
系统已更改。
并且对数据库取消访问限制:
SQL> alter system disable restricted session;
系统已更改。
到此,更改已经完成。请注意的是,在操作之前进行备份!不仅是指修改字符集的操作,任何不能确定影响结果的操作之前都应该对数据库进行备份。