导航:首页 > 程序命令 > oracle修改字符集命令

oracle修改字符集命令

发布时间:2023-04-15 01:39:06

A. 如何修改oracle的字符集编码

1. 备份数据库乱辩中所有用户的数据
以oracle用户登陆,执行以下命令
# export NLS_LANG = “SIMPLIFIED CHINESE_CHINA.UTF8”
保持与数据库服务器端一致,这样在exp导出时,就不会存在字符的转换了,备份最原始的数据。
2. 评估UTF8转换成ZHS16GBK的风险
转换之前,要使用Oracle的csscan工具对数据库扫描,评估字符集转换前后,数据有可能的损坏情况。如果评估情况糟糕,那就绝对要放弃了。孙陪陵
先安装属于 CSMIG 用户的一套表和过程。以oracle用户登则戚陆UNIX,
#sqlplus “/ as sysdab”
SQL>@$ORACLE_HOME/ rdbms/admin/csminst.sql
SQL>exit
# $ORACLE_HOME\bin\csscan -help
可以更清楚如何使用csscan。
# $ORACLE_HOME/bin/csscan system/sunday user=mmsc FROMCHAR=UTF8 TOCHAR=ZHS16GBK ARRAY=102400 PROCESS=3 > csscan.log
以上命令意思是扫描用户:mmsc中的所有数据,从字符集UTF8更改为ZHS16GBK的转换情况。然后得到三个文件:scan.txt、scan.out、scan.err。
查看scan.out,scan.err,可以看出mmsc用户下的所有的数据都是可以转换的,并且没有出现转换“Exceptional”的情况,因此可以更放心一点。
3. 更改数据库的字符集为ZHS16GBK
前面说过,通过命令“Alter Database Characeter Set XXXX”,实现从超集到子集的转换,在Oracle是不允许的。但是该命令,提供这样的命令方式:
Alter Database Character Set INTERNAL_CONVERT/ INTERNAL_USE XXXX

B. 怎么修改oracle11G字符集

有2种方法可行弊氏。
1. 如果需要修改字符集,通常需要导出数据库数据,重建数据库,再导入数据库数据的方式来转换。
2. 通过竖卜渣ALTER DATABASE CHARACTER SET语句修改字符集,但创建数据库后修改字余悄符集是有限制的,只有新的字符集是当前字符集的超集时才能修改数据库字符集,例如UTF8是US7ASCII的超集,修改数据库字符集可使用ALTER DATABASE CHARACTER SET UTF8。

C. oracle 10如何修改字符集

1.修改服务器端oracle默认字符集:打开“开始菜单”,在“运行”里输入“cmd”,回车,进入命令行编
辑模式。输入“sqlplus /nolog”,源如晌回车。修改默认字符集,以sysdba的身份执行SQL语句。输入“conn
sys/password@orcl as sysdba;”,回车。输入“select name,value$ from props$ where
name like
’雹锋%NLS%’;”,查看默认字符集。找到“NLS_CHARACTERSET”,其值为“WE8ISO8859P1”。
2.修改客户端sqlplus默认字符集:打开“开始菜单”,
在“运行”里输入“regedit”,回车,进入注册表编辑器。按CTRL+F,输入“NLS_LANG”,回车,找橡举到sqlplus软件目录下的
NLS_LANG,其键值为“WE8ISO8859P1”。双击“NLS_LANG”,输入“ZHS16GBK”,点击“确定”按钮保存重启计算
机。

D. 怎么改oracle注册表的字符集编码

通过注册表修改 x0dx0a HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0 x0dx0a NLS_LANG 改为你需要的字告基符集袜孙谨凯粗. x0dx0ax0dx0a常用字符集(暂时只收集到两个) x0dx0a AMERICAN_AMERICA.WE8ISO8859P1 x0dx0a SIMPLIFIED CHINESE_CHINA.ZHS16GBK x0dx0a american_america.AL32UTF8x0dx0ax0dx0a 1--------- AMERICAN_AMERICA.zhs16gbk x0dx0a 2--------- AMERICAN_AMERICA.utf8

