데이터 베이스 MySQL 튜토리얼 【不错】浅析Oracle三层全球化支持(NLS)

【不错】浅析Oracle三层全球化支持(NLS)

Jun 07, 2016 pm 03:46 PM
oracle 세계화 지원하다

作为一个成熟的商业 数据库 软件 , Oracle 对全球化( Global Support )有着全面的支持和解决方案。 Oracle 在国际化支持方面主要体现在几个方面: ü 全球化字符集支持;目前, Oracle 支持所有主流的字符集样式。通过 NLS_CHARACTER 和 NLS_NCHAR_CHARACT

作为一个成熟的商业数据库软件Oracle对全球化(Global Support)有着全面的支持和解决方案。Oracle在国际化支持方面主要体现在几个方面:

ü 全球化字符集支持;目前,Oracle支持所有主流的字符集样式。通过NLS_CHARACTERNLS_NCHAR_CHARACTER指定的字符集可以支持全世界绝大多数语言文字的存储。Oracle推荐的字符集样式为AL32UTF8,也就是通常我们所见的UTF-8编码格式;

ü 全球化时区Timezone支持;全球化一个重要问题就是时区显示和保存问题。不同时区的用户同时向一个数据库插入数据,其时间先后是不可能回避的问题。同时,当非本地时区日期类型显示的时候,时区如何进行转换。Oracle在这个问题上提供了两个类型:Timestamp with timezoneTimestamp with local timezone,方便的解决了这些问题;

ü 日期和数字格式显示问题;日期和数字类型的显示,带有很强烈的地区特性。比如,欧美格式“17-SEP-12”和我们更接受的“2012-9-17”就有很大的差距。Oracle将数据取值和显示分割开来,让session级别用户可以控制最终的显示;

ü 软件显示语言;在Oracle软件和一些显示中,很多的字符和软件输出就带有语言特性。比如,我们在英文版的Oracle服务端调用时间函数,获得“17-SEP-12”,而在笔者的客户端系统中,就显示为“17-9-12”。这都是Oracle NLS国际化所起到的作用;

 

NLS是一套覆盖面广、内容庞杂的知识体系。笔者计划在接下来用一个系列来分析这个体系。本次,我们只是给NLS一个简单的体系介绍:Oracle的三层NLS体系关系和优先级配置。

 

1、环境介绍

 

笔者选择Oracle 11gR2进行试验。

 

SQL> select * from v$version;

BANNER

---------------------------------------

Oracle Database 11g EnterpriseEdition Release 11.2.0.1.0 - Production

PL/SQL Release 11.2.0.1.0 - Production

CORE   11.2.0.1.0 Production

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 – Production

 

服务器Red Hat 5.3 32bit安装时选择的是英文,美语。

 

[oracle@bspdev ~]$ uname -a

Linux bspdev.localdomain 2.6.18-308.el5 #1 SMP Tue Feb 21 20:05:41EST 2012 i686 i686 i386 GNU/Linux

 

 

查看Linux系统支持语言和时区:

 

[oracle@bspdev ~]$ cat /etc/sysconfig/i18n

LANG="en_US.UTF-8"

SYSFONT="latarcyrheb-sun16"

 

[oracle@bspdev sysconfig]$ pwd

/etc/sysconfig

[oracle@bspdev sysconfig]$ cat clock

# The ZONE parameter isonly evaluated by system-config-date.

# The timezone of the system is defined by the contents of/etc/localtime.

ZONE="Asia/Shanghai"

UTC=true

ARC=false

 

客户端使用的是中文的Windows 7,对应的Oracle注册表内容为:

 【不错】浅析Oracle三层全球化支持(NLS)

NLS_LANG参数告知本地所在地中国、中文语言和ZHS16GBK字符集。

 

2、三层NLS体系

 

OracleGlobal Support复杂的原因之一,就是Oracle的三层NLS体系。任何一个会话session在连接入数据库之后,都会面对三层NLS参数体系,分别为:DatabaseInstanceSession

 

ü Database Level NLS Parameter:数据库层面的NLS参数是在数据库创建的时候确定的一系列的参数。在创建数据库的时候,我们都可以通过OUI或者responseFile进行配置。大部分Database Level NLS Parameter都是不可以改变,或者不能轻易改变的,如CharacterSet

ü Instance Level NLS Parameter:在数据库运行过程中,一些NLS参数是通过Spfile/Pfile参数文件进行配置,并且可以对Database Level NLS进行一定的覆盖修改。如果Instance LevelDatabase Level的发生冲突,以Instance Level覆盖Database Level的配置;

