OCP认证考试指南(21):管理Oracle数据库中的全球化特性

1、全球化特性

1.1、字符集

字符集(charcater set)是一种用于将字符表示为比特序列的定义编码模式。它由许多已定义的不同字符组成。

我们至少需要大写字母、小写字母、0~9的数字、某些标点符号以及特殊的字符。一个7比特字符集能够表示的字符总数为127(27);8比特字符集能够表示256(28)个不同的字符。

1.2、语言支持

Oracle所支持的语言种类取决于平台、版本以及产品的补丁程序级别。为了决定任何一个安装软件的可用范围,查以查询V$NLS_VALID_VALUES视图。

SQL> select * from v$nls_valid_values
  2  where parameter = 'LANGUAGE';
 
PARAMETER  VALUE      ISDEP
---------- ---------- -----
LANGUAGE   AMERICAN   FALSE
LANGUAGE   GERMAN     FALSE
LANGUAGE   FRENCH     FALSE
LANGUAGE   BENGALI    TRUE
......
64 rows selected.

Oracle使用的语言决定了显示错误消息的语言,并且设置了默认的日期语言与排序顺序。

与Oracle使用的语言相关的默认值

变量默认值用途
NLS_LANGUAGEAMERICAN显示错误消息的语言
NLS_DATE_LANGUAGEAMERICAN用于日期与月份名
NLS_SORTBINARY语言排序顺序

1.3、地区支持

选中某个地区可以默认设置许多全球化特性。为了确定数据库所支持的地区,同样可以查询V$NLS_VALID_VALUES视图。

SQL> select * from v$nls_valid_values
  2  where parameter = 'TERRITORY';
 
PARAMETER  VALUE      ISDEP
---------- ---------- -----
TERRITORY  AMERICA    FALSE
TERRITORY  GERMANY    FALSE
TERRITORY  FRANCE     FALSE
TERRITORY  CANADA     FALSE
TERRITORY  SPAIN      FALSE
TERRITORY  ITALY      FALSE
......
96 rows selected.

选择地区还可以默认设置日期和周的编号、收支符号、日期格式、小数点分隔符与组分隔符以及货币符号。下面给出与地区相关的设置的默认值。

与地区相关的设置的默认值

变量默认值/用途
NLS_TERRITORYAMERICA / 地理位置
NLS_CURRENCY$ / 当地货币符号
NLS_DUAL_CURRENCY$ / 指定地区次要货币符号
NLS_ISO_CURRENCYAMERICA / 指定ISO地区货币符号
NLS_DATE_FORMATDD-MM-RR / DATE数据类型列所使用的格式
NLS_NUMERIC_CHARACTERS., / 小数点分隔符与组分隔符
NLS_TIMESTAMP_FORMATDD-MM-RRHH.MI.SSXFF AM / 是TIMESTAMP数据类型列所使用的格式
NLS_TIMESTAMP_TZ_FORMATDD-MM-RRHH.MI.SSXFF AM TZR / 是TIMESTAMP WITH LOCAL TIMEZONE数据类型列所使用的格式
SQL> alter session set nls_territory = 'AMERICA';
 
Session altered.
 
SQL> select systimestamp from dual;
 
SYSTIMESTAMP
------------------------------------------------------------
16-OCT-08 12.24.59.641297 AM +08:00
 
SQL> alter session set nls_territory = 'GERMANY';
 
Session altered.
 
SQL> select systimestamp from dual;
 
SYSTIMESTAMP
------------------------------------------------------------
16.10.08 00:25:28,960439 +08:00
 
SQL> alter session set nls_territory = 'CHINA';
 
Session altered.
 
SQL> select systimestamp from dual;
 
SYSTIMESTAMP
------------------------------------------------------------
16-OCT-08 12.26.03.817205 AM +08:00

2、使用全球化支持功能

可以在下列任意级别上或所有5个级别上指定全球化。

  • 数据库
  • 实例
  • 客户机环境
  • 会话
  • 语句

这些级别按从低到高的优先级顺序列出。

须要记住能够指定全球化的各种级别的优先顺序。在服务器端,实例设置优先于数据库设置,但是服务器上的所有相关设置都会被客户端重写,从低到高的级别优先顺序为:客户端环境、会话级别、语句级别。

2.1、选择字符集

在数据库创建阶段,选择字符集是我们需要作出的最重要的两个决定之一。创建阶段中必须正确完成的两个设置,DB_BLOCK_SIZE参数(这个参数值绝对不能改变)与数据库字符集(理论上可以被改变,事实上不可行)。

2.2、改变数据库字符集

Oracle提供了上列两种有助于决定字符集修改的工具:数据库字符集扫描程序(Database Character Set Scanner)和语言与字符集文件扫描程序(Language and Character Set File Scanner)。

#########################################
# 感觉不是太重要应该,以后重要再学吧
# 测试时候报错
# csscan: error while loading shared libraries: libclntsh.so.10.1: 
# cannot open shared object file: No such file or directory
#########################################
 