E. 如何修改oracle客户端字符集

安装oracle数据库和客户端都,打开plsql,如果字符集不一致会弹出这样的提示

说一下修改方法,通过cmd命令打开注册表,命令:regedit

打开后找到HKEY_LOCAL_MACHINE下的SOFTWARE

SOFTWARE下有Oracle选项,自己查找即可找到纳厅

oracle下有好几个目录,可以都点点,散态因为目录名字可能不一样,不能肯定的说就是跟我的截图一样,可以明确的是,我们要找的注册项就是NLS_LANG

找到后双击进行编辑,小编的简冲茄源体中文nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK,想修改成其他字符集,编辑后保存即可

F. 如何更改Oracle字符集

转载自寒思国内最常用的Oracle字符集ZHS16GBK(GBK
16-bit
Simplified
Chinese)能够支持繁体中文,并且按照2个字符长度存储一个汉字。UTF8字符集是多字节存储,1个汉字(简体、繁体)有时采用3个字符长度存储。
Oracle支持字符集的更改,但是UTF8是Oracle中最大的字符集,也就是说UTF8是ZHS16GBK的严格超丛厅集。
对于子集到超集的转换,Oracle是允许的,但是对于超集到子集的转换是不允许的。一般对于超集到子集的转换,建议是通过dbca删除原来的数据库,重新再建库,选择正确的字符集,然后导入备份。
我的方案是:先备份数据,然后强制转换字符集从UTF8到ZHS16GBK,然后导入备份数据。如果不行,才来重新建库,设置字符集ZHS16GBK,导入备份数据。如果这还不行,就把更改字符集从ZHS16GBK到UTF8(这是安全的),再导入备份数据,恢复到原始状况。这样就有可能避开重新建库的麻烦。
1.
备份数据库中所有用户的数据
以oracle用户登陆,执行以下命令
#
export
NLS_LANG
=
“SIMPLIFIED
CHINESE_CHINA.UTF8”
保持与数据库服务器端一致,这样在exp导出时,就不会存在字符的转换了,备份最原始的数据。
2.
评估UTF8转换成ZHS16GBK的风险
转换之前,要使用Oracle的csscan工具对数据库扫描,评估字符集转换前后,数据有可能的渗弯隐损坏情况。如果评估情况糟糕,那就绝对要放弃了。
先安装属于
CSMIG
用户的一套表和过程。以oracle用户登陆UNIX,
#sqlplus
“/
as
sysdab”
SQL>@$ORACLE_HOME/
rdbms/admin/csminst.sql
SQL>exit
#
$ORACLE_HOME\bin\csscan
-help
可以更清楚如何使用csscan。
#
$ORACLE_HOME/bin/csscan
system/sunday
user=mmsc
FROMCHAR=UTF8
TOCHAR=ZHS16GBK
ARRAY=102400
PROCESS=3
>
csscan.log
以上命令意思是扫描用户:mmsc中的所有数据,从字符集UTF8更改为ZHS16GBK的转换情况。然后得到三个文件:scan.txt、scan.out、scan.err。
查看scan.out,scan.err,可以看出mmsc用户下的所有的数据都是可以转换的,并且没有出现转换“Exceptional”的情况,因此可以更放心一点。
3.
更改数据库的字符集为ZHS16GBK
前面说过,通过命令“Alter
Database
Characeter
Set
XXXX”,实现从超集到子集的转换,在Oracle是不允许的。但是该命令,提供这样的命令方式:
Alter
Database
Character
Set
INTERNAL_CONVERT/
INTERNAL_USE
XXXX
这是Oracle的非公开命令。“在使用这个命令时,Oracle会跳过所有子集及超集的检查,在任意字符集之间进行强制转换,所以,使用这个命令时你必须十分小心闹亮,你必须清楚这一操作会带来的风险”。
以oracle用户登陆UNIX,
#sqlplus
“/
as
sysdba”
SQL>
SHUTDOWN
IMMEDIATE;
SQL>
STARTUP
MOUNT;
SQL>
ALTER
SESSION
SET
SQL_TRACE=TRUE;
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
ZHS16GBK;
//如果不使用“INTERNAL_USE”参数,系统会提示出错:
//ERROR
at
line
1:
//ORA-12712:
new
character
set
must
be
a
superset
of
old
character
set
SQL>
ALTER
SESSION
SET
SQL_TRACE=FALSE;
SQL>
SHUTDOWN
IMMEDIATE;
SQL>
STARTUP;
此时,检查一下数据库的字符集是否更改过来
SQL>
select
value$
from
props$
where
name=’NLS_CHARACTERSET’;
VALUE$
-----------------
ZHS16GBK
紧接着检查一下数据库中简体中文、繁体中文是否正常,不会出现乱码。
SQL>select
spid,spname,spshortname
from
spinfovisual_hk
…...
非常不幸,我看到了一堆乱码,这也证明了Oracle不支持字符集从超集到子集的更改,当时心里很紧张,很怕失败,从而恢复到原样。
但是根据以前的验证,把UTF8下的备份导入到ZHS16GBK中去,是OK的,所以继续尝试。
4.
导入备份的用户数据
还是以oracle用户登陆UNIX,
先删除库中的用户mmsc:
#sqlplus
“/
as
sysdba”
SQL>drop
user
mmsc
cascade;
SQL>exit
再运行createuser.sql,生成mmsc用户。
然后使用原来的备份文件,导入到mmsc用户中:
注意:先设置NLS_LANG要与当前数据库的一致:ZHS16GBK。这样,导出时用户会话的NLS_LANG为UTF8,与原先的数据库字符集一致;现在为ZHS16GBK,与此时的数据库字符集一致。这样,导入时,就会进行字符转换。
#
export
NLS_LANG
=
“SIMPLIFIED
CHINESE_CHINA.ZHS16GBK”
#imp
mmsc/mmsc@mdspdb
file=DSMPD113_user_mmsc.dmp
ignore=y
fromuser=mmsc
touser=mmsc
马上查看数据库中简体、繁体中文,哈哈,没有乱码了,一切显示正常。
紧接着进行验证,也证明了:1个汉字此时只占用2个字符长度。问题解决了!

