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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/8/26 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle 10中修改字符集(character set) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

sys@CNHTM> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@CNHTM> 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.
sys@CNHTM> alter system set job_queue_processes=0;

System altered.

sys@CNHTM> alter system set aq_tm_processes=0;

System altered.

sys@CNHTM> alter system enable restricted session;

System altered.

sys@CNHTM> alter database open;

Database altered.

sys@CNHTM> 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

oracle@oracle[/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


sys@CNHTM> set termout on
sys@CNHTM> set echo on
sys@CNHTM> spool /tmp/csminst.log
sys@CNHTM> @?/rdbms/admin/csminst.sql
sys@CNHTM> rem
sys@CNHTM> rem NAME
sys@CNHTM> rem csminst.sql

... 省略n行 ...

sys@CNHTM> rem *****************************************************************
sys@CNHTM> rem CSMV$EXTABLES lists all distinct objects to be scaned
sys@CNHTM> rem *****************************************************************
sys@CNHTM> 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.

sys@CNHTM> /

View created.

sys@CNHTM> commit
2 /

Commit complete.

sys@CNHTM> 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是否安裝成功

oracle@oracle[/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安裝成功,會生成如下三個文件。把這三個文件刪除。

oracle@oracle[/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過程依賴這一步的運行結果。

oracle@oracle[/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,修改字符集

oracle@oracle[/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

sys@CNHTM> @?/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.

重啟數據庫

sys@CNHTM> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@CNHTM> 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.

檢查字符集

sys@CNHTM> 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 set?job_queue_processes=0?scope=spfile;

alter system set?aq_tm_processes=0??scope=spfile;

2.?啟動數據庫到單實例模式;

startuprestrict

spool switch.log

3.?運行csalter

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

----?檢查執行csalter的輸出信息,是否有錯誤;

如果執行那么修改還原原始的參數:

Alter system set cluster_database=true scope=spfile

Alter system set?job_queue_processes=old_value?scope=both sid=*;

alter system set?aq_tm_processes=old_value?scope=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個文件:
[oracle@roger 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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。