1. 程式人生 > >Oracle 10中修改字符集(character set)

Oracle 10中修改字符集(character set)

Oracle 10.2.0.3資料庫原來的字符集是ZHS16GBK,為了支援更多的漢字,需要修改為ZHS32GB18030。

我首先想到原來在9i上修改字符集的方法,過程如下:

[email protected]> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
[email protected]> startup mount
ORACLE instance started.

Total System Global Area 167772160 bytes
Fixed Size 1218292 bytes
Variable Size 79694092 bytes
Database Buffers 79691776 bytes
Redo Buffers 7168000 bytes
Database mounted.

[email protected]> alter system set job_queue_processes=0;

System altered.

[email protected]> alter system set aq_tm_processes=0;

System altered.

[email protected]> alter system enable restricted session;

System altered.

[email protected]> alter database open;

Database altered.

[email protected]> alter database character set ZHS32GB18030;
alter database character set ZHS32GB18030
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set

暈啊,ZHS32GB18030字符集明明是ZHS16GBK的超集,查metalink才知道,原來在Oracle 10G中,修改字符集需要用csalter配合csscan完成。過程如下:

% cd $ORACLE_HOME/rdbms/admin
% sqlplus sys/password as sysdba
SQL> START csminst.sql

安裝csscan

[email protected][/home/oracle]> sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Dec 23 19:58:21 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options


[email protected]> set termout on
[email protected]> set echo on
[email protected]> spool /tmp/csminst.log
[email protected]> @?/rdbms/admin/csminst.sql
[email protected]> rem
[email protected]> rem NAME
[email protected]> rem csminst.sql

... 省略n行 ...