G. 详细介绍oracle数据库字符集

一 什么是oracle字符集

Oracle字符集是一个字节数据的解释的符号集合 有大小之分 有相互的包容关系 ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储 处理 检索数据 它使数据库工具 错误消息 排序次序 日期 时间 货币 数字 和日历自动适应本地化语言和平台

影响oracle数据库字符集最重要的参数是NLS_LANG参数 它的格式如下:

NLS_LANG = language_territory charset

它有三个组成部分(语言 地域和字符集) 每个成分控制了NLS子集的特性 其中:

Language 指定服务器消息的语言 territory 指定服务器的日期和数字格式 charset 指定字符集 如:AMERICAN _ AMERICA ZHS GBK

从NLS_LANG的组成我们可以看出 真正影响数据库字符集的其实是第三部分 所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据 前面影响的只是提示信息是中文还是英文

二 如何查询Oracle的字符集

很多人都碰到过因为字符集不同而使数据导入失败的情况 这涉及三方面的字符集 一是oracel server端的字符集 二是oracle client端的字符集;三是dmp文件的字符集 在做数据导入的时候 需要这三个字符集都一致才能正确导入

查询oracle server端的字符集

有很多种方法可以查出oracle server端的字符集 比较直观的查询方法是以下这种:SQL>select userenv( language ) from al;

结果类似如下:AMERICAN _ AMERICA ZHS GBK

如何查询dmp文件的字符集