ü Session Level NLS Parameter:这个层面是和用户连接效果最直接的层面。用户使用的NLS参数很多都是取到这个层面的参数。Session Level Parameter来自客户端配置内容,主要是通过一系列的环境变量来确定。Session LevelParameter是可以覆盖Instance Level的参数的;

 

下面我们分别来介绍几个层面参数中的重要内容。

 

3Database Level NLS Parameter

 

Database level参数是三层体系中最底层,这个层面的参数取值和Oracle数据库创建时的配置选项密切相关。我们在联入数据库时,可以通过几个视图来查看这个“根本性”的参数内容。

 

SQL> select * from nls_database_parameters;

 

PARAMETER                     VALUE

---------------------------------------------------------------------

NLS_LANGUAGE                  AMERICAN

NLS_TERRITORY                 AMERICA

NLS_CURRENCY                  $

NLS_ISO_CURRENCY              AMERICA

NLS_NUMERIC_CHARACTERS        .,

NLS_CHARACTERSET              AL32UTF8

NLS_CALENDAR                  GREGORIAN

NLS_DATE_FORMAT               DD-MON-RR

NLS_DATE_LANGUAGE             AMERICAN

NLS_SORT                      BINARY

NLS_TIME_FORMAT               HH.MI.SSXFFAM

NLS_TIMESTAMP_FORMAT          DD-MON-RRHH.MI.SSXFF AM

NLS_TIME_TZ_FORMAT            HH.MI.SSXFFAM TZR

NLS_TIMESTAMP_TZ_FORMAT       DD-MON-RRHH.MI.SSXFF AM TZR

NLS_DUAL_CURRENCY             $

NLS_COMP                      BINARY

NLS_LENGTH_SEMANTICS          BYTE

NLS_NCHAR_CONV_EXCP           FALSE

NLS_NCHAR_CHARACTERSET        AL16UTF16

NLS_RDBMS_VERSION             11.2.0.1.0

 

20 rows selected

 

nls_xxx_parameters系列视图非常重要,特别是在我们配置NLS参数的过程中。我们可以通过nls_database_parameters查看到DatabaseNLS参数。

 

NLS_CHARACTERSETNLS_NCHAR_CHARACTERSET用于表示Oracle在保存varchar2/charnvarchar2/nchar字段时的保存类型。从Oracle官方推荐的角度,我们设置AL32UTF8字符集作为数据库字符集,基本上就可以应对常见的字符文字类型了。

 

在安装程序OUI运行是,AL32UTF8往往不是默认选项。Oracle OUI程序会根据所在服务器操作系统的配置内容,为我们选择出一个字符集。

 

在从操作系统选择出字符集合的过程中,NLS_LANGLANG)环境变量起到很重要的作用。NLS_LANG是我们安装Oracle过程中,确定NLS参数的一个重要环境变量。

 

根据Oracle的要求,NLS_LANG中包括了Oracle所在地域Territory、语言Language和字符集CharacterSet三部分内容。

 

NLS_LANG=_.

 

 

如果我们需要在配置Oracle前就确定这些参数内容,可以预先定义环境变量NLS_LANGUnix/Linux环境下,可以配置在Oracle用户的.bash_profile中。而Windows环境下,这个参数要配置在注册表中。

 

此外,NLS_DATA_LANGUAGE用来表示Oracle在显示日期类型的文字内容时,使用什么语言。

 

Database Level NLS parameter是非常基本的,起作用的范围主要数据库内部。另一方面,Database Level NLS Parameter是作为Instance Level配置的默认基础值。在安装数据库后,我们基本不能、也不会对database levelNLS参数进行修改。我们的“手脚”只能在InstanceSession level进行。

 

3Instance level NLS Parameter

 

Instance Level NLS parameter,就是我们可以控制的领域了。Instance参数主要来自于参数文件SPFILE/PFILE。我们可以通过nls_instance_parameters来查看这个层面的参数配置。

 

SQL> select * from nls_instance_parameters;

 

PARAMETER                     VALUE

------------------------------ -------------------------

NLS_LANGUAGE                  AMERICAN

NLS_TERRITORY                 AMERICA

NLS_SORT                      

NLS_DATE_LANGUAGE             

NLS_DATE_FORMAT               

NLS_CURRENCY                  

NLS_NUMERIC_CHARACTERS        

NLS_ISO_CURRENCY              

NLS_CALENDAR                  

NLS_TIME_FORMAT               

NLS_TIMESTAMP_FORMAT          

NLS_TIME_TZ_FORMAT            

NLS_TIMESTAMP_TZ_FORMAT       

NLS_DUAL_CURRENCY             

NLS_COMP                      BINARY

NLS_LENGTH_SEMANTICS          BYTE

