在oracle中,可以利用“ALTER DATABASE”字符集語(yǔ)句來(lái)轉(zhuǎn)換字符集,語(yǔ)法格式為“ALTER DATABASE [db_name] CHARACTER SET new_character_set;”。
本教程操作環(huán)境:Windows7系統(tǒng)、Oracle 11g版、Dell G3電腦。
Oracle-字符集轉(zhuǎn)換
字符集是按照一定的字符編碼方案,對(duì)一組特定的符號(hào),分別賦予不同數(shù)值編碼的集合。
日常使用時(shí),服務(wù)端與客戶端字符集需一致。
--服務(wù)端 select * from nls_database_parameters; --客戶端 SELECT USERENV('LANGUAGE') FROM DUAL;
數(shù)據(jù)庫(kù)字符集調(diào)整最常用的是ALTER命令和完全的導(dǎo)出和導(dǎo)入兩種。
第一種,ALTER DATABASE字符集語(yǔ)句是遷移字符集的最快方法,但只能在特殊情況下使用。
ALTER DATABASE字符集語(yǔ)句不執(zhí)行任何數(shù)據(jù)轉(zhuǎn)換,因此,當(dāng)且僅當(dāng)新字符集是當(dāng)前字符集的嚴(yán)格超集時(shí),才可以使用它。
--ALTER DATABASE字符集語(yǔ)句的語(yǔ)法如下,db_name為可選項(xiàng): ALTER DATABASE [db_name] CHARACTER SET new_character_set;
第二種
數(shù)據(jù)泵(EXPDP/IMPDP)方式代價(jià)較高,耗時(shí)且占用資源多,并且需要在遷移時(shí)對(duì)數(shù)據(jù)進(jìn)行掃描,確認(rèn)在遷移時(shí)是否會(huì)發(fā)生數(shù)據(jù)截?cái)嗪妥址D(zhuǎn)換錯(cuò)誤。
數(shù)據(jù)庫(kù)字符集遷移有兩個(gè)階段:數(shù)據(jù)掃描和數(shù)據(jù)轉(zhuǎn)換。
在更改數(shù)據(jù)庫(kù)字符集之前,使用字符集掃描工具確定在更改數(shù)據(jù)庫(kù)字符集之前所需的工作量。
使用數(shù)據(jù)泵導(dǎo)入導(dǎo)出腳本示例,腳本需在數(shù)據(jù)庫(kù)服務(wù)器執(zhí)行:
--查看管理員目錄 確認(rèn)導(dǎo)出文件位置路徑 SELECT * FROM dba_directories; --expdp導(dǎo)出 帶有條件 expdp 用戶/密碼@服務(wù)名 directory=DATA_PUMP_DIR dumpfile=數(shù)據(jù)文件文件名.dmp logfile=日志文件文件名.log tables=導(dǎo)出表名 query='" where lsh in (select lsh from table_1 where code !='1' and flag='1')"' CONTENT選項(xiàng)可選導(dǎo)出結(jié)構(gòu)或數(shù)據(jù) 導(dǎo)出格式默認(rèn)為.dmp--impdp導(dǎo)入 導(dǎo)入時(shí)重命名 存在表則增加數(shù)據(jù) 主鍵重復(fù)數(shù)據(jù)忽略 導(dǎo)入時(shí)也可以限定導(dǎo)入時(shí)所屬表空間 impdp 用戶/密碼@服務(wù)名 directory=DATA_PUMP_DIR dumpfile=數(shù)據(jù)文件文件名.dmp REMAP_TABLE =導(dǎo)出用戶名.導(dǎo)出表名:導(dǎo)入表名 TABLE_EXISTS_ACTION=append data_options=skip_constraint_errors
推薦教程:《Oracle教程》