用oracle的exp工具导出的dmp文件也包含了字符集信息 dmp文件的第 和第 个字节记录了dmp文件的字符集 如果dmp文件不大 比如只有几M或几十M 可以用UltraEdit打开( 进制方式) 看第 第 个字节的内容 如 然后用以下SQL查出它对应的字符集:

SQL> select nls_charset_name(to_number( xxxx )) from al;

ZHS GBK

如果dmp文件很大 比如有 G以上(这也是最常见的情况) 用文本编辑器打开很慢或者完全打不开 可以用以下命令(在unix主机上):

cat exp dmp |od x|head |awk {print $ $ } |cut c

然后用上述SQL也可以得到它对应的字符集

查询oracle client端的字符集

这个比较简单 在windows平台下 就是注册表里面相应OracleHome的NLS_LANG 还可以在dos窗口里面自己设置 比如:

set nls_lang=AMERICAN_AMERICA ZHS GBK

这样就只影响这个窗口里面的环境变量

在unix平台下 就是环境变量NLS_LANG

$echo $NLS_LANG

AMERICAN_AMERICA ZHS GBK

如果检查的结果发现server端与client端字符集不一致 请统一修改为同server端相同的字符集

三 修改oracle的字符集

上文说过 oracle的字符集有互相的包容关系 如us ascii就是zhs gbk的子集 从us ascii到zhs gbk不会有数据解释上的问题 不会有数据丢失 在所有的字符集中念做utf 应该是最大 因为它基于unicode 双字凳高竖节保存字符(也因此在存储空间上占用更多)

一旦数据库枣大创建后 数据库的字符集理论上讲是不能改变的 因此 在设计和安装之初考虑使用哪一种字符集十分重要 根据Oracle的官方说明 字符集的转换是从子集到超集受支持 反之不行 如果两种字符集之间根本没有子集和超集的关系 那么字符集的转换是不受oracle支持的 对数据库server而言 错误的修改字符集将会导致很多不可测的后果 可能会严重影响数据库的正常运行 所以在修改之前一定要确认两种字符集是否存在子集和超集的关系 一般来说 除非万不得已 我们不建议修改oracle数据库server端的字符集 特别说明 我们最常用的两种字符集ZHS GBK和ZHS CGB 之间不存在子集和超集关系 因此理论上讲这两种字符集之间的相互转换不受支持

修改server端字符集(不建议使用)

在oracle 之前 可以用直接修改数据字典表props$来改变数据库的字符集 但oracle 之后 至少有三张系统表记录了数据库字符集的信息 只改props$表并不完全 可能引起严重的后果 正确的修改方法如下:

$sqlplus /nolog

SQL>conn / as sysdba;

若此时数据库服务器已启动 则先执行SHUTDOWN IMMEDIATE命令关闭数据库服务器 然后执行以下命令:

SQL>STARTUP MOUNT;

SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;

SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES= ;

SQL>ALTER SYSTEM SET AQ_TM_PROCESSES= ;

SQL>ALTER DATABASE OPEN;

SQL>ALTER DATABASE CHARACTER SET ZHS GBK;

SQL>ALTER DATABASE national CHARACTER SET ZHS GBK;

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP

修改dmp文件字符集

上文说过 dmp文件的第 第 字节记录了字符集信息 因此直接修改dmp文件的第 第 字节的内容就可以 骗 过oracle的检查 这样做理论上也仅是从子集到超集可以修改 但很多情况下在没有子集和超集关系的情况下也可以修改 我们常用的一些字符集 如US ASCII WE ISO P ZHS CGB ZHS GBK基本都可以改 因为改的只是dmp文件 所以影响不大

具体的修改方法比较多 最简单的就是直接用UltraEdit修改dmp文件的第 和第 个字节 比如想将dmp文件的字符集改为ZHS GBK 可以用以下SQL查出该种字符集对应的 进制代码:

SQL> select to_char(nls_charset_id( ZHS GBK ) xxxx ) from al;