NLS_NCHAR_CONV_EXCP           FALSE

 

17 rows selected

 

相对于database levelInstance level的参数数量是很少的。通常我们不会在参数文件层面进行NLS参数配置,保持Database Level的默认配置就可以了。

 

这样的原因是Instance Level配置是针对所有连接而言的。而国际化的目的就是在于不同连接用户,看到Local化的结果。无论Instance Level进行何种的配置,最终很有可能都是被Session level的所覆盖。

 

Database level之所以会有完备的NLS参数,很大层面上是提供了一个基础参数集合和存储标准。NLS的重头在session层面。

 

4Session Level NLS Parameter

 

Session LevelNLS参数是和用户最直接交互的部分。我们可以通过nls_session_parameters视图查看到这个内容。

 

SQL> select * from nls_session_parameters;

 

PARAMETER                     VALUE

------------------------------ -------------------------

NLS_LANGUAGE                  SIMPLIFIEDCHINESE

NLS_TERRITORY                 CHINA

NLS_CURRENCY                  

NLS_ISO_CURRENCY              CHINA

NLS_NUMERIC_CHARACTERS        .,

NLS_CALENDAR                  GREGORIAN

NLS_DATE_FORMAT               DD-MON-RR

NLS_DATE_LANGUAGE             SIMPLIFIEDCHINESE

NLS_SORT                      BINARY

NLS_TIME_FORMAT               HH.MI.SSXFFAM

NLS_TIMESTAMP_FORMAT          DD-MON-RRHH.MI.SSXFF AM

NLS_TIME_TZ_FORMAT            HH.MI.SSXFFAM TZR

NLS_TIMESTAMP_TZ_FORMAT       DD-MON-RRHH.MI.SSXFF AM TZR

NLS_DUAL_CURRENCY             

NLS_COMP                      BINARY

NLS_LENGTH_SEMANTICS          BYTE

NLS_NCHAR_CONV_EXCP           FALSE

 

17 rows selected

 

session level的参数是影响最终我们看到NLS结果的控制因素。Session levelNLS参数来自客户端配置。对Windows而言,就是我们注册表中关于NLS_LANG等一系列的环境变量。对Unix/Linux而言,就是我们配置在.bash_profile文件中定义的相应内容。

 

注意,NLS_LANG本身包括的内容很多。NLS_LANG包括了客户端地域、语言和字符集信息。地域间接影响到时区,语言会影响到显示语言。而字符集更是影响数据从服务器传递过来客户端后,进行的转换策略。

 

在三层NLS体系下,Session LevelParameter起到最后的决定作用。如果Session level没有配置,Oracle会选择Instance乃至Database的配置。Session Level的配置会覆盖Instance level的取值。

 

我们可以根据自己的情况,动态的进行调节session level nls parameter。如果我们只是希望NLS暂时性修改,可以选择alter session set语句进行参数切换。

 

SQL> select sysdate from dual;

 

SYSDATE

--------------

17-9月 -12

 

SQL> alter session set nls_date_format='yyyy-mm-ddhh24:mi:ss';

会话已更改。

 

SQL> select sysdate from dual;

SYSDATE

-------------------

2012-09-17 06:23:58

 

如果希望长期的修改,可以考虑在环境变量的层面上修改参数。在windows上,可以添加注册表参数。

 【不错】浅析Oracle三层全球化支持(NLS)


 

 

SQL> select * from nls_session_parameters whereparameter='NLS_DATE_FORMAT';

 

PARAMETER                     VALUE

------------------------------ -------------------------

NLS_DATE_FORMAT               yyyy-mm-ddhh24:mi:ss

 

 

SQL> conn sys/oracle@wilson as sysdba

已连接。

SQL> select sysdate from dual;

 

SYSDATE

-------------------

2012-09-17 06:29:02

 

 

 

5、结论

NLS参数对我们开发和使用Oracle,至关重要!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

오라클을 열 수 없다면해야 할 일 오라클을 열 수 없다면해야 할 일 Apr 11, 2025 pm 10:06 PM

Oracle에 대한 솔루션은 개설 할 수 없습니다. 1. 데이터베이스 서비스 시작; 2. 청취자를 시작하십시오. 3. 포트 충돌을 확인하십시오. 4. 환경 변수를 올바르게 설정하십시오. 5. 방화벽이나 바이러스 백신 소프트웨어가 연결을 차단하지 않도록하십시오. 6. 서버가 닫혀 있는지 확인하십시오. 7. RMAN을 사용하여 손상된 파일을 복구하십시오. 8. TNS 서비스 이름이 올바른지 확인하십시오. 9. 네트워크 연결 확인; 10. Oracle 소프트웨어를 다시 설치하십시오.

