刘文娟
【摘 要】Oracle数据库系统是数据存储和管理的基础框架结构,它以高超的集群技术、安全性能、系统管理性能而广泛应用于多个领域。然而,在Oracle数据库系统应用过程中字符集转换问题往往成为用户不可避免的一大困扰,对此,本文将立足于Oracles数据库系统的应用现状,对Oracle数据库系统的字符集转换问题进行分析。
【关键词】Oracle数据库系统;字符集转换;问题分析
0 前言
Oracle数据库是当前应用最为广泛的关系数据库管理系统。对解决数据库问题可以做到高效、安全、可靠。
1 Oracle数据库系统相关综合概述
1.1 Oracle数据库系统存储结构
Oracle数据库系统是由美国软件公司研发的一款以分布式数据库为核心依据的软件产品,Oracle数据库系统既可以作为通用数据库系统进行数据管理工作,也可以作为关系数据库进行产品完备关系的相关工作。Oracle数据库系统功能强大,在计算机领域有着广泛的应用市场,而且能够高效、便捷的处理相关数据库问题,其中,令Oracle数据库系统受到普遍欢迎的另一个因素是Oracle数据库系统虽然编写复杂,但是学习掌握相关的Oracle数据库系统知识只需要在科学理论概念的指导下,选用任意一种计算机类型进行练习就可以完成。Oracle数据库系统的新架构中还引入了“云”的使用,在数据库云的强大的存储计算功能支撑下,Oracle数据库系统的灵活性和资源使用性得到了进一步的提升,到目前为止,Oracle数据库系统已经可以独自完成数据库资源整合、解压以及分层等工作,使得Oracle数据库系统成为私有云和公有云进行资源管理和信息部署的另一理想化信息平台。
1.2 Oracle数据库字符集概念及相关介绍
Oracle数据库字符集主要存在两种形式,一种是国家字符集,即国家支持的Oracle数据库字符集类型,作用是为了用本国的语言形式对信息进行存储、处理、查询检索等。另一种则是数据库字符集,数据库字符集是对全球通用的Oracle数据库字符集的统称,通过数据库字符集的使用,每一个Oracle数据库用户都可以将其转化为个人所熟悉的语言形式与表达方法。相对全球化的数据库字符集而言,国家字符集的使用字段范围会受到一定程度的制约,通常而言,一个完整的Oracle数据库字符集主要有语言、字符比特位数以及标准字符集名称构成。其中,在UTF-8环境下Oracle数据库字符集不符合这种格式规定。我国国家标准的字符集标签为gb18030,其中简体中文的字符集标签为EUC-CN,繁体中文的字符集标签为big5,需要注意的是,除文章所叙述的字符集标签外,我国的简体中文与繁体中文字符集标签还有其他多种表现形式[1]。
2 Oracle数据库的字符集转换过程中存在的问题
2.1 服务器与客户端的存取问题
在数据库字符集的参数中,charset的任务是负责指定字符集,也是影响字符集导入导出的关进部分。服务器端的字符集如果与客户端的字符集无法进行正常转换,则会导致用户无法读取相关信息数据。只有在数据库服务器端字符集、数据库客户端字符集与dmp文件的字符集保持一致时才可以保证数据的成功导入和读取,在服务器端进行字符集设置是做好的字符集设置方案,而且操作起来较为简单,无须在每一页的代码编写中都进行重复设置。在这之中,字符集的内容、类型以及字符所应用的标签都可以进行限制编码,进行服务器字符集设置也可以防止安全漏洞的出现,加强软件信息的安全性能。客户端字符集是显示操作系统所选用的字符集,客户端的数据库字符集决定了字符转换之后的最终显示形似,在不同的运行环境下,客户端字符集都需要不同的设置类型,例如,在中文环境下,登录数据库就无法读取相关的英文内容,同样如果在英文环境下进行登录,汉字也无法正常读取。概括而言,设置客户端字符集就是为了通知数据库计算机所能接受的字符环境类型,以此帮助Oracle数据库系统在存储字符集时按照相关的运行环境进行编码映射。
2.2 Oracle数据库出现乱码
乱码可以认为是每一个数据库都不可避免的问题,也是软件系统中任何一种编程语言都不得不面对的问题。Oracle数据库系统乱码中主要遇到的问题是中文显示乱码,如今应用的Oracle数据库系统基本功能已经趋于完善,服务器端的字符集一般都会在系统安装时就已经确定,并且在以后的应用中基本不会更改。乱码的表达形式多种多样,但统一而言就是原本正确的汉字无法显示出来,用户在显示屏上所看到的信息都为杂乱的英文字母或者标点符号,甚至是其他图形等,在对同一个数据库进行访问时,即便访问的是同一个表中的用户名也可能出现不一样的现实。字符集的设置本就是为了满足射界各国不同文化,不同语言形式的社会群众而编制的,在汉字的字符集设置中,主要有ZHS16GBK、UTF-8等多种形式。
3 Oracle数据库系统字符集转换问题原因分析
3.1 字符集设置不匹配
字符集施舍不匹配一般是指服务器端的Oracle数据库系统字符集与客户端的字符集设置问题。众所周知,字符集设置的两个位置分别位于服务器端与客户端。客户端的字符集与服务器端字符集不匹配是造成Oracle数据库系统字符集转换问题的主要原因,在进行数据导入工作时,必须在保证服务器端字符集与客户端字符集完全一致的情况下才可以将相关数据完成正确导入操作。乱码就是由于字符集设置不匹配而造成的一个主要现象,值得一提的是,当字符集之间不存在子集、超集等对应关系时,无论应用哪种转换形式,字符集之间都会出现乱码。字符集设置不匹配一般包括三种情况,第一种情况是服务器端数据库字符集与客户端设置使用的字符集相一致,但是与客户端NLS_LANG参数设置存在差异,第二种情况是服务器端数据库字符集与客户端NLS_LANG参数设置相一致,但是与客户端字符集存在差异,第三种则是服务器端字符集、客户端字符集、客户端NLS_LANG参数设置三者都不相同。其中,第三种情况较为复杂,进行更改设置时也需要进行更为系统性的分析。
3.2 Oracle数据库的安装指定字符集更改困难
服务器端的字符集基本是在系统安装完成后就已经设置完成的,服务器端字符集在设置期间可以指定相应的字符集和国家字符集,但是在确定创建之后往往不能进行更改。客户端的字符集虽然可以进行调整,却必须在专业人士的指导下进行操作,还要注意对每一项参数都进行查询确定,理论上来说,更改客户端字符集的目的是为了解决Oracle数据库系统字符集转换问题,因此,客户端字符集的更改方向往往是与服务器端字符集趋于一致。由于造成Oracle数据库系统字符集转换问题的原因存在很多,基本在完全确定之前,往往都不会更改字符集设置,不仅是因为这需要高水平的专业技能,更为严重的是,随意更改字符集可能会引发更多的乱码问题。在进行服务器端字符集查询时V$NLS_PARAMFERS试图中存放的是数据库语言环境,这是查询Oracle数据库系统服务器端的一个重要依据,在这个语言环境中,软件系统会设计特定的语言存放形式,其中Oracle数据库中字符的存放排序、表示样式以及日期格式都会根据这一环境而自行完整调节工作,在这之中,nls_language表示了中文显示方式,nls_characterset是字符集的相关设定,另外date、time等是日期时间的格式设置,currency则是中文语言环境中的货币格式。查询Oracle数据库客户端的字符集则相对简单一些,操作人员只需要在Windows平台下,启动注册表中相应的程序就可以进行查询和基本的设置操作[2]。
3.3 系统存在漏洞
系统漏洞是指应用软件或者操作系统软件中在逻辑设计上存在缺陷,从而导致系统被病毒等攻击控制,从而导致计算机中信息丢失甚至系统遭到破坏的情况。系统漏洞跟随计算机发展而客观存在的现实,不会根据电脑型号规格、系统构成、硬件设施等因素而消失。由系统漏洞造成的Oracle数据库字符集转换问题可以认为是较为容易解决的一种,但是,由这种形式造成的问题往往会令用户产生更大的损失。系统漏洞会影响系统及网络的正常运行,阻止服务器的相关操作命令,当系统出现漏洞后,如果是常见的高危漏洞系统会有与之对应的解决办法,但是如果系统是由于遭到恶性攻击而产生漏洞,那么电脑中的信息很有可能更改甚至泄露,更为严重的情况下,系统甚至会遭到较为重要的破坏。随着计算机技术的不断发展,使用时间日益叠加,由木马等病毒造成的系统漏洞也在逐渐发生着形式与结构上的改变,被入侵的系统会在用户没有察觉的情况下自动执行恶意代码,从而导致Oracle数据库字符集转换问题的发生。
4 Oracle数据库字符集转换问题的解决方法
4.1 设置匹配的数据库字符集
保证服务器端字符集、客户端字符集以及客户端NLS_LANG参数设置保持相一致是Oracle数据库字符集转换正常运行的关键因素之一,因此,想要避免或者解决Oracle数据库字符集转换问题,首先要对字符集的运行环境进行查询和相关更改设置。修改数据库字符集设置,首先要导出系统中的数据库数据,在确定数据库导出完毕后在原系统上建立新的数据库,然后在将原来的数据库数据导入,最终完成字符集的转换操作问题。重新建立数据库主要是问了更改服务器端的字符集,由于服务器端的字符集只能在数据库创建过程中进行设置工作,所以应用其他方案基本无法完成服务器端字符集设置的更改操作。需要注意的是,在创建数据库后修改字符集时需要确定新的字符集要是当前字符集的超集。更改客户端字符集设置时则需要从修改NLS_LANG参数设定来进行,通过修改函数、环境变量以及初始化文件等方式都可以达到修改客户端字符集的目的。
4.2 采用统一编码方案
系统编码是联系各平台之间的重要方式,在编码工作中,系统编码有着明确的规定。编码规格采用二进制方式,全局统一性是统一编码所遵循的核心原则。统一编码基本上不可能实现全球统一,但是在一定的区域范围之内具有较强的实际操作性。Unicode就是针对传统字符编码中的应用局限而产生的。它需要融合多种语言环境的特点和处理方式,统一抽象字符集,进而建立全新的编码方案。
4.3 重新安装系统
当数据库受到损坏时,往往数据库内容的可靠性和正确性都会受到质疑,因此,当数据库受到问题时,但是在可控范围之内可以采用恢复子系统的方式进行数据库管理工作。如果系统问题较大,或者Oracle数据库系统字符集的转换问题无法通过常规方式进行解决,也可以选择重新安装系统。系统的安装过程一般都有固定的流程方式,因此在安装时只需要严格遵守安装步骤尽可以顺利完成操作。首先用户需要选择安装的版本,目前的最新版本是Oracle Database 12c,然后创建用户,根据实际需要修改相关核心参数,然后确定代码。启动图形之后系统会进行一些询问,用户可根据个人需要进行选择,最后会提示脚本,完成相关系统安装操作。
5 结语
通过对Oracle数据库系统的存储结构进行考虑,文章分析了Oracle数据库字符集转换问题及原因,并提出了相关应对建议。
【参考文献】
[1]李丹丹.Oracle数据库字符集转换成Unicode产品开发[D].北京交通大学,2014. [2]邢姝.ORACLE数据库字符集问题及解决方法[J].硅谷,2014,24:129+145.
[责任编辑:王楠]