然后将dmp文件的 字节修改为 即可

lishixin/Article/program/Oracle/201311/17875

H. 如何查看和修改Oracle数据库服务器端的字符集

  1. A、oracle server 端字符集查询

    select userenv('language') from al

    其中NLS_CHARACTERSET 为server端字符集

    NLS_LANGUAGE 为 server端字符显示形式

    B、查询oracle client端的字符集

    $echo $NLS_LANG

    如果发现你select 出来的数据是乱码,请把client端的字符集配置成与linux操作系统相同的字符集。如果还是有乱码,则有可能是数据库中的数据存在问题,或者是oracle服务端的配置存在问题。

    C、server端字符集修改

    将数据库启动到RESTRICTED模式下做字符集更改:

    SQL> conn /as sysdba Connected.

    SQL> shutdown immediate;

    Database closed.

    Database dismounted.

    ORACLE instance shut down.

  2. 如果发现你select 出来的数据是乱码,请把client端的字符集配置成与linux操作系统相同的字符集。如果还是有乱码,则有可能是数据库中的数据存在问题,或者是oracle服务端的配置存在问题。

  3. .1.oracle server端字符集查询 复制代码代码如下: select userenv('language') from al; server字符集修改: 将数据库启动到RESTRICTED模式下做字符集更改:&??

  4. oracle10g服务器端是安装在AIX 6.0系统上,客户端是安装在windows server 2008 系统上,客户端与服务器已成功连接,但是数据库表里的中文字无法显示,显示为“?”,用SQLPLUS查得服务器端的字符集为AL16uTF16,如何修改该字符集使之支持中文呢?另外oracle10G客户端的字符集需不需要设置,如何查看和设置呢?

I. 怎样修改查看Oracle字符集

[Q]怎么样查看数据库字符集 [A]数据库服务器字符集select * from nls_database_parameters 其来源于props$ 是表示数据库的字符集 客户端字符集环境select * from nls_instance_parameters 其来源于v$parameter 表示客户端的字符集的设置 可能是参数文件 环境变量或者是注册表会话字符集环境 select * from nls_session_parameters 其来源于v$nls_parameters 表示会话自己的设置 可能是会话的尺型如环境变量或者是alter session完成 如果会话没有特殊的设置 将与nls_instance_parameters一致 客户端的字符集要求与服务器一致 才能正确显示数据库的非Ascii字符 如果多个设置存在的时候 alter session>环境变量>注册表>参数文件字符集要求一致 但是语言设置却可以不同 语言设置建议用英文 如字租者符集是zhs gbk 则nls_lang可以是American_America zhs gbk [Q]怎么样修改字符集 [A] i以上版本可以通过alter database来修改字符集 但也只限于子集到超集 不建议修改props$表 将可能导致严重错误 陵启Startup nomount;Alter database mount exclusive;Alter system enable restricted session;Alter system set job_queue_process= ;Alter database open;Alter database character set zhs gbk; lishixin/Article/program/Oracle/201311/17182

阅读全文

与oracle修改字符集命令相关的资料

热点内容
修改服务器pci地址空间 浏览:319
程序员将来去哪里 浏览:964
虚幻5创建c无法编译 浏览:187
javaweb项目设计 浏览:405
国家反诈app紧急联系人怎么填 浏览:189
单片机旋转led 浏览:338
杜洋单片机官网 浏览:465
法国加密货币税务 浏览:26
stringslinux 浏览:942
gis服务器里文件如何处理 浏览:829
sec加密数字资产 浏览:930
winrar命令行压缩 浏览:790
java成员变量默认 浏览:491
解压神器喷泉视频 浏览:91
现代的语文书是哪里编译 浏览:108
知乎教孩子学编程 浏览:520
vivo加密的应用怎么解开 浏览:918
波形分析算法 浏览:528
php论坛实训报告 浏览:406
java日期字符串转换成日期 浏览:137