[email protected]> rem *****************************************************************
[email protected]> rem CSMV$EXTABLES lists all distinct objects to be scaned
[email protected]> rem *****************************************************************
[email protected]> create or replace view csmig.csmv$extables
2 (obj#, usr#, property)
3 as
4 select distinct(obj#), usr#, property
5 from csm$extables where property=0;

View created.

[email protected]> /

View created.

[email protected]> commit
2 /

Commit complete.

[email protected]> exit;
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

安裝後會自動退出plsql,可以檢查/tmp/csminst.log檔案,檢視安裝的詳細日誌。

測試csscan是否安裝成功

[email protected][/home/oracle]> csscan table=sys.sql_version$ fromchar=zhs16gbk tochar=zhs32gb18030 log=instchkc capture=n process=1 array=1024000


Character Set Scanner v2.1 : Release 10.2.0.0.0 - Production on Wed Dec 23 20:15:30 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.


Username: / as sysdba (這裡輸入使用者名稱密碼)

Password:

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

Enumerating table to scan...

. process 1 scanning SYS.SQL_VERSION$[AAAAIDAABAAAA/xAAA]

Creating Database Scan Summary Report...

Creating Individual Exception Report...

Scanner terminated successfully.

如果顯示Scanner terminated successfully.證明csscan安裝成功,會生成如下三個檔案。把這三個檔案刪除。

[email protected][/home/oracle]> ls -l instchkc*
-rw-r--r-- 1 oracle oinstall 1357 Dec 23 20:16 instchkc.err
-rw-r--r-- 1 oracle oinstall 504 Dec 23 20:16 instchkc.out
-rw-r--r-- 1 oracle oinstall 5481 Dec 23 20:16 instchkc.txt

開始正式執行csscan,下一步的csalter過程依賴這一步的執行結果。

[email protected][/home/oracle]> csscan full=y tochar=zhs32gb18030 array=1024000 process=2


Character Set Scanner v2.1 : Release 10.2.0.0.0 - Production on Wed Dec 23 20:21:14 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.


Username: / as sysdba (這裡輸入使用者名稱密碼)

Password:

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

Enumerating tables to scan...

. process 1 scanning SYS.SOURCE$[AAAABIAABAAAAIRAAA]
. process 2 scanning SYS.TYPE$[AAAAC1AABAAAAURAAA]


...省略n行...


. process 2 scanning SYS.WRH$_INST_CACHE_TRANSFER[AAAMgoAADAAABNhAAA]
. process 1 scanning SYSTEM.LOGMNRC_GTLO[AAABa0AADAAAAZhAAA]
. process 2 scanning SYS.WRH$_DLM_MISC[AAAMhlAADAAAA5RAAA]

Creating Database Scan Summary Report...

Creating Individual Exception Report...

Scanner terminated successfully.

執行csalter,修改字符集

[email protected][/home/oracle]> sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Dec 23 20:34:12 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

[email protected]> @?/rdbms/admin/csalter.plb

4 rows created.


Function created.


Function created.


Procedure created.

This script will update the content of the Oracle Data Dictionary.
Please ensure you have a full backup before initiating this procedure.
Would you like to proceed (Y/N)?y
old 6: if (UPPER('&conf') <> 'Y') then
new 6: if (UPPER('y') <> 'Y') then
Checking data validility...
begin converting system objects

PL/SQL procedure successfully completed.

Alter the database character set...
CSALTER operation completed, please restart database

PL/SQL procedure successfully completed.


4 rows deleted.


Function dropped.


Function dropped.


Procedure dropped.

重啟資料庫

[email protected]> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
[email protected]> startup
ORACLE instance started.

Total System Global Area 167772160 bytes
Fixed Size 1218292 bytes
Variable Size 71305484 bytes
Database Buffers 88080384 bytes
Redo Buffers 7168000 bytes
Database mounted.
Database opened.

檢查字符集

[email protected]> select userenv('language') from dual;

USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.ZHS32GB18030

結果顯示,修改成功

--end--
================================================================================================

執行csalter修改字符集;

對於RAC環境:

1. 修改CLUSTER_DATABASE引數為flase

Alter system set cluster_database=flase scope=spfile

Alter system setjob_queue_processes=0scope=spfile;

alter system setaq_tm_processes=0scope=spfile;

2. 啟動資料庫到單例項模式;

startuprestrict

spool switch.log

3. 執行csalter

---- sys執行:@ ?/rdbms/admin/csalter.plb

---- 檢查執行csalter的輸出資訊,是否有錯誤;

如果執行那麼修改還原原始的引數:

Alter system set cluster_database=true scope=spfile

Alter system setjob_queue_processes=old_valuescope=both sid=*;

alter system setaq_tm_processes=old_valuescope=both sid=*;

4. 重啟資料庫;

----shutdown immediate

----startup

----檢查字符集是否修改成功

檢查alert log或執行如下sql

select userenv('language') from dual;

================================================================================================
安裝配置csscan工具;
用具有dba許可權的使用者執行@?/rdbms/admin/csminst.sql;
執行csscan進行掃描;
例如:
csscan system/oracle full=y FROMCHAR=WE8ISO8859P1TOCHAR=ZHS16GBK ARRAY=1024000 PROCESS=1
可以csscan help=y檢視幫助
Csscan執行結束後,預設會在當前目前下生存如下3個檔案:
[[email protected] oracle]$ ls -ltr scan*
-rw-r--r--  1oracle dba  8239 Jul  4 16:56 scan.txt
-rw-r--r--  1oracle dba 73078 Jul  4 16:56 scan.out
-rw-r--r--  1oracle dba  1878 Jul  4 16:56 scan.err
 
Scan工具會把最近一次掃描的引數寫入到同義詞csm$parameters中,下次進行資料庫字符集轉換時,直接從該同義詞讀取資訊;
檢查scan.txt:
對於convertible, truncated的物件可以通過exp/imp來完成;
對於lossy的物件,可以用plsql進行匯出然後手工轉換編碼,然後刪除物件,等執行csalter命令修改字符集完成後,再將前面的物件匯入。

匯出convetitble和truncate的物件後,需要重新執行csscan工具;

================================================================================================

1.首先執行$ORACLE_HOME/rdbms/admin/csminst.sql,建立一些資料庫物件,包括資料庫使用者
2.備份Oracle資料庫,最好全庫備份;
3.使用csscan命令檢查字符集轉換是否可行.csscan有四種掃描模式:全庫掃描,按使用者掃描,按表掃描,按列掃描.因為我們是改變全庫的字符集,所以要用全庫掃描.並且要求有DBA許可權.
4.執行csscan掃描資料庫:csscan SYSTEM/testdb FULL=y TOCHAR=ZHS16GBK ARRAY=1024000 PROCESS=1
5.掃描結束後,會在當前目錄下產生三個檔案:scan.txt,scan.out,scan.err,我們更多的需要關注scan.err
6.可能需要多執行幾次csscan命令,以確保scan.err中沒有報錯,才能進行字元轉換.
7.沒有問題之後,然後執行$ORACLE_HOME/rdbms/admin/csalter.plb指令碼,進行轉化。轉化的過程中,需要注意,資料庫不能有別的session執行,否則會報錯.另外,由於在轉換的過程中讀取的是CSMIG使用者下的CSM$PARAMETERS表中的資料,因此在轉換前必須用csscan執行一次全庫掃描.

可能會遇到的問題:
Full database scan is required ----需要全表掃描
Exceptional data found in scanner result -----檢查scan.err應該還有錯誤報告
Sorry only one session is allowed to run this script -----還有別的session在執行,斷開連線後再試試.

相關推薦

Oracle 10修改字符集(character set)

Oracle 10.2.0.3資料庫原來的字符集是ZHS16GBK,為了支援更多的漢字,需要修改為ZHS32GB18030。 我首先想到原來在9i上修改字符集的方法,過程如下: [email protected]> shutdown immediate

oracle 11g rac 修改字符集

can data 64bit 復數 查看字符集 str edit root sql 系統版本:Oracle Linux Server release 5.7數據庫版本:Oracle Database 11g Enterprise Edition Release 11.2.0

mysql設置字符集CHARACTER SET

charsets efault result con 編碼 服務 lin spa cli 在 my.cnf 配置文件中設置相關選項,改變為相應的character set。 設置數據庫編碼(sudo vi /etc/mysql/my.cnf): [client]

Oracle資料庫修改表結構SQL

增加一個列: ALTER TABLE 表名 ADD(列名 資料型別); 例如: ALTER TABLE terminal ADD ( TERMINAL_NUM_1  NUMBER(11,2) DEFAULT 0.00, TERMINAL_NUM_2  NUMBER(11,

Navicat連線oracle 10g出現unsupported server character set ZHS16GBK錯誤

使用Navicat連線oracle 10g 時出現ORA-12737:Instant Client Light:unsupported server character set ZHS16GBK錯誤; 開啟Navicat》工具》選項; 有個oci,把連線指到自己的E:\oracle\p

linux系統 修改oracle資料庫字符集問題

今天在往linux系統下的oracle資料庫中匯入dmp資料庫的資料的時候,出現一些問題,經過多次調整和嘗試,最終將資料庫調整好,特此記錄。 首先,在匯出本地的資料庫的時候,由於本地的資料庫中有建 dblink連線,在用exp命令匯出資料的時候,命令列提示  大概  是連線失敗

10 ORA系列:ORA-12704 字符集不匹配 character set mismatch

如果希望對常見的Oracle異常ORA報錯解決方案有系統的瞭解,請看《ORACLE系列異常總結ORA》。 關於Union 中 ORA-12704:字符集不匹配 character set mismatch 在使用Union all連線時,若A集合中某列為nvarc

powerdesigner添加mysql的字符集ENGINE和DEFAULT CHARACTER SET

design data bject gen gbk bdb sql nod nes 工具欄-》database-》edit current DBMS 然後,選中:MYSQL50::Script\Objects\Table\Options 在options末尾添加:

mysql character set 與 collation 的理解

鏈接 ive apple bit spec 解釋 區別 大小 類型 使用 mysql 創建數據表的時候, 總免不了要涉及到 character set 和 collation 的概念, 之前不是很了解。 先來看看 character set 和 collation 的是什麽

Oracle 11g修改字符集AL32UTF8為ZHS16GBK

提示 字符集 錯誤 pic param 輸入 super hot ble oracle11g更改字符集AL32UTF8為ZHS16GBK當初安裝oracle的時候選擇的默認安裝,結果字符集不是以前經常用的16GBK,要改字符集,從網上找到了方法並試了一下,果然好用! 具體如

查看和修改Oracle數據庫字符集

oracle字符集1、查詢oracle server端的字符集 SQL> select userenv('language') from dual; USERENV('LANGUAGE') ----------------------------------------

Oracle下服務端字符集修改

oracle characterset 在Oracle下客戶端中設置的字符集應於服務端保持一致,否則會出現亂碼,而Oracle的客戶端無論是在Windows/DOS系統下還是Unix系統下都可以通過環境變量NLS_LANG來加以控制,至於操作也很簡單,在這裏就不做過多的說明,在這裏主要說一下如何

window 10 修改計算機名,Oracle 10 伺服器資料庫不能登入

作業系統window 10 安裝svn 伺服器時,要求計算機名不能是中文 只能是(A-Z)(a-z)和一些特殊字元 所以修改了計算機名,重啟計算機。但是不一會有同事過來問我,oracl 伺服器是不是停了,我還以為是剛重啟沒能啟動了,一看服務是啟動的,但我本地使用PL sql 也不能訪問了.。

轉載:修改 oracle xe 預設中文字符集成為:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

修改 oracle xe 預設中文字符集成為:SIMPLIFIED CHINESE_CHINA.ZHS16GBK   2011-05-24 22:55:31|  分類: oracle xe |  標籤: |舉報 |字號大中小 

如何在Ubuntu 18.04/18.10安裝Oracle Java 11

JDK 11將提供長期支援,還將作為Java平臺的參考實現以及標準版(Java SE)11。Oracle直到2023年9月都會為JDK 11提供一級支援,而補丁和安全警告等擴充套件支援將延續到2026年。新的長期支援版本每三年釋出一次,根據後續的發行計劃,JDK 17將於2021年釋出。 感謝“Linux

mysql8基礎 show character set 檢視支援的字符集

資料,資料,命根就在資料 ! 操作資料庫時,一定要謹慎小心。師萬物 這裡的程式碼看看就好,要有自己的判斷。遇到抉擇,要不恥上下問。 example stu@Ubuntu:~$ mysql -u root -p Enter password: Welc

oracle 修改字符集 修改為ZHS16GBK

有時候因為資料庫的字符集的問題,導致dmp檔案不能正常匯入到其他資料庫。可以用下面的方法將資料庫的字符集修改一下(改成跟你匯出時的字元一樣)。 注:設定環境變數是用來處理PL/SQL字元問題的,不要吳會是已經將資料庫的字符集修改了。 1.cmd 2.輸入set

oracle修改字符集--使用SQL PLUS

1、使用管理員賬號登陸上去,一般密碼是manager。 conn /as sysdba 2、檢視資料庫編碼。 select * from nls_database_parameters where parameter

oracle記憶體bufferCache修改

1,檢視曲線,找出適合的值 一般情況下,我們選取estd_physical_read_factor為1的值為最佳,或者為sga_max_size/2~sga_max_size*2/3。 select size_for_estimate "Cache Size (MB)",s

在Ubuntu17.10安裝Oracle JDK1.8

在Ubuntu17.10中安裝Oracle JDK1.8 很多情況下,linux中都需要jdk,jre來支援,才能執行一些程式。那麼如何來安裝jdk,請看下文。 1.使用java -version命令確認系統中是否已經存在jdk。 2.通過終端在/usr/loc