亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2124 | 回復: 0
打印 上一主題 下一主題

==oracle 數(shù)據(jù)庫 NLS_CHARACTERSET 字符集的修改== [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-12-23 03:31 |只看該作者 |倒序瀏覽
==oracle 數(shù)據(jù)庫 NLS_CHARACTERSET 字符集的修改==
修改Oracle 數(shù)據(jù)庫字符集總結(jié):
修改方式大約有3種:
方法一: (最安全的方法)
數(shù)據(jù)庫創(chuàng)建以后,如果需要修改字符集,通常需要重建數(shù)據(jù)庫,通過導入導出的方式來轉(zhuǎn)換。
方法二: (最常用的方法)
通過 "alter database character set ZHS16GBK;" 方式修改,但并不總是有效。該命令在Oracle8時被引入Oracle,這個操作在本質(zhì)上并不轉(zhuǎn)換任何數(shù)據(jù)庫字符,只是簡單的更新數(shù)據(jù)庫中所有跟字符集相關的信息。(意味,你只能在新字符集是舊字符集嚴格超集的情況下使用這種方式轉(zhuǎn)換。)
方法三: (最不安全的方法)
修改SYS.props$表,使用"update props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET';" 方式更改字符集時候,只是修改了 props$ 表,只完成了十幾的十二分之一的內(nèi)容,存在數(shù)據(jù)完整性的隱患。(value$值輸入了不正確的字符集,后果可能導致數(shù)據(jù)庫無法啟動。)
只對更改后的數(shù)據(jù)有效,即數(shù)據(jù)庫中原來的數(shù)據(jù)仍以原字符集被存儲。

注意:
1.修改數(shù)據(jù)庫字符集時必須謹慎,修改之前一定要做數(shù)據(jù)庫全量備份。(由于不能回退該項操作,因此可能會造成數(shù)據(jù)丟失或者損壞。)
2.使用 "alter database character set ZHS16GBK;" 方式更改字符集時候,至少需要更改12張數(shù)據(jù)字典表;
3.使用"update props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET';" 方式更改字符集時候,只是修改了 props$ 表,只完成了十幾的十二分之一的內(nèi)容,存在數(shù)據(jù)完整性的隱患。因此,更改字符集盡量使用正常的途徑。
4.設置 sql_trace 跟著后臺操作:在 mount 模式(SQL> STARTUP MOUNT;)下面,把會話修改為trace模式(SQL> ALTER SESSION SET SQL_TRACE=TRUE;),可以跟著數(shù)據(jù)庫的后臺操作。(sql_trace是DBA的常用利器之一)
5.實際上當我們更新了字符集,數(shù)據(jù)庫啟動時會根據(jù)數(shù)據(jù)庫的字符集自動的來修改控制文件的字符集,如果字符集可以識別,更新控制文件字符集等于數(shù)據(jù)庫字符集;如果字符集不可識別,那么控制文件字符集更新為US7ASCII。通過更新props$表的方式修改字符集,在Oracle7之后就不應該被使用.

本節(jié)重點解釋方法二:
通過 "alter database character set ZHS16GBK;" 方式修改,但并不總是有效。該命令在Oracle8時被引入Oracle,這個操作在本質(zhì)上并不轉(zhuǎn)換任何數(shù)據(jù)庫字符,只是簡單的更新數(shù)據(jù)庫中所有跟字符集相關的信息。
查詢字符集信息: "SQL> select name,value$ from props$ where name like '%NLS%';",結(jié)果有二十行。
修改步驟:
注意:轉(zhuǎn)換字符集,數(shù)據(jù)庫應該在RESTRICTED模式下進行. (使用DBA登錄數(shù)據(jù)庫)
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> set linesize 120;
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;

常見問題:
問題1:
SQL> ALTER DATABASE CHARACTER SET ZHS16CGB231280;
ALTER DATABASE CHARACTER SET ZHS16CGB231280
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
原因:
字符集超集問題,所謂超集是指:當前字符集中的每一個字符在新字符集中都可以表示,并使用同樣的代碼點,比如很多字符集都是US7ASCII的嚴格超集。如果不是超集,將獲得以上錯誤。
解決方式:
SQL> alter database character set internal_use ZHS16GBK;
SQL> select * from v$nls_parameters;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
備注:
ALTER DATABASE CHARACTER SET操作的內(nèi)部過程是完全相同的,也就是說INTERNAL_USE提供的幫助就是使Oracle數(shù)據(jù)庫繞過了子集與超集的校驗。該方法某些方面有用處,比如測試環(huán)境;應用于產(chǎn)品環(huán)境大家應該格外小心,除了你以外,沒有人會為此帶來的后果負責。

問題2:
ALTER DATABASE CHARACTER SET ZHS16GBK
*
ERROR at line 1:
ORA-12721: operation cannot execute when other sessions are active
原因:
字符集超集問題。
解決方式:
SQL> alter database character set internal_use ZHS16GBK;
SQL> select * from v$nls_parameters;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;

問題3:
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
ALTER DATABASE CHARACTER SET ZHS16GBK
*
ERROR at line 1:
ORA-12716: Cannot ALTER DATABASE CHARACTER SET when CLOB data exists
原因:
數(shù)據(jù)庫存在CLOB類型字段,那么就不允許對字符集進行轉(zhuǎn)換
解決方式:
這時候,我們可以去查看alert<sid>.log日志文件,看CLOB字段存在于哪些表上:
內(nèi)容如:
ALTER DATABASE CHARACTER SET ZHS16GBK
SYS.METASTYLESHEET (STYLESHEET) - CLOB populated
ORA-12716 signalled during: ALTER DATABASE CHARACTER SET ZHS16GBK...
對于用戶表,可以先將該表導出,然后把該表刪掉,等字符轉(zhuǎn)換完畢后在導入。



例子1:
SQL> select name,value$ from props$ where name like '%NLS%';
NAME VALUE$
------------------------------ --------------------------------------------------------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET ZHS16GBK
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
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 11.1.0.6.0
20 rows selected
SQL>

例子2:
SQL> ALTER SESSION SET SQL_TRACE=TRUE;
Session altered.
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
Database altered.
SQL> ALTER SESSION SET SQL_TRACE=FALSE;
Session altered.
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP