日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle修改字符集

發(fā)布時(shí)間:2025/3/11 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle修改字符集 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

生產(chǎn)環(huán)境的數(shù)據(jù)表用了 中文字段名。

在生產(chǎn)環(huán)境oracle表正常,新建開發(fā)環(huán)境時(shí),報(bào)字符串超長(zhǎng)。

原因是

生產(chǎn)oracle字符集是:NLS_CHARACTERSETZHS16GBK

開發(fā)oracle字符集是:NLS_CHARACTERSET AL16UTF16


開發(fā)oracle需要修改字符集和生產(chǎn)一致。


開發(fā)下:

select * from V$nls_Parameters;


cmd,sqlplus登錄

system as dba

密碼


通過 "alter database character set ZHS16GBK;" 方式修改,但并不總是有效。該命令在Oracle8時(shí)被引入Oracle,這個(gè)操作在本質(zhì)上并不轉(zhuǎn)換任何數(shù)據(jù)庫字符,只是簡(jiǎn)單的更新數(shù)據(jù)庫中所有跟字符集相關(guān)的信息。
查詢字符集信息: "SQL> select name,value$ from props$ where name like '%NLS%';",結(jié)果有二十行。
修改步驟:
注意:轉(zhuǎn)換字符集,數(shù)據(jù)庫應(yīng)該在RESTRICTED模式下進(jìn)行. (使用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
原因:
字符集超集問題,所謂超集是指:當(dāng)前字符集中的每一個(gè)字符在新字符集中都可以表示,并使用同樣的代碼點(diǎn),比如很多字符集都是US7ASCII的嚴(yán)格超集。如果不是超集,將獲得以上錯(cuò)誤。
解決方式:
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ù)庫繞過了子集與超集的校驗(yàn)。該方法某些方面有用處,比如測(cè)試環(huán)境;應(yīng)用于產(chǎn)品環(huán)境大家應(yīng)該格外小心,除了你以外,沒有人會(huì)為此帶來的后果負(fù)責(zé)。

問題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類型字段,那么就不允許對(duì)字符集進(jìn)行轉(zhuǎn)換
解決方式:
這時(shí)候,我們可以去查看alert.log日志文件,看CLOB字段存在于哪些表上:
內(nèi)容如:
ALTER DATABASE CHARACTER SET ZHS16GBK
SYS.METASTYLESHEET (STYLESHEET) - CLOB populated
ORA-12716 signalled during: ALTER DATABASE CHARACTER SET ZHS16GBK...
對(duì)于用戶表,可以先將該表導(dǎo)出,然后把該表刪掉,等字符轉(zhuǎn)換完畢后在導(dǎo)入。


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

更多的Java,Angular,Android,大數(shù)據(jù),J2EE,Python,數(shù)據(jù)庫,Linux,Java架構(gòu)師,:

http://www.cnblogs.com/zengmiaogen/p/7083694.html


總結(jié)

以上是生活随笔為你收集整理的oracle修改字符集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。