Oracle v$nls_parameters 和 nls_database_parameters 區別

一. 先看官網的說明

1.1 V$NLS_PARAMETERS

V$NLS_PARAMETERS contains current values of NLS parameters。

Column

Datatype

Description

PARAMETER

VARCHAR2(64)

Parameter names are as follows: NLS_CALENDAR, NLS_CHARACTERSET, NLS_COMP, NLS_CURRENCY, NLS_DATE_FORMAT, NLS_DATE_LANGUAGE, NLS_DUAL_CURRENCY, NLS_ISO_CURRENCY, NLS_LANGUAGE, NLS_LENGTH_SEMANTICS, NLS_NCHAR_CHARACTERSET, NLS_NCHAR_CONV_EXCP, NLS_NUMERIC_CHARACTERS, NLS_SORT, NLS_TERRITORY, NLS_TIMESTAMP_FORMAT, NLS_TIMESTAMP_TZ_FORMAT

Two additional parameters, NLS_TIME_FORMAT and NLS_TIME_TZ_FORMAT, are currently used for internal purposes only.

VALUE

VARCHAR2(64)

NLS parameter value

1.2 NLS_DATABASE_PARAMETERS

NLS_DATABASE_PARAMETERS lists permanent NLS parameters of the database.

Column

Datatype

NULL

Description

PARAMETER

VARCHAR2(30)

NOT NULL

Parameter name

VALUE

VARCHAR2(40)

Parameter value

從官網的定義:

NLS_DATABASE_PARAMETERSlists permanent NLS parameters of the database.

V$NLS_PARAMETERScontains current values of NLS parameters。

可以看出:

(1)nls_database_parameters來源於props$,是表示數據庫的字符集。在創建數據庫的時候設定的,一般不會改變.

(2)v$nls_parameters 顯示當前會話值 ,他受客戶端nls 的控制。

所以2個視圖的查詢結果是可能不一樣的。

其他幾個相關的視圖:

(1)nls_instance_parameters 其來源於v$parameter,表示客戶端的字符集的設置,可能是參數文件,環境變量或者是註冊表。

(2)nls_session_parameters 來源於v$nls_parameters,表示會話自己的設置,可能是會話的環境變量或者是alter session完成,如果會話沒有特殊的設置,將與nls_instance_parameters一致。

二. 示例

我們以字符集爲例,進行查看和對比。

Oracle 字符集的查看和修改

http://blog.csdn.net/tianlesoftware/article/details/4915223

NLS_LANG的格式如下: NLS_LANG = language_territory.charset

Language:指定服務器消息的語言, 影響提示信息是中文還是英文

Territory:指定服務器的日期和數字格式,

Charset:指定字符集,這部分真正影響數據庫字符集。

如:AMERICAN _AMERICA. ZHS16GBK

SYS@dave2(db2)> select * from nls_database_parameters where parameter in('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET');

PARAMETER VALUE

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

NLS_LANGUAGE AMERICAN

NLS_TERRITORY AMERICA

NLS_CHARACTERSET ZHS16GBK

SYS@dave2(db2)> select * from v$nls_parameters where parameter in ('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET');

PARAMETER VALUE

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

NLS_LANGUAGE AMERICAN

NLS_TERRITORY AMERICA

NLS_CHARACTERSET ZHS16GBK

現在nls_database_parameters 和 v$nls_parameters 查詢的結果是一樣的。 現在看我們修改一下字符集。然後在查看:

SYS@dave2(db2)> alter system setnls_language='SIMPLIFIED CHINESE' scope=spfile;

System altered.

--該參數需要重啓才能生效。

SYS@dave2(db2)> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SYS@dave2(db2)> startup

ORACLE instance started.

Total System Global Area 239075328 bytes

Fixed Size 1218724 bytes

Variable Size 79693660 bytes

Database Buffers 155189248 bytes

Redo Buffers 2973696 bytes

Database mounted.

Database opened.

SYS@dave2(db2)> select * from nls_database_parameters where parameter in('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET');

PARAMETER VALUE

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

NLS_LANGUAGE AMERICAN

NLS_TERRITORY AMERICA

NLS_CHARACTERSET ZHS16GBK

SYS@dave2(db2)> select * fromv$nls_parameters where parameter in('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET');

PARAMETER VALUE

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

NLS_LANGUAGE SIMPLIFIED CHINESE

NLS_TERRITORY AMERICA

NLS_CHARACTERSET ZHS16GBK

現在看到,2個視圖查看的結果不一樣了。

 

本文轉自:http://blog.csdn.net/tianlesoftware/article/details/6600637

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章