csscan system/liguanghu full=y tochar=utf8

以SYSTEM连接数据库,通过扫描所有数据文件来查看转换至UTF8是否会导致若干问题。为了使数据库能够运行数据库字符集扫描程序,必须首先运行csminst.sql脚本。

判断能够无损地改变数据库字符集后,可以通过执行ALTER DATABASE CHARACTER SET …命令来完成字符集的修改。

2.3、数据库内的全球化

在数据库创建阶段,根据执行CREATE DATABASE命令以及指定字符集所影响的实例参数就可以确定数据库的全球化设置。

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               WE8ISO8859P1
NLS_CALENDAR                   GREGORIAN
NLS_DATE_FORMAT                DD-MON-RR
NLS_DATE_LANGUAGE              AMERICAN
NLS_SORT                       BINARY
NLS_TIME_FORMAT                HH.MI.SSXFF AM
 
PARAMETER                      VALUE
------------------------------ -------------------------------------
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.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              10.2.0.1.0
 
20 rows selected.

2.4、实例级别的全球化

实例参数设置会重写数据库设置。在RAC环境中,不同的实例可以具有不同的设置。全球化参数是静态的。

2.5、客户端环境设置

NLS_LANG是一个关键的环境变量。完整规范包括语言、地区以及字符集。

2.6、会话级别的全球化设置

一旦完成连接,用户就可以通过执行ALTER SESSION命令来建立自己的全球化首选项。补充软件包DBMS_SESSION可以代替ALTER SESSION命令。

SQL> alter session set nls_date_format = 'dd.mm.yyyy';
 
Session altered.
 
SQL> select sysdate from dual;
 
SYSDATE
----------
16.10.2008
 
SQL> execute dbms_session.set_nls('nls_date_format','''yyyy-MM-dd''');
 
PL/SQL procedure successfully completed.
 
SQL> select sysdate from dual;
 
SYSDATE
----------
2008-10-16

2.7、语句级别的全球化设置

全球化设置的最优控制级别是在语句内进行编程控制,此时必然会在SQL函数中使用NLS参数。

SQL> select
  2  to_char(hiredate,'Day dd, Month YYYY', 'NLS_DATE_LANGUAGE=DUTCH'),
  3  to_char(hiredate,'Day dd, Month YYYY', 'NLS_DATE_LANGUAGE=GERMAN')
  4  from scott.emp;
 
TO_CHAR(HIREDATE,'DAYDD,MONT TO_CHAR(HIREDATE,'DAYDD,MONTH
---------------------------- -----------------------------
Woensdag  17, December  1980 Mittwoch   17, Dezember  1980
Vrijdag   20, Februari  1981 Freitag    20, Februar   1981
Zondag    22, Februari  1981 Sonntag    22, Februar   1981
Donderdag 02, April     1981 Donnerstag 02, April     1981
Maandag   28, September 1981 Montag     28, September 1981
Vrijdag   01, Mei       1981 Freitag    01, Mai       1981
Dinsdag   09, Juni      1981 Dienstag   09, Juni      1981
Zondag    19, April     1987 Sonntag    19, April     1987
Dinsdag   17, November  1981 Dienstag   17, November  1981
Dinsdag   08, September 1981 Dienstag   08, September 1981
Zaterdag  23, Mei       1987 Samstag    23, Mai       1987

SQL函数是能够在数据类型之间进行转换的类型强制转换函数。根据所使用的类型强制转换函数可以使用各种参数。

各种SQL函数及其参数

函数全球化参数
TO_DATENLS_DATE_LANGUAGE
NLS_CALENDAR
TO_NUMBERNLS_NUMBER_CHARACTERS
NLS_CURRENCY
NLS_DUAL_CURRENCY
NLS_ISO_CURRENCY
NLS_CALENDAR
TO_CHAR,TO_NCHARNLS_DATE_LANGUAGE
NLS_NUMBERIC_CHARACTERS
NLS_CURRENCY
NLS_DUAL_CURRENCY
NLS_ISO_CURRENCY
NLS_CALENDAR

3、语言排序与选择

Oracle默认使用二进制排序。要排序的串从左至右被读取,并且每个字符都简化为它的ASCII(或EBCDIC)数字值。

4、Locale Builder

Locale Builder是一个图形工具,这个工具能够通过为语言、地区、字符集以及语言排序生成定义而创建自定义的全球化环境。

$ $ORACLE_HOME/nls/lbuilder/lduilder

5、使用时区

使用CREATE DATABASE命令创建数据库时能设置数据库时区,之后可以使用ALTER DATABASE SET TIME_ZONE = …命令进行调整。没有设置,默认为主机操作系统的时区。客户机时区默认为客户机操作系统的时区,此外使用ORA_STDZ环境变量也可以设置客户机时区。会话内,全用ALTER SESSION SET TIME_ZONE = …命令也可以设置时区。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值