Oracle에서 모든 데이터를 삭제하는 방법 Oracle에서 모든 데이터를 삭제하는 방법 Apr 11, 2025 pm 08:36 PM

Oracle에서 모든 데이터를 삭제하려면 다음 단계가 필요합니다. 1. 연결 설정; 2. 외국의 주요 제약을 비활성화합니다. 3. 테이블 데이터 삭제; 4. 거래 제출; 5. 외국 키 제약 조건을 활성화합니다 (선택 사항). 데이터 손실을 방지하려면 실행하기 전에 데이터베이스를 백업하십시오.

Oracle Cursor를 닫는 문제를 해결하는 방법 Oracle Cursor를 닫는 문제를 해결하는 방법 Apr 11, 2025 pm 10:18 PM

Oracle Cursor Closure 문제를 해결하는 방법에는 다음이 포함됩니다. Close 문을 사용하여 커서를 명시 적으로 닫습니다. For Update 절에서 커서를 선언하여 범위가 종료 된 후 자동으로 닫히십시오. 연관된 PL/SQL 변수가 닫히면 자동으로 닫히도록 사용 절에서 커서를 선언하십시오. 예외 처리를 사용하여 예외 상황에서 커서가 닫혀 있는지 확인하십시오. 연결 풀을 사용하여 커서를 자동으로 닫습니다. 자동 제출을 비활성화하고 커서 닫기를 지연시킵니다.

Oracle Loop에서 커서를 만드는 방법 Oracle Loop에서 커서를 만드는 방법 Apr 12, 2025 am 06:18 AM

Oracle에서 FOR 루프 루프는 커서를 동적으로 생성 할 수 있습니다. 단계는 다음과 같습니다. 1. 커서 유형을 정의합니다. 2. 루프를 만듭니다. 3. 커서를 동적으로 만듭니다. 4. 커서를 실행하십시오. 5. 커서를 닫습니다. 예 : 커서는 상위 10 명의 직원의 이름과 급여를 표시하기 위해주기별로 만들 수 있습니다.

Oracle 데이터베이스를 이끄는 방법 Oracle 데이터베이스를 이끄는 방법 Apr 11, 2025 pm 08:42 PM

Oracle 데이터베이스 페이징은 rownum pseudo-columns 또는 fetch 문을 사용하여 구현합니다. Fetch 문은 지정된 첫 번째 행 수를 얻는 데 사용되며 간단한 쿼리에 적합합니다.

Oracle 데이터베이스를 중지하는 방법 Oracle 데이터베이스를 중지하는 방법 Apr 12, 2025 am 06:12 AM

Oracle 데이터베이스를 중지하려면 다음 단계를 수행하십시오. 1. 데이터베이스에 연결하십시오. 2. 즉시 종료; 3. 셧다운은 완전히 중단됩니다.

Oracle Dynamic SQL을 만드는 방법 Oracle Dynamic SQL을 만드는 방법 Apr 12, 2025 am 06:06 AM

SQL 문은 Oracle의 동적 SQL을 사용하여 런타임 입력을 기반으로 작성 및 실행할 수 있습니다. 단계에는 다음이 포함됩니다 : 동적으로 생성 된 SQL 문을 저장할 빈 문자열 변수 준비. 즉시 실행 또는 준비 명령문을 사용하여 동적 SQL 문을 컴파일하고 실행하십시오. 바인드 변수를 사용하여 사용자 입력 또는 기타 동적 값을 동적 SQL로 전달하십시오. 동적 SQL 문을 실행하려면 즉시 실행 또는 실행을 사용하십시오.

HDFS에서 CentOS를 구성하는 데 어떤 단계가 필요합니까? HDFS에서 CentOS를 구성하는 데 어떤 단계가 필요합니까? Apr 14, 2025 pm 06:42 PM

Centos 시스템에서 Hadoop 분산 파일 시스템 (HDF)을 구축하려면 여러 단계가 필요합니다. 이 기사는 간단한 구성 안내서를 제공합니다. 1. 초기 단계에서 JDK를 설치할 준비 : 모든 노드에 JavadevelopmentKit (JDK)을 설치하면 버전이 Hadoop과 호환되어야합니다. 설치 패키지는 Oracle 공식 웹 사이트에서 다운로드 할 수 있습니다. 환경 변수 구성 : /etc /프로파일 파일 편집, Java 및 Hadoop 설정 설정 시스템에서 JDK 및 Hadoop의 설치 경로를 찾을 수 있습니다. 2. 보안 구성 : SSH 비밀번호가없는 로그인 SSH 키 : 각 노드에서 ssh-keygen 명령을 사용하십시오.